|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
基于AT89c51单片机制作的俄罗斯方块游戏 T6963C液晶显示源码# _) q8 m. E& V) R
5 t. {! |+ R, R9 R
( u9 v, r: [- D& d/ _! g注明:只能按2键往左移, |3 Z. i: k$ G% J: R
按4键往右移
" t; h: c* u! f* H3 f 按8键变换7 G. ?. P3 b% ]5 Y9 T
无快速下降键 " Q" ]- k) p1 N4 o. V g: |+ P
6 [4 \+ M/ f0 Q7 e5 Q6 M, f
部分源码预览:, o! [5 P9 {2 R2 L) d- y1 d
#include "t6963c.h"
0 b& E- a- j. r) n& T% Q4 N#include "typedef.h"
* N/ Z. G; e! C7 m% Y6 C) N#include "key.h": [* S6 E$ d. h5 G0 n
% O& ?# O: X" C: x+ Y1 _, Q5 M& @
#define X_START 5' J. H; d# |: c3 \, M
#define Y_START 04 s w/ s: g% W; ~1 {5 c
#define MIN_SLOW_SPEED 300+ H0 m! t' b& I: o- S+ |) a$ |* F' ~4 p) h
#define BX_START 30
& {: x' f0 U- |+ v9 R: r#define BY_START 15* `" g) f9 k1 a- `3 _5 m! s4 l
#define Nothing 1004 U) e0 S$ w; G- ?$ v' Z
- @' Q, d* p+ Y6 w0 q- u7 x3 n
* k1 ]' a/ M; K, K* m8 Z A
//全局数据
: O c ?+ _$ f7 [+ l9 @code uchar Game_Char[]={0x27,0x41,0x4d,0x45};! ]- m/ Q. B3 l1 q. s4 j5 l1 \6 u
code uchar Over_Char[]={0x2f,0x56,0x45,0x52};
. l# M/ p% [& v' W5 m
& g6 e7 }' d* ?6 D" y' F9 T0 |static uchar xx,yy; //方块的位置# O' Q" ^: T" }* K7 F" F6 P
static uint Game_Score=0;2 D) R5 v' g2 Y# h3 o% x& f8 Q
static uchar xdata Platform[14][21]; //游戏平台数据
9 Z5 n0 M, p3 a' Ostatic uchar This_shape; //当前形状
" X Y) M2 ~/ b5 ]static uchar Next_shape=0;
* p- ^ ^# U" c+ E: d, qstatic uint Game_Speed=MIN_SLOW_SPEED; //等级速度,正常情况,方块下降的速度
6 A- g+ w' v& s( @/ pstatic uchar Game_Stop=1;# j, [% j0 s. {8 [, k
static uchar Game_Level=0;% X3 v% m y0 N; d+ A; ~
! ]$ ~( l/ W! H1 J: B3 k/////////////////////////////////////////////////////////////////////////////////7 x: Z2 x, l* j
/////////////////////////////////////////////////////////////////////////////////: O1 z6 m1 g$ u0 c
/////////方块形状的定义//////////////////////////////////////////////////////////) V: _; a1 i B' o$ a
/////////////////////////////////////////////////////////////////////////////////
+ R. {& s/ m# j0 g; t/ Wstruct POINT{
7 f1 C5 n, v# H/ @' M5 T! } uchar x;1 l/ b+ D" F- R7 {- a1 Z
uchar y;+ P6 q5 f: C* z. {- c/ Q& r
};
% W* U) e; ^4 m2 h4 D) L) u: ?) p# F5 n$ Q6 r* e1 G) A
struct SHAPE{3 j" v; u8 g$ \
struct POINT point[4];
0 ]! @ J2 d" Y uchar next; //下一个形状7 W* \+ c& J# e2 j# I! Z9 M
} + w# C6 r" t7 ?8 D
5 D+ {0 `" k2 F; B* _" B
' N3 p3 H+ S0 y& y. I% J, c
xdata shape[19]={
4 P, Y1 v' D m% R: \7 Q1 y- c% q
{ 1,0,0,1,1,1,2,1,1 },8 j7 D* y& y8 Z! M4 `
{ 1,0,1,1,2,1,1,2,2 },
% h9 \9 E7 S/ k$ |5 x% u1 j { 0,0,1,0,2,0,1,1,3 },
6 h# p- q1 D& b& ~+ w { 1,0,0,1,1,1,1,2,0 },
& P$ d7 W' Q% P% N
" K! q0 p- o2 {/ \3 g ^5 V { 1,0,2,0,1,1,1,2,5 },0 R; F6 a* S* W( S) ?2 c4 K' I
{ 0,0,1,0,2,0,2,1,6 },
1 I2 L0 u1 m6 t) Y& D8 m2 |5 _0 d { 2,0,2,1,2,2,1,2,7 },6 ^! b! i& o( o0 T
{ 0,0,0,1,1,1,2,1,4 },
, | x6 V$ G U" B& J- X; P; I; G r- S- `% T6 z
{ 1,0,2,0,2,1,2,2,9 },* T9 W0 a. M! E$ l+ |: `7 k6 g1 W, D
{ 2,0,0,1,1,1,2,1,10 },3 ?! O, s# u7 F# m9 M5 Q w
{ 1,0,1,1,1,2,2,2,11 },2 q* h6 E! @7 }- _) T
{ 0,0,1,0,2,0,0,1,8 },
' Y! L( Z6 T9 m; P3 |0 V
8 {' {3 W/ n$ a { 0,0,0,1,1,1,1,2,13 },0 ?0 x, V3 j$ t" j% c% I6 D3 i6 q
{ 1,0,2,0,0,1,1,1,12 },
G) y$ n& K# \- }# B4 x0 E
4 i8 h% Q: p0 g1 F: A { 2,0,1,1,2,1,1,2,15 }," T% p8 {! M+ y; g% S
{ 0,0,1,0,1,1,2,1,14 },
$ ^: n/ y1 {1 n7 w# ?
h2 J) E$ X- S; ~. n* f { 1,0,1,1,1,2,1,3,17 },, F2 t. G9 G0 _/ d5 A/ N
{ 0,1,1,1,2,1,3,1,16 },) p- I4 f$ v0 |# P
- z: R$ @: C, a { 1,0,2,0,1,1,2,1,18 },
2 h7 Y/ G$ v! g1 C. f) A2 d% p1 w7 r( M. O( y" Q4 e0 l
}; ! }5 k' t& L0 [
1 t. D- c0 u7 ~ }& ?" F' l////////////////////////////////////////////////////////////////////////////
) B# W, O! p+ P3 Z2 P//**************************************************************************
, s7 s3 P, I, W/ j//= 函数原型:void Init_GamePlatform()- n0 ~* K& e! I! q- y9 ], J
//= 功 能: 初始化游戏平台+ P4 p; U* o8 r2 M: m7 y9 x
//= 参 数: 无 7 W- H& Q+ u# C$ m
//= 返 回 值: 无8 C8 M+ U$ J% c
//= 函数性质:公有函数/ t4 N7 o$ H$ p) b" p3 z, ?
//= 注 意:) I4 X5 v' C, l" V3 ~7 @) c5 L
//***************************************************************************
3 Z: k( z' I7 m5 @8 A) [void Show_score(uchar);1 y0 w1 T) }+ Z: H* S$ |
void Init_GamePlatform()
& ?9 E" B. T" W, x: q+ }4 m) \ `{
& Y6 {/ b% M3 o# d1 o9 z uchar i;
$ V4 H/ F; B! C+ C uchar j;
% L5 y1 T9 Y3 ~4 g. r9 ]0 p uchar N_Hanzi;
' }; Q& i* u5 ~' q" U+ \) `( L/ f' j: G8 s
Wr_line(1,33,13,64,1 ); //初始化游戏平台边界 画游戏区域
# [% U$ f, h' o% m# v6 ?: I Wr_line(1,33,14,64,1 ); //画上横线' R! P2 i% m3 N0 |
Wr_line(0,33,15,100,1);
?) Z4 O3 k9 R5 f# v0 N* B" G* W Wr_line(0,34,15,100,1); //画左竖线7 o" ~! W# J% {) b1 o, `
Wr_line(1,33,115,64,1); d* _. q$ Y, N
Wr_line(1,33,116,64,1); //画下横线
C$ a0 G7 G2 I j B1 a. `" b/ T Wr_line(0,95,15,100,1);! M2 I% a! L7 C# j8 n3 ~
Wr_line(0,96,15,100,1); //画右竖线
+ S2 R% B3 \+ @: f( S//--------------------------------------------------------
4 f q+ ]/ U$ p1 o for(i=1;i<13;i++) //游戏平台数据清零
& G! u5 z+ y: v8 J8 K {
: R9 X( ?' b% r& S for(j=0;j<20;j++)
6 f* X4 { S% t8 U$ q8 C* _ {
& Q) k' N$ g" H% U Platform[j]=0;2 V3 w5 J# l. O
}$ N# R) b" D5 _# `
}& O% A5 i L/ t4 b5 s; C
for(i=1;i<13;i++)
4 i z5 x4 A4 n {( ^0 g9 U% Q) w2 }0 X9 m
Platform[20]=1; //游戏平台最下面一行的每一个方块位置为1,作为下边界
: y. E7 I ]5 j0 q& o7 y }
4 O4 E' J. z! T+ |6 V+ `+ u" W L: W. {- Y$ o
for(j=0;j<20;j++) //游戏平台左右方块位置置1,作为左右边界
. C0 T1 ~- y5 T2 ~' b- ~ {1 V; v1 ?" ^$ d, e
Platform[0][j]=1;
8 L' F# r8 x: t* J* U Platform[13][j]=1;
! h+ b2 G# W: h }3 }" {( O1 h4 o! Y5 }. o: D
//--------------------------------------------------------- 6 P6 J! {' z6 [* @: v& a. P
N_Hanzi=0;
* y+ v7 X y7 s for(j=3;j<=12;j=j+2) //0 _& p& m2 \$ F& M- w
{
' E& w* E9 e7 ^9 x" R: T hanzhi(1,j,N_Hanzi,1);6 y& ^7 F6 \5 t3 E. A6 U
N_Hanzi++; //指向下一个汉字7 H: J) w! j/ s' c! z+ a" e H K
}
6 Y- T e/ y3 U$ h! a" Q) R2 k* }9 g- r7 w% J
hanzhi(13,3,6,1); //输入“分”汉字
$ y" ~) i/ i7 Y! K hanzhi(13,8,8,1); //输入“级”汉字
; T: p$ u! r, d5 J7 O
6 e9 b6 x: `" d1 s" I Show_score(0); //显示初始分数
8 f. D0 N0 c) |5 f( F6 I Show_num(13,11,Game_Level); //显示初始等级水平& a' M4 ]& C( G1 H; J6 a! e
Game_Speed=MIN_SLOW_SPEED/(Game_Level+1); //根据水平确定速度
) l+ R, t, M$ B9 ^0 j
5 i# G, \# z" }$ w K( S: [8 q//------------------------------------------------------------------
9 ~- |8 X' R; c Game_Score=0;
}3 o, z/ p! l) i8 W xx=X_START ;
. Y$ k) {6 ?" m1 v9 J yy=Y_START ;- \7 j1 N2 z5 J# T0 I) D; _6 K
}7 P8 k* n4 W3 y
////////////////////////Init_Game/////////////////////
" J0 g6 t& o# N! z* Yvoid Init_Game(), C6 M) e; [+ F/ O" v- ?4 t
{
$ @+ c% d+ P1 P2 j/ A2 f Game_Stop=1;
1 p- G: Z; b) g) G6 y2 [ Init_GamePlatform();" W# e/ o" S) \0 `+ }, x% p$ i
hanzhi(7,3,9,1); //输入“按”汉字/ O6 \4 H3 A3 c0 R
Show_num(7,6,7); //显示7
( C4 o8 f4 y* ^5 o5 N hanzhi(7,8,10,1); //输入“开”汉字
' g* a, M/ I7 k0 Y hanzhi(7,10,11,1); //输入“始”汉字. P |+ l7 K- [0 y J8 x( L$ s
}; c( y7 s' {; M1 h+ D, z
//**************************************************************************( m; L0 c! t% m' e8 M1 |6 |
//= 函数原型:void XiaoFengKuai(uchar x,uchar y,uchar mode) B# l5 U- Z9 ]/ |, s
//= 功 能: 显示一个小方块
! P$ U7 R! y$ t8 [//= 参 数: 小方块的横x,坚坐标y,mode=1:显示小方块,mode=0:删除小方块 2 o2 U( M- o. k3 q0 N
//= 返 回 值:
2 S/ B& } @ q5 N& Z/ O//= 函数性质:私有函数
1 }& Y$ w) U! s# @//= 注 意:+ m$ |/ a4 W. A" ]& W
//***************************************************************************
: |3 A: D4 [- U. F ^void XiaoFengKuai(uchar x,uchar y,bit mode)
1 G# P2 \1 i! O# n2 z0 a{. x/ X9 I. d9 a. J# F- \
uchar x1=5*x+BX_START; //将方块在平台的位置转化成LCD的点坐标(地址转换)
& P5 i. B) c, h2 E& s uchar y1=5*y+BY_START;
. }9 I @+ l) w5 [7 y. x* h uchar i;9 p& J/ U# Y. \$ w) f
5 v4 S& G z+ _# A2 h2 d1 [0 I
if(mode==1)4 `9 T5 W- } I1 O9 Q
{
- `( u9 c, Q' V: n4 }( E9 S8 p3 ^2 Z5 E, ~1 y9 N
for(i=0;i<5;i++)9 y+ R2 E2 {4 T( V7 @" Q
{
) j8 u, b' Q9 O) l! P/ ~ Point(x1+i,y1,1); //画一条横线+ Z6 Q% F( Q/ ], D
}
* G% Z$ v& q+ M- x. n/ d
/ ?9 Z% J- q2 O3 q" M* M5 _, u X) t. ]' n. F7 i, ~* r5 @
y1+=4;
$ f) ]7 k2 _# S; \9 Q9 a3 r& N0 i N! ~3 Z
for(i=0;i<5;i++)3 R0 a8 V. S( s2 ?/ j
{1 A# W9 r. L; P/ Z" Q
Point(x1+i,y1,1); //画第二条横线
) _1 X4 a; k2 ?' Z3 B% h }
1 o. |* y4 g- ^) x* h: O: b4 W6 _( y9 y7 t, j: e1 y u3 ]4 l: S
for(i=0;i<5;i++)
3 c) D1 I% s3 \ {
- T5 I6 b( {" V2 w Point(x1,y1-i,1); //画第1条坚线" k# h V9 W% x, x
}; Z2 D- w6 Q" i. |1 z0 x
' _7 x) s6 r: o1 q( [3 _) r+ F x1+=4;
6 |6 d. \% l* Z1 T2 X7 m/ @
; b. Z$ _: n, a C; h( m( Z5 H8 o2 u for(i=0;i<5;i++)
3 i3 V0 r8 U6 Y {
9 {" m* S9 d. n% Q Point(x1,y1-i,1); //画第2条坚线- |7 d0 B, A, S& W, I
}
2 p+ A0 N! [- h' I# }
* J6 v" K" [# d- M' I a y1-=4;0 a& S: T0 g0 H% w7 S" R' Q
for(i=0;i<5;i++)
6 t# ?, A2 o# X1 G1 x" b {
0 o$ ?. K1 @! w6 g9 Q" Y Point(x1-i,y1+i,1); //画斜线* v3 r, s: a: O+ w
}
N7 Q; C6 X- h* O }# i* Q5 X& `. D
. L5 _0 L$ `/ w. K* a. u% p$ l else
. n/ r3 o* D" e3 w, S {) ]; ]* u2 N9 k; ^; a1 ^/ W' `
for(i=0;i<5;i++)& a. C" \: [. }! E& M
{5 N6 C! r: t4 ~, M# e
Point(x1+i,y1,0); //画一条横线) J% b+ I8 t3 P9 f
}* F% C6 K9 A8 A
2 Y8 V v, u* u4 B
y1+=4;
; S6 I9 D" x& f w6 S5 e/ w for(i=0;i<5;i++)5 U, r7 T1 l3 j8 n
{
3 g) m' H; H$ G G6 z4 U Point(x1+i,y1,0); //画第二条横线
3 t; t i3 I# W1 _9 r }
1 V" w. g2 n5 u
6 Z- x, |, p+ G! P for(i=0;i<5;i++)) A4 m, P: N& u. N
{
2 y# k) M" L F Point(x1,y1-i,0); //画第1条坚线
/ t1 x, U+ m, [% s }( I+ C/ j, i& f
; ^9 K8 i, I; s+ J+ _. f% k3 o3 g x1+=4;3 E# z) p- U" m1 J' G* F
for(i=0;i<5;i++)
5 E7 v% i+ C; l0 L& j3 I {
2 ]9 `/ L; N# ?# A9 S Point(x1,y1-i,0); //画第2条坚线
, [+ c& W6 |3 k2 r* V7 C }6 M5 k! X4 `9 x; }! K
) D% q; I( ]( P4 g. v; M& t$ z y1-=4;- f2 y0 }$ T* ?, r
for(i=0;i<5;i++)3 @* y* S2 n7 g7 r3 c2 j
{
1 x- C2 D! `* W: m# w8 l# W, j Point(x1-i,y1+i,0); //画斜线+ v1 z; i: d4 i
}
! I# j" [$ y) y8 z) C* J }: b8 [6 @4 y0 z; D1 }
}2 I7 d. ^# v& `
//////////////////////////////////////////////////////////////////////////' w* M# E, |; z6 Y4 D8 `2 ?
////////////////左冲突检测//////////////////////////////////////////////
3 `/ ]$ `' `) _) J2 R3 L3 wbit Left_Anti()
% q0 i. _% n! i: U* M{* b4 `5 Y6 _0 n( a
uchar i;2 i* l9 C4 A8 k7 ~" r
for(i=0;i<4;i++)3 ?4 T# L3 }, f8 t' I
{( Y1 K6 x, {! e3 c+ a0 [: Z, Y6 y
if(Platform[xx+shape[This_shape].point.x-1][yy+shape[This_shape].point.y]==1)
) L( N7 }$ l- T+ |& `. c# E4 g return 1;
- C+ r7 @- I+ ^6 P. ?# C3 [ }
5 C8 Z3 t1 J# I3 ~ return 0;
; C3 y9 k5 ^2 L9 S& I$ Z E} * Q; B1 c( e' h. {2 m/ G2 k! |
' \5 H0 n" G+ {/ G1 f4 b
////////////////右冲突检测///////////////////////////////////////////. t- s8 Y- a. l! D/ X' X
bit Right_Anti()+ ^6 h2 P- W# C9 L% x9 A
{- {- s" ~# r+ ^" ?+ q
uchar i;$ p; o9 S. B$ O" }' P
for(i=0;i<4;i++)
# g# T4 P4 m0 j/ F( \6 } a, d {
- D+ M0 J& A& ?( k2 d. O- b if(Platform[xx+shape[This_shape].point.x+1][yy+shape[This_shape].point.y]==1)8 c( G" D4 D" G& D8 t7 l/ H% W
return 1;
3 S. m4 K' {/ I* U }
M. l) p4 O. x& W6 ` return 0;! ~/ D5 `: U% a
8 }- `6 \9 a7 x- ]8 I}
9 x& g# I7 C! a# f0 c2 k& u/ M2 O. h" A! m
////////////////////////////////////////下冲突检测//////////////////////////# N" L& \! E! M3 U l
bit Bottom_Anti()* K7 w$ Z1 R, B. c- U# I5 ^
{
( t k. \4 E4 f5 s uchar i;
" ~: m+ i9 U( k" J2 {7 i for(i=0;i<4;i++): H+ V, @6 f1 E: u/ y" s8 U# r3 V
{6 a5 z9 T: r. |# g; |# j3 n
if(Platform[xx+shape[This_shape].point.x][yy+shape[This_shape].point.y+1]==1)
4 d( p S3 o; S# Y3 \8 Z$ m return 1;
, m: G8 n" M+ Q1 n }' r6 U* a7 A2 t$ @5 o) @
return 0; 3 D) W& E# @3 {8 P8 |
}4 Q* I, Q9 M }" a5 d
//////////////////////////////////改变形状时产生的冲突检测////////////////////
! }0 ^: s5 E5 ?' F. o: r( m) B" ^: ibit Change_Shape_Anti()
/ n. D5 u7 G# y( I# z- h2 g' i; A{
& y$ Z4 q1 Z6 T5 k uchar i;0 F) v- ^( u9 s" r% X9 o
for(i=0;i<4;i++)
$ @! |9 ]( q' Z0 Y {' @9 A+ l' r8 z# N) P) x
if(Platform[xx+shape[shape[This_shape].next].point.x][yy+shape[shape[This_shape].next].point.y]==1)
2 }7 e7 E; I. l; ~$ W, | return 1; //检测一个形状的冲突情况
2 N9 Z% j. y* a9 o0 [ }
) @: }& W% w0 Z7 m9 @" C) V return 0;
; Y( F4 {% x: N% {* H; {}+ C/ G- }( H' c7 C5 [
//////////////////////////////////产生一个随机数,返回一个随机数///////////////5 }- [1 Q' L) s
uchar Random()0 e H+ [- A9 I4 ?5 J+ q1 Q4 }: y% y
{
+ w; F$ j# U9 O( ~ static uchar m;
2 k6 i6 g8 a+ B m+=49;
* m( W/ m u7 }/ `; H return (m%19);
: m1 r. H; v* y3 B$ m( @, O}, x9 d+ ]$ g1 r: w2 L& E
0 S) W/ F' j' c$ _5 t/ W( B; M6 N. ^//////////////计分函数,参数为 消行行数n///////////////////////////////////////
) Z3 l: k1 t+ G) a2 ?: e* q- H, K; ~' Q8 g9 X$ r
void Show_score(uchar n)
" u# C- L) b/ x2 T/ f{# a& Z, I! D M) m2 L/ f& B/ ]
Game_Score=Game_Score+10*n;
) b5 ^1 s8 X! n' v( r
+ Q- x' |0 e a, ^/ P if(Game_Score<10)
* \1 J8 g0 X: S* N& a- {2 m9 } {3 M" f1 P' o5 e- R1 O# C& M6 A8 t. b7 M
Show_num(13,6,Game_Score%10); //显示个位
! x2 L* r9 O$ K: y }
' {- c+ `1 f) n9 C1 i else if(Game_Score<100)
5 {8 a6 M& N* V. p' e { ( a3 _( r- A9 B% D8 a
Show_num(14,6,Game_Score%10);. I H6 A1 M5 c) I# I4 O# c) z" _
Show_num(13,6,Game_Score/10%100); //显示个位,十位
3 U6 L/ d8 E9 V3 E; V3 I6 y }- x' H6 ^3 W8 r( n1 Y5 Y
else if(Game_Score<1000)2 Y, a4 q: Z" O2 u
{
" `& U( s. i$ A! [ Show_num(14,6,Game_Score%10);
7 w% _+ \5 |$ ^3 ^ Show_num(13,6,Game_Score/10%10);6 \" V2 U+ m, m# J* }" b$ w) f
Show_num(12,6,Game_Score/100%10); //显示个位 ,十位,百位3 s: q& }0 f8 B3 W6 g
}
3 c& K5 Q4 d" D+ X: D0 i. G else
: ~; a1 E* X k* T0 U {
R) K4 Z8 O/ ^1 z Show_num(15,6,Game_Score%10);( D1 N( Y3 N$ A9 J# K6 w
Show_num(14,6,Game_Score/10%10);# c* g( z; [& l" H6 M( H
Show_num(13,6,Game_Score/100%10); //显示个位 ,十位,百位,千位9 }1 `7 V0 u) K! @* q9 v) f ]5 i1 \
Show_num(12,6,Game_Score/1000);1 F% b2 ?' ~$ {5 t7 P
}
. }3 ~, X( h: ^7 L3 y e/ H6 S: C4 v, }, `6 o
if(Game_Score%1000==0)+ [/ ~/ q0 ~6 x: h! P7 H% u
{8 R6 |, c1 {: i5 h3 d; R5 m$ r
if(Game_Score>0)! |, z+ w6 U; y. c
{
3 x8 H( ]6 ?& {- z' x/ n3 X Game_Level++;
$ f# Q5 m' J0 J6 S if(Game_Level==10)6 ~" C* Z2 y$ I- O! ~
{
4 [* }0 k R1 t1 S1 U) u: g Game_Stop=1;5 c: {/ n1 l0 X& h! p8 y
hanzhi(7,5,12,1); // 输出“太棒了"6 F5 L* T ^$ ]
hanzhi(7,7,13,1); - A# C& [( n; ]7 p
hanzhi(7,9,14,1);8 x+ _7 \7 d7 u/ \4 N5 z
/ N# I( b/ r0 S+ ?. p1 b }
$ i! e7 S5 I. J) h Show_num(13,11,Game_Level); //显示水平! i: ]8 x; E7 q" D1 s( P
, P7 |8 ]: R6 |; ]; I. w* J* ]
}: [9 m: g+ H# Q; }
}+ D! a! x- ]( S" K1 @- D9 r
}0 b0 T) c4 ]$ n2 ?
& N1 F: Q' l& u% F0 a3 r" U
//**************************************************************************3 ^. |8 `( r( ]$ ^, o; j: N: t# _
//= 函数原型:void Undisplay_line()/ [. q6 _' I4 x8 N
//= 功 能: 消除行* H$ s) }" o7 C: H* R( [6 K! m
//= 参 数: 无 - |, b* A; g7 }. \' j
//= 返 回 值: 无
8 b! k# Z+ \5 M//= 函数性质:私有函数+ M8 y6 u& x* T# {5 z# Q# i5 x
//= 注 意:3 v0 i$ v/ M. g9 U: R
//*************************************************************************** + P3 z* s+ `, K% r7 a
void UnDisplay_line()
' X4 {) `: \& P7 ^{& ]* U5 Q7 r# S/ h* R& c6 [1 H5 S: F
uchar Del_Line; //标识要删除的行/ H$ b: a, W5 S* N7 b1 T8 S
uchar Del_Line_Num=0; //标识删除的行数
& k8 E9 n5 P. K% l$ |- g; a: c3 g uchar i,j,k;% Q- E2 [$ n' ?4 b8 z
bit HavePoint; //标识一行中是否有空白点
$ S8 o4 @0 T5 @- i' C" y$ s! R+ B% O0 n- g
for(i=0;i<4;i++)
1 J2 r# d! f$ Y [ {# x' z' P& g: h9 C
for(j=1;j<13;j++)
& L7 N, Y7 B: m7 T {
% B* x3 e3 w6 v$ u if(Platform[j][yy+i]==0)
6 F6 n" P+ p, y% X ^( b2 F; @9 I break; //如果这一行中有一个为空,则退出这一行的循环" f" ^$ d7 j, N, `; c2 ]' G) A
else if(j==12)8 f9 n% T e, z9 r1 R
{7 T6 t8 u2 V X" t' ?; w% q
Del_Line=yy+i; //确定要删除的行$ j% t. E$ K# t/ B
if(Del_Line<20)
9 U" z9 z) X6 J9 N. o {
% i$ D- P) P) F Del_Line_Num++; //计算共删除的行数: R- S( `; S; s& `4 |" A
for(k=1;k<13;k++)
6 i# B/ N# ?1 Q3 t: w/ b& ^ {
: m, i: z7 A( Z( o% p XiaoFengKuai(k,Del_Line,0); //删除行
- C6 n3 F7 J$ u% N Platform[k][Del_Line]=0; //平台数据清零
) a: z2 H o B; o+ x }
: S: g# z* i5 G0 I( n: Y while(1) //下移/ G( W7 w. W+ p$ g6 \/ B* |: J, ]
6 j- z7 L3 m" W# u% i' @+ A$ O) N
6 f f( J( Y. ] x" G
0 l' a8 Z* @0 D& a7 u% j& j
…………限于本文篇幅 余下代码请从论坛下载附件…………
+ V! T: C6 m& U, {: V* h8 a: V- c+ z
' \. A5 |& `1 A3 H- Y6 n0 |! e) f- g: n
|
|