|
- #include<stdio.h>
?! J5 X; b% t9 c9 }( f1 O4 ~4 O - #include<windows.h>
* y3 Q. W* i3 I+ ~4 ]3 @7 P6 [ - #include<stdlib.h>9 [+ J' X$ G9 [$ m4 w
- #include<time.h>+ Z. L/ e/ C- P+ \' W. U& o
- #include<conio.h>$ c0 Q* N5 P T+ M- Q. @
- #include<queue>
3 P* x9 }) A* b+ B - #include<ctype.h>4 t. A" g5 [6 T* f# B
- #define A 17 //地图的高* p: {( J G/ p/ W6 }& N
- #define B 17 //地图的宽0 t% `4 Y9 G; L+ Z6 l. o
- #define C 30 //雷的总数2 d7 T/ R: H$ v2 I. }4 A
- using namespace std;
" K! ?' g) _2 ~5 z% Q9 A& V4 ` -
; s4 [# i0 Q3 ^7 E0 ?9 X# i - //全局变量
5 m; j# @6 T0 r2 A: o- b( P0 \ - DWORD a,b;+ Q8 y( u1 U, U- L
- char map[A][B],news,spare;
# U% N3 H% O& |( T6 g" L" U- _: P - int BoomTotalNum,floatx,floaty,flag[A][B],flagnum,mode,slect[A][B],game;
; d' p" ?; ^! ] -
6 T2 g: d9 ~; [) q- R s$ B - //颜色属性8 q! ?; p* S: l8 s, _9 p1 G
- const WORD FORE_BLUE = FOREGROUND_BLUE; //蓝色文本属性
+ v" X8 ?! V/ V# t - const WORD FORE_GREEN = FOREGROUND_GREEN; //绿色文本属性5 K6 O. e K- q: I) {; w+ k! ]
- const WORD FORE_RED = FOREGROUND_RED; //红色文本属性5 s0 H0 u8 u) u `( v) F# e9 C
-
i& [: E6 H' z9 c - //开垦地图结构体
* H7 @! H; O4 d - struct node {! `; d. n, K& O# v& X
- int x;' F, d1 J8 q: o- `4 b
- int y;# ?3 G7 U+ z4 y/ k5 S5 x
- };
3 o r. A7 O5 C% V+ s - queue <node> dui;1 l" C* T! Z" m4 D! ?- @0 W
-
$ o7 S |- Q/ V% @1 g% X - //打印位置
) j% Y* w; t- Y% y: ^5 @ - void position(int x,int y) {, O; _5 _ E4 W/ J: j) J
- COORD pos={x,y};
+ @% ^$ y2 c# h) T - HANDLE Out=GetStdHandle(STD_OUTPUT_HANDLE);% Z4 M' }/ `/ t6 b7 v
- SetConsoleCursorPosition(Out,pos);
) m* h1 N" I4 k! ]& P M, _+ } l: F2 f - }
' x. q I& a# M: S" V9 } -
+ j( G& r' c! O. n - //隐藏光标
% w( v, h0 k" H5 q$ U: R$ Q - void Hide() {0 `1 D; m9 v( V0 R8 J2 z: D( h7 ~
- HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
/ v. C8 W/ b+ y. j - CONSOLE_CURSOR_INFO CursorInfo; / W/ N7 s5 a6 I2 U
- GetConsoleCursorInfo(handle, &CursorInfo);//获取控制台光标信息 & b1 Q- N4 L* b
- CursorInfo.bVisible = false; //隐藏控制台光标
) B; c; N1 P: n, p$ n - SetConsoleCursorInfo(handle, &CursorInfo);//设置控制台光标状态 + t# v# s+ {9 ?+ `; N$ }
- }2 ~' `: e4 K/ [6 ?
-
7 k3 v A- x0 W! x4 V* G6 j - //初始化. D f; k- t/ x
- void Beginning() {" y. `; u" m+ X( Y+ L9 J
- while(!dui.empty()) {
5 O$ E) j7 I" U/ W1 U - dui.pop();& U0 I# g1 B& i% u/ c1 k
- }# t* a w/ f1 R# q2 x1 E
- game=1;# s6 |2 _. [3 f: m- y; g
- //BoomTotalNum=C;- S6 D( o* B& m& ]/ ^, k
- floatx=A/2;, t" H# M. n/ s( f3 U
- floaty=B/2;4 O5 Q' @8 K) O1 H
- flagnum=0;+ ]( ]: I. Z7 h }
- BoomTotalNum=C;
7 l' h R/ S" _4 W. k. a- d - mode=0;& L9 n8 X& N$ h) m2 m
- HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄 6 m H- _+ ?7 }0 g1 t
- CONSOLE_SCREEN_BUFFER_INFO csbi; //定义窗口缓冲区信息结构体
2 o3 ?4 o( b4 g' K* f9 R2 `1 n - GetConsoleScreenBufferInfo(handle_out, &csbi); //获得窗口缓冲区信息( C r! o A! V& K$ N m
- int x,y;
+ M: q( S& l! S, d - srand((unsigned)time(0));- S. _& h" O3 p' m, y
- for(int i=0;i<A;i++) for(int j=0;j<B;j++) {, O6 P/ p- ]( [6 s# Z+ `
- map[i][j]=' ';0 |6 p1 ^3 G- h& p. \0 f
- flag[i][j]=0;
B& t* k3 u5 s- P0 r) m- c1 ]( Q. U: t! F - slect[i][j]=0;- n- t6 o% P+ G4 o- h
- }$ D& w: L* Q* z9 C: Q' W' Q; D
- while(BoomTotalNum) {
2 ?$ L- A' w5 Y! m5 V4 s4 d$ X1 @2 q5 l2 q - x=rand()%A;
, P. a* L; h- V6 _ - y=rand()%B;7 X9 }9 H4 R1 O) W" Q% n7 l; c" d
- if(map[x][y]==' ') {9 g) D2 n% @6 [+ U
- map[x][y]='@';- n, W' W. U1 m
- BoomTotalNum--;
- E% m* N0 W& W0 ?0 B$ J8 j - }
$ y/ d% E+ {" H! s - }
( k: R* A/ e s) | - SetConsoleTextAttribute(handle_out, FORE_GREEN); 4 S" J6 ~9 R) k+ _% i
- for(int i=0;i<A;i++) {
# M1 X" k( ?+ X8 T - for(int j=0;j<B;j++) printf("█");9 I; g$ X( a7 z+ T0 ^/ I
- printf("\n");
* I7 w% A3 C/ n1 \( K% \ - }- K( B0 b% T- M w, C7 R
- position(floaty*2,floatx);8 ?4 m. m5 A% c- Y* F' ?
- SetConsoleTextAttribute(handle_out, FORE_RED);
/ M, j4 |3 Z& ~- w" U - printf(""); //光标位置
. a! E: a: r9 @& X( i* J - position(44,9); q: C) d- j: Z7 H; Q8 W8 G. Y
- printf("扫雷模式");8 M: x& m* T! b, B. i) B
- position(44,5);
7 l& o' |) C! D6 | - printf("剩余雷数:%d ",C-flagnum);6 l3 W3 M: J5 f9 P
- SetConsoleTextAttribute(handle_out, FORE_GREEN); $ Y+ s( \- L) n) |- J2 F' I
- position(5,22);
& Y6 p3 y) T+ W& A2 a - printf("按“空格”切换模式");* O& S* x6 v9 Z+ ^+ c7 J# O
- position(5,23);
0 c- T. }1 [" a+ A3 Y7 V - printf("按“Enter”确认");
# A" g$ _2 ~, j. \# ^% o - position(5,24);# A }4 P e; S! T8 l! s) m+ x
- printf("按“方向键”选择方块"); $ X/ K' t+ ^0 ~. @% u" @
- - Z2 L' B! r5 t: O8 y
- }' g* Y+ I2 k$ [! w( o. M- t, W
-
% o# q" p( r/ c - //打印地图的一块儿
) G: B7 H1 p) u* v - void Lump(int xx,int yy) {: a: m+ P, W/ ?/ {
- switch(map[xx][yy]) {
! ~5 Y1 h( U, Y/ N - case '1' : printf("①");break; //周围雷的数量(下同)
, x" \3 O& h$ {. {5 w& [ - case '2' : printf("②");break;3 L% [( M4 h6 q4 x" V! n1 v
- case '3' : printf("③");break;
( ?! J4 \) m7 n7 M3 K) H& z+ j( M - case '4' : printf("④");break;7 F+ } J+ Y3 a
- case '5' : printf("⑤");break;4 _* V5 e7 e4 k0 @7 a9 F4 n
- case '6' : printf("⑥");break;
# K6 C/ e/ Y& d+ E/ a* w - case '7' : printf("⑦");break;
" h/ o0 q8 c% j- h- d; f+ a1 h - case '8' : printf("⑧");break;
2 x( |- T2 v2 i- J. T - case ' ' :
$ K0 U& Z' w& J( |4 l( l - if(xx==floatx&&yy==floaty) {* T" @' e: q. _
- if(flag[xx][yy]==0) {
1 g- D }( _2 G4 t - if(mode%2==0) printf("");
; a5 P, C$ q/ q$ |9 E' K) E0 i - else printf("");
U# A o' P9 j$ ?5 d - }
7 D+ g. Q6 ?6 t5 V - else printf("");0 c, F' k/ g0 m/ c; g5 a
- }
% {& y& w$ D6 \; ~! T8 F2 L% k - else {: C4 }; z- x R; c5 z$ r( ?
- if(flag[xx][yy]==0) printf("█");
: x/ ?+ |- h- q- D6 [2 T6 t: P - else printf("");
, e6 e9 n3 `$ z - }! p1 y0 E' p3 N; J/ g, D
- break;
5 p8 e, h4 o4 m. A8 d5 v - case '@' :
, u% P9 Y1 ~& E+ P# _ - if(xx==floatx&&yy==floaty) {
: r" |# }8 q1 R# P& F! g y; G+ {, L - if(flag[xx][yy]==0) {, b& o6 I* q# {" n, t7 a# s' d! e
- if(mode%2==0) printf("");
: F- A/ ~% U! I6 [& j |) W - else printf("");* k9 h1 k" D0 F. e+ X/ S2 o9 g
- }" g( E7 e' s* i; u
- else printf("");! y- H3 d0 Q0 y7 z% q. N
- }
0 G$ y' F- q$ V6 @1 C5 U+ ~+ v - else {
4 |, G: _+ `- D& N8 }+ M - if(flag[xx][yy]==0) printf("█");
$ A7 ]8 r" K7 y! [7 }) ` - else printf("");
& @! ~, X) ]# ?" l - }
% y* F4 K1 t! v6 A" W+ B- ? - break;8 a* }9 R1 d" n+ Z2 c( A
- case 'x' : if(floatx==xx&&floaty==yy) printf(""); else printf(" ");break; //已经挖开的空白* h. O9 C( I+ ?5 {0 }
- }6 B; d! X Y6 n4 @ S: s4 M
- }: V& @/ R3 w' g6 R
-
- j7 W' I% A- F0 ~. L - //移动光标; M! D7 X% m5 t8 k$ ]9 d
- void Move() {
5 Z4 x1 M* V: k, e - HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄 0 T L* ]4 y+ ]5 V- H
- CONSOLE_SCREEN_BUFFER_INFO csbi; //定义窗口缓冲区信息结构体
3 h( s- q+ D" V. p; [ - GetConsoleScreenBufferInfo(handle_out, &csbi); //获得窗口缓冲区信息+ k6 B" q" V" T6 |% I
- int xxx,yyy;
/ o+ A r$ Y) E D - xxx=floatx;
' Z; X. k% X6 V. t. ?8 h/ H4 I - yyy=floaty;7 h$ W6 U7 x, R2 d! S
- switch(news) {
! c' ?/ O/ e. }$ j( ^. ] - case 72 : floatx--;break; //上
W1 `0 z. Z" u ?( f- K - case 80 : floatx++;break; //下
8 J6 u B) [& S, u7 P - case 75 : floaty--;break; //左 5 Q2 B: v* A% y( }9 x+ k
- case 77 : floaty++;break; //右
6 Q( y0 e8 k; I# B - }
3 Y: s0 V1 ~; o! J - if(floatx==-1) floatx=A-1; floatx%=A; //两端穿模处理 6 b3 Y4 [& {; O8 e( b
- if(floaty==-1) floaty=B-1; floaty%=B;
6 u& c, X# \3 o( f& \ -
; a" b4 s$ G3 K6 J( `5 B - position(yyy*2,xxx);* ^- q1 P X1 b4 r' {8 n3 Y: X9 T6 C: V
- SetConsoleTextAttribute(handle_out, FORE_GREEN);* u2 ]0 j" f3 V9 S& s% `
- Lump(xxx,yyy); //删除原位置
4 }7 j4 m! S7 R0 N, V2 D6 E - , _. `% S* B. Z$ m' o6 O! \
- if(map[floatx][floaty]=='x') {) a! o' S/ J1 H& l* F
- position(floaty*2,floatx); {" o/ U5 {& I- B3 \7 e* `
- printf(" ");6 G/ B; k5 P# U, }; E
- }# a8 Y" W' M1 W w0 j% |6 S$ x
- 3 }+ R' D2 b% I* t$ I
- position(floaty*2,floatx);/ Y: u5 c; m$ G. S
- SetConsoleTextAttribute(handle_out, FORE_BLUE); 9 z0 S; A6 {) w6 I( X8 |" q
- Lump(floatx,floaty); //更新新位置
2 w; C- n3 N& N, o - }
) J* X: Z' M. o& g, D -
: j1 X9 J: f4 z/ K: h - //插旗和排雷模式切换
9 M9 u9 K" h( c! { - void Mode() {$ s: c" m- ~8 V/ S5 u
- HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄 7 {6 I6 g" L7 e+ f# U' M( e4 t9 j
- CONSOLE_SCREEN_BUFFER_INFO csbi; //定义窗口缓冲区信息结构体 * |0 G+ {2 m" X
- GetConsoleScreenBufferInfo(handle_out, &csbi); //获得窗口缓冲区信息
, ~% |$ Y5 r, `% q0 k, e - mode++;
) m3 ^4 x2 z* k" `, O& v+ D+ S - SetConsoleTextAttribute(handle_out, FORE_BLUE);8 V+ @5 J3 O- W9 |; W
- position(floaty*2,floatx);
# u; D& G' [1 Y/ X1 t' S, M - if(mode%2==0) printf("");2 ]0 ^" \1 K; U# J
- else printf("");
. d7 H& Q7 _& Y8 ]' H6 T% u) g7 Z - 6 s. l; Y$ d) A9 Z8 x3 N8 d
- position(44,9);* j5 {' q5 B) i( S6 N2 J/ A- Z
- if(mode%2==0) {
) \9 o4 j4 T% C% ]4 ~ - SetConsoleTextAttribute(handle_out, FORE_BLUE);
0 H: V; a6 s$ g* ^6 W( B+ h - printf("扫雷模式");
L4 \6 v7 `8 L( C' r$ R+ x - }
6 Z& P; N: j H8 `. p$ B - else {, p: ^2 f3 n. Y" @" w: R, C }6 N
- SetConsoleTextAttribute(handle_out, FORE_RED); , W% M% T2 u, E/ @
- printf("插旗模式");& p: b5 g5 c4 u2 P! f+ k; Z3 t
- }
) z& c; S7 f( Y$ p! }( C - }
: G( A* q7 k$ p! p; r, w - ( I$ O3 Q8 F9 s& q) e3 |9 c$ p! U
- //该点周围地雷数
0 _9 u& e" b. w) V: [3 \ - int Boomnum(int xx,int yy) {( K7 P2 [; Z# t N
- int num=0;" T/ W) u. ~ m& i, l
- if((xx-1>=0)&&(yy-1>=0)&&(map[xx-1][yy-1]=='@')) num++;5 {5 h7 y5 G& I l; O. }
- if((xx-1>=0)&&(yy+0>=0)&&(map[xx-1][yy]=='@')) num++;
2 Z- {. o L: j- p# Y- v - if((xx-1>=0)&&(yy+1<B) &&(map[xx-1][yy+1]=='@')) num++;3 C4 o6 _% e( w3 R
- if((xx+0>=0)&&(yy-1>=0)&&(map[xx][yy-1]=='@')) num++;
- D2 \( x( G0 n+ ` - if((xx+0>=0)&&(yy+1<B) &&(map[xx][yy+1]=='@')) num++;
7 u( D( K9 J$ k, v; Y - if((xx+1<A)&&(yy-1>=0) &&(map[xx+1][yy-1]=='@')) num++;
' b9 D ]; f" k; s' r8 I/ P, A - if((xx+1<A)&&(yy+0>=0) &&(map[xx+1][yy]=='@')) num++;
$ ^2 R z; S/ _5 g - if((xx+1<A)&&(yy+1<B) &&(map[xx+1][yy+1]=='@')) num++;
# x7 T9 ~4 O5 U* n, v" P7 ` - return num;& P# d" m& o8 Y: g1 q4 l2 z* g
- }
! E1 i. i5 _" _! N0 W -
( j( D; n- V2 _: F3 B( h7 q0 @* w: { - //更新地图
2 z1 `2 G/ {# g @- X - void Open() {7 ?4 ^4 U# E [
- node c;% q8 [" L$ E1 N: l3 T
- node d;) p# Z* s1 t' m
- while(!dui.empty()) {
7 b/ O+ n0 X+ j: @ - dui.pop();
2 q9 u+ ]- @' c' f/ T6 |" M - }( p! w7 b# Z, |1 q6 F
- c.x=floatx;
* p( O# Z& h$ N3 `( ~' k - c.y=floaty;( K% L" \5 s! Z* G4 ^8 q0 r
- dui.push(c);
# K9 p9 b& @- T& X/ A - slect[c.x][c.y]=1;0 Y" {3 F8 ?/ m: Y0 r/ b, c, {
- while(!dui.empty()) {6 g+ x' `6 t% I$ ]; k
- c=dui.front();( `# F k- J I
- dui.pop();" \7 y8 X2 |" U( ~* L$ C
- if(Boomnum(c.x,c.y)!=0) {
: K/ V" C) v$ n$ e - map[c.x][c.y]=(Boomnum(c.x,c.y)+48);2 T2 T8 V9 f7 G; e4 J, e+ }; C
- continue;
. \) B. k, k. b - }3 ?6 \7 ]% {* g5 n
- else {
, ?" X; q, P8 Q, R9 J5 p; J - map[c.x][c.y]='x';
0 _: w( k! `! }9 M - if((c.x-1>=0)&&(c.y-1>=0)&&(map[c.x-1][c.y-1]==' ')&&(slect[c.x-1][c.y-1]==0)) {7 A' G2 C/ \! l! W7 P& q, F; ?' j
- d.x=c.x-1;6 p1 h7 ^. G$ S5 m
- d.y=c.y-1;
4 }: V: M- E6 D - dui.push(d);
& s, P* q7 o4 {7 W - slect[d.x][d.y]=1;# Y: y' `: G0 @9 r! l
- }/ n, C0 o0 [ [+ @# N& {
- if((c.x-1>=0)&&(c.y-0>=0)&&(map[c.x-1][c.y]==' ')&&(slect[c.x-1][c.y]==0)) {
: b; ~4 K* x/ w- j - d.x=c.x-1;6 S [. b, R! i3 m- T8 a, v
- d.y=c.y-0;
. @* x. B H! r( N7 G - dui.push(d);
; P+ O0 w& h* R9 c - slect[d.x][d.y]=1;
& w8 {& [; _$ w/ ^$ p1 O - }, y# E" j T S( t
- if((c.x-1>=0)&&(c.y+1<B)&&(map[c.x-1][c.y+1]==' ')&&(slect[c.x-1][c.y+1]==0)) {8 V" \& J- V6 A
- d.x=c.x-1;
8 z$ l& |% }$ m6 v- a - d.y=c.y+1;
, D2 `# t$ L( B0 l - dui.push(d);/ b2 P# f# S; z, s+ A( [ {
- slect[d.x][d.y]=1;
7 i" |( a3 [7 Z+ a) ~ - }
/ l5 u' O/ m* B% j& j* L) E8 W& L$ r: K - if((c.x-0>=0)&&(c.y-1>=0)&&(map[c.x][c.y-1]==' ')&&(slect[c.x][c.y-1]==0)) {! Z8 i# @: }- y2 I8 b
- d.x=c.x-0;/ r+ d5 ]8 }9 H, C# p, Y" k
- d.y=c.y-1;# L0 c6 w7 k0 z% U) p5 n
- dui.push(d);, v( z: X3 w3 q
- slect[d.x][d.y]=1;
& d8 c$ D$ R9 P1 _5 I - }& d" \7 C M- K8 _/ V
- if((c.x-0>=0)&&(c.y+1<B)&&(map[c.x][c.y+1]==' ')&&(slect[c.x][c.y+1]==0)) {+ P! U0 a, M, t1 \0 V8 V
- d.x=c.x-0;
3 x# e9 u; A: w) b& o - d.y=c.y+1;; b; ?+ r; A; c7 j& \
- dui.push(d);6 q3 k1 U# |7 O' @
- slect[d.x][d.y]=1;
2 H% v" T; _$ j' g% o* c$ L' r& T - }
7 l8 d/ k# B, a; I1 C - if((c.x+1<A)&&(c.y-1>=0)&&(map[c.x+1][c.y-1]==' ')&&(slect[c.x+1][c.y-1]==0)) {
; g& W6 E; r$ }2 E1 l0 L- k - d.x=c.x+1;
0 j! R2 q' S7 |2 r M, q2 x) \ - d.y=c.y-1;. D- E; c# L1 ]% M& `0 `
- dui.push(d);$ v G+ i u @/ ~! a/ F! e( `6 m
- slect[d.x][d.y]=1;
+ h3 L- c1 a# c2 R+ U8 i# S - }
% k+ Q9 R% [ O2 w5 ~ - if((c.x+1<A)&&(c.y-0>=0)&&(map[c.x+1][c.y]==' ')&&(slect[c.x+1][c.y]==0)) {3 |; C/ t5 x( q0 p" \. r; E4 T
- d.x=c.x+1;1 L0 k. d! z4 d- E
- d.y=c.y-0;
: |. G2 r0 s' R7 ^2 r& ~6 O - dui.push(d);
# F2 C; Y4 a- z - slect[d.x][d.y]=1;- q6 P/ L s, i
- }
5 Z1 M, E: @+ Q; g1 ?1 z M+ o - if((c.x+1<A)&&(c.y+1<B)&&(map[c.x+1][c.y+1]==' ')&&(slect[c.x+1][c.y+1]==0)) {; Z, ]/ i- t( h" C. ]3 f
- d.x=c.x+1;
: O5 O: g. {' k1 y: s* F! Y Z - d.y=c.y+1;9 U- b! Q3 L8 p0 M: q. D% z
- dui.push(d);% U$ R7 I# b: g) b2 d7 D7 C
- slect[d.x][d.y]=1;& d' Z1 Q( R% l# H
- }
# n# [- r. V- H/ A - }
5 C' }' m. A2 ^. g! C - }9 b$ A5 k4 d& T) `. T7 c; _
- }* D5 [+ \* X0 Y2 \1 L; F$ l
- ( b# P9 b0 P. H
- int main() {
* `$ I( }0 x+ ^: l1 F" x$ t - freopen("排名.txt","r",stdin);0 S6 ?8 r+ {! n7 w6 g
- Relife: //重玩处
1 r( x. Q4 W' J( y- E, y, @4 @ - HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄
6 [1 b2 ^/ {2 ~: P- T: k6 w - CONSOLE_SCREEN_BUFFER_INFO csbi; //定义窗口缓冲区信息结构体
" }% A; [$ n' n2 h0 k2 k/ Q - GetConsoleScreenBufferInfo(handle_out, &csbi); //获得窗口缓冲区信息
5 V; z! J8 s. \9 | - 5 }+ r6 b5 g/ L2 M; ^
- Hide(); & H& {# T& H7 o; j+ v+ J* J; R
- Beginning();
( `1 ]/ B, Y8 i - a=GetTickCount();
1 [; P+ c9 Z" `: y k6 }7 D - while(1) {
! f) x2 N$ s8 e0 N& B - if(kbhit()!=0) {
8 @0 N8 v$ g6 g( }' ]. v9 t+ @% @% Z - spare=getch();
0 J7 x+ a) M: a' V0 a+ W5 q - 6 ]8 P6 F% P$ U* M1 m
- + k! h! A! u; s2 d* k. |; S* W
- if((spare!=(-32))&&(spare!=13)&&(spare!=' ')) continue;5 |/ O( l- C( P( w1 K
- 9 H4 T* D1 e( t* F
-
: c0 E. ~7 d4 K$ J1 _* d - if(spare==13) {;% A' f4 E1 ~2 L7 I7 C
- ; ?$ f/ ]% V: @$ F
- if(mode%2==0) {/ Z( l T x! |: ?" Q/ x+ t
- if(map[floatx][floaty]=='@'&&flag[floatx][floaty]==0) {2 n8 |- p6 @) U; h& Y2 q5 q' ^
- break;
! i6 t. ?6 ]" V* ^: `! w - game=0;( z0 A4 m" S& ?# c% K% R
- }
/ r7 X7 q0 b/ g1 o3 Q7 V2 i8 D -
* G& n) @) B5 z; i - if(flag[floatx][floaty]==1) continue; : U, v/ |8 ?" T! L1 }6 K* P
- Open(); 5 G+ h0 t3 }# K
- position(0,0);
- y- s- E7 C( s" } - SetConsoleTextAttribute(handle_out, FORE_GREEN);
2 z# g- C& r3 R- w( p - for(int i=0;i<A;i++) {. e P. {: K2 X* b. f' f
- for(int j=0;j<B;j++) Lump(i,j);
* m6 P. f7 x+ _9 J' ~% T - printf("\n");
0 k4 l- s0 i2 u1 D0 z0 Q5 ^ - }8 ^8 f* A! d4 Y1 R, ^7 @
- position(floaty*2,floatx); V3 m. R9 J; p# F; ~0 P$ z
- SetConsoleTextAttribute(handle_out, FORE_BLUE);6 U+ @+ t. I% N8 [
- Lump(floatx,floaty);
' }) Q. p5 D% f - }- P, b" a, I* R
-
+ A' C( t! ^) K8 p7 } -
v- G8 }: b4 }. S - else {8 u, D* u) r' l4 t& J
-
0 u0 s) I6 ~( m& { - 3 U3 `0 Q2 A6 L, U7 ^# g# }
- if(map[floatx][floaty]=='x'||(map[floatx][floaty]>'0'&&map[floatx][floaty]<'9')): O1 S2 W( h2 P+ R3 L- o- P+ ]6 m& m
- continue; - S& |2 n( I1 H9 f% _0 x& h
-
; _+ {. K% [ _; @2 y - / }( R# K4 `* x3 e
- if(flag[floatx][floaty]==0) {) C- k) \; f) B. K4 \( l
- flagnum++;3 Y- q+ T! \* E5 Y# h
- flag[floatx][floaty]=1;
. M% i+ ~) a$ T2 l6 p5 o* o$ ^ { - position(floaty*2,floatx);
- j C2 o* |7 o, H6 ~ | - SetConsoleTextAttribute(handle_out, FORE_BLUE);
- L5 }" s _3 J" Q& w0 i - Lump(floatx,floaty);
3 I' ^& E1 D9 P& ?9 L - }
6 D( X) ]% n7 E- ]* n T- T+ d4 F9 A - 3 I* s: y4 [( v9 \3 n( L
-
, B0 l' c+ K. s% P* h0 _; } - else {
; f* G% z0 M, C. x) t. N( ^( D& n - flagnum--;+ x: [3 h. E2 ? o' r# u
- flag[floatx][floaty]=0;5 y7 r9 h/ |7 b4 q
- position(floaty*2,floatx);5 ~3 F* d, X" v: }4 |/ B+ g
- SetConsoleTextAttribute(handle_out, FORE_BLUE);
' c" C9 t; q! p+ x7 w$ f7 q% h) i - Lump(floatx,floaty);% R8 f' o( K& ^" S* {( y
- }8 x; Y) r, I: M+ p, t6 r
- }
7 N- {" R/ i, c0 p+ d- z - }
' e4 r* p0 s# ] [; l1 Y( r -
2 k9 U: U# Z+ @6 ^0 a( `8 U: E -
; K$ d; g1 A3 ?+ o, x9 Y4 T/ u - if(spare==' ') Mode(); 9 o+ V! N9 z7 W7 m) U
- 1 @1 E3 ?" m, e- G
- //按方向键 0 q# J. x" H8 x6 @
- if(spare==-32) {* [3 E' F/ N# J# O
- news=getch();
, s2 {% G7 w& s# `! e6 d - Move();
6 g9 \" R2 Y i7 U, C6 J - }' e3 e+ ]6 I: p
- for(int i=0;i<A;i++) for(int j=0;j<B;j++) if(map[i][j]=='x'||(map[i][j]>'0'&&map[i][j]<'9')) game++;
X8 A n5 y1 Q V - if(game==A*B-C+1) break;
5 d! ^2 p) ^% L, A - else game=1;. P% V4 v1 u/ Z
- SetConsoleTextAttribute(handle_out, FORE_RED);7 W8 e/ w: B7 H* r2 _2 E
- position(44,5);
5 x( b4 v. o9 y% c3 ~' {8 g0 J - printf("剩余雷数:%d ",C-flagnum);
. @* {3 G" O2 o - }
9 t7 I3 _0 F, ]/ J - else Sleep(10);# g. o: T$ R0 E& E, q: t
- b=GetTickCount();
' v: P9 ~! U" U% C - SetConsoleTextAttribute(handle_out, FORE_RED);) k2 `. U" B( Q9 H* ] }0 |; T
- position(44,7);' I; o5 }$ @7 Z7 H; D: m6 u* a
- printf("用时:"); / ]- @( g2 @$ A: ?" X( }! f2 ~
- if((b-a)/60000<10) printf("0");, F4 ^, O8 E ~
- printf("%d:",(b-a)/60000);
. [9 `( ~( g( |3 v3 {, j - if(((b-a)/1000)%60<10) printf("0");8 v9 b6 Y- F! T: K2 A
- printf("%d:",((b-a)/1000)%60);
" t3 ]4 E& D; M( l7 f. k! Q4 s - if(((b-a)/10)%100<10) printf("0");4 V5 P$ \' g# S
- printf("%d",((b-a)/10)%100);
9 P: h+ ?4 Y/ L+ _9 W - }& w! u; E9 T2 g6 r: C/ }3 n- L
- SetConsoleTextAttribute(handle_out, FORE_RED);
( q+ m2 F5 [4 c - position(5,5);
1 n3 G) W+ S4 u+ ^/ A' s- D - if(game==1) printf("游戏结束!");( d0 N. U2 [3 p7 q3 f+ i
- else printf("恭喜通关!");9 W2 D* h6 W3 l' e% W
- position(5,8);! ~8 u- k! J' y' g
- printf("任意键重玩");
& d& Q+ V( Y6 U+ M; X$ B: K4 P/ n - scanf("%c%c",&spare,&spare);
) m& w4 a: u2 l3 r - system("cls");
5 E) E% H( i) Z' n5 B% k - position(0,0);+ e) F/ z9 F# G8 c" C3 ?/ r
- goto Relife;% c& B3 W2 M5 e* Z4 T" F. ~
- }
复制代码
! d& Z" R" d: C; m* y+ H0 C* i+ @. k; A! @- z4 j! T7 X* k
+ K: A4 k5 U" P, w. k% E
|
|