|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
基于AT89c51单片机制作的俄罗斯方块游戏 T6963C液晶显示源码! j2 }2 O. s( l; ]& [" f
! x7 F, ?8 O! g9 N# V s
4 C3 E& Z6 q/ n' V; A% n1 m
注明:只能按2键往左移' O( ]7 l( W& r- L, a
按4键往右移3 J6 i- d/ E& |9 u
按8键变换$ x+ G o l& h" _2 S/ F9 F
无快速下降键 * C4 s ? i+ h0 @7 V
0 r, _& @6 c: z. {9 T( X部分源码预览:" ]1 w8 M& z" e- x3 k4 ?
#include "t6963c.h"
2 Q5 _* L5 X n7 t4 S#include "typedef.h"
$ p+ z- F1 ?5 E4 f#include "key.h"4 o9 @! \2 f* c
4 h! w/ n' i: }/ b. q. _; S; m
#define X_START 5
1 [7 T) P5 }$ t#define Y_START 0
, ~% F" Z5 k$ q#define MIN_SLOW_SPEED 300 F9 d, C( m! Z1 ] Y2 Z" u- O* C+ T! ~
#define BX_START 30. F. B0 E3 v' M6 q( J
#define BY_START 153 q" h) I- A k6 }7 R. d* O) _
#define Nothing 100
9 m O: `! g& u
4 {! p* E* L" Y' M. S3 h" U
+ H* L: L2 L# ]3 S//全局数据
" d. H2 ]! h# W- b- T2 scode uchar Game_Char[]={0x27,0x41,0x4d,0x45};
n2 C8 B9 q( P9 y0 l* e5 Qcode uchar Over_Char[]={0x2f,0x56,0x45,0x52};+ a" D( b3 J( n" [
' L" t1 ]: l' P& v/ ?2 u6 J
static uchar xx,yy; //方块的位置
" R R; D! A dstatic uint Game_Score=0;" ]/ P, r7 z H. r9 ^7 I
static uchar xdata Platform[14][21]; //游戏平台数据
& R" a" |- z/ H) L( pstatic uchar This_shape; //当前形状, g h6 c# i+ g" }
static uchar Next_shape=0;; c7 B& q1 ^$ N: |1 d/ K- e. Z
static uint Game_Speed=MIN_SLOW_SPEED; //等级速度,正常情况,方块下降的速度
! a& p* {8 `. E" Lstatic uchar Game_Stop=1;
; r. ]% {- n- V1 q q3 ~0 Tstatic uchar Game_Level=0;
2 }1 v5 S' Q% V, l! q7 x+ {+ k6 Y9 J8 u. E+ I3 s; ?) ]# c5 P
/////////////////////////////////////////////////////////////////////////////////6 \1 L: X g; ]% Z
/////////////////////////////////////////////////////////////////////////////////# {9 g8 b9 t0 Y) o2 p- r* G
/////////方块形状的定义//////////////////////////////////////////////////////////
0 h+ T5 Q5 Q( w7 j9 [, I; T/////////////////////////////////////////////////////////////////////////////////* m/ E: X3 ]. m" }+ x' Z+ H0 o7 q
struct POINT{5 A9 Y0 S6 {) G# t5 }. d
uchar x;( L3 Q4 a4 C. s& o& b
uchar y;
: M8 c& S9 H- e; ~6 E };
" J$ }" [: I( N. c
5 ?; A/ O! T; g. P! A0 z8 w3 J x' Vstruct SHAPE{- F) u! K. U! D4 E8 l+ m
struct POINT point[4];& o2 |) u6 y( N* U: z- h2 T2 ?
uchar next; //下一个形状
% e2 v! ~/ h, t& t }
/ b* h1 V# L4 }5 ]: _0 C
& B. f* u8 H% O+ t/ e5 j& I8 m5 P4 O0 ^
xdata shape[19]={ 5 z6 \. z; U+ C6 I& c- B
2 m, Y" Z- G6 \, e5 Q+ t7 \
{ 1,0,0,1,1,1,2,1,1 },
- K$ B. y4 }! B9 x { 1,0,1,1,2,1,1,2,2 },
. i2 B& ?4 O7 I { 0,0,1,0,2,0,1,1,3 },
, |$ W+ i" _! f# O0 K. K C( P { 1,0,0,1,1,1,1,2,0 },
( U( w" |: X; u7 L& W2 m- V5 U4 O! u2 \9 m; F( r0 U
{ 1,0,2,0,1,1,1,2,5 },
) a4 T' R! Y4 A; R+ k8 Q { 0,0,1,0,2,0,2,1,6 },3 x- V! z$ B2 g& ~) u4 @
{ 2,0,2,1,2,2,1,2,7 },
! {0 K1 ?3 z% V3 b8 }' V { 0,0,0,1,1,1,2,1,4 },3 z, X- `% ?7 C% @
% a6 v2 x6 c* ?7 d4 @6 Z { 1,0,2,0,2,1,2,2,9 },
/ h& O( Y/ j2 P" \7 E { 2,0,0,1,1,1,2,1,10 },
0 Q5 z% k0 d$ B, T { 1,0,1,1,1,2,2,2,11 },
4 g1 e7 z" X4 o, L2 m0 d! l1 } { 0,0,1,0,2,0,0,1,8 },9 S, U/ a) O+ F
1 I1 q" q& q4 T1 Z { 0,0,0,1,1,1,1,2,13 },; I ~* Y+ ~' n% Y: Y
{ 1,0,2,0,0,1,1,1,12 },
T- j' W" L! k5 P
) _# S, |) j+ l8 C: U6 R. m { 2,0,1,1,2,1,1,2,15 },
S/ r5 }. i1 ^ { 0,0,1,0,1,1,2,1,14 },
( p7 @( d- V0 H; p. ?$ ~" @ {& G: G! \
+ l( r2 K5 y8 v) G8 X/ f; O3 @ { 1,0,1,1,1,2,1,3,17 },
$ k, W3 @1 Z+ l& p5 c" U { 0,1,1,1,2,1,3,1,16 },, c6 j% Z6 F) q* A# M: M! F9 L
. u. z' k1 e; K( x; ], F O, C- ?
{ 1,0,2,0,1,1,2,1,18 },
4 M4 y6 A( b: h9 r# E4 n: t3 b; T& A j) M7 z
};
* @! z; q$ y d( _1 t
: E# N1 z6 ^+ H! ]////////////////////////////////////////////////////////////////////////////6 D5 D9 Q: B7 P# n( \4 q
//**************************************************************************
! \: l7 K% n# l: u' j3 q//= 函数原型:void Init_GamePlatform()1 i, s! u3 b# p9 g! }# _- Z
//= 功 能: 初始化游戏平台& J* `6 l- ?' r; R: Y4 o
//= 参 数: 无 0 H& |7 @& J6 g* \5 a- x! ~' F
//= 返 回 值: 无* B" t6 v- Y+ E' f( c* i, N% @( `
//= 函数性质:公有函数" _ M# j2 H8 k6 T) x
//= 注 意:- @! k. u3 @ R# S) L5 C
//*************************************************************************** $ h% H2 V6 J! O: @6 x; F
void Show_score(uchar);
" J- x; f+ u2 X8 }void Init_GamePlatform()
" l5 C; k7 V. I{
6 u+ o- \8 h* y5 o) d0 f) s8 d: i uchar i;
" i# s2 \2 x/ ]; ]: Y uchar j;5 R# O7 R- Y2 A u( j
uchar N_Hanzi;4 H6 j) |1 v# @2 ~7 o6 r3 O* c$ D
/ F5 T6 c o3 u
Wr_line(1,33,13,64,1 ); //初始化游戏平台边界 画游戏区域8 E" ~2 n$ y) o# A, `8 _5 b
Wr_line(1,33,14,64,1 ); //画上横线. D' c# ? f/ b
Wr_line(0,33,15,100,1);0 j7 ?9 J, N0 ?) ~" ~9 d
Wr_line(0,34,15,100,1); //画左竖线$ n# T1 j9 O- }
Wr_line(1,33,115,64,1); ; `+ s3 ^! |- h ?. y7 u1 I( t5 u. o
Wr_line(1,33,116,64,1); //画下横线, E1 s G9 D0 O5 K3 O' R
Wr_line(0,95,15,100,1);/ o G r/ O% P( J( |
Wr_line(0,96,15,100,1); //画右竖线* W8 ]+ g; t/ ?2 X* d
//--------------------------------------------------------. M& e9 @$ g7 x9 R8 f2 a6 I
for(i=1;i<13;i++) //游戏平台数据清零 v: r" |' U p9 C
{
; x4 |$ ] D1 _( z/ F! d( U for(j=0;j<20;j++)
7 P: c8 f$ t5 u6 I- P# r& Z {+ r! j o, M1 \
Platform[j]=0;
8 x9 b2 g2 d% K2 ^" b; V0 g" E/ q }
9 o, i1 ~+ u6 g) p9 z }2 a: A' X/ K' U3 b& n
for(i=1;i<13;i++)
1 R, }0 t% v y7 o {
7 V) j9 D. ?0 m; T6 q6 U8 k Platform[20]=1; //游戏平台最下面一行的每一个方块位置为1,作为下边界
5 M7 j( G5 ]6 t5 \, O6 V }# I5 W$ k: d7 @7 B) K* N
8 f T& s3 v5 L( y- I" ^; y* J
for(j=0;j<20;j++) //游戏平台左右方块位置置1,作为左右边界
/ V) B* d# c$ w7 z3 w- O {
0 ]: p) @6 L3 `. b+ n+ T: e Platform[0][j]=1; S5 b9 S8 B9 t5 F6 p+ x1 u5 g
Platform[13][j]=1;6 b5 y6 h8 J1 T* q' _* h1 Y3 R
}
" j6 \' O$ x$ x% P//--------------------------------------------------------- / f+ f% ~6 C' ?2 }5 E5 x
N_Hanzi=0;
9 p/ y; O6 N4 Z+ o8 V for(j=3;j<=12;j=j+2) //! y' {) V# L/ u( {. {9 z" N; C
{; Y u. V O s" L' g q5 t3 Z
hanzhi(1,j,N_Hanzi,1);" J; i. V& c0 r; z8 E& \
N_Hanzi++; //指向下一个汉字
. p9 A! s! S6 A1 n! b! p1 N }7 w' D$ l' e! `! p2 Q
+ |. Z. D x, }! c, J; A
hanzhi(13,3,6,1); //输入“分”汉字* S* H' t7 B; `$ O( {- E0 G
hanzhi(13,8,8,1); //输入“级”汉字
$ X" @+ o" A8 q. p$ b% A2 y/ R
# i5 `# o7 Q @9 o Show_score(0); //显示初始分数
5 K9 o1 l! R5 o7 |) U* v Show_num(13,11,Game_Level); //显示初始等级水平
# y' T( E4 b6 w3 Y( y: v6 [, a' U Game_Speed=MIN_SLOW_SPEED/(Game_Level+1); //根据水平确定速度
) p- ~7 U, f& q1 ?' q1 S! C* a& X6 e1 `0 ~
//------------------------------------------------------------------9 x$ d# ~. U7 j: P6 s- o& n
Game_Score=0;
: n( Y7 P: g3 Q* j xx=X_START ;
Y: y" W8 Y9 `1 g% n yy=Y_START ;: u4 O" I5 Z6 j4 H
}+ e. X6 v$ C" o/ Q8 n# _
////////////////////////Init_Game/////////////////////
8 c7 C. B3 p' C4 n3 X9 r. K# C8 jvoid Init_Game()$ U- C+ s0 |' E* A$ i' `
{
; J- _2 E y, e4 l, w. h Game_Stop=1;
( U" X# K, w; k3 k$ \$ L& Q Init_GamePlatform();7 L! N( t) W0 W4 C) g1 S$ W! m' {
hanzhi(7,3,9,1); //输入“按”汉字
% R4 u4 t7 ?$ E Show_num(7,6,7); //显示7 W7 V( ^- A$ t# w4 |- }
hanzhi(7,8,10,1); //输入“开”汉字& X; Q5 {% i3 E8 f( k3 g
hanzhi(7,10,11,1); //输入“始”汉字! G. C8 D3 p7 K2 ~
}
4 `7 Y# l" `. H Y9 g//**************************************************************************
! u5 \3 E7 ]3 B* R, D//= 函数原型:void XiaoFengKuai(uchar x,uchar y,uchar mode)# k, d/ c: D0 d2 c- E2 G; x7 X
//= 功 能: 显示一个小方块
; m2 G% u& j! V9 G0 r) M2 @//= 参 数: 小方块的横x,坚坐标y,mode=1:显示小方块,mode=0:删除小方块
- |) P4 }3 ]* x, N, \5 R9 |//= 返 回 值:6 K4 I* K! _3 h2 E* @8 {$ o
//= 函数性质:私有函数
1 Z( d" `8 O8 P( |: n7 k* C//= 注 意:
9 G9 X6 `( d9 h7 {//*************************************************************************** 0 X3 ^: K n4 j. [# n6 f
void XiaoFengKuai(uchar x,uchar y,bit mode)
$ _! k: u# Z; d* W9 ~{& G2 @( b8 T8 m# K" q! ~9 J* V* ^
uchar x1=5*x+BX_START; //将方块在平台的位置转化成LCD的点坐标(地址转换). l6 ~8 O) ^3 V
uchar y1=5*y+BY_START;
; t" U5 e+ H0 a9 q7 F8 m P uchar i;
: r% x& A. [# K
' F9 {: J" {9 C# Z) N7 W2 M% o) | if(mode==1)
+ o. j T6 Y2 s! j; F- {4 f2 s. @! s {
: `0 N8 R& [2 A e( P( R
' K( x6 D/ w; T/ d7 h for(i=0;i<5;i++)
% v( e9 Q! T# a+ c) Y {
. H5 Y" @' M" B Point(x1+i,y1,1); //画一条横线
9 d7 {+ N' F. e" B }! b7 N/ \* ?) x# o' u
/ S0 ]9 M: A/ h( i3 _0 F
4 K O9 E0 F& e% f5 Q
y1+=4;
7 J7 n4 ]0 |# r8 r9 T# I2 f: T+ }% a- K8 x4 V( w) X" c
for(i=0;i<5;i++)0 Z; o g* w1 `" [6 Q G
{% D" @) P8 _2 V' Z: A
Point(x1+i,y1,1); //画第二条横线( F! W8 f0 H* q
}9 S: K$ ^; p9 k
. B X. p" P! }7 c: h8 ^ for(i=0;i<5;i++)
) ?/ o" C' C) j4 ^' M. b' U {
8 }' y8 r: a9 p: ]& o- z Point(x1,y1-i,1); //画第1条坚线/ v" z7 m) }1 R4 I$ Y* }) H
}
2 p! d M5 o9 {; z, {& U8 B; C5 Z# A" a4 w3 C: C, o
x1+=4;
( D4 s8 T' {+ _: e& D8 J' ?& j* U; c
for(i=0;i<5;i++)
5 h0 r3 t) S3 F1 | o* k3 W9 X5 e {) p! U% K5 A0 z; h9 \1 h; w3 z
Point(x1,y1-i,1); //画第2条坚线/ |# a% A& `; L7 I: d1 N6 \
}
) D5 q4 m x% F# _6 a9 X
) V0 [& r! v9 v% i+ X% V/ T: ]' ] y1-=4;
7 H- {( ]. X, Q5 D# R i5 W* l for(i=0;i<5;i++)9 G+ V- m) g; S
{
9 v7 S' p+ p$ T( z: o' V# K Point(x1-i,y1+i,1); //画斜线$ d" g3 Z( h9 A1 y; f! K
}
- ]# N9 x/ O8 @+ ?% A( ?$ A, } }
" t* C1 _- _/ u9 H5 j. Z9 g \/ n0 ~3 e6 p0 x8 d. _: {0 _
else
9 o! Z* W. ]3 S; b5 r, u( ]$ ? {
- N: _7 \; H ~8 t: v8 c for(i=0;i<5;i++)) C' k5 G7 ]5 S6 t
{# t0 t$ d) k: O( e% j+ o
Point(x1+i,y1,0); //画一条横线
! |" B9 t# C" y$ _ }3 k5 o% J3 T6 ~9 Z, n
) r- A+ u7 c$ P4 r
y1+=4;3 W @3 A% @( C$ P2 g$ o
for(i=0;i<5;i++)1 Y/ B: y# q: [7 r
{
/ V0 ?; Q n- n8 A1 L; Q' |" Y4 J: I Point(x1+i,y1,0); //画第二条横线& v8 R1 l# Z: o8 e9 v
}
$ I4 K4 D) M k D5 {5 z( C5 k: }' Z, I7 d+ ~
for(i=0;i<5;i++), g3 }& o8 w3 q7 M1 D* O' a
{, u( y( }% ]: N K2 S; F# b: j
Point(x1,y1-i,0); //画第1条坚线
4 x: { D, {4 N }
" ]/ O5 f- N8 k. M" X9 u) t
M1 h s& L. B8 R# `4 p, D x1+=4;* u# w$ ]- u- u$ U ?
for(i=0;i<5;i++) }! X8 T8 H5 b! o+ M" D
{
6 n( W# @. x' Z9 t+ B Point(x1,y1-i,0); //画第2条坚线4 b$ @& C, z0 k' e) ~: l2 U1 O
}9 M4 W+ `4 U+ u
0 E+ D1 @! V9 ~* C+ J y1-=4;
' b/ a, y4 u t" c for(i=0;i<5;i++)7 U/ j- i2 r! }+ ~; D2 b; _5 L
{
3 C4 T4 K% o5 t) u5 A) j: x Point(x1-i,y1+i,0); //画斜线6 _+ S, ~# {' h
}
( K% j/ |% c: O9 @4 M2 ]& E }
" g1 M: N" y/ N/ Y) D0 N}" q/ [; l1 B5 |7 ?" F8 ]9 E
//////////////////////////////////////////////////////////////////////////) M0 U+ b' X9 I5 {7 H3 b
////////////////左冲突检测//////////////////////////////////////////////
4 Z3 L4 ~/ x# y5 i! l( U6 Qbit Left_Anti()& L/ ]) J! N" c# i
{
+ @) f( ^7 ?7 n1 \! @$ s$ i- q uchar i;
& ~( D: v& B; _1 s for(i=0;i<4;i++)
* M$ y! |) m% J {
4 _! h, f( H% S, z if(Platform[xx+shape[This_shape].point.x-1][yy+shape[This_shape].point.y]==1)
- N' F9 Q% V# T/ I( ^ return 1;
! S, Z1 `. \( N+ E }4 X8 d' L+ n! f% B
return 0;
8 Q: a( o0 F- F: e0 ~}
8 t- y; X' n7 g2 d9 ^. v! s/ K. n3 D0 @( m7 F! d5 }
////////////////右冲突检测///////////////////////////////////////////- k& C8 y! N, \. ^
bit Right_Anti()
( y) q: y3 u5 C& J7 O{
7 Z, y4 }8 s- A) ]3 ? uchar i;
4 r0 H2 V* H( Z( [: ~+ V R for(i=0;i<4;i++)$ @* m, m" Q5 U- @$ h5 @" q' C
{4 U7 m' o6 K3 q* N9 |
if(Platform[xx+shape[This_shape].point.x+1][yy+shape[This_shape].point.y]==1)* _4 ~1 Z6 x. [& Z$ N8 s4 h1 g
return 1;
" L/ k) Y6 ?( ]% n }
& P- b$ u2 o4 s0 p) G0 h return 0;
3 ~8 f ?) O/ a% `+ ^; x8 q8 |
! ~# j( k: T" R% k% U4 R' R. H- @' x& h/ r}9 V& N4 |% Q0 S
9 U3 k/ C3 W8 v+ A# b6 g
////////////////////////////////////////下冲突检测//////////////////////////
7 }& k: m4 c3 I" d' M% X; Sbit Bottom_Anti()
! x( O& T. W$ D( \. h0 h{
, B3 z6 _+ s$ ~! Y) P! y uchar i;
( W2 e* P, J+ O/ P for(i=0;i<4;i++)6 v. m, i, r5 b k' X# n, U
{8 C# @1 _/ v% u! I0 J
if(Platform[xx+shape[This_shape].point.x][yy+shape[This_shape].point.y+1]==1)
! i j$ x+ _! X6 U: P" I! } return 1;% S7 I- l3 S0 N$ k7 h6 r$ _4 M
}) I5 t( ^( ^1 U; I1 @" |
return 0;
2 _& X/ {! C/ H) N, ^: p}" v, p* s8 N& e. O8 c9 y# A
//////////////////////////////////改变形状时产生的冲突检测////////////////////( ]( d6 u) V0 P% F
bit Change_Shape_Anti()) M- {) ]4 v, O: Z( f/ i
{7 U i$ p1 @# L
uchar i;
1 ]0 b# v& }: Z8 p8 i2 H5 e0 A for(i=0;i<4;i++)
3 M2 F2 p# x$ @3 g* ]' A {$ R8 m) |$ `* k- z" n: I
if(Platform[xx+shape[shape[This_shape].next].point.x][yy+shape[shape[This_shape].next].point.y]==1)
% z, l+ T/ K' k& t5 i return 1; //检测一个形状的冲突情况' ^# H# q8 q. s! R9 C) y" {( @
}
+ r' n4 h/ ]+ ?$ q+ K return 0;4 |0 |7 N! d0 _, ?, y( O0 T
}0 [7 f, G2 M5 T, |
//////////////////////////////////产生一个随机数,返回一个随机数///////////////: P4 m+ x1 u! p
uchar Random()7 t4 I( y+ r' H9 \" d. B o
{
$ W# B) p, M! {2 {& i6 h static uchar m;, `. l- _" P6 N8 n
m+=49;2 L6 X' z5 H1 R
return (m%19);
! b. e# a' O W+ b}$ w4 Y l2 N1 m: P3 q
. e- r5 c6 ]$ _( I9 m c4 j! _//////////////计分函数,参数为 消行行数n///////////////////////////////////////! Y4 d7 k, }& r7 d& O5 M; @: a
3 l* f9 Z, o: |! c
void Show_score(uchar n)) o2 r/ _9 X5 D2 J1 q. W
{. T! g$ h H; x [9 l
Game_Score=Game_Score+10*n;
, a' ~0 {* a( Q' S* m9 ^4 e
3 I3 L( w1 r7 l+ ]( y/ x* |" S if(Game_Score<10)
$ f0 g/ O. r+ T/ v$ K* E {
8 E7 }6 v4 \% C! ? Show_num(13,6,Game_Score%10); //显示个位$ h2 x* S5 f7 ]* h' E) I0 R# g0 `
}5 W; ~! n4 J7 w$ Y$ O
else if(Game_Score<100)
5 A9 @9 ^- r/ N8 g4 J8 T { 8 o+ b3 `. }5 F( E% f
Show_num(14,6,Game_Score%10);0 i( ]0 e; @6 K u5 l
Show_num(13,6,Game_Score/10%100); //显示个位,十位
( H0 ^1 u0 ^. ^! C3 V }7 s& y3 J$ K6 F9 E0 J# g! ^
else if(Game_Score<1000)
7 v* ~- D2 L) Z' L+ m" Y+ q {
' H" e! b h! [+ | \( v8 p Show_num(14,6,Game_Score%10);0 {8 H) y1 Q4 G! G6 w- h$ S6 U
Show_num(13,6,Game_Score/10%10);6 S% h9 `6 d# M' v4 F( T0 ^
Show_num(12,6,Game_Score/100%10); //显示个位 ,十位,百位# J9 T, H( `8 x8 h8 W7 j
}
' ]9 Q$ r1 k1 J- d/ k% t# D' P( T else# ]5 b o0 K3 ^0 {- T E
{ 2 Z' G+ {; c+ A% U+ m
Show_num(15,6,Game_Score%10);8 R! D! ~; L7 I, B/ _& S
Show_num(14,6,Game_Score/10%10);
3 l) W* E: h ]' s7 j Show_num(13,6,Game_Score/100%10); //显示个位 ,十位,百位,千位
2 {& a( j1 l |. i) V- w$ B Show_num(12,6,Game_Score/1000);
2 T t2 o0 m s8 z1 A/ p2 y; P }
' [; Z* X( U# k
. A$ Y% o: w" `$ U2 Y0 Z/ H; Z if(Game_Score%1000==0)3 n2 U; h5 G. j! Z( _) C
{; y/ I: ~2 T0 Z7 h }; n( R6 s
if(Game_Score>0)& R% ]6 s# |4 X+ k! z. z/ u( D
{7 j: G2 `7 f* @: t
Game_Level++;
: C, O2 \) _; |) t" q if(Game_Level==10)
! S1 I; {# m5 O( L. \+ n {
4 U' D, L) J+ i) p- Q" D Game_Stop=1;# i4 O4 o9 k$ c5 J7 M7 u }
hanzhi(7,5,12,1); // 输出“太棒了"! ?0 f; I: R1 m* B( u8 M
hanzhi(7,7,13,1); " C. V! ]5 l5 ^7 w* V
hanzhi(7,9,14,1);1 G9 Z4 _$ q; x9 F& k8 F, N
% b. A: F( `8 t9 {
}
) L) p4 f$ Z% P' Z8 X Show_num(13,11,Game_Level); //显示水平8 f$ m0 `9 S! X6 @9 X
" U, B1 ^/ w7 o1 [# L/ g
}! X$ v/ f- W4 B4 u1 S- W$ F
}
8 V2 ~# X( h5 e8 X" R8 z# b3 }( }}. ]& _3 G6 w9 @2 \6 F& ^
3 t- b: x- z9 U6 [3 N5 I6 V' z//**************************************************************************
1 S- p2 m. R) d3 F# Y9 t4 }9 p# V//= 函数原型:void Undisplay_line()0 b0 E6 U/ D1 D8 M: l0 u' L, S
//= 功 能: 消除行! q! x0 d3 _/ q8 k
//= 参 数: 无 ) ^3 c3 ?- i/ w2 z( L
//= 返 回 值: 无
7 A7 `, Z5 V. o! J+ q//= 函数性质:私有函数+ J% a4 k# d3 D: v E' @( ?
//= 注 意:2 i5 R3 X- V- t& f; q$ a) Y
//***************************************************************************
% a' J' q2 g0 m6 i, v3 [ e$ b0 Tvoid UnDisplay_line()
! V, f0 V) K. F$ {' `) A) l{+ s3 h9 ~6 t) ]$ p+ z
uchar Del_Line; //标识要删除的行
+ g7 G; g0 J# ^% K6 f+ [ uchar Del_Line_Num=0; //标识删除的行数% l C- P* r" T% u2 j4 j( A
uchar i,j,k;
. q; M2 q$ f) L t k bit HavePoint; //标识一行中是否有空白点3 U# X! h5 l$ I7 r( H
6 e0 J U/ a* Z p
for(i=0;i<4;i++)
' w. d; ^* y" } K9 c4 ^- ? {
% E/ M, E- M! { for(j=1;j<13;j++)
. Q& \% }. y S. D0 z6 A; ~" l2 v9 T {
7 w0 q; u& ~7 b l3 u if(Platform[j][yy+i]==0)
3 K# M8 v1 K! k- c7 d; ?; c break; //如果这一行中有一个为空,则退出这一行的循环
7 w$ }) |* I2 M5 D k7 w, Y$ M else if(j==12)
8 k$ q+ [% @+ {& {) I, N {' x8 r3 R8 ~* g. j& J
Del_Line=yy+i; //确定要删除的行' [* S$ v2 A: ~. J: X
if(Del_Line<20), @, {1 A3 R \! G
{
. _6 f" B& d5 R- B, e1 Q) ]5 ^ Del_Line_Num++; //计算共删除的行数3 X& P; L0 H4 P
for(k=1;k<13;k++)
$ W5 P3 ~2 a, }+ D _' y9 N: V {
! E* @) y7 f* I7 R- m XiaoFengKuai(k,Del_Line,0); //删除行
6 l; [5 x" a9 A- M' s: V3 O Platform[k][Del_Line]=0; //平台数据清零4 q/ q9 v" b. W: g; g0 A0 B8 q
}
5 u3 k+ F6 H9 j while(1) //下移
( }. I1 `: b8 {6 t- X4 Y1 R) q. |% p8 }
8 L6 H& E+ U* c' f
; P9 D: l( c+ V0 p" d…………限于本文篇幅 余下代码请从论坛下载附件…………
& ^* X6 D5 n, r0 [( J% J) S+ f- ?# w1 z1 A# X' c3 x
% G/ z! G& Q, J- U5 _4 n6 a2 X P
|
|