|
- #include<stdio.h>- Y' d( Y/ g; ]$ f3 w3 p; o
- #include<windows.h>
' ` X z) C: ^8 i: A - #include<stdlib.h>
) Y$ ~3 c5 K% ]! g+ T% W: P1 t - #include<time.h>. C b# f' a) v7 d2 [) n" w: i* B
- #include<conio.h>
, B" @# q/ M/ [6 E - #include<queue>
" Q" c6 M+ w; A5 q+ E& _ - #include<ctype.h>$ w1 s6 G2 _4 f0 o; J8 M' C3 [
- #define A 17 //地图的高5 ]6 c1 d. }( P+ }" H n; M
- #define B 17 //地图的宽( q7 e) t2 p- I4 C
- #define C 30 //雷的总数+ J; S# `- a7 }9 V5 J- B
- using namespace std;; S& l( C% ^1 P& e- W
-
9 ^, o; f# k/ O. M* U* @1 _* P0 U9 C - //全局变量
9 w3 v; l1 t6 u6 a5 `: V7 x+ E. i - DWORD a,b;8 b( }% V7 T* `
- char map[A][B],news,spare;
+ ^- Z* V/ d! k6 b' m& D- d - int BoomTotalNum,floatx,floaty,flag[A][B],flagnum,mode,slect[A][B],game;
, P, z v$ P* H g. A7 \ -
5 _ r M4 E( r: r2 n - //颜色属性' m8 ^ B, l/ g1 r; ]
- const WORD FORE_BLUE = FOREGROUND_BLUE; //蓝色文本属性/ ~6 y- a2 j$ Z: U! d# v% i
- const WORD FORE_GREEN = FOREGROUND_GREEN; //绿色文本属性
4 s* D) T7 o) V+ f - const WORD FORE_RED = FOREGROUND_RED; //红色文本属性( @! M! @- w' c6 H ~) ]4 `5 g$ R
-
7 B6 n3 T- T4 A/ {0 T9 K0 z - //开垦地图结构体 : _! x r4 n* |; F. M2 a( W
- struct node {: K& P& X7 t( R
- int x;) `3 ?1 ]- L0 u' z3 y: m9 C4 r
- int y;
" p) r* C+ u+ A2 _# e- z - };
- ]' J/ j8 h" j) \ - queue <node> dui;
. X# j: q6 K* w! R: I( O -
+ b" @- B4 x4 _4 W+ z - //打印位置$ O/ R5 ?1 v0 ^- i
- void position(int x,int y) {
. x: m; U* t E( H0 D* H - COORD pos={x,y};* a# k- T# X/ q* Y9 L9 u
- HANDLE Out=GetStdHandle(STD_OUTPUT_HANDLE);
- R: f2 w& ?, I' e( h - SetConsoleCursorPosition(Out,pos);
, c( c6 @8 L4 T5 @ - }+ s$ U0 }# G9 j8 ?& u' l
-
0 M z! J' D+ m# a - //隐藏光标
7 H( M1 j2 s: i" ~+ m" l/ N - void Hide() {1 ?6 g) I/ }& b
- HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); 4 T: f* x* F' b( P, f% `
- CONSOLE_CURSOR_INFO CursorInfo; 0 d! x5 ]# Q9 Q; M+ e9 [- i2 [; R
- GetConsoleCursorInfo(handle, &CursorInfo);//获取控制台光标信息 $ N: E- y6 N4 z) o* D4 k5 P7 O
- CursorInfo.bVisible = false; //隐藏控制台光标
+ Y6 \0 ]1 K3 a0 D - SetConsoleCursorInfo(handle, &CursorInfo);//设置控制台光标状态
4 W3 g' `5 d. d5 D4 j) W! X - }) Y2 t- {: d4 a1 d
-
, y4 [) M: ^1 l( ]. Z - //初始化
0 n, w) t% B1 u0 m# ` - void Beginning() {# U1 S8 X8 j9 W/ D V5 ^ d2 l
- while(!dui.empty()) {) a, |! g, C! l, Q5 J+ y
- dui.pop();2 |4 r5 a6 \1 g
- }
0 D" Z; T- H: v3 U# b- i, m! s8 }8 d - game=1;, D) a" \( G# }' H P5 O- ^5 {9 x+ h
- //BoomTotalNum=C;% g; A2 U* M1 t3 R
- floatx=A/2;
/ C3 ~& r4 o9 G, X - floaty=B/2;
9 L4 X5 _; z$ a6 ^ I6 @# I8 F - flagnum=0;
+ f, x4 O1 \- k - BoomTotalNum=C;9 W1 I' X1 q, g
- mode=0;" p3 D% H: d8 {# I1 F' e
- HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄
/ Q+ U4 |$ {! e4 R2 \; x* V - CONSOLE_SCREEN_BUFFER_INFO csbi; //定义窗口缓冲区信息结构体
' T2 k9 H* b+ l1 ~6 g, M0 M* @ - GetConsoleScreenBufferInfo(handle_out, &csbi); //获得窗口缓冲区信息
! F0 S2 Q$ K+ ^% Q' a3 s - int x,y;9 b1 V: N2 T6 [/ J2 Q- D
- srand((unsigned)time(0));4 ]' P9 I; u7 Q/ ~3 _9 F4 O4 e
- for(int i=0;i<A;i++) for(int j=0;j<B;j++) {8 D) F# W2 s! j0 u( O8 t3 p
- map[i][j]=' ';
0 }2 g- h A7 ?5 s - flag[i][j]=0;
$ h. [& }9 G0 e& }$ D! s) X - slect[i][j]=0;
" Y, r% I* z6 | m* w$ j% G - }
. s: Z% q. }6 V# C" }- i: b- a - while(BoomTotalNum) {
" h) Y% i+ t5 R# ~8 r2 x - x=rand()%A;
/ D K1 u$ O- g* v/ h4 X" _5 e' s4 s - y=rand()%B;
5 c4 K1 B8 C' j* n' V) R& } - if(map[x][y]==' ') {
4 n1 O% ?, n- J - map[x][y]='@';1 z4 {1 F+ ~, N1 ?6 a
- BoomTotalNum--;0 @2 j7 r) D# F3 b, R. }
- }
) C5 Z, {+ K3 n - }
) j: G4 p* K2 `6 s6 m8 ^ - SetConsoleTextAttribute(handle_out, FORE_GREEN);
" G; T o+ f0 O) k6 } - for(int i=0;i<A;i++) {
+ F. L) L' ]3 R- J- [ - for(int j=0;j<B;j++) printf("█");9 i1 Y8 x$ h% Q- l8 \2 J9 `$ Y
- printf("\n");
: c) E& `9 M" o: n - }9 w. [& S8 P1 N5 [
- position(floaty*2,floatx);
' r! q7 M6 V( j$ u, V1 Y7 U - SetConsoleTextAttribute(handle_out, FORE_RED); # l- O: G/ J/ v
- printf(""); //光标位置
9 I/ D8 F$ Y/ V* H- X - position(44,9);
9 v3 H7 R, F& I. M - printf("扫雷模式");2 Y4 L0 t9 G3 j7 X/ M
- position(44,5);; m6 ?7 F1 P+ Q7 V; D
- printf("剩余雷数:%d ",C-flagnum);1 O" S! I' Q" g6 }9 E
- SetConsoleTextAttribute(handle_out, FORE_GREEN); 1 e b+ T. G& U' G( t0 [2 ?
- position(5,22);
& v1 P# H0 i! `* q - printf("按“空格”切换模式");
: c H. k% F# N" x1 a - position(5,23);& j- f7 O4 E1 h. U2 @/ y
- printf("按“Enter”确认");4 G- A- s9 l( Z0 T5 W
- position(5,24);
2 o9 B9 J- o9 @: S3 h( G - printf("按“方向键”选择方块"); , G3 r2 p" L4 V! `, N
- * M. w. g2 H( C3 V+ W3 O
- }
; p" O3 A+ n$ P# a, i - 7 k6 R# c w4 r: V# O
- //打印地图的一块儿
& R b! R& I7 b t3 Z4 w - void Lump(int xx,int yy) {
u" q. e2 W) f O - switch(map[xx][yy]) {# y& {' k& F E2 @$ m! Z- N
- case '1' : printf("①");break; //周围雷的数量(下同) , S" `2 Z! t, c g/ M+ W
- case '2' : printf("②");break;6 m" |$ K8 p! Q) |; G2 h
- case '3' : printf("③");break;: w( u! _( H% }
- case '4' : printf("④");break;+ Z' s) A; U6 C( {
- case '5' : printf("⑤");break;+ l) ^' o5 S: O1 f, t0 q
- case '6' : printf("⑥");break;$ B' \! a) l6 p* ^
- case '7' : printf("⑦");break;
! v) q! M* ~. l- m - case '8' : printf("⑧");break;
0 r5 G, x" b/ o - case ' ' :
/ C& ]. j- s! v1 F6 c7 ?) ~. V; J& } - if(xx==floatx&&yy==floaty) {$ o7 @& S7 }: ~. e' w
- if(flag[xx][yy]==0) {0 a! K, {4 A/ R
- if(mode%2==0) printf("");% |8 P* Y1 z2 c: o
- else printf("");
; k' [( B* u' w& a: z - }
) x$ v. Z |. E$ T - else printf("");
% {- `, D, |) z - }
7 X' y8 Z$ M: n( M5 Y - else {
& |: x3 [1 J1 h - if(flag[xx][yy]==0) printf("█");9 j: ]% S0 y6 i8 K8 o' d
- else printf("");
, @& _4 B7 b: p( _# d; t9 N - }
; S+ d- ?1 [4 a' t5 o - break;* N+ Q+ E1 T# Q$ C, j9 M
- case '@' :
5 ] h ~3 }/ Y - if(xx==floatx&&yy==floaty) {
$ j, }+ Z* K7 ^$ x- \ F - if(flag[xx][yy]==0) {
+ p, H a- l# e: V* h, y* M' m - if(mode%2==0) printf("");
, ^/ \! W `" Y# s: D/ Q - else printf("");5 r: e2 y0 e: w
- }
: ? F" s! A, M2 J4 x - else printf(""); `0 _* Y* p9 \1 b
- } ?+ U$ ^* }# h. ?1 x
- else {
: ]2 z# ], w8 G$ u$ G - if(flag[xx][yy]==0) printf("█");
# F6 z& _: g2 R+ a$ ^! A - else printf("");% ]6 h7 |( i1 [/ I4 a: L1 c2 w
- }- N' p# y5 w0 N: ~; {$ u
- break;5 [& B7 L4 f; T5 o4 V" d* ~7 t
- case 'x' : if(floatx==xx&&floaty==yy) printf(""); else printf(" ");break; //已经挖开的空白' v% O0 q" C6 D2 C. M7 w, r7 t
- }
$ ~7 L# s" [* n0 N - }& v+ ~; B: m% h8 j$ H, v8 S2 H9 W
-
1 H, N6 O1 c6 I/ P7 @ - //移动光标
5 [# x+ @7 b7 A4 K - void Move() {9 Z, y# Z: e3 g$ Z3 {( \
- HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄
4 T/ w* [1 L+ W0 {, |7 |( r - CONSOLE_SCREEN_BUFFER_INFO csbi; //定义窗口缓冲区信息结构体
+ L1 Z* f1 x. K. E3 x- t. d% t - GetConsoleScreenBufferInfo(handle_out, &csbi); //获得窗口缓冲区信息$ q( R# H' Y/ X5 a3 ^7 k5 |" x6 H: q/ j
- int xxx,yyy;: K; i+ h8 W l- q1 c
- xxx=floatx;
6 Y1 n& H/ k/ P1 @8 \ - yyy=floaty;8 [% T/ n6 z7 J; h& g0 F% u' ^) X! Y
- switch(news) {4 L' Y# N. Z/ o9 [8 o
- case 72 : floatx--;break; //上
& }, M$ O; F$ @ - case 80 : floatx++;break; //下
8 [+ o( P0 Y! _* f/ y8 ? - case 75 : floaty--;break; //左 ) M& _! K6 d) a% s4 V' L9 H7 g
- case 77 : floaty++;break; //右
! s B/ @) O5 R" B2 X - }
: ?6 u/ D3 ]& G6 ^( N% { - if(floatx==-1) floatx=A-1; floatx%=A; //两端穿模处理 $ z4 L8 j o% V0 i- U) |
- if(floaty==-1) floaty=B-1; floaty%=B;
: L* A$ L0 d& i3 p, ]( v -
! |6 }! \2 l4 i3 z - position(yyy*2,xxx);
! b$ `2 D8 D/ k/ a - SetConsoleTextAttribute(handle_out, FORE_GREEN);
) y! b. E4 i( F) b9 L1 J+ d8 h - Lump(xxx,yyy); //删除原位置" G; x; N/ l( B+ A
-
) `' }- G: z" v - if(map[floatx][floaty]=='x') {
' @$ Y; c" |6 t- ?* [ - position(floaty*2,floatx);
# E* ]/ {5 ?. _5 ^0 g - printf(" ");8 Y% T2 }7 s0 B, Z/ ]. R/ U4 w- {
- }
2 I" X7 r8 T1 R0 Q$ t- r6 j2 y/ n5 n9 R - " g7 _* }4 G$ R- W; H
- position(floaty*2,floatx);
4 u! X) @, R4 G" Z - SetConsoleTextAttribute(handle_out, FORE_BLUE); 1 X% N1 {$ @ X& d9 [
- Lump(floatx,floaty); //更新新位置
( F3 F% u) `; R* [- j ^; g* s - } 7 F, `) J% T }# Q: p% k
- 4 T+ [$ N n* i
- //插旗和排雷模式切换
! |1 {# f0 i6 e& U4 ?# F" n - void Mode() {
3 {+ M% a" d" e3 y4 O" j; Y6 L - HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄
1 ?7 M7 R7 V6 a0 C) l( h7 Y - CONSOLE_SCREEN_BUFFER_INFO csbi; //定义窗口缓冲区信息结构体
9 i9 C! T% P7 ~% U - GetConsoleScreenBufferInfo(handle_out, &csbi); //获得窗口缓冲区信息
4 D0 o! H3 R$ g5 y S1 B: R9 h - mode++;% j. ^) F& q. H
- SetConsoleTextAttribute(handle_out, FORE_BLUE);2 S0 J: G5 C; y$ {( F4 u" }+ W4 `
- position(floaty*2,floatx);% M b" ~( e/ q
- if(mode%2==0) printf("");3 M0 C) w3 i3 ?: V6 C
- else printf("");, c; t) |# G) L, _& ^; U9 n
- : {8 X: c2 a8 ]! _5 K
- position(44,9);; F7 t1 R7 k0 N( A
- if(mode%2==0) {
D5 \' B" a1 U [" ?$ Z - SetConsoleTextAttribute(handle_out, FORE_BLUE); $ R- B- u* @1 Z/ k! |+ v$ i- c
- printf("扫雷模式");
# _6 H' G% C; s( | - }
, }- |' Q% [. g) o! `& X - else {: X% D5 o" @5 H
- SetConsoleTextAttribute(handle_out, FORE_RED); 0 G* q# T8 X( B' z# _
- printf("插旗模式");9 W# V% x5 c# v
- }/ e: D# v' X0 q9 _- X
- }9 |' l5 G+ z- @1 X5 e" K% X
- 4 R% K6 k& d2 h9 o, z7 b
- //该点周围地雷数 " a& q, D+ m: a9 E: r
- int Boomnum(int xx,int yy) {, [2 s" A/ v5 G/ ]
- int num=0;2 u5 o! L! {. f9 Q9 y i y( b, y
- if((xx-1>=0)&&(yy-1>=0)&&(map[xx-1][yy-1]=='@')) num++;3 b, {: e0 P9 j7 \9 L
- if((xx-1>=0)&&(yy+0>=0)&&(map[xx-1][yy]=='@')) num++;
% H6 M! F* _5 p' ]) g, b5 Z - if((xx-1>=0)&&(yy+1<B) &&(map[xx-1][yy+1]=='@')) num++;
: I# y" S6 }6 e: Z$ W1 _ - if((xx+0>=0)&&(yy-1>=0)&&(map[xx][yy-1]=='@')) num++;
4 Q& N: ~6 |% d9 D7 j/ _4 G1 N2 a - if((xx+0>=0)&&(yy+1<B) &&(map[xx][yy+1]=='@')) num++;
& L9 e y! M) a - if((xx+1<A)&&(yy-1>=0) &&(map[xx+1][yy-1]=='@')) num++;, R4 E+ D% `/ S2 l7 E4 k
- if((xx+1<A)&&(yy+0>=0) &&(map[xx+1][yy]=='@')) num++;2 e# d, Y( c0 ]2 u( o
- if((xx+1<A)&&(yy+1<B) &&(map[xx+1][yy+1]=='@')) num++;
4 [' P6 p% G8 t/ \ U1 |5 p - return num;9 r! L% `: _ W5 D! q C
- }( y5 {. K$ T* b3 c# R
-
7 { \6 B/ S7 U - //更新地图
( o: v7 `, X0 Q8 Q/ j - void Open() {; n6 @% \9 j! L$ A2 E; k
- node c;" m$ U3 K. S! |$ K
- node d;! S$ p i, q& K! B0 Q0 I) C
- while(!dui.empty()) {! D4 e6 o+ p% ]( W) N
- dui.pop();3 X% y* ~5 n5 E: D9 k t
- }5 u& ~/ v6 f- f# }
- c.x=floatx;
3 B6 G2 c' b) X2 A: j$ ^/ R - c.y=floaty;
% {, m0 s, [& v. G - dui.push(c);' q; V+ v3 n9 L3 c" U6 m
- slect[c.x][c.y]=1;
. r+ S; b/ ?2 R2 _3 M - while(!dui.empty()) {
4 L: Q0 O* V! m% ^% K - c=dui.front();
9 ?! u9 b2 ~( g0 H( T - dui.pop();( `' _( u" W2 B4 L
- if(Boomnum(c.x,c.y)!=0) {
- |/ U$ M4 p$ U& |+ X$ U - map[c.x][c.y]=(Boomnum(c.x,c.y)+48);3 R2 [9 N% c, q: D: W
- continue;8 Q7 }! d! Y5 P# \6 j6 D+ E
- } m: S8 w9 O0 u% |& v, T: ]
- else {
- N5 J% i. V7 g2 O7 } - map[c.x][c.y]='x'; 2 O7 V/ y6 x% r* A' E3 d$ c3 `
- if((c.x-1>=0)&&(c.y-1>=0)&&(map[c.x-1][c.y-1]==' ')&&(slect[c.x-1][c.y-1]==0)) {: L9 [9 z% Q8 t
- d.x=c.x-1;
* v3 Y$ `8 l( V- G6 v' S - d.y=c.y-1;* ^; n) y; H% p$ @4 P
- dui.push(d);
) n/ V# ]7 H! E5 ^, O - slect[d.x][d.y]=1;! z0 p0 a- A' C# S2 `, |# E
- }( t5 B6 u1 B& g5 L; O9 l* R
- if((c.x-1>=0)&&(c.y-0>=0)&&(map[c.x-1][c.y]==' ')&&(slect[c.x-1][c.y]==0)) {9 b1 j4 w. `# r' Z$ i# L. s* X
- d.x=c.x-1;. J7 j' Y5 T9 U @
- d.y=c.y-0;% H: B S5 B. y5 k* ]3 P
- dui.push(d);: s0 i/ }, Q" w' e: A
- slect[d.x][d.y]=1;; c' u/ U) }" N
- }
! u( J# Z2 O8 Y. d" |; n - if((c.x-1>=0)&&(c.y+1<B)&&(map[c.x-1][c.y+1]==' ')&&(slect[c.x-1][c.y+1]==0)) {
; n( Q1 y5 q! |0 { - d.x=c.x-1;; h6 @: O' l! I3 B4 g' z, a* ~( ?, u. z
- d.y=c.y+1;
: x5 K0 i) _) z" J) B7 j5 | - dui.push(d);
( Y C5 ^2 w# @; k - slect[d.x][d.y]=1;/ t- Z# B( Y7 t
- } W9 Y1 t+ |+ @' ~ J
- if((c.x-0>=0)&&(c.y-1>=0)&&(map[c.x][c.y-1]==' ')&&(slect[c.x][c.y-1]==0)) {
6 Z/ G" ?) y5 M$ _+ {5 l$ j - d.x=c.x-0;
* a4 _( [( N# G - d.y=c.y-1; f; _: M! s6 J- T4 G* {+ }4 F
- dui.push(d);# d: t) e8 @1 a
- slect[d.x][d.y]=1;
' h# G x) }+ [& R9 _ - }; K: G% `' h* N7 ~4 Y
- if((c.x-0>=0)&&(c.y+1<B)&&(map[c.x][c.y+1]==' ')&&(slect[c.x][c.y+1]==0)) {- M6 r. h# E. a- z# W
- d.x=c.x-0;
# G6 O- p* Q9 j2 B6 n( E: ?" ]$ f - d.y=c.y+1;
! _( i7 x& @& Q+ T7 e( d1 d5 \ - dui.push(d);; t4 B' c q; b3 L. |- f
- slect[d.x][d.y]=1;, ^$ j& c5 @8 f4 V( f) E: k# F. y
- }- h5 A# {6 W8 n4 [
- if((c.x+1<A)&&(c.y-1>=0)&&(map[c.x+1][c.y-1]==' ')&&(slect[c.x+1][c.y-1]==0)) {' q3 b: z q/ w4 L. _' i6 t
- d.x=c.x+1;
5 m2 ]! L( P6 B( Y( {# n0 W2 \3 ` - d.y=c.y-1;
) z& ]! C* H X% S5 g - dui.push(d);8 R A8 j. E" k5 L; u% A d
- slect[d.x][d.y]=1;
* U1 n" N- y0 A/ L: w - }
0 e: K! y$ Q; J8 D' n P' U - if((c.x+1<A)&&(c.y-0>=0)&&(map[c.x+1][c.y]==' ')&&(slect[c.x+1][c.y]==0)) {) _. H- O: Z: I2 w
- d.x=c.x+1;) f& y6 C5 r7 L9 ~
- d.y=c.y-0;0 [( j1 ?9 @& I( ]! P+ [% l' u Y6 m
- dui.push(d);
! s, d4 m5 w3 B4 t- F) l - slect[d.x][d.y]=1;0 M2 s5 ^6 O& G$ F0 m8 p
- }' E* A3 h* Y# U' S- d5 p
- if((c.x+1<A)&&(c.y+1<B)&&(map[c.x+1][c.y+1]==' ')&&(slect[c.x+1][c.y+1]==0)) {$ i( F0 ]6 J4 [1 `% p; q" j% k
- d.x=c.x+1;1 r1 S8 w0 R% k& }2 q6 J2 H
- d.y=c.y+1;
: H7 i/ N$ p6 d' G1 x3 o - dui.push(d);
, V( r0 ]% z4 k" p/ K5 c- { F7 @, {+ H - slect[d.x][d.y]=1;
- w. Q7 ~3 D ?: O8 T4 ` - }
/ B/ v9 Z+ _+ a8 G& {5 s+ u2 h; ] - }; e9 ^. x* I, G6 R- o( H, n
- }
- P6 I+ m8 C7 H; c3 }( [ - }
1 i; K/ a+ c3 y; |9 D3 h1 {! W - 0 i! M* W S+ e$ o. S& [5 F/ u0 l
- int main() {; I3 o' ?* E; `2 d2 k6 [
- freopen("排名.txt","r",stdin);
+ `; Q! U: r2 S. c# w' Y |( p+ Y - Relife: //重玩处
) \2 E- y, t- ~. T - HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄
$ L* }0 Q" u0 S- n9 [ - CONSOLE_SCREEN_BUFFER_INFO csbi; //定义窗口缓冲区信息结构体 0 e( `& p' f: p( z
- GetConsoleScreenBufferInfo(handle_out, &csbi); //获得窗口缓冲区信息* w' O: k1 D; M, ~5 S4 b P
-
* U; L! x- t: Y - Hide(); ' U. x. e2 W7 K) i8 Q
- Beginning();
2 L1 B% _6 `9 Y+ B - a=GetTickCount();
5 C$ F* N. P1 ?! h! v+ b - while(1) {7 V g4 ^( C; A J, o6 |
- if(kbhit()!=0) {
7 P1 s v: W5 t' d - spare=getch();
1 O8 w% [* ~; Q- [0 X# g - 0 w9 F7 ?/ Z, R
-
8 ^+ J+ D6 r5 r/ L: T - if((spare!=(-32))&&(spare!=13)&&(spare!=' ')) continue;
0 O$ z8 [0 ^; h5 F. F' p2 b* Y - ; d4 |5 P; Y1 h" D$ y8 D
-
& C/ l$ |1 ^% e$ Y6 ], p* N - if(spare==13) {;9 F, c3 T: P( X
-
& r# A. i/ x" A' U! L' N- W$ L - if(mode%2==0) {) u5 s; E: \* x
- if(map[floatx][floaty]=='@'&&flag[floatx][floaty]==0) { U$ I3 r4 c/ {# o. j- l: z1 D- u% N
- break; 9 ^4 o5 L: K. g1 G
- game=0;- M$ i$ F& l1 y% }# J
- }1 [; y( m0 C7 j9 ]& @
- ; J( ~/ O% i7 I. u# L4 N
- if(flag[floatx][floaty]==1) continue;
' u2 {) ]! y( _6 v. {( t6 l - Open();
3 \1 c: K0 B+ g0 N- Q. k {; o - position(0,0);2 k) H; x1 z0 b- {( ~% I
- SetConsoleTextAttribute(handle_out, FORE_GREEN);$ H5 A; h8 d* U9 L
- for(int i=0;i<A;i++) {) M7 d7 i |6 C+ p" M8 q4 L' J
- for(int j=0;j<B;j++) Lump(i,j);4 K E& @8 x4 C z6 W* A
- printf("\n");
1 a1 ]# ]7 L1 S2 e( [7 X: x - }# j; Q# k5 R1 m# l; q# @
- position(floaty*2,floatx);
! A# K9 Q5 }0 C. e - SetConsoleTextAttribute(handle_out, FORE_BLUE);8 M8 e+ ]1 g+ ^: n0 U" c8 V$ F
- Lump(floatx,floaty);& o- A4 f+ i% v: h& z
- }+ _" D5 X; m2 G2 f) P6 g; ~
-
- x+ H: Q* x. Q5 o' x5 a8 [ -
& l, _! f/ N' {0 M0 \ - else {
9 Y; L7 k _! { -
: | R1 V5 T& w1 n, e# O/ M1 B -
8 q9 ^( o1 v4 Y( ?( F - if(map[floatx][floaty]=='x'||(map[floatx][floaty]>'0'&&map[floatx][floaty]<'9'))
0 F! D9 i" E! O+ t - continue;
$ Z0 l1 D+ o3 O - 9 p4 E' _% Z' }# d5 a) N8 c( M& L
- 4 _+ j+ Y2 _0 w8 Y6 o3 ~4 F# u0 x
- if(flag[floatx][floaty]==0) {
9 ^: _0 z8 w! T& M - flagnum++;
+ f0 b) d% T) Q) [, Y4 i4 I& X - flag[floatx][floaty]=1;
: b; ?: A" ~8 S- x: `7 z - position(floaty*2,floatx);& Z4 K0 w9 K& Q3 K+ ^, p0 x
- SetConsoleTextAttribute(handle_out, FORE_BLUE);
8 x9 C: ]0 u' j) ~* i* g - Lump(floatx,floaty);) I" \* d- W o: a4 L, E
- }4 Y1 ?- R/ B' ]3 {: U0 W
-
n) p2 C$ Q! i2 e - 8 l5 N+ s- x- c$ R! g1 \/ |
- else {& H E, {$ i2 z+ s- a: z4 g
- flagnum--;
* V- O$ N- T( n/ L* W - flag[floatx][floaty]=0;
7 p- G( i) S' B' K1 }4 ^) ]- t! B - position(floaty*2,floatx);8 J, b) F; F8 t4 Y
- SetConsoleTextAttribute(handle_out, FORE_BLUE);
; d3 v' \, [3 v - Lump(floatx,floaty);; C+ ?) @1 K9 @6 x; K/ r7 U
- }) F/ F9 ^! z9 K
- }
( H/ k0 Z& q% S2 u% F P - } ?. j y! [7 o7 J
- ! d& w- c: H; q& u! ^
- * X7 O+ h) ?' Z2 L8 {( D
- if(spare==' ') Mode(); 3 {6 I. M& }$ x$ O' F
-
% W3 q3 ?. O' F - //按方向键
! U9 `' `) r+ ~- N0 d0 q5 a - if(spare==-32) {5 N. F9 J, y* W: v
- news=getch();3 P* t' v5 L5 I+ i# I' [
- Move();
0 h5 K2 X1 X! [/ {0 _$ V' B - }
& ?0 ~2 V1 T# }0 w - 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++;
2 m/ H* ]. t. a R* S4 T - if(game==A*B-C+1) break;& r% l6 s& j4 k
- else game=1;6 t" \' U6 g* k: r; _7 E
- SetConsoleTextAttribute(handle_out, FORE_RED);; V% p O9 F& g% b6 T
- position(44,5);
% h# X- e* D) V% @ - printf("剩余雷数:%d ",C-flagnum);8 R! y D( T6 \" m
- }
; f/ i3 p3 L5 k- e - else Sleep(10);
+ `4 R" | p3 K; g* {# q - b=GetTickCount();
( K, i1 f5 ?. n" d3 J* O - SetConsoleTextAttribute(handle_out, FORE_RED);6 |/ @, H; d3 |+ y
- position(44,7);$ W" r7 H4 P2 i2 k
- printf("用时:"); ( ~% U- {: [5 i4 j7 C2 ^% B
- if((b-a)/60000<10) printf("0");) M& A) H ^# U; q8 K8 l
- printf("%d:",(b-a)/60000);
9 t v3 b) v: L' v' v - if(((b-a)/1000)%60<10) printf("0");0 i- M( y1 ^* u& z8 B
- printf("%d:",((b-a)/1000)%60);2 w9 Q" g7 `! W) B0 k, t
- if(((b-a)/10)%100<10) printf("0");
8 N. n2 d! n% H9 [( o, M" r - printf("%d",((b-a)/10)%100);
( v: F$ w" I: l# B( p5 n - }( f* _( P8 @ k8 C9 v/ u
- SetConsoleTextAttribute(handle_out, FORE_RED);
; |0 O9 x0 }. k: Y% z - position(5,5);( _/ f: h" h/ q2 X
- if(game==1) printf("游戏结束!");/ q7 u1 _/ P! d2 S
- else printf("恭喜通关!"); X. t/ K5 N/ r: s
- position(5,8);
* i' n/ q O: O1 y2 r- s {1 k - printf("任意键重玩");
, O# Y: `: j n - scanf("%c%c",&spare,&spare);
: x7 Y7 G Q' h. Z" H/ u( M" d - system("cls");
: x/ ]$ X: C; t8 } - position(0,0);6 n. @+ s( `, p% c/ j$ t7 u. d% E' Q9 a
- goto Relife;" o/ G b& y) B0 Y
- }
复制代码
{" ?# `0 v% f3 [% @! p4 c6 }" _' F% L( ?; [, s% |
, W- R& R. O" U7 B |
|