|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
基于AT89c51单片机制作的俄罗斯方块游戏 T6963C液晶显示源码
5 r8 V& ?+ p: N& r
/ {7 f$ H' e, Z+ T! W/ q7 _
7 t0 n1 d3 H& h4 k! I% t2 C注明:只能按2键往左移! \ s/ h8 \# i3 e, y! H
按4键往右移
) K/ P6 X2 m/ D V) ? 按8键变换
& o9 C- A+ n5 j* n) z1 ? 无快速下降键
1 @: Y1 v/ [& e1 y$ p1 i0 x4 A- W& Q5 e3 ~# c7 [9 E
部分源码预览:
& a: W1 a0 I4 e( W4 m#include "t6963c.h"
3 N1 W. c7 H) O; S* I% x s/ ?: Z; e: B#include "typedef.h"; L9 U9 ~# G* ?+ C3 s
#include "key.h"
9 q; u: F. i* }6 K2 o
' |! ^; f( X% G/ ~#define X_START 5
) ^, n3 c/ ~% ]6 ?' q#define Y_START 0& M B5 V. P9 a6 h
#define MIN_SLOW_SPEED 300
. K4 m4 Z- h7 T h#define BX_START 30
) P- m% `7 o6 e) h- C, h#define BY_START 15
$ H% F' I& M* h2 _/ J#define Nothing 100* t) \- K, X2 u
8 } W Z! @6 P4 q8 T/ K
- ^* b$ j: `( i9 x1 O4 r! u4 f//全局数据
; h8 m. I) N/ \& Xcode uchar Game_Char[]={0x27,0x41,0x4d,0x45};
3 N8 p* I5 H- _1 D5 K3 vcode uchar Over_Char[]={0x2f,0x56,0x45,0x52};6 c5 Q& x/ Q, Z! R) X
( e9 h! K* w3 z/ F( v; Ustatic uchar xx,yy; //方块的位置
9 R/ l% d- B) J: ostatic uint Game_Score=0; D7 W4 r5 Y( u
static uchar xdata Platform[14][21]; //游戏平台数据: v) L& |2 x4 @# W
static uchar This_shape; //当前形状; |. w$ q, o! x( j% y$ m G. Y2 Z
static uchar Next_shape=0;
r* `# n N) ?static uint Game_Speed=MIN_SLOW_SPEED; //等级速度,正常情况,方块下降的速度
7 p: i% o5 d+ K, C! G5 l) ustatic uchar Game_Stop=1;8 q; a. S" N" y3 c
static uchar Game_Level=0;
4 O) L2 z+ ^1 u" O0 P. q* X- }6 Y* O# w7 B0 ~, ]- h
/////////////////////////////////////////////////////////////////////////////////
1 ^2 x' m/ p( i' d4 _( B) H; \" O( k/////////////////////////////////////////////////////////////////////////////////, i! D; E! I: @( E) j
/////////方块形状的定义//////////////////////////////////////////////////////////
1 Y; |0 p, Q$ _; X5 S* Q/////////////////////////////////////////////////////////////////////////////////' q, @+ }5 V0 w7 ]/ c4 A# u
struct POINT{9 X5 W/ J' a( c% R! J7 p
uchar x;
# N, [8 `0 ^$ `* ` uchar y;
+ c4 J, F# G8 i6 Z& o8 W };
: F' N: a/ Q( N! \; [ v9 r
+ x' f) t/ C# `struct SHAPE{
1 Z' x! a9 P+ G( H struct POINT point[4];1 D( f8 T5 M- M; J9 e( ?
uchar next; //下一个形状5 E. W; r1 F# ^4 B& M
}
4 K- S6 I8 [6 |. r9 S2 w0 H9 D' ^ ^9 f' t
4 M$ W1 P; e: z- B' `# w" L* o4 Kxdata shape[19]={ 5 O4 u( v, c/ B% M: {
1 S9 D g- ~8 J$ V; V8 j
{ 1,0,0,1,1,1,2,1,1 },0 Y& y( J9 j9 v4 ]2 c/ n- ^
{ 1,0,1,1,2,1,1,2,2 },8 T6 K4 C6 @: i9 M O U
{ 0,0,1,0,2,0,1,1,3 },
; [' n0 i8 j' `9 _5 \ { 1,0,0,1,1,1,1,2,0 },' y9 w1 R, r6 ]2 `. d
3 q: U: J, Q# T0 z
{ 1,0,2,0,1,1,1,2,5 },2 S. f) U- Q( D. H& L0 y$ t
{ 0,0,1,0,2,0,2,1,6 },9 W0 B" [2 l% `' k/ U6 ]0 Y5 T
{ 2,0,2,1,2,2,1,2,7 },
: ^1 I/ H1 F- |( L! T { 0,0,0,1,1,1,2,1,4 },8 G+ y( B. {- E9 o' X
6 W, @. j) `/ N |; T! v { 1,0,2,0,2,1,2,2,9 },! t1 a! a3 F) }7 n) w
{ 2,0,0,1,1,1,2,1,10 },# X2 B& W) U/ Q* D- @/ s
{ 1,0,1,1,1,2,2,2,11 }," D: }4 D1 h6 g
{ 0,0,1,0,2,0,0,1,8 },
0 w1 D& |; D8 t6 w# n- `& c: V$ D. c: a6 x1 \8 E w
{ 0,0,0,1,1,1,1,2,13 },1 y- w6 C H8 B/ p# w
{ 1,0,2,0,0,1,1,1,12 },
& X0 r. R- G' f
: W5 U8 t6 u+ ~ { 2,0,1,1,2,1,1,2,15 },
' g& c6 e+ X5 P/ O' y { 0,0,1,0,1,1,2,1,14 },' w4 v B8 f5 I& X- j8 Y8 M! @ [8 d
( u K: t" F5 J
{ 1,0,1,1,1,2,1,3,17 },& e h, n2 u9 r% H5 Y
{ 0,1,1,1,2,1,3,1,16 },( {: R6 O+ [& ~5 v
) z$ @/ A& s$ X: l: ^% s/ d
{ 1,0,2,0,1,1,2,1,18 },
, \/ P7 l& u% B+ t& h8 I2 A7 N* ^# s" E3 P# R
}; # g4 m6 @) L! Q" `5 u
; }' G8 j+ }4 y" M7 \8 }, c) |////////////////////////////////////////////////////////////////////////////- @6 H7 |3 P( V
//**************************************************************************( y, v- P/ ~ S8 |1 J0 }8 `
//= 函数原型:void Init_GamePlatform()
6 F# R; H7 H9 z//= 功 能: 初始化游戏平台5 p. n' C- m4 `: [( Q t# H
//= 参 数: 无
+ e, X7 i; i) B5 X3 `) F9 }5 v9 ?, g+ A//= 返 回 值: 无
1 M ?2 ?0 D( U( d# D5 C//= 函数性质:公有函数 f+ h5 M6 Z1 D' W# ^
//= 注 意:
: ^6 p% ^; F- w2 g. X//***************************************************************************
$ I% p( L* w/ n6 O1 p, x8 Q$ t zvoid Show_score(uchar);
5 H8 x. ?1 V0 u& Kvoid Init_GamePlatform()
8 g# a" A2 q- D3 r1 }3 O{7 D8 b9 n# m; `) P' s
uchar i;. l/ V0 |9 f, `8 U' O t! B
uchar j;: r" {/ Y% A, q# k
uchar N_Hanzi;: R% j4 |* H% Q Q9 i& t+ b
& S5 Y* E9 L' m( b& u$ ?4 P+ w Wr_line(1,33,13,64,1 ); //初始化游戏平台边界 画游戏区域
0 V2 [; Z4 P" M7 N! M" f Wr_line(1,33,14,64,1 ); //画上横线
3 u; s5 n, ?+ l8 o) T0 q Wr_line(0,33,15,100,1);) o& S6 r8 b& K7 a
Wr_line(0,34,15,100,1); //画左竖线: c, ?; T' U: C6 f6 M1 |5 E; u
Wr_line(1,33,115,64,1); + u' y9 E( a% R% ~/ s! ]/ {+ ?
Wr_line(1,33,116,64,1); //画下横线
7 }( k7 S9 B2 j' \$ K Wr_line(0,95,15,100,1);
! C9 T( Z, w% n3 @3 v8 X Wr_line(0,96,15,100,1); //画右竖线
& r. l4 D _1 z3 t//--------------------------------------------------------; k( O; l. A% F# Z; d6 X
for(i=1;i<13;i++) //游戏平台数据清零
3 m6 G3 u: x r! f5 V* u {
! X( j0 E! R6 M3 E for(j=0;j<20;j++)
% L% _" w/ j: B% p% `. R {6 S/ N- F% c' m
Platform[j]=0;
1 w: }0 c) E7 Z& ^, x }
* f ~( N/ ?* j- p- T }0 J5 G5 z3 X3 B; G( m7 l$ j
for(i=1;i<13;i++)
, t5 }$ z% S, W) O G& H+ P$ j {& l# u( k. {& K) z9 v6 q
Platform[20]=1; //游戏平台最下面一行的每一个方块位置为1,作为下边界
1 L G% X; a, [& h }
8 H. F) ~( }3 ^. F# k
1 w% Y* ~# Q0 h4 W for(j=0;j<20;j++) //游戏平台左右方块位置置1,作为左右边界
/ w; h* m O* S( N+ X R {
( c, t# K. Y% G- q) U1 H/ P6 p* N Platform[0][j]=1;, T. J2 L# k. ?1 [( N
Platform[13][j]=1;1 T9 [9 }8 m9 ^1 j4 b. {& k( I0 v
}1 z8 h, J O- `. C) C
//--------------------------------------------------------- 4 F) x4 |& Z/ d3 Q o* M9 w
N_Hanzi=0;
! q# M5 M9 R6 v0 `* ` for(j=3;j<=12;j=j+2) //: h3 [+ ?$ X3 K* B: |( a
{: G/ B; w6 j, g- A. p! Y
hanzhi(1,j,N_Hanzi,1);
$ _* T! F9 v9 L V& s ^- S N_Hanzi++; //指向下一个汉字
. t4 C3 a$ b1 @2 y }8 |! j' u5 t2 @* c' {2 J- d
9 j' s3 T, `' r6 k: n
hanzhi(13,3,6,1); //输入“分”汉字: \/ I0 k' }$ ?( S, y
hanzhi(13,8,8,1); //输入“级”汉字: R" Z. W' s) x9 |8 ^( `
! v0 U7 u: S* Z0 W, G3 H7 i% \: N
Show_score(0); //显示初始分数
$ C/ n% u- t- y' a A& N! o Show_num(13,11,Game_Level); //显示初始等级水平4 g, W7 M* u. Q. [% e
Game_Speed=MIN_SLOW_SPEED/(Game_Level+1); //根据水平确定速度
8 K/ w" e6 K J1 W
! P! \2 F5 x4 @//------------------------------------------------------------------
% r/ m0 Q: Y8 i4 B Game_Score=0;2 N* W7 [" \2 o' V2 @: o# h( h5 H
xx=X_START ;
* s2 i6 A. A! k r0 o n" ] yy=Y_START ;! m' _, o/ z+ l; { w3 M9 u
}* m) O( E9 f9 y, d8 v
////////////////////////Init_Game/////////////////////
( H/ G7 Z3 f8 t! v( j1 s- D* uvoid Init_Game()4 ?5 u0 u3 ^" G/ P% c5 t; X% c
{3 D* h9 ~8 `- \' \. y
Game_Stop=1;
5 c, S. Q5 Q) p" z* b Init_GamePlatform();/ v. {6 @2 a( l7 `4 B* @
hanzhi(7,3,9,1); //输入“按”汉字+ b9 @1 g2 F$ b" `( h) [" n
Show_num(7,6,7); //显示7
& v, q, E, V/ \& Y hanzhi(7,8,10,1); //输入“开”汉字
( _, X( C* s- A- I8 I hanzhi(7,10,11,1); //输入“始”汉字
6 V# [) E8 [! I3 q- _* Y, H2 h. f}
2 M3 K# r2 T) P/ V: C//**************************************************************************7 l0 K' D7 o' L; b
//= 函数原型:void XiaoFengKuai(uchar x,uchar y,uchar mode); k% d; X& ]! N' i" Y, S- a! Q
//= 功 能: 显示一个小方块
8 e, Z& o& S& T1 h//= 参 数: 小方块的横x,坚坐标y,mode=1:显示小方块,mode=0:删除小方块 - p$ K2 \4 }9 m
//= 返 回 值:" W# s5 q' F. O8 ?* ^; _) C/ s' D
//= 函数性质:私有函数
- `2 a, H n' \& e/ s/ P9 x! N//= 注 意:
' ~; |8 f/ F" F; p1 J& t! j//***************************************************************************
5 w; {$ c1 b8 P6 z& W( `void XiaoFengKuai(uchar x,uchar y,bit mode)
8 L$ O# K7 T* Z) p ^' J9 h{0 {6 D7 _& V4 E, s& c" s
uchar x1=5*x+BX_START; //将方块在平台的位置转化成LCD的点坐标(地址转换)
% X4 K/ ?' ^9 `3 m uchar y1=5*y+BY_START;
w! \2 M+ R1 y* U" N( T uchar i;! ^& O4 @+ ?- u) k- w( B- ]+ M
0 t; M% g' x. L
if(mode==1), Q) O4 P* W4 D; v. W1 J0 H5 u
{' a2 G3 U2 K9 a" B& }
7 d; X- J' n3 n9 t8 S6 d* M8 {6 E F for(i=0;i<5;i++)
2 w; h+ g. a& c/ O {. l2 n5 q( k5 s! V( h2 s
Point(x1+i,y1,1); //画一条横线
5 t0 q3 d- K/ r* f6 _, [; X }0 W5 @+ ~. f% O' b0 ^
' |. j4 @8 k, T1 S: ^- N" W
Q- V8 R* r+ |, g( g2 Z4 w7 F y1+=4;( D8 \3 b- V. E6 @5 X2 p4 t
4 V& j! _) y1 @6 a) k# S
for(i=0;i<5;i++)/ H7 F/ O0 G: c3 G5 j7 Y9 w
{0 F( d9 T- {0 r( M7 N1 z
Point(x1+i,y1,1); //画第二条横线4 @1 @0 E5 t3 ]; W; J% N. `, W
}
1 ] v' W/ U+ B' y, f: ~) \+ O, ^5 _/ p+ v+ _' |# F+ @
for(i=0;i<5;i++)
( P* m% [; ]! {" o4 W" Y# }7 {% ] L {$ g: }7 r d. ?( [7 B" l
Point(x1,y1-i,1); //画第1条坚线
0 |& x# A% D, j8 o6 |- o, w1 h }
( X7 Q! g4 O0 _! {& H0 C3 k0 J* N9 D h# Q' H# X5 o8 ^
x1+=4;% _- E& l$ ?9 D/ {9 n- S- `- G
q6 N2 J& x1 X$ z# l for(i=0;i<5;i++)
, n& c; \' p% v1 X$ g7 J& W {
7 X- _2 g- x1 w7 K. G J3 D Point(x1,y1-i,1); //画第2条坚线! j! N3 e& v2 r3 `5 y; z
}
$ }5 f, V, [( Y* @9 `$ V
" K8 @' ~3 \& q% T& `- i. f5 { y1-=4;: E/ s" N: v8 L: _& m' u9 x
for(i=0;i<5;i++)
: X/ P# _2 Y* a/ h# C {& p3 F, x U' @# G
Point(x1-i,y1+i,1); //画斜线+ c x1 M, M+ e N9 m: z. t( w' M O
}
( T/ e; D. n+ m q: o }
8 a' O1 W. b( o2 V% H
, W* Y% q! f- A9 ^( b2 s+ Y$ D+ H else
( h+ ~" o, M0 ~: M; p* X9 Y9 v {! ^9 S5 r* k' q: \$ f6 h/ D
for(i=0;i<5;i++)% _& v3 m/ S+ J0 l Q1 ^
{/ S2 s0 r" ?8 W! c
Point(x1+i,y1,0); //画一条横线
1 [- T* @% t$ q7 W4 V }- L" q+ s8 v" x; Q
9 e, Z: {5 t$ H y1+=4;
& G& v' R1 z6 \0 }3 K for(i=0;i<5;i++)0 C, R0 H) C' ]# Q
{" K: e; S# g% d6 t" c' D
Point(x1+i,y1,0); //画第二条横线
, i# X, ^# }4 V* J }
2 [" r @2 Q$ L A5 P9 O& c' R/ p& h; k, _& T- C9 L. c
for(i=0;i<5;i++)
) m% f- R p# h {
0 v* D. C+ E: t3 S5 W Q Point(x1,y1-i,0); //画第1条坚线' {7 g# f' y x* p
}5 l! d1 r2 I! w( l# p- |
, l: s8 w2 m$ ]; Z6 p4 c2 h
x1+=4;
* d" B1 c$ C o& O# o for(i=0;i<5;i++)
2 n# A0 `* W$ C) e& t0 D {
; [) Q. q* P: i Point(x1,y1-i,0); //画第2条坚线
( H* {6 i) [" }+ c# f }
( _1 z8 ~& \9 ?2 X* t. R8 Q) K& U; U4 P4 U6 B' D" @
y1-=4;# Q% b$ V" k6 t3 S8 { U1 O
for(i=0;i<5;i++)" n$ b3 b" k7 U9 I, M. g' X1 s
{ e! E1 \# y; p7 I v. `/ N& h
Point(x1-i,y1+i,0); //画斜线1 K" Z" L; q( T& s/ J
}4 V* m( k ?7 T% ?2 B
}% z% t% z5 r$ p; b$ W! f
}/ @0 u- s7 y, K% Q9 m m5 U j) n
//////////////////////////////////////////////////////////////////////////
/ B4 X2 H1 o5 I9 B, Y////////////////左冲突检测//////////////////////////////////////////////
$ p* e) i0 x+ M2 R+ |$ Xbit Left_Anti()
8 u, j* b* q5 r J4 K{
7 ^. q7 K0 n+ q- X# K8 d# }4 [ uchar i;5 M' _; {- K! Z# n! q
for(i=0;i<4;i++)
; N) v6 C: n. a# y9 {9 g" h Y' S {! C! [1 e; D9 b
if(Platform[xx+shape[This_shape].point.x-1][yy+shape[This_shape].point.y]==1)
5 ~. i t0 N' F' i return 1;
2 Z$ R1 w5 {4 b7 Z" { I }* n* }6 V0 e$ F6 b
return 0;0 O' b. B$ ^( s: o% j/ I6 W* i
} : m: ^3 f! ]& q0 K- v# I
3 t0 g# z8 C! ^6 \6 c! b& ~
////////////////右冲突检测///////////////////////////////////////////2 r- l( {, \8 w/ P
bit Right_Anti()
/ @, c- s3 a- O$ @9 f! D, G{5 f; E4 A# L: j4 z* B( K
uchar i;
9 K8 S9 l" j1 D( X for(i=0;i<4;i++)8 A* ~6 S i8 s$ b, \/ h0 M
{, y4 f7 z6 R- w8 q$ o% O+ e
if(Platform[xx+shape[This_shape].point.x+1][yy+shape[This_shape].point.y]==1)( v; f; ~( I# S/ {
return 1;, w2 T/ X( C; `: O# |0 w s0 T$ l
}
* i' }. z( r' l/ t$ ] return 0;
( ?% m( G2 ~6 g! {. ?6 v. C: V
' l; Q% `) F+ P/ n$ S}( `( z. x& `0 r' Z+ }/ ]' o
& \5 G( X" k9 f' w
////////////////////////////////////////下冲突检测//////////////////////////
8 \4 n; l: S! }2 gbit Bottom_Anti()3 K, X- x9 U' V; m
{) p5 Y) S" L, b1 c: [9 N
uchar i;- F9 ?- s$ M1 c
for(i=0;i<4;i++)+ ~8 c: V C& V5 t- c4 n y: \
{7 r" _+ |+ ]) B6 _; @( o g
if(Platform[xx+shape[This_shape].point.x][yy+shape[This_shape].point.y+1]==1)" U1 i# |. i) {% x4 f* V* i& u
return 1;
, {8 k; L; x) g% `( U S }
4 e. U) V+ u, z9 u3 u5 p return 0; 6 d! G; \" A5 k2 [7 ^$ A* l) E
}
, q6 `7 \+ d8 s, l3 }' b//////////////////////////////////改变形状时产生的冲突检测////////////////////
* q/ B X, z& s( ?8 _5 v6 G% W1 dbit Change_Shape_Anti(); c/ R- I: @5 k" {& [( l Q" U
{
5 i) A* g) V, x" x9 c1 v6 a4 p- Z) F uchar i;2 O; E& ^7 I7 |6 g. z; J" `) ^1 z y
for(i=0;i<4;i++)9 k7 k; l2 W* I4 M
{
; ~% y4 E- J; U8 S if(Platform[xx+shape[shape[This_shape].next].point.x][yy+shape[shape[This_shape].next].point.y]==1)/ Y2 ^ U8 Y( R$ ]" b8 y, n4 I9 A
return 1; //检测一个形状的冲突情况
8 H8 a! R% Y$ W* H5 U M }, D) a- i2 ~, Z( M5 x) s- @: _
return 0;
5 ?. P( ]' _( |" R6 w- ?/ s}1 p2 B9 `: F, W4 `7 e8 l
//////////////////////////////////产生一个随机数,返回一个随机数///////////////
4 c( R. M; c$ B6 V: @& uuchar Random()) I* s M# ~6 h
{/ G4 {; ?- L* [! }- j7 L) E+ } U6 b4 V
static uchar m;
1 R2 b9 s! A; @; Y m+=49;
( y7 w8 ~4 T* c7 W% Y return (m%19);
2 S- H1 M' f9 c0 Z) ?+ E}
4 Q2 M8 Q1 E, j- S' G9 M
9 S3 w) M t e- h//////////////计分函数,参数为 消行行数n/////////////////////////////////////// i; |( ^ t0 H9 j( R) f
; S( x% j: M5 e% k
void Show_score(uchar n)# B0 w% U! @& B3 @2 j; h" z
{
/ p: L) ^) E2 x. `+ _! E. J Game_Score=Game_Score+10*n;
% A3 c7 L) J S' A4 i
; g- ]. m+ L8 G. F if(Game_Score<10)
6 a! { Q# H6 z& Q {
9 e+ F4 B7 m, X* n Show_num(13,6,Game_Score%10); //显示个位$ q! X9 c) _: P+ N3 u
}
2 ~8 c, B$ ~8 D! R1 d# L# R- J# z else if(Game_Score<100)" T; M" U7 ^) h' q, H5 U& q
{
; P2 b7 G( O- `. i9 q Show_num(14,6,Game_Score%10);
; ^ Z8 m# M u5 r( ` Show_num(13,6,Game_Score/10%100); //显示个位,十位
( f* l& L7 d( V6 [/ g3 i; r5 t }8 n! R" B" E# q1 Z' I% n
else if(Game_Score<1000)! x% [- D% O v$ M2 o8 b R
{) D# ?6 M9 i1 f% f4 g; ~5 w& d+ s& D
Show_num(14,6,Game_Score%10);. x5 |4 q# F8 ]) f
Show_num(13,6,Game_Score/10%10);
( f3 P/ e7 F- x/ U$ X" y) I2 Z Show_num(12,6,Game_Score/100%10); //显示个位 ,十位,百位
5 p) K! Y4 E7 v( n0 n' ` Q }
6 ]) Q8 w6 c% F' w( E else
& U: f' V" b* V& [, a' d {
' E1 `2 c. K/ [& { Show_num(15,6,Game_Score%10);& z: k8 d; Q. c4 ]
Show_num(14,6,Game_Score/10%10);4 g8 \. j) m! l+ W) x. d
Show_num(13,6,Game_Score/100%10); //显示个位 ,十位,百位,千位
/ `2 X5 g# N# F& R4 i. A0 Z Show_num(12,6,Game_Score/1000);
# S3 H3 w7 X9 i0 u, A }3 Q+ ?7 Y7 H$ D& [2 z) A, v
; b4 L. R1 p) R1 j/ ?" i if(Game_Score%1000==0)+ o* R/ a# Y0 g
{
8 `" b+ e+ P+ X9 L2 W if(Game_Score>0)
2 \7 k8 K7 J" [; D5 n' O {) K& J: D2 Z8 k$ C; o
Game_Level++;
7 ]3 Y& ] r+ W3 v. C if(Game_Level==10)
4 d, E7 u) n4 K {6 M) i- y0 `4 ^
Game_Stop=1;
6 r( H3 }* e* Q# B0 z hanzhi(7,5,12,1); // 输出“太棒了"
2 r. M: |8 j C/ L hanzhi(7,7,13,1);
& @; P0 a2 z2 K: \! a2 |, J) F1 m hanzhi(7,9,14,1);; C' V9 j5 Y, j/ r ~3 f
4 @6 `- \/ N) u) }: S# g }1 Z0 x1 i& j4 S4 @1 k& U
Show_num(13,11,Game_Level); //显示水平
- b$ K$ q5 ~3 t8 H0 d0 C% t0 \4 d0 g5 K# a
}
: W; @* Y% U0 v a# p$ U }
* V! x. k: [* J- T. Y( ?}) ?+ n. ?. {8 n
) S- p2 `+ f2 {//**************************************************************************
. C) P9 F2 } D( C, K2 X2 t* o//= 函数原型:void Undisplay_line()5 P) Z; _4 ?2 o3 T3 G7 M) j
//= 功 能: 消除行4 _6 R2 o$ Q( \$ _) `
//= 参 数: 无 ! U, `+ g+ n* R2 Q0 q* e, ^7 w( y' _
//= 返 回 值: 无
) T+ H2 q. F9 [( t; R! S7 c2 M//= 函数性质:私有函数
2 u* n$ H4 |3 j, y1 }' P//= 注 意:8 g0 a# p, o5 w- s# K6 A: A* L' ]6 J
//***************************************************************************
2 a; Q$ S3 H e3 K& k' o+ lvoid UnDisplay_line()
! j, ]3 Q& e. W' X" G9 y: C{3 e, x7 A1 L2 ]; r' {4 r
uchar Del_Line; //标识要删除的行
; Y" r$ Q- M! a: k$ t# ` uchar Del_Line_Num=0; //标识删除的行数
. p! h$ v+ U5 j uchar i,j,k;
) k; T' A/ U; f5 O bit HavePoint; //标识一行中是否有空白点
+ @' v$ [4 o- W' G3 D1 r8 U- w* s+ }; e, n4 J$ g
for(i=0;i<4;i++)
. o1 w+ w6 p$ p {0 l# B9 ^ v. n/ W( [" z% S
for(j=1;j<13;j++)+ k! }' l6 {2 i5 t
{( U4 F- d H/ l$ A" }
if(Platform[j][yy+i]==0)
: _' r* s( D; J+ E H" ~* P break; //如果这一行中有一个为空,则退出这一行的循环
' q- s4 c7 C) ? else if(j==12)& c. m% a! ^: x( e6 Y: u
{7 h8 F6 t: K% v3 l1 v( `/ J( P
Del_Line=yy+i; //确定要删除的行
& t) N: G" V) l i1 u if(Del_Line<20)
$ D* O6 @" I* Z3 s0 a {
% @1 j$ h" s4 n+ [; P Del_Line_Num++; //计算共删除的行数
: L- l H/ |% ?; t4 ^ for(k=1;k<13;k++)* F, p% _5 Q5 l2 J* Q
{
' c% g$ F* W- q8 z% _ XiaoFengKuai(k,Del_Line,0); //删除行/ k" P. n! o3 q2 M6 h$ ~2 [1 s8 k
Platform[k][Del_Line]=0; //平台数据清零
! u# U0 l4 c" g$ y0 j/ h0 x }
" G1 O6 B+ J1 l( x2 ` while(1) //下移; r: _8 A2 ]' K; \3 a& Z
# U8 D# `' r5 g* G9 B/ W
7 I3 L5 J% {0 R/ `* R2 M ~# n
( M9 d/ t" {, h5 a0 O…………限于本文篇幅 余下代码请从论坛下载附件…………
+ y. J0 n# T5 f1 c) G( B4 A; c! V$ j! H' J: Z( R
* P. m% Q+ {" ?' l
|
|