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

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

[复制链接]
发表于 2014-4-4 15:24 | 显示全部楼层 |阅读模式
2048源代码,前后写了一个多小时吧,大概300行左右,没什么复杂算法,不过实在懒得去优化了,但估计优化完能控制在200行以下,有兴趣的朋友可以自己优化一下。
- m% A( ^  }; z3 E1 a! J$ I
这游戏前一段时间传的很火,前几天早上上课实在太无聊了,就决定把这游戏自己也写一个。
2 m, B! T! A; {前后写了一个多小时吧,大概300行左右,没什么复杂算法,不过实在懒得去优化了,但估计优化完能控制在200行以下,有兴趣的朋友可以自己优化一下。: ^- d% }5 t. T& @3 e3 _$ T) |7 m
说明:我一开始玩的是IOS APP版的TRHEES,后来才玩的2048,两者在滑动的规则上有些区别,本人这个版本是这两者的结合。
" e0 [& P0 t2 I最后,祝试玩愉快!1 B( O% Q; {+ h7 ^) J4 s1 _
- I3 ~% R; l1 N

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

本版积分规则

© 2001-2014Comsenz Inc.

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