找回密码
 立即注册!
搜索

小喇叭+ 发布

12-31 23:03
系统消息:尊敬的用户,动象论坛的邮件系统已经完美修复,您现在可以顺利使用自助注册和找回密码功能了。万分感谢你对动象论坛的喜爱与支持~
06-10 15:28
系统消息:很抱歉的通知您,当前论坛的邮件系统暂时出现故障,因此自助注册和找回密码的功能将无法使用。如有任何需要,您可以直接添加客服QQ:230273459进行人工操作。对此给您带来的不便,我们深感歉意。
06-10 09:11
admin动象论坛祝大家端午快乐~悠悠粽草,人间芳华,年年岁岁皆如愿,岁岁年年长安康。
06-10 09:09
系统消息:动象论坛祝大家高考加油~
06-09 15:13
系统消息:各位坛友,由于“两会”封网原因,动象论坛服务中止了约一个星期,对于由此给您造成的麻烦我们感到万分抱歉。
03-18 23:04
admin动象论坛在这里祝大家2024龙年新年快乐~
02-09 14:58
系统消息:论坛端口问题已经解决~您可以直接访问论坛域名mcmc.ltd(www.mcmc.ltd)啦~(Tips:如访问时提示“连接被重置”报错,请清空您的DNS缓存与浏览器缓存。)
02-05 19:14
系统消息:论坛预计今天晚间将端口问题修复完成,请留意论坛动态,感谢您对动象论坛的支持~
02-05 14:06
系统消息:动象论坛目前正在紧急迁移服务器,目前请您先访问https://mcmc.ltd:150。论坛正在全力找CDN以修复端口问题,由此给您造成影响亿常抱歉。。
02-05 11:23
系统消息:动象论坛祝大家2024年新年快乐吖~祝大家前路浩浩荡荡,万事皆可期待~
12-31 22:41
系统消息:动象论坛拟于7月20日至7月21日进行服务器迁移和域名更换,届时论坛服务将暂时不可用。对此给您带来的麻烦,我们感到十分抱歉。
07-18 19:51
Mozillahello world
07-04 17:39
系统消息:高考倒计时2天!动象论坛祝大家2023高考完胜!加油!!!!!!
06-04 23:44
神秘人:
03-21 07:20
系统消息:向各位论坛坛友公开一下,我们现在吸收了@luoying2334 为论坛管理团队成员,管理讨论区、软件分享区和得闲饮茶区。如您有任何质疑,请您在【意见与建议】版块发帖,感谢您的支持~
03-20 23:23
admin论坛没啥人气啊emmm,欢迎大家来推荐退荐~
03-12 22:34
02-05 11:11
luoying2334给我学狗叫啊,三回啊三回
02-05 11:11
Civilmafia追尾黑色高级车
02-04 14:27
查看: 1451|回复: 0

扫雷圣诞节特别版

[复制链接]

11

主题

57

回帖

585

积分

清正廉明~版主

风纪委员

积分
585

最佳新人活跃会员

