请选择 进入手机版 | 继续访问电脑版
查看: 10365|回复: 0

[C++] 热门游戏 2048 C++ 源代码分享

[复制链接]
发表于 2014-4-4 15:24 | 显示全部楼层 |阅读模式
2048源代码,前后写了一个多小时吧,大概300行左右,没什么复杂算法,不过实在懒得去优化了,但估计优化完能控制在200行以下,有兴趣的朋友可以自己优化一下。

+ M7 [7 a! ~) U! p( `  ]2 x这游戏前一段时间传的很火,前几天早上上课实在太无聊了,就决定把这游戏自己也写一个。( g  v& P% t( L/ }( G$ p
前后写了一个多小时吧,大概300行左右,没什么复杂算法,不过实在懒得去优化了,但估计优化完能控制在200行以下,有兴趣的朋友可以自己优化一下。& C# r- S9 D$ v! K
说明:我一开始玩的是IOS APP版的TRHEES,后来才玩的2048,两者在滑动的规则上有些区别,本人这个版本是这两者的结合。; p! u; c, g/ E0 b. B- P+ k9 J7 _
最后,祝试玩愉快!2 t0 b& r5 Y% z4 p6 r0 C; G" g
- x, y3 ^' D$ m1 i& u6 l0 O

/ f- Q( Q8 U- }$ {  X8 i wKioL1M-EorxKSGRAABOV_jkUeI031[1].jpg / n. `. s8 w! N1 V6 ^( n

5 M% J2 S  F4 {- I( {. \以下是源代码:
. i) Q# t. I) t$ ~2 t+ f2 H) h
  1. /*By Reason*/ 1 L) {' ]5 B( X" Q
  2. #include<iostream>  3 M* g: ~& o9 ~/ [1 M1 D) K
  3. #include <iomanip>  # G; G8 r- b" j7 E4 W8 ~1 t5 C
  4. #include<math.h>  
    8 `8 e1 G, \- T6 p9 a! J" V
  5. #include<stdlib.h>  
    , w& r" m" |& B( R3 w) \& v* x# k
  6. #include<time.h>  : f, p9 R' p3 d" \0 `
  7. #include <conio.h> //为了读取方向键  
    ( a$ f+ c# G0 G4 J4 p' u: Q
  8. #include<windows.h>  ; T( e4 T) s) ~  t; Y
  9. using namespace std;    + N. Z8 ^: `. F
  10. //srand( (unsigned)time( NULL ) ); //随机数种子 不能用在这里  6 }/ j, G3 ?! g- D1 h) F1 ~1 j) Q
  11. int pane[4][4]; //棋盘  
    / B# T/ q3 y! u( j1 A) v
  12. int N=1; //2的n次方  
    9 D( T1 I; E* A; ^. a6 b
  13. void showpane() //显示棋盘  / d  M2 A" b9 f1 L
  14. {  0 X) z# C8 N: F6 D( I; A1 ~8 |8 s5 ?
  15. cout<<setw(46)<<"X2048 by Reason"<<endl;  / `# i) v* O# {/ ]% q
  16. cout<<setw(50)<<" |-----------------------|"<<endl;  ! q2 l% b! z+ \! B
  17. for(int i=0;i<=3;i++)   
    6 y" o0 ]5 }3 p
  18. {  3 L* O# W/ @% z' M& s; k  T- }
  19. cout<<setw(24)<<"";  
    2 o1 m7 A  j) ^8 r8 X+ N$ a
  20. for(int j=0;j<=3;j++)  
    . M; G0 T7 h) }: d* u' u
  21. {  9 A" m& v, Y+ D2 k4 m2 c" _/ j
  22. //SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED);   
    % \; r# \  w) f: }9 ?! w: W) u
  23. cout<<setw(2)<<"|"<<setw(4)<<pane[j];  ( a9 g" E" F* X0 k6 `- ^' g
  24.    3 _. ^2 d* [) B+ M, R" [
  25. if(j==3)  
    " Q& c4 v/ r9 B( n+ ?/ m6 N
  26. {  
    5 q" Y" @' j% f* B6 m" Q# s
  27. cout<<setw(2)<<"|"<<endl;  
    5 k% ?: W+ i3 v! Z) v& u( n5 g8 X
  28. cout<<setw(50)<<" |-----------------------|"<<endl;  ; j9 Q2 @  E5 V! }9 V. t5 R. A5 W+ L
  29. }  
    8 p( S8 T! w; c6 o, _
  30. }  
    ) b7 z) ]& }6 d! m# Q6 O
  31. }  : B, E& q6 n# q6 e; G
  32. }  
    * \, {" T! j& ~9 B& ?& H2 v
  33. void newgame() //开始游戏  
      N. w$ I% h* M  w  B
  34. {  + }; g2 C3 r6 ^, K0 @
  35. N=1;  
    + K' V- r  B* s1 S* d. y! L
  36. for(int i=0;i<=3;i++) //初始化棋盘  
    1 U* D+ ]' j: P6 N( `
  37. for(int j=0;j<=3;j++)  
    / P- d0 H. i7 m. s
  38. pane[j]=0;  
    4 J$ C( P1 R5 u: q7 S$ q! l0 S( x
  39. srand( (unsigned)time( NULL ) );  4 B4 t% o9 B, k2 W' N
  40. int m=rand()%4;  , `; @% o+ k5 c6 \: s6 \$ l2 N) U1 `
  41. int n=rand()%4;  
    ; v4 D6 r5 A  o4 }, Y( `& k6 F' U% ^
  42. int p=rand()%4;  
    " x' Z6 K& n% R7 e5 J  f' `
  43. int q=rand()%4;  
    1 B' N% r! Q; l3 t1 h
  44. pane[m][n]=pane[p][q]=2;  
    4 h; X# ]* C/ f) L# j) I* k- r8 U
  45. showpane();  " _5 e8 r. X; T" }7 D$ [
  46. }  # L9 y- Z4 s& U0 V6 T  Q
  47. int if2n(int x) //判断x是否是2的n次方  " s; L& _5 {; f: A* P" G
  48. {  
    3 U. `& R% C: J3 e% q
  49. int flag=0;  7 t' n4 g. t- N! n1 E: N1 G
  50. for(int n=1;n<=11;n++)  
    . _- ]* g7 z) Q5 x) ]: M
  51. {  
    . p' y! {. e7 X, ]' A
  52. if(x==pow(2,n))  " p- Q) M, Y( B5 S2 l+ E$ O7 l( p
  53. {  
    ) r1 \6 L  u8 y0 o& s+ ]+ U9 c4 ?
  54. flag=1;    m! G( G( O8 \0 o
  55. if(n>N)  " C6 `7 \7 j3 ?2 [
  56. N=n;  
    , b5 F: J6 c$ k5 k8 h* M; D& P
  57. return flag;  6 C1 r6 c9 `: T+ Z! g; ^7 A
  58. }  ) F! u5 m( s8 R/ J8 x
  59. }  
    % J4 ~6 z7 p/ Y) s5 N2 j
  60. return flag;  
      d' E# K, G" h. k. g
  61. }  
    ; q  K/ F0 Z* L% a! n0 ~& \$ a
  62. int upmove() //上移  
    0 m8 G6 X) \6 _4 H/ X5 g
  63. {  # g# N3 f/ R& H" x% k
  64. int flag=0;  
    3 f6 z! \% L1 N
  65. for(int j=0;j<=3;j++)  
    % c7 E9 k2 c0 r( U5 d" f8 S
  66. for(int i=0;i<3;i++)  8 {7 J) R& E% _) q: \) U. b8 K
  67. {  
    ( C. d: J( Q* Y2 @! @* H
  68. if(if2n(pane[j]+pane[i+1][j])==1)  
    & U" ~& U  U1 E; p+ p. h4 X! x8 G
  69. {  ) v) T$ g1 d+ F7 D4 R8 w& X' s% I
  70. pane[j]=pane[j]+pane[i+1][j];  ' A8 ?+ L% Q; j
  71. pane[i+1][j]=0;  
    % p6 t: v0 X2 e3 X9 L$ P6 K6 t
  72. flag=1;  ' F7 l; q; g  y0 D! f9 h
  73. }  
    . @( {' l- }0 X% l6 a7 e' z
  74. }  
    4 e: N3 K6 H/ N# A1 |% |+ [0 D
  75. return flag;  3 H. V0 V4 [- H
  76. }  1 _4 [9 I( Y1 n8 h, w7 `
  77. int downmove() //下移  9 d6 G( B, J1 _; M
  78. {  
    ! E' M( t! w8 A
  79. int flag=0;  ' L; w" U! \  @+ P, Y( r+ N# x
  80. for(int j=0;j<=3;j++)  
    * P# [2 ^/ a3 G
  81. for(int i=3;i>0;i--)  4 X0 H6 F1 `% j6 q
  82. {  
    . v$ w/ @; S2 X; g$ |* Z
  83. if(if2n(pane[j]+pane[i-1][j])==1)  
    * O$ o7 @" [" \, a
  84. {  
    ) r$ Y* w0 w1 y8 U+ u% g
  85. pane[j]=pane[j]+pane[i-1][j];  # {3 [( z# p  u
  86. pane[i-1][j]=0;  % ?0 x- S- W# c( m$ n  v4 J
  87. flag=1;  2 g7 Y7 F+ I& m$ L
  88. }  
    $ R8 ?, F8 k5 l& t( n7 X1 t+ G
  89. }  6 q) B& V+ F0 m% v( J' k7 G' C
  90. return flag;  ' H8 |! V, c+ f9 v) A# V# w
  91. }  
    2 z1 c5 p" k4 D  v8 |
  92. int leftmove() //左移  
    5 U: y; j' ~5 ^  J- l9 L
  93. {  ( C% {; R' ^& Z7 ]4 u0 U
  94. int flag=0;  
    : W7 n/ X5 Z) T  H
  95. for(int i=0;i<=3;i++)  
    ( G" x1 c( V5 {
  96. for(int j=0;j<3;j++)  
    # T0 Z: q5 I& K! \. n$ V8 z
  97. {  * w2 _0 Z/ c: t. X/ h: ?
  98. if(if2n(pane[j]+pane[j+1])==1)  
    4 o+ X1 t$ _- W
  99. {  ) k( P' x8 i- j8 a' V% v& `
  100. pane[j]=pane[j]+pane[j+1];  ( i* @! j0 @# _/ |6 v
  101. pane[j+1]=0;  
    * \8 {; v" G6 I+ [3 s" N) W. E) r
  102. flag=1;  
    3 m* A! ^4 z9 X% l: q
  103. }  ' I! ]" }: e" d
  104. }  
    : E7 o( ~  _* q6 U
  105. return flag;  & y( x) ]* S, x
  106. }  - I% f' z) t8 S- r# R
  107. int rightmove() //右移  " [8 ~) W! l0 ]7 }
  108. {  . j/ N7 f0 b9 Z8 ?4 T  b3 I
  109. int flag=0;  
    3 _4 c8 a' r* i/ j; t" n; v
  110. for(int i=0;i<=3;i++)  2 F. I3 |5 V& y0 n- d
  111. for(int j=3;j>0;j--)  $ t: E" E% f0 d; j1 r/ A8 b
  112. {  
    + `" j8 _+ q1 N' O( O4 j: D
  113. if(if2n(pane[j]+pane[j-1])==1)  % j$ G# }/ @: L  ?5 ^! L
  114. {  " r$ t3 H5 C: J+ K* p3 \
  115. pane[j]=pane[j]+pane[j-1];  ! c" p3 g- [, }/ Y0 X1 ?
  116. pane[j-1]=0;  
    : U$ x. T( c) }4 P5 b
  117. flag=1;  
    3 Z+ q2 i& @# {5 \
  118. }  
    6 {- @1 O3 G& Q! l2 s% V. O# }
  119. }  6 U. t  ?# x* M; [% g
  120. return flag;  
    $ R+ e7 ^6 w/ N, B. o3 l
  121. }  
    ' N! ^2 j& _" t2 J: W, l4 q- X+ r
  122. int testup() //能否上移测试  
    3 o, [2 N% I" p6 f
  123. {  
    ; I% A$ d# }+ {. v
  124. int flag=0;  ! l$ c) b" q2 p; v0 }- }1 `
  125. for(int j=0;j<=3;j++)  
    . e# m; P% e0 X( `1 O
  126. for(int i=0;i<3;i++)  ; g( S- |" o' N- k8 n* C% K: C: x) Q
  127. {  
    ( Z7 A+ I0 l7 d+ |  P8 L  H" s
  128. if(if2n(pane[j]+pane[i+1][j])==1)  
    3 s) c) V7 a1 z' d' ?+ {
  129. {  
    $ F6 j" ^8 ^* u7 q, O9 [+ `
  130. flag=1;    Y& a! u4 {( d+ a5 B
  131. }  / Q3 m5 w* n. G: ^% w7 S; C
  132. }  
    * y! T5 ^6 ^4 Y5 W# f& V3 P
  133. return flag;  
    : r- Q% t- d: P4 {3 P# [7 I
  134. }  
    % U' o: n/ r: B' l$ b: O' a3 a
  135. int testdown() //测试能否下移  
      w1 w" T( H6 H: E5 n
  136. {  
    ; q4 ?& k5 y6 {  f* [0 C  U
  137. int flag=0;  , B6 a9 R1 _5 K1 v5 [% X0 ~
  138. for(int j=0;j<=3;j++)  + J* B. }* P, C# L
  139. for(int i=3;i>0;i--)  7 E, n. V7 L  L: j: d0 M, _
  140. {  
    8 e; z) Y6 ?# d7 s5 ]# g
  141. if(if2n(pane[j]+pane[i-1][j])==1)  
    0 Q. ^9 h* o; `- B
  142. {  
    5 ~8 |6 a  l0 s) c
  143. flag=1;  
    1 Q- o& J/ r4 Q" q7 Q: F& {
  144. }  
    0 q+ ^- `' o% H: L! y! W6 q. F$ X
  145. }  ) B, o" W, W2 n
  146. return flag;  / g: l1 ^- W9 W$ @0 ]) q+ F
  147. }  
    + K8 ^6 E3 u* V" b
  148. int testleft() //测试能否左移  
    - p$ p5 |2 c3 l$ m) O
  149. {  / W& u7 G/ U4 h- G, h+ _+ ?
  150. int flag=0;  4 f' ]/ u% j, r
  151. for(int i=0;i<=3;i++)  " R, l7 r. B( s! M+ u6 Q
  152. for(int j=0;j<3;j++)  
    8 ~9 p* j& Y; k" N) O% d8 c
  153. {  
    $ V& Q) S# T% u7 X0 r" e% {
  154. if(if2n(pane[j]+pane[j+1])==1)  
    ' _4 N  i% g, D& N* J8 X, ]
  155. {  
    " Q+ b: t1 y* H9 o. @* e
  156. flag=1;  
    3 J1 V$ X  m0 j% Z3 b4 T. H
  157. }  
    % y2 y' y+ o- M2 ~
  158. }  0 U* m& g8 z' v! l" l3 o7 V
  159. return flag;  
    6 B7 w$ n5 ^5 D" d0 A& M; E2 z3 ]
  160. }  
    5 U; n& [3 n+ c$ u" P% \
  161. int testright() //测试能否右移  3 n# ]* ^% [" U9 o1 c" `
  162. {  9 w, F/ J5 [8 H6 @& G! C
  163. int flag=0;  / r2 q6 y. P7 \* g, D  S: _- F- M
  164. for(int i=0;i<=3;i++)  1 q% [. f+ C! W9 g* P
  165. for(int j=3;j>0;j--)    N/ W0 \/ \. a6 T( y( n* ^
  166. {  9 B+ K: E; F& C
  167. if(if2n(pane[j]+pane[j-1])==1)  1 A. b. z4 P) M
  168. {  8 y/ C4 A) t$ N: z3 }& N6 l
  169. flag=1;  
    ; D' D% @& A8 x2 I
  170. }    Y+ f7 j7 D4 e1 V! p
  171. }  
    8 t+ W$ S2 ~$ ~6 f! Z( R
  172. return flag;  
      l) q7 \: P4 z7 I/ E: `
  173. }  
    " V! `% \1 _# B! a) Y7 e. c" l* q
  174. int panemax() //棋盘最大数  
    2 G6 f3 p5 ~  ^. v2 P' G: ?
  175. {  ! l+ E0 y1 f6 g; q, m
  176. int max=pane[0][0];  $ z2 H4 {$ d/ f6 v
  177. for(int i=0;i<=3;i++)  
    , [/ ]- k4 b/ ?. ~. j9 l5 C
  178. for(int j=0;j<=3;j++)  2 f% O7 ^" x! Q/ [9 v: O
  179. if(pane[j]>max)  
    . u3 Y; E: d0 ?( O. X5 E+ v
  180. max=pane[j];  
    7 \$ w* P# n# V: y
  181. return max;  & T6 [4 n: ^+ p! T# ?3 `. ]
  182. }  
    , e2 {9 ^/ b; G, Z6 J' s) D
  183. int ifwin() //判断是否胜利  , _: s  N9 U8 g/ @7 }8 t
  184. {  
    8 }2 O; t, }) c# C6 l, T) v+ }" @0 [
  185. int flag=0;  
    % U; u/ ?  w  d9 x- I0 k1 I! D
  186. if(panemax()==2048)  2 `  J  A9 p1 X; k
  187. {  
    ( C  U+ j) I* F+ C% U0 J$ g2 z2 N5 p
  188. cout<<setw(45)<<"You Win!"<<endl;  6 {; d9 ~+ R8 y' M* O# N4 t
  189. flag=1;  ) k2 a4 N5 H, q  a. e
  190. }    I1 i6 h$ i4 y1 O( S
  191. return flag;  
    ( U. |. S/ W: T1 p4 M- w
  192. }  - W# S, i6 {  H) t- i, J- @# k7 J! d
  193. int ifGameOver() //判断是否游戏结束  
    4 P+ H/ p8 @& z! W
  194. {  9 }' U* O5 S" _( [/ q9 L0 T
  195. int flag=0;  
    / K) L$ f+ G* w$ i
  196. if(testup()+ testdown() + testleft() + testright() ==0)  
    6 V4 X% U; U' f5 {2 _& ?
  197. {  & ]7 T( ]/ Y* b1 B" q1 n( M
  198. cout<<setw(43)<<"Game Over!"<<endl;  
    9 b( m7 H  w& q2 E1 N  j) P& g4 Q
  199. flag=1;  ( Q( F3 E* u0 V. @* Q
  200. }  
    1 w  Z+ m6 W. {
  201. return flag;  : N& A6 x5 G7 R/ z+ R6 j4 p& L
  202. }  ; w0 [! T" L- b6 U
  203. void addnewnumberup() //上移后添加新数  
    ( u. [/ a9 V+ S) G8 x
  204. {  
      y2 V3 W& @" V5 h# H$ C" {
  205. srand( (unsigned)time( NULL ) );  
    6 `2 u' T$ D- C4 Z6 H! V
  206. int n;  1 j/ P  Z) W0 O
  207. if(N==1)  4 D- {3 J* G8 l# L, T5 q
  208. n=1;  
    # Q7 u" A& Y! f+ o& Y
  209. else   {7 g: F' b% }0 h; ]2 \6 H
  210. n=(rand()%(N)+1);   
    * j- n' C# i) `
  211. int newnumber=pow(2,n);  
    : ]% {( R- n# c; q
  212. for(int i=3;i>=0;i--)  " v# H# Q0 H) y8 \7 w
  213. for(int j=0;j<=3;j++)  # Y+ y) G6 Q/ n+ I
  214. if(pane[j]==0)  
    & S  z/ e, n9 ?  L+ G" i
  215. {  + F5 t# A# b, W5 n( l+ U' g
  216. pane[j]=newnumber;  $ h4 E& g" h  u+ {
  217. return;  : E4 l8 ]4 _) i8 W/ O5 m
  218. }  
    + `  E2 r) G% b9 |
  219. }  ! I& D: B$ l4 H: L% k$ d
  220. void addnewnumberdown() //下移后添加新数  
    " [3 b8 r& ?& y4 \. P2 ^
  221. {  
    6 |0 G7 e1 [$ H1 M) |: }2 ^8 e
  222. srand( (unsigned)time( NULL ) );  5 |  I6 K( D6 g4 z9 q
  223. int n;  : Z) w, ^3 s& F, ~3 P, Q
  224. if(N==1)  
    : n" t- ^4 N. F, X" {& ?
  225. n=1;  % }* ]7 a1 |. F; _) W% F
  226. else ( s2 q1 ?) }( D# _
  227. n=(rand()%(N)+1); int newnumber=pow(2,n);  
    2 o/ l! m  b" d& J6 ~) U
  228. for(int i=0;i<=3;i++)    a& A. h0 V/ g0 X
  229. for(int j=0;j<=3;j++)  
    # g4 W* }7 q5 e8 R
  230. if(pane[j]==0)  ( `! l2 c+ B/ g7 A
  231. {  ; a+ L6 `$ Q# C% y
  232. pane[j]=newnumber;  
    2 Y% a1 M1 F/ [% m
  233. return;  
    ) W- S6 A% p' L. e7 G
  234. }  
    ) P7 g- W% K4 v1 c3 b7 x
  235. }  
    1 e6 r% o6 O" h6 u$ W
  236. void addnewnumberleft() //左移后添加新数  
    " I, E1 a$ _8 y3 ]: x+ i
  237. {  ; @4 k) I2 r' D) G
  238. srand( (unsigned)time( NULL ) );  
    / `7 c& U4 U* Z/ k3 V: a$ P% ~" j
  239. int n;  ' {! C+ \  B0 {* \; V0 K
  240. if(N==1)  2 X7 E6 i# |) q4 F3 \  j  j% W
  241. n=1;  : o( m; m6 u/ |! @* b% ]
  242. else   M2 ^+ N5 ]: r0 K% h5 t& _; i; o5 [
  243. n=(rand()%(N)+1);   
    9 f- G* E6 h$ |( B( B% m
  244. int newnumber=pow(2,n);  4 f$ @. [0 f9 ~; ~. a# W" K1 I
  245. for(int j=3;j>=0;j--)  4 {$ m9 e! Z4 E0 V( i3 c
  246. for(int i=0;i<=3;i++)  * t; I  h6 K8 k4 Z0 s" {; w; `0 w
  247. if(pane[j]==0)  ' V0 p" G/ s, u3 l9 z- {
  248. {  7 o3 N% z8 u( A5 x9 x
  249. pane[j]=newnumber;  
    8 W1 q' G% a0 v. h) B7 E
  250. return;  
    / r1 \& I+ c9 H& a/ a3 F6 {( v' q7 j
  251. }  
    3 Q# _% X; R* F! b7 P; z
  252. }  
    4 N2 H3 \9 R. K) a3 g2 q
  253. void addnewnumberright() //右移后添加新数  0 N6 I. a- C6 H$ Z8 L' P
  254. {  
    # N' W+ E; f9 j" Z" c, O* u
  255. srand( (unsigned)time( NULL ) );  & T. ~, y1 e, c
  256. int n;  
    & v/ {6 m/ S( Q2 I$ W, v: l
  257. if(N==1)  & A$ K' [* t* v1 K
  258. n=1;  5 Y! J+ d. k+ {1 X6 m8 I) ^
  259. else 6 D$ v3 o. z0 e9 d9 z
  260. n=(rand()%(N)+1);   
    + K/ l- p1 W; E- p: T7 Y
  261. int newnumber=pow(2,n);  / e7 w0 x" V/ P! w
  262. for(int j=0;j<=3;j++)  
    4 X- ]( Q% F, [
  263. for(int i=0;i<=3;i++)  % Z$ h0 t& O; a8 T
  264. if(pane[j]==0)  % g! ?! V& H  i* B& Q
  265. {  " y, b. E5 i8 E, \( a1 u6 |( ]* M
  266. pane[j]=newnumber;  
    ) J$ [" A  {) d7 s7 v# O8 `. O
  267. return;  
    1 `2 r  P+ R) A- z9 \
  268. }  - a3 \3 O! c: ~3 H" H7 q! }
  269. }  
    + X$ e+ u, i9 O/ _& N  }
  270. int GetDirection() //读取方向  
    ! q5 G4 R8 r) i  n, Z* L! j( z. n
  271. {  6 j/ u; y7 ~; C
  272.     int ret = 0;  5 n+ P5 {3 W8 U4 ~0 B4 P: O1 O7 N0 V
  273.    
    " Y9 z4 }. ^. O
  274.     do   
    6 K/ t" [; ~  m! }# D3 q2 o
  275.     {    G5 y* l* v5 g9 U
  276.         int ch = _getch();  
    : D! I5 l4 Q4 ]
  277.         if(isascii(ch))  
    0 M3 g+ I4 k' L$ ~5 z; D; M* Q
  278.             continue;  2 w6 \. y. k8 `% B, K" {0 s6 c
  279.    
    1 ]8 v9 l9 i% J/ f7 A
  280.         ch = _getch();    Q$ O- Q$ R7 b4 e. B5 V2 }
  281.         switch(ch)  $ J. P; n+ L+ ~2 `( x. M
  282.         {  
    ! k% x, l0 q  `+ c
  283.         case 72:     . [/ E0 L  {! D; a( U1 A4 m0 I
  284.             ret = 2; // top  3 v/ R- V7 ]8 {0 m' ~) K) Q
  285.             break;  ! P6 d- F# c' j- X
  286.         case 75:     
    $ j1 q$ P' ^  G9 v. }6 U0 X
  287.             ret = 1; // left   
    : c" w8 k+ c+ i
  288.             break;  
    : p; F4 A3 L+ L; G
  289.         case 77:     
    3 F1 c! W% F6 N4 L! ]' S8 q$ b
  290.             ret = 3; // right  % i: k/ p/ i0 J, y, G9 c
  291.             break;  
    . b  d$ w( z3 R* S; V. h/ ]
  292.         case 80:     
    5 J  r* |. a5 a  R$ }3 A( n
  293.             ret = 4; // down  
    - c0 d7 h* l0 _) t
  294.             break;  
    8 W, M3 ~: c* F( n1 ?1 H
  295.         default:     ! j' g/ I; r6 t" `
  296.             break;  " s# X$ U: O2 y$ X. G6 z
  297.         }  
    ; ]: ]9 U! A, Q7 d2 n3 y
  298.     } while (ret == 0);  ) |" P5 F6 E, z, X. E" Q) `
  299.       
    % I8 }9 o3 m* w2 a! W# W; @  z4 i
  300.     return ret;  1 ]) j  p* O* Q" w2 v1 ~/ P
  301. }  % }2 z7 I7 R  p
  302. void main() //主函数  % s* `( p9 G4 @9 e! D' P
  303. {  ( C  d0 A! M) Y% l/ o9 D
  304. system("color f9");  6 I4 c6 y5 x4 D( G4 v4 }
  305. int makesure=1;  
    9 M, x9 n, U) M
  306. while(makesure)  % h6 ^! {! t1 V. ~7 G! V: Q* E
  307. {   
    2 y' d$ w5 ^* t  F; X
  308. system("cls");  
    - `9 ~+ t+ w- R% c' U( g% n5 J. Y7 `
  309. newgame();  " M$ K* [$ ]( w
  310. while(ifwin()+ifGameOver()==0)  
    " w, M7 o, [( O; Y" w2 p
  311. {  
      l, m5 u" M7 @4 X8 H
  312. int c=GetDirection();  
    4 w) }; `- H, y/ M3 ~3 C, Q
  313. switch(c)  6 o7 a+ F& K" N% x' G7 s
  314. {  
    / m. o* o$ {5 u9 Z
  315. case 2:  
    . H' m% T* r7 h& S: m' ~
  316. upmove();  
    6 U3 Q4 d& P9 F4 Y4 M) D# K$ P' y
  317. addnewnumberup();  3 M) m7 Q: Z/ F% g( R
  318. system("cls");  
    ; `  f1 b  Z' [, t3 i9 u0 N! R+ ]; E
  319. showpane();  * n2 N3 {3 Z# j8 ~3 b0 J# ?7 E
  320. break;  
    8 o& ]8 l5 e5 ^
  321. case 4:  ! D7 w2 l+ ^! [# U3 ?  _
  322. downmove();  
    + H& H1 [7 T7 u. Y2 N( e
  323. addnewnumberdown();  7 `5 w1 W, P; [" ~: [
  324. system("cls");  9 }' T5 G0 \6 w$ `
  325. showpane();  ) W/ U7 h0 Y, q: y
  326. break;  
    . e, o* k+ m) v; u  l
  327. case 1:  
    ) k7 m& j7 m8 l$ L3 j- T
  328. leftmove();  + x4 r+ g1 ]/ M7 [$ S, R
  329. addnewnumberleft();  
    ' p+ p& I$ ]1 l. p; q: Q
  330. system("cls");  8 [3 s/ p9 c' |$ x  U( H! N( }
  331. showpane();  
    " W3 H% w* ]6 V: {  |
  332. break;  + N: ~% o1 c) C& H! [2 [
  333. case 3:  : a6 G1 S# x2 N2 ^$ D- ]
  334. rightmove();  
    ) N. k5 f  z5 P/ c; \% L
  335. addnewnumberright();  
    : R/ J% z% a0 I# C, U  R7 e
  336. system("cls");  . e3 A. m( T: I
  337. showpane();  
    9 U) D& z! \2 J4 P9 v
  338. break;  8 D9 z# ^7 T9 T0 Y  b, @
  339. default:     
    ' I. G8 s- Q2 i: s
  340. break;  
    ; x. r7 W6 w0 r5 x& `2 r7 W4 I" ]% S
  341. }  7 U  I: D+ M+ j! f# N4 g
  342. }  
    ! d+ b$ `% l. Q& h+ }
  343. cout<<setw(43)<<"你的最后成绩为:"<<panemax()<<endl;  1 F: j, B9 U5 W: [% m8 \
  344. cout<<setw(60)<<"若要重新开始游戏请输入1,若要结束请输入0。"<<endl;  . D% A" ?5 `6 k( B! [
  345. cin>>makesure;  " I, A7 t: Z, S# U. x: M5 P
  346. while(makesure!=1&&makesure!=0)  
    , P) J$ w; x* U* g2 D9 v
  347. {  
    1 Q* ^) }) {2 A3 M7 T( V' ~& j; s
  348. cout<<"输入不正确,请重新输入!"<<endl;  
    + z: S& o: t' n* Y1 p9 w. Y9 E
  349. cin>>makesure;  
      m# i7 G" z& ^7 _/ U$ w" |
  350. }  / B( @7 k  r6 H# q0 e9 |% d1 C
  351. }  2 r. y4 l' B7 L* S
  352. cout<<"再见!"<<endl;  - _( b" G% g7 \- S
  353. system("pause");  
    6 p5 d$ e, p) \" h$ _
  354.    $ x  O" ]' o4 O/ r1 z
  355. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

© 2001-2014Comsenz Inc.

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