发表于 2020-7-18 11:07:14 | 显示全部楼层 |阅读模式 IP:浙江嘉兴
  1. #include<stdio.h>- Y' d( Y/ g; ]$ f3 w3 p; o
  2. #include<windows.h>
    ' `  X  z) C: ^8 i: A
  3. #include<stdlib.h>
    ) Y$ ~3 c5 K% ]! g+ T% W: P1 t
  4. #include<time.h>. C  b# f' a) v7 d2 [) n" w: i* B
  5. #include<conio.h>
    , B" @# q/ M/ [6 E
  6. #include<queue>
    " Q" c6 M+ w; A5 q+ E& _
  7. #include<ctype.h>$ w1 s6 G2 _4 f0 o; J8 M' C3 [
  8. #define A 17 //地图的高5 ]6 c1 d. }( P+ }" H  n; M
  9. #define B 17 //地图的宽( q7 e) t2 p- I4 C
  10. #define C 30 //雷的总数+ J; S# `- a7 }9 V5 J- B
  11. using namespace std;; S& l( C% ^1 P& e- W

  12. 9 ^, o; f# k/ O. M* U* @1 _* P0 U9 C
  13. //全局变量
    9 w3 v; l1 t6 u6 a5 `: V7 x+ E. i
  14. DWORD a,b;8 b( }% V7 T* `
  15. char map[A][B],news,spare;
    + ^- Z* V/ d! k6 b' m& D- d
  16. int BoomTotalNum,floatx,floaty,flag[A][B],flagnum,mode,slect[A][B],game;
    , P, z  v$ P* H  g. A7 \

  17. 5 _  r  M4 E( r: r2 n
  18. //颜色属性' m8 ^  B, l/ g1 r; ]
  19. const WORD FORE_BLUE = FOREGROUND_BLUE; //蓝色文本属性/ ~6 y- a2 j$ Z: U! d# v% i
  20. const WORD FORE_GREEN = FOREGROUND_GREEN; //绿色文本属性
    4 s* D) T7 o) V+ f
  21. const WORD FORE_RED = FOREGROUND_RED; //红色文本属性( @! M! @- w' c6 H  ~) ]4 `5 g$ R

  22. 7 B6 n3 T- T4 A/ {0 T9 K0 z
  23. //开垦地图结构体 : _! x  r4 n* |; F. M2 a( W
  24. struct node {: K& P& X7 t( R
  25. int x;) `3 ?1 ]- L0 u' z3 y: m9 C4 r
  26. int y;
    " p) r* C+ u+ A2 _# e- z
  27. };
    - ]' J/ j8 h" j) \
  28. queue <node> dui;
    . X# j: q6 K* w! R: I( O

  29. + b" @- B4 x4 _4 W+ z
  30. //打印位置$ O/ R5 ?1 v0 ^- i
  31. void position(int x,int y) {
    . x: m; U* t  E( H0 D* H
  32. COORD pos={x,y};* a# k- T# X/ q* Y9 L9 u
  33. HANDLE Out=GetStdHandle(STD_OUTPUT_HANDLE);
    - R: f2 w& ?, I' e( h
  34. SetConsoleCursorPosition(Out,pos);
    , c( c6 @8 L4 T5 @
  35. }+ s$ U0 }# G9 j8 ?& u' l

  36. 0 M  z! J' D+ m# a
  37. //隐藏光标
    7 H( M1 j2 s: i" ~+ m" l/ N
  38. void Hide() {1 ?6 g) I/ }& b
  39. HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); 4 T: f* x* F' b( P, f% `
  40. CONSOLE_CURSOR_INFO CursorInfo; 0 d! x5 ]# Q9 Q; M+ e9 [- i2 [; R
  41. GetConsoleCursorInfo(handle, &CursorInfo);//获取控制台光标信息 $ N: E- y6 N4 z) o* D4 k5 P7 O
  42. CursorInfo.bVisible = false; //隐藏控制台光标
    + Y6 \0 ]1 K3 a0 D
  43. SetConsoleCursorInfo(handle, &CursorInfo);//设置控制台光标状态
    4 W3 g' `5 d. d5 D4 j) W! X
  44. }) Y2 t- {: d4 a1 d

  45. , y4 [) M: ^1 l( ]. Z
  46. //初始化
    0 n, w) t% B1 u0 m# `
  47. void Beginning() {# U1 S8 X8 j9 W/ D  V5 ^  d2 l
  48. while(!dui.empty()) {) a, |! g, C! l, Q5 J+ y
  49. dui.pop();2 |4 r5 a6 \1 g
  50. }
    0 D" Z; T- H: v3 U# b- i, m! s8 }8 d
  51. game=1;, D) a" \( G# }' H  P5 O- ^5 {9 x+ h
  52. //BoomTotalNum=C;% g; A2 U* M1 t3 R
  53. floatx=A/2;
    / C3 ~& r4 o9 G, X
  54. floaty=B/2;
    9 L4 X5 _; z$ a6 ^  I6 @# I8 F
  55. flagnum=0;
    + f, x4 O1 \- k
  56. BoomTotalNum=C;9 W1 I' X1 q, g
  57. mode=0;" p3 D% H: d8 {# I1 F' e
  58. HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄
    / Q+ U4 |$ {! e4 R2 \; x* V
  59. CONSOLE_SCREEN_BUFFER_INFO csbi;      //定义窗口缓冲区信息结构体
    ' T2 k9 H* b+ l1 ~6 g, M0 M* @
  60. GetConsoleScreenBufferInfo(handle_out, &csbi);   //获得窗口缓冲区信息
    ! F0 S2 Q$ K+ ^% Q' a3 s
  61. int x,y;9 b1 V: N2 T6 [/ J2 Q- D
  62. srand((unsigned)time(0));4 ]' P9 I; u7 Q/ ~3 _9 F4 O4 e
  63. for(int i=0;i<A;i++) for(int j=0;j<B;j++) {8 D) F# W2 s! j0 u( O8 t3 p
  64. map[i][j]=' ';
    0 }2 g- h  A7 ?5 s
  65. flag[i][j]=0;
    $ h. [& }9 G0 e& }$ D! s) X
  66. slect[i][j]=0;
    " Y, r% I* z6 |  m* w$ j% G
  67. }
    . s: Z% q. }6 V# C" }- i: b- a
  68. while(BoomTotalNum) {
    " h) Y% i+ t5 R# ~8 r2 x
  69. x=rand()%A;
    / D  K1 u$ O- g* v/ h4 X" _5 e' s4 s
  70. y=rand()%B;
    5 c4 K1 B8 C' j* n' V) R& }
  71. if(map[x][y]==' ') {
    4 n1 O% ?, n- J
  72. map[x][y]='@';1 z4 {1 F+ ~, N1 ?6 a
  73. BoomTotalNum--;0 @2 j7 r) D# F3 b, R. }
  74. }
    ) C5 Z, {+ K3 n
  75. }
    ) j: G4 p* K2 `6 s6 m8 ^
  76. SetConsoleTextAttribute(handle_out, FORE_GREEN);
    " G; T  o+ f0 O) k6 }
  77. for(int i=0;i<A;i++) {
    + F. L) L' ]3 R- J- [
  78. for(int j=0;j<B;j++) printf("█");9 i1 Y8 x$ h% Q- l8 \2 J9 `$ Y
  79. printf("\n");
    : c) E& `9 M" o: n
  80. }9 w. [& S8 P1 N5 [
  81. position(floaty*2,floatx);
    ' r! q7 M6 V( j$ u, V1 Y7 U
  82. SetConsoleTextAttribute(handle_out, FORE_RED); # l- O: G/ J/ v
  83. printf(""); //光标位置
    9 I/ D8 F$ Y/ V* H- X
  84. position(44,9);
    9 v3 H7 R, F& I. M
  85. printf("扫雷模式");2 Y4 L0 t9 G3 j7 X/ M
  86. position(44,5);; m6 ?7 F1 P+ Q7 V; D
  87. printf("剩余雷数:%d ",C-flagnum);1 O" S! I' Q" g6 }9 E
  88. SetConsoleTextAttribute(handle_out, FORE_GREEN); 1 e  b+ T. G& U' G( t0 [2 ?
  89. position(5,22);
    & v1 P# H0 i! `* q
  90. printf("按“空格”切换模式");
    : c  H. k% F# N" x1 a
  91. position(5,23);& j- f7 O4 E1 h. U2 @/ y
  92. printf("按“Enter”确认");4 G- A- s9 l( Z0 T5 W
  93. position(5,24);
    2 o9 B9 J- o9 @: S3 h( G
  94. printf("按“方向键”选择方块"); , G3 r2 p" L4 V! `, N
  95. * M. w. g2 H( C3 V+ W3 O
  96. }
    ; p" O3 A+ n$ P# a, i
  97. 7 k6 R# c  w4 r: V# O
  98. //打印地图的一块儿
    & R  b! R& I7 b  t3 Z4 w
  99. void Lump(int xx,int yy) {
      u" q. e2 W) f  O
  100. switch(map[xx][yy]) {# y& {' k& F  E2 @$ m! Z- N
  101. case '1' : printf("①");break; //周围雷的数量(下同) , S" `2 Z! t, c  g/ M+ W
  102. case '2' : printf("②");break;6 m" |$ K8 p! Q) |; G2 h
  103. case '3' : printf("③");break;: w( u! _( H% }
  104. case '4' : printf("④");break;+ Z' s) A; U6 C( {
  105. case '5' : printf("⑤");break;+ l) ^' o5 S: O1 f, t0 q
  106. case '6' : printf("⑥");break;$ B' \! a) l6 p* ^
  107. case '7' : printf("⑦");break;
    ! v) q! M* ~. l- m
  108. case '8' : printf("⑧");break;
    0 r5 G, x" b/ o
  109. case ' ' :
    / C& ]. j- s! v1 F6 c7 ?) ~. V; J& }
  110. if(xx==floatx&&yy==floaty) {$ o7 @& S7 }: ~. e' w
  111. if(flag[xx][yy]==0) {0 a! K, {4 A/ R
  112.   if(mode%2==0) printf("");% |8 P* Y1 z2 c: o
  113.   else printf("");
    ; k' [( B* u' w& a: z
  114. }
    ) x$ v. Z  |. E$ T
  115. else printf("");
    % {- `, D, |) z
  116. }
    7 X' y8 Z$ M: n( M5 Y
  117. else {
    & |: x3 [1 J1 h
  118. if(flag[xx][yy]==0) printf("█");9 j: ]% S0 y6 i8 K8 o' d
  119. else printf("");
    , @& _4 B7 b: p( _# d; t9 N
  120. }
    ; S+ d- ?1 [4 a' t5 o
  121. break;* N+ Q+ E1 T# Q$ C, j9 M
  122. case '@' :
    5 ]  h  ~3 }/ Y
  123. if(xx==floatx&&yy==floaty) {
    $ j, }+ Z* K7 ^$ x- \  F
  124. if(flag[xx][yy]==0) {
    + p, H  a- l# e: V* h, y* M' m
  125.   if(mode%2==0) printf("");
    , ^/ \! W  `" Y# s: D/ Q
  126.   else printf("");5 r: e2 y0 e: w
  127. }
    : ?  F" s! A, M2 J4 x
  128. else printf("");  `0 _* Y* p9 \1 b
  129. }  ?+ U$ ^* }# h. ?1 x
  130. else {
    : ]2 z# ], w8 G$ u$ G
  131. if(flag[xx][yy]==0) printf("█");
    # F6 z& _: g2 R+ a$ ^! A
  132. else printf("");% ]6 h7 |( i1 [/ I4 a: L1 c2 w
  133. }- N' p# y5 w0 N: ~; {$ u
  134. break;5 [& B7 L4 f; T5 o4 V" d* ~7 t
  135. case 'x' : if(floatx==xx&&floaty==yy) printf(""); else printf(" ");break; //已经挖开的空白' v% O0 q" C6 D2 C. M7 w, r7 t
  136. }
    $ ~7 L# s" [* n0 N
  137. }& v+ ~; B: m% h8 j$ H, v8 S2 H9 W

  138. 1 H, N6 O1 c6 I/ P7 @
  139. //移动光标
    5 [# x+ @7 b7 A4 K
  140. void Move() {9 Z, y# Z: e3 g$ Z3 {( \
  141. HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄
    4 T/ w* [1 L+ W0 {, |7 |( r
  142. CONSOLE_SCREEN_BUFFER_INFO csbi;      //定义窗口缓冲区信息结构体
    + L1 Z* f1 x. K. E3 x- t. d% t
  143. GetConsoleScreenBufferInfo(handle_out, &csbi);   //获得窗口缓冲区信息$ q( R# H' Y/ X5 a3 ^7 k5 |" x6 H: q/ j
  144. int xxx,yyy;: K; i+ h8 W  l- q1 c
  145. xxx=floatx;
    6 Y1 n& H/ k/ P1 @8 \
  146. yyy=floaty;8 [% T/ n6 z7 J; h& g0 F% u' ^) X! Y
  147. switch(news) {4 L' Y# N. Z/ o9 [8 o
  148. case 72 : floatx--;break; //上
    & }, M$ O; F$ @
  149. case 80 : floatx++;break; //下
    8 [+ o( P0 Y! _* f/ y8 ?
  150. case 75 : floaty--;break; //左 ) M& _! K6 d) a% s4 V' L9 H7 g
  151. case 77 : floaty++;break; //右
    ! s  B/ @) O5 R" B2 X
  152. }
    : ?6 u/ D3 ]& G6 ^( N% {
  153. if(floatx==-1) floatx=A-1; floatx%=A; //两端穿模处理 $ z4 L8 j  o% V0 i- U) |
  154. if(floaty==-1) floaty=B-1; floaty%=B;
    : L* A$ L0 d& i3 p, ]( v

  155. ! |6 }! \2 l4 i3 z
  156. position(yyy*2,xxx);
    ! b$ `2 D8 D/ k/ a
  157. SetConsoleTextAttribute(handle_out, FORE_GREEN);
    ) y! b. E4 i( F) b9 L1 J+ d8 h
  158. Lump(xxx,yyy); //删除原位置" G; x; N/ l( B+ A

  159. ) `' }- G: z" v
  160. if(map[floatx][floaty]=='x') {
    ' @$ Y; c" |6 t- ?* [
  161. position(floaty*2,floatx);
    # E* ]/ {5 ?. _5 ^0 g
  162. printf(" ");8 Y% T2 }7 s0 B, Z/ ]. R/ U4 w- {
  163. }
    2 I" X7 r8 T1 R0 Q$ t- r6 j2 y/ n5 n9 R
  164. " g7 _* }4 G$ R- W; H
  165. position(floaty*2,floatx);
    4 u! X) @, R4 G" Z
  166. SetConsoleTextAttribute(handle_out, FORE_BLUE); 1 X% N1 {$ @  X& d9 [
  167. Lump(floatx,floaty); //更新新位置
    ( F3 F% u) `; R* [- j  ^; g* s
  168. } 7 F, `) J% T  }# Q: p% k
  169. 4 T+ [$ N  n* i
  170. //插旗和排雷模式切换
    ! |1 {# f0 i6 e& U4 ?# F" n
  171. void Mode() {
    3 {+ M% a" d" e3 y4 O" j; Y6 L
  172. HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄
    1 ?7 M7 R7 V6 a0 C) l( h7 Y
  173. CONSOLE_SCREEN_BUFFER_INFO csbi;      //定义窗口缓冲区信息结构体
    9 i9 C! T% P7 ~% U
  174. GetConsoleScreenBufferInfo(handle_out, &csbi);   //获得窗口缓冲区信息
    4 D0 o! H3 R$ g5 y  S1 B: R9 h
  175. mode++;% j. ^) F& q. H
  176. SetConsoleTextAttribute(handle_out, FORE_BLUE);2 S0 J: G5 C; y$ {( F4 u" }+ W4 `
  177. position(floaty*2,floatx);% M  b" ~( e/ q
  178. if(mode%2==0) printf("");3 M0 C) w3 i3 ?: V6 C
  179. else printf("");, c; t) |# G) L, _& ^; U9 n
  180. : {8 X: c2 a8 ]! _5 K
  181. position(44,9);; F7 t1 R7 k0 N( A
  182. if(mode%2==0) {
      D5 \' B" a1 U  [" ?$ Z
  183. SetConsoleTextAttribute(handle_out, FORE_BLUE); $ R- B- u* @1 Z/ k! |+ v$ i- c
  184. printf("扫雷模式");
    # _6 H' G% C; s( |
  185. }
    , }- |' Q% [. g) o! `& X
  186. else {: X% D5 o" @5 H
  187. SetConsoleTextAttribute(handle_out, FORE_RED); 0 G* q# T8 X( B' z# _
  188. printf("插旗模式");9 W# V% x5 c# v
  189. }/ e: D# v' X0 q9 _- X
  190. }9 |' l5 G+ z- @1 X5 e" K% X
  191. 4 R% K6 k& d2 h9 o, z7 b
  192. //该点周围地雷数 " a& q, D+ m: a9 E: r
  193. int Boomnum(int xx,int yy) {, [2 s" A/ v5 G/ ]
  194. int num=0;2 u5 o! L! {. f9 Q9 y  i  y( b, y
  195. if((xx-1>=0)&&(yy-1>=0)&&(map[xx-1][yy-1]=='@')) num++;3 b, {: e0 P9 j7 \9 L
  196. if((xx-1>=0)&&(yy+0>=0)&&(map[xx-1][yy]=='@')) num++;
    % H6 M! F* _5 p' ]) g, b5 Z
  197. if((xx-1>=0)&&(yy+1<B) &&(map[xx-1][yy+1]=='@')) num++;
    : I# y" S6 }6 e: Z$ W1 _
  198. if((xx+0>=0)&&(yy-1>=0)&&(map[xx][yy-1]=='@')) num++;
    4 Q& N: ~6 |% d9 D7 j/ _4 G1 N2 a
  199. if((xx+0>=0)&&(yy+1<B) &&(map[xx][yy+1]=='@')) num++;
    & L9 e  y! M) a
  200. if((xx+1<A)&&(yy-1>=0) &&(map[xx+1][yy-1]=='@')) num++;, R4 E+ D% `/ S2 l7 E4 k
  201. if((xx+1<A)&&(yy+0>=0) &&(map[xx+1][yy]=='@')) num++;2 e# d, Y( c0 ]2 u( o
  202. if((xx+1<A)&&(yy+1<B) &&(map[xx+1][yy+1]=='@')) num++;
    4 [' P6 p% G8 t/ \  U1 |5 p
  203. return num;9 r! L% `: _  W5 D! q  C
  204. }( y5 {. K$ T* b3 c# R

  205. 7 {  \6 B/ S7 U
  206. //更新地图
    ( o: v7 `, X0 Q8 Q/ j
  207. void Open() {; n6 @% \9 j! L$ A2 E; k
  208. node c;" m$ U3 K. S! |$ K
  209. node d;! S$ p  i, q& K! B0 Q0 I) C
  210. while(!dui.empty()) {! D4 e6 o+ p% ]( W) N
  211. dui.pop();3 X% y* ~5 n5 E: D9 k  t
  212. }5 u& ~/ v6 f- f# }
  213. c.x=floatx;
    3 B6 G2 c' b) X2 A: j$ ^/ R
  214. c.y=floaty;
    % {, m0 s, [& v. G
  215. dui.push(c);' q; V+ v3 n9 L3 c" U6 m
  216. slect[c.x][c.y]=1;
    . r+ S; b/ ?2 R2 _3 M
  217. while(!dui.empty()) {
    4 L: Q0 O* V! m% ^% K
  218. c=dui.front();
    9 ?! u9 b2 ~( g0 H( T
  219. dui.pop();( `' _( u" W2 B4 L
  220. if(Boomnum(c.x,c.y)!=0) {
    - |/ U$ M4 p$ U& |+ X$ U
  221. map[c.x][c.y]=(Boomnum(c.x,c.y)+48);3 R2 [9 N% c, q: D: W
  222. continue;8 Q7 }! d! Y5 P# \6 j6 D+ E
  223. }  m: S8 w9 O0 u% |& v, T: ]
  224. else {
    - N5 J% i. V7 g2 O7 }
  225. map[c.x][c.y]='x';                                                                                                          2 O7 V/ y6 x% r* A' E3 d$ c3 `
  226. 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
  227. d.x=c.x-1;
    * v3 Y$ `8 l( V- G6 v' S
  228. d.y=c.y-1;* ^; n) y; H% p$ @4 P
  229. dui.push(d);
    ) n/ V# ]7 H! E5 ^, O
  230. slect[d.x][d.y]=1;! z0 p0 a- A' C# S2 `, |# E
  231. }( t5 B6 u1 B& g5 L; O9 l* R
  232. 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
  233. d.x=c.x-1;. J7 j' Y5 T9 U  @
  234. d.y=c.y-0;% H: B  S5 B. y5 k* ]3 P
  235. dui.push(d);: s0 i/ }, Q" w' e: A
  236. slect[d.x][d.y]=1;; c' u/ U) }" N
  237. }
    ! u( J# Z2 O8 Y. d" |; n
  238. 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 {
  239. d.x=c.x-1;; h6 @: O' l! I3 B4 g' z, a* ~( ?, u. z
  240. d.y=c.y+1;
    : x5 K0 i) _) z" J) B7 j5 |
  241. dui.push(d);
    ( Y  C5 ^2 w# @; k
  242. slect[d.x][d.y]=1;/ t- Z# B( Y7 t
  243. }  W9 Y1 t+ |+ @' ~  J
  244. 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
  245. d.x=c.x-0;
    * a4 _( [( N# G
  246. d.y=c.y-1;  f; _: M! s6 J- T4 G* {+ }4 F
  247. dui.push(d);# d: t) e8 @1 a
  248. slect[d.x][d.y]=1;
    ' h# G  x) }+ [& R9 _
  249. }; K: G% `' h* N7 ~4 Y
  250. 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
  251. d.x=c.x-0;
    # G6 O- p* Q9 j2 B6 n( E: ?" ]$ f
  252. d.y=c.y+1;
    ! _( i7 x& @& Q+ T7 e( d1 d5 \
  253. dui.push(d);; t4 B' c  q; b3 L. |- f
  254. slect[d.x][d.y]=1;, ^$ j& c5 @8 f4 V( f) E: k# F. y
  255. }- h5 A# {6 W8 n4 [
  256. 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
  257. d.x=c.x+1;
    5 m2 ]! L( P6 B( Y( {# n0 W2 \3 `
  258. d.y=c.y-1;
    ) z& ]! C* H  X% S5 g
  259. dui.push(d);8 R  A8 j. E" k5 L; u% A  d
  260. slect[d.x][d.y]=1;
    * U1 n" N- y0 A/ L: w
  261. }
    0 e: K! y$ Q; J8 D' n  P' U
  262. 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
  263. d.x=c.x+1;) f& y6 C5 r7 L9 ~
  264. d.y=c.y-0;0 [( j1 ?9 @& I( ]! P+ [% l' u  Y6 m
  265. dui.push(d);
    ! s, d4 m5 w3 B4 t- F) l
  266. slect[d.x][d.y]=1;0 M2 s5 ^6 O& G$ F0 m8 p
  267. }' E* A3 h* Y# U' S- d5 p
  268. 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
  269. d.x=c.x+1;1 r1 S8 w0 R% k& }2 q6 J2 H
  270. d.y=c.y+1;
    : H7 i/ N$ p6 d' G1 x3 o
  271. dui.push(d);
    , V( r0 ]% z4 k" p/ K5 c- {  F7 @, {+ H
  272. slect[d.x][d.y]=1;
    - w. Q7 ~3 D  ?: O8 T4 `
  273. }
    / B/ v9 Z+ _+ a8 G& {5 s+ u2 h; ]
  274. }; e9 ^. x* I, G6 R- o( H, n
  275. }
    - P6 I+ m8 C7 H; c3 }( [
  276. }
    1 i; K/ a+ c3 y; |9 D3 h1 {! W
  277. 0 i! M* W  S+ e$ o. S& [5 F/ u0 l
  278. int main() {; I3 o' ?* E; `2 d2 k6 [
  279. freopen("排名.txt","r",stdin);
    + `; Q! U: r2 S. c# w' Y  |( p+ Y
  280. Relife: //重玩处
    ) \2 E- y, t- ~. T
  281. HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄
    $ L* }0 Q" u0 S- n9 [
  282. CONSOLE_SCREEN_BUFFER_INFO csbi;      //定义窗口缓冲区信息结构体 0 e( `& p' f: p( z
  283. GetConsoleScreenBufferInfo(handle_out, &csbi);   //获得窗口缓冲区信息* w' O: k1 D; M, ~5 S4 b  P

  284. * U; L! x- t: Y
  285. Hide(); ' U. x. e2 W7 K) i8 Q
  286. Beginning();
    2 L1 B% _6 `9 Y+ B
  287. a=GetTickCount();
    5 C$ F* N. P1 ?! h! v+ b
  288. while(1) {7 V  g4 ^( C; A  J, o6 |
  289. if(kbhit()!=0) {
    7 P1 s  v: W5 t' d
  290. spare=getch();
    1 O8 w% [* ~; Q- [0 X# g
  291. 0 w9 F7 ?/ Z, R

  292. 8 ^+ J+ D6 r5 r/ L: T
  293. if((spare!=(-32))&&(spare!=13)&&(spare!=' ')) continue;
    0 O$ z8 [0 ^; h5 F. F' p2 b* Y
  294. ; d4 |5 P; Y1 h" D$ y8 D

  295. & C/ l$ |1 ^% e$ Y6 ], p* N
  296. if(spare==13) {;9 F, c3 T: P( X

  297. & r# A. i/ x" A' U! L' N- W$ L
  298. if(mode%2==0) {) u5 s; E: \* x
  299.   if(map[floatx][floaty]=='@'&&flag[floatx][floaty]==0) {  U$ I3 r4 c/ {# o. j- l: z1 D- u% N
  300.   break; 9 ^4 o5 L: K. g1 G
  301.   game=0;- M$ i$ F& l1 y% }# J
  302.   }1 [; y( m0 C7 j9 ]& @
  303.   ; J( ~/ O% i7 I. u# L4 N
  304.   if(flag[floatx][floaty]==1) continue;
    ' u2 {) ]! y( _6 v. {( t6 l
  305.   Open();
    3 \1 c: K0 B+ g0 N- Q. k  {; o
  306.   position(0,0);2 k) H; x1 z0 b- {( ~% I
  307.   SetConsoleTextAttribute(handle_out, FORE_GREEN);$ H5 A; h8 d* U9 L
  308.   for(int i=0;i<A;i++) {) M7 d7 i  |6 C+ p" M8 q4 L' J
  309.   for(int j=0;j<B;j++) Lump(i,j);4 K  E& @8 x4 C  z6 W* A
  310.   printf("\n");
    1 a1 ]# ]7 L1 S2 e( [7 X: x
  311.   }# j; Q# k5 R1 m# l; q# @
  312.   position(floaty*2,floatx);
    ! A# K9 Q5 }0 C. e
  313.   SetConsoleTextAttribute(handle_out, FORE_BLUE);8 M8 e+ ]1 g+ ^: n0 U" c8 V$ F
  314.   Lump(floatx,floaty);& o- A4 f+ i% v: h& z
  315. }+ _" D5 X; m2 G2 f) P6 g; ~

  316. - x+ H: Q* x. Q5 o' x5 a8 [

  317. & l, _! f/ N' {0 M0 \
  318. else {
    9 Y; L7 k  _! {
  319.   
    : |  R1 V5 T& w1 n, e# O/ M1 B
  320.   
    8 q9 ^( o1 v4 Y( ?( F
  321.   if(map[floatx][floaty]=='x'||(map[floatx][floaty]>'0'&&map[floatx][floaty]<'9'))
    0 F! D9 i" E! O+ t
  322.   continue;
    $ Z0 l1 D+ o3 O
  323.   9 p4 E' _% Z' }# d5 a) N8 c( M& L
  324.   4 _+ j+ Y2 _0 w8 Y6 o3 ~4 F# u0 x
  325.   if(flag[floatx][floaty]==0) {
    9 ^: _0 z8 w! T& M
  326.   flagnum++;
    + f0 b) d% T) Q) [, Y4 i4 I& X
  327.   flag[floatx][floaty]=1;
    : b; ?: A" ~8 S- x: `7 z
  328.   position(floaty*2,floatx);& Z4 K0 w9 K& Q3 K+ ^, p0 x
  329.   SetConsoleTextAttribute(handle_out, FORE_BLUE);
    8 x9 C: ]0 u' j) ~* i* g
  330.   Lump(floatx,floaty);) I" \* d- W  o: a4 L, E
  331.   }4 Y1 ?- R/ B' ]3 {: U0 W
  332.   
      n) p2 C$ Q! i2 e
  333.   8 l5 N+ s- x- c$ R! g1 \/ |
  334.   else {& H  E, {$ i2 z+ s- a: z4 g
  335.   flagnum--;
    * V- O$ N- T( n/ L* W
  336.   flag[floatx][floaty]=0;
    7 p- G( i) S' B' K1 }4 ^) ]- t! B
  337.   position(floaty*2,floatx);8 J, b) F; F8 t4 Y
  338.   SetConsoleTextAttribute(handle_out, FORE_BLUE);
    ; d3 v' \, [3 v
  339.   Lump(floatx,floaty);; C+ ?) @1 K9 @6 x; K/ r7 U
  340.   }) F/ F9 ^! z9 K
  341. }
    ( H/ k0 Z& q% S2 u% F  P
  342. }  ?. j  y! [7 o7 J
  343. ! d& w- c: H; q& u! ^
  344. * X7 O+ h) ?' Z2 L8 {( D
  345. if(spare==' ') Mode(); 3 {6 I. M& }$ x$ O' F

  346. % W3 q3 ?. O' F
  347. //按方向键
    ! U9 `' `) r+ ~- N0 d0 q5 a
  348. if(spare==-32) {5 N. F9 J, y* W: v
  349. news=getch();3 P* t' v5 L5 I+ i# I' [
  350. Move();
    0 h5 K2 X1 X! [/ {0 _$ V' B
  351. }
    & ?0 ~2 V1 T# }0 w
  352. 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
  353. if(game==A*B-C+1) break;& r% l6 s& j4 k
  354. else game=1;6 t" \' U6 g* k: r; _7 E
  355. SetConsoleTextAttribute(handle_out, FORE_RED);; V% p  O9 F& g% b6 T
  356. position(44,5);
    % h# X- e* D) V% @
  357. printf("剩余雷数:%d ",C-flagnum);8 R! y  D( T6 \" m
  358. }
    ; f/ i3 p3 L5 k- e
  359. else Sleep(10);
    + `4 R" |  p3 K; g* {# q
  360. b=GetTickCount();
    ( K, i1 f5 ?. n" d3 J* O
  361. SetConsoleTextAttribute(handle_out, FORE_RED);6 |/ @, H; d3 |+ y
  362. position(44,7);$ W" r7 H4 P2 i2 k
  363. printf("用时:"); ( ~% U- {: [5 i4 j7 C2 ^% B
  364. if((b-a)/60000<10) printf("0");) M& A) H  ^# U; q8 K8 l
  365. printf("%d:",(b-a)/60000);
    9 t  v3 b) v: L' v' v
  366. if(((b-a)/1000)%60<10) printf("0");0 i- M( y1 ^* u& z8 B
  367. printf("%d:",((b-a)/1000)%60);2 w9 Q" g7 `! W) B0 k, t
  368. if(((b-a)/10)%100<10) printf("0");
    8 N. n2 d! n% H9 [( o, M" r
  369. printf("%d",((b-a)/10)%100);
    ( v: F$ w" I: l# B( p5 n
  370. }( f* _( P8 @  k8 C9 v/ u
  371. SetConsoleTextAttribute(handle_out, FORE_RED);
    ; |0 O9 x0 }. k: Y% z
  372. position(5,5);( _/ f: h" h/ q2 X
  373. if(game==1) printf("游戏结束!");/ q7 u1 _/ P! d2 S
  374. else printf("恭喜通关!");  X. t/ K5 N/ r: s
  375. position(5,8);
    * i' n/ q  O: O1 y2 r- s  {1 k
  376. printf("任意键重玩");
    , O# Y: `: j  n
  377. scanf("%c%c",&spare,&spare);
    : x7 Y7 G  Q' h. Z" H/ u( M" d
  378. system("cls");
    : x/ ]$ X: C; t8 }
  379. position(0,0);6 n. @+ s( `, p% c/ j$ t7 u. d% E' Q9 a
  380. goto Relife;" o/ G  b& y) B0 Y
  381. }
复制代码

  {" ?# `0 v% f3 [% @! p4 c6 }" _' F% L( ?; [, s% |

, W- R& R. O" U7 B

本帖被以下淘专辑推荐:


tel:181 5707 6602
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册!

本版积分规则

QQ|手机版|小黑屋|网站地图|动象论坛

GMT+8, 2025-4-26 20:59 , Processed in 0.676686 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表