|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
基于AT89c51单片机制作的俄罗斯方块游戏 T6963C液晶显示源码
. p. M/ k3 d9 M+ U8 F% ^7 O4 y8 U
/ T- e! ? p' p4 t3 c- r
' }: z) `7 I/ t! F注明:只能按2键往左移
! Z; @$ }* m9 f. z( a9 B 按4键往右移3 W/ S5 {& u* P
按8键变换
5 R2 ^ G0 U% j3 V% Q* B 无快速下降键 - r2 C/ W' M4 B
$ ^/ D0 W* j# E$ ]+ h1 E/ B& a
部分源码预览:
- V* |( b6 A- G' F- k5 X#include "t6963c.h"# E* n z) I, h S4 B
#include "typedef.h"
- R" R! O! z) w#include "key.h"
7 S/ i1 ?/ k, A' M- ^) \7 U. i& p8 Q$ G' d
#define X_START 5. d0 N" z: M" r e3 J j
#define Y_START 0& a3 ?; P3 |6 X: V$ N/ ]
#define MIN_SLOW_SPEED 300
+ J7 T& Q! ~# M#define BX_START 30% B2 L' d6 [" n# |( J$ ^/ u
#define BY_START 15
1 i6 [' V* Y2 d \#define Nothing 100
/ j, D6 i, R, f, }6 ^9 N6 W! E
) r2 P$ O" L; w; M. B* M( n' d* c
//全局数据
4 l0 P) z2 s9 h# h( r3 x3 ~code uchar Game_Char[]={0x27,0x41,0x4d,0x45};
3 r% V- R! V' ^# g7 Tcode uchar Over_Char[]={0x2f,0x56,0x45,0x52};: I. R5 Q5 b+ n2 O9 ]+ M/ E( T
& A% H& X x# n% N+ t
static uchar xx,yy; //方块的位置
" S: L' [" z" _$ `4 x. m; qstatic uint Game_Score=0;& i* U1 J0 g/ d1 S! W* y2 X
static uchar xdata Platform[14][21]; //游戏平台数据% ~/ V- m/ R* \* o* x0 Z: k& h
static uchar This_shape; //当前形状. U0 }# u8 l# Q& d. y
static uchar Next_shape=0;; x Q1 V. J; g1 Z2 I5 \
static uint Game_Speed=MIN_SLOW_SPEED; //等级速度,正常情况,方块下降的速度6 q: U; p8 F3 P6 x, S) o" D$ ]
static uchar Game_Stop=1;
- W; u! W1 n4 F8 h6 U2 Cstatic uchar Game_Level=0;) u: U' L3 [ L: g7 X. M
2 r9 D9 `& \( P6 [4 {( n/////////////////////////////////////////////////////////////////////////////////
2 l+ U$ y% t7 a( k/ y4 f/////////////////////////////////////////////////////////////////////////////////- n( b. A/ G; T; i9 B& t! Y
/////////方块形状的定义//////////////////////////////////////////////////////////# v) Y) v P& X. z7 p
/////////////////////////////////////////////////////////////////////////////////
4 t/ d0 X, e; T) [, }struct POINT{
1 a( s8 @% z" G uchar x;- I2 w) B2 [7 V" y
uchar y;) W, j' U8 l; P2 B- ?# T
};4 m# h' @5 _5 T4 T ^
: m/ b$ j' [& N |, ]4 W6 fstruct SHAPE{
$ b) u. i: g! D7 S$ q$ x! w struct POINT point[4];
% X. W/ p& d% d: [ H7 \( g uchar next; //下一个形状8 h" J6 `0 ?4 F/ _
} 6 n! a2 a# u0 A' F" b# a9 m
: \' l/ [1 S' v8 N. [5 j% G1 h/ q
+ T- }/ i i. q( l* `8 r. Uxdata shape[19]={ 8 s2 e2 _* d8 c
* [* H: ?; F/ P0 o# j& X5 f { 1,0,0,1,1,1,2,1,1 }," L- p* Z0 |9 X4 y8 E
{ 1,0,1,1,2,1,1,2,2 },! h, R9 g" u' y# `* C+ i
{ 0,0,1,0,2,0,1,1,3 },, M% J3 s" a. T0 X6 F6 M
{ 1,0,0,1,1,1,1,2,0 },
( l0 \& J4 V& S5 O# X0 ^5 @& U1 d+ M0 l$ t8 t2 o6 Z8 t
{ 1,0,2,0,1,1,1,2,5 },
5 J- b1 ?6 f% W6 N. _) l { 0,0,1,0,2,0,2,1,6 },
9 k7 |% L+ R" ] { 2,0,2,1,2,2,1,2,7 },% F! w4 s; K) p+ p0 T3 _
{ 0,0,0,1,1,1,2,1,4 },
0 K3 U& q' Z# R3 }; S) b0 N; u
+ Z% J1 s; H. R8 u! C+ D8 q { 1,0,2,0,2,1,2,2,9 },- J1 i s; y* Z2 F
{ 2,0,0,1,1,1,2,1,10 },
& S% C( M+ d* V+ _ { 1,0,1,1,1,2,2,2,11 },& k$ K' h: f6 d7 [
{ 0,0,1,0,2,0,0,1,8 },/ H/ J4 ~( j1 F; f$ g) ~( e( ]
8 A. v4 @6 F2 p9 V7 u( v# }1 K { 0,0,0,1,1,1,1,2,13 },+ r S! R4 r1 J4 i. S0 ~! k' S5 h
{ 1,0,2,0,0,1,1,1,12 },
) {: u% | h3 f9 j% S0 S1 y! a! l7 H+ N- x6 t$ [
{ 2,0,1,1,2,1,1,2,15 },7 y) Z) c% `& M0 k6 X1 ?+ N
{ 0,0,1,0,1,1,2,1,14 },
T; x# o! @& P3 D6 e% L
" B; u# u0 e4 t9 ^% V { 1,0,1,1,1,2,1,3,17 },
% }) E! T. k6 l { 0,1,1,1,2,1,3,1,16 },. F2 r% W9 U, x- j/ \6 m, g+ W
5 R3 Y: h# j, l# c& B1 z
{ 1,0,2,0,1,1,2,1,18 },
" k' D( a* ~& ?5 L( M8 j3 i& \' c$ P' I: d# }# r$ O! |) E
}; 8 h) |2 s4 o8 i$ ~% a/ c5 Y
8 K9 M8 d# T& [
////////////////////////////////////////////////////////////////////////////3 @4 q: `9 E* u3 x0 M3 g& p# a% W7 J, ?
//**************************************************************************+ f- \ F# ?6 z
//= 函数原型:void Init_GamePlatform()$ |- w9 u9 {% ?$ J
//= 功 能: 初始化游戏平台: k1 X: r: c! B1 H, P' b1 n6 o! o6 n
//= 参 数: 无
+ @& a$ D" h; n/ Z: k: G% n//= 返 回 值: 无0 y% e$ D; \9 X6 z: s1 k* `6 u. N
//= 函数性质:公有函数( g' h1 \5 b3 D' ?) \* r* D
//= 注 意:' W1 p# c6 c+ v
//*************************************************************************** " {5 d* |! {9 d) c: t' m9 x
void Show_score(uchar);
% \0 b B8 E1 C4 F$ dvoid Init_GamePlatform(), \+ H$ U( M4 D% ^: F- b
{( l9 i. l; R; }. i3 @
uchar i;
$ q4 c3 P$ R. H/ }7 {! T" \( T uchar j;
o$ `8 K+ {0 m9 T$ U: x9 P uchar N_Hanzi;
7 D2 }" N" ~# M& m M f5 I
" `0 Y( Y- V9 M4 j Wr_line(1,33,13,64,1 ); //初始化游戏平台边界 画游戏区域
! v2 A& D! L) ]- c Wr_line(1,33,14,64,1 ); //画上横线
: n* x& S/ m7 O Wr_line(0,33,15,100,1);0 o0 u, f X* J& J4 K
Wr_line(0,34,15,100,1); //画左竖线
6 I/ f( ]' z. W& O3 { Wr_line(1,33,115,64,1);
) R# n4 B8 e$ O/ f' ^0 O7 f Wr_line(1,33,116,64,1); //画下横线- Q- s1 O7 s/ t) u
Wr_line(0,95,15,100,1);3 | C/ i7 K) p& m7 |0 d0 R
Wr_line(0,96,15,100,1); //画右竖线
4 I" }; d2 y0 t+ w2 @/ w//--------------------------------------------------------
* e7 ]: P5 O2 }( d: b, T0 |* j$ C for(i=1;i<13;i++) //游戏平台数据清零2 K5 W& n, [1 ~
{+ w5 h7 N' |' r$ E
for(j=0;j<20;j++)
k) C, u' ~2 u2 | {5 I, R, {2 ^6 j
Platform[j]=0;/ Q9 m5 W( R2 K7 e4 x4 @# |
}
- B# ~' F' A4 w" Q }
" n1 f5 I6 X! [ for(i=1;i<13;i++)
. x0 E/ f6 w; Y {
2 t$ _) g4 M+ D/ y% ]( g6 | Platform[20]=1; //游戏平台最下面一行的每一个方块位置为1,作为下边界
- T! D. e3 T+ S# v } V+ Y5 }& o l- q) L
; M4 n2 P6 T1 M5 d
for(j=0;j<20;j++) //游戏平台左右方块位置置1,作为左右边界5 U3 p7 B9 N% ]6 O, ~5 A6 y
{
$ ~2 I" o& A- d. j& H Platform[0][j]=1;
. Y5 q, L: m4 @0 h Platform[13][j]=1;- _) W$ R. ^ [; k) c
}
# x( N5 R9 J* w# s7 i) G//--------------------------------------------------------- 5 Y9 g! {* ]. q+ R
N_Hanzi=0;
( g; {6 x, p& x$ `( p for(j=3;j<=12;j=j+2) //
2 e0 ^# X( f) } {( u; i2 \3 {$ F) X7 a. Y
hanzhi(1,j,N_Hanzi,1);, |9 c7 l1 M R" p
N_Hanzi++; //指向下一个汉字
4 M9 e" L: `0 G C }
$ p8 N/ T1 B$ F _$ g2 a
6 ^! x6 F3 e z q. {5 p9 j hanzhi(13,3,6,1); //输入“分”汉字
" B. v* R1 }) p9 f5 g+ w/ W hanzhi(13,8,8,1); //输入“级”汉字5 y& R) @6 b+ n$ T; J6 w$ t0 E
$ z/ V! m3 W+ L8 }
Show_score(0); //显示初始分数
$ b$ L4 S! E5 Z/ t$ ?- @ Show_num(13,11,Game_Level); //显示初始等级水平* z% B9 ?8 [/ m
Game_Speed=MIN_SLOW_SPEED/(Game_Level+1); //根据水平确定速度3 o. F! H9 N" a/ A/ V
: x8 n' A: g. F4 @; e* h: H//------------------------------------------------------------------
+ S- M" C4 d* ]' y/ u- e Game_Score=0;
# ]. u A0 |0 X xx=X_START ;
! G8 b5 T- v- t yy=Y_START ;
' [& o2 d4 G8 ~& U& x$ |/ s}
' I* P+ [; J8 k$ H2 F! e////////////////////////Init_Game/////////////////////
% v5 e) g6 ?+ }- [" I- [void Init_Game()
1 v) n- j4 |) @6 G; E% H' y8 ^{
0 N! r; d9 `% M, J Game_Stop=1;
1 L! u7 v r9 ]6 w; z o1 ~ Init_GamePlatform();
2 C4 m! [6 ]( f4 s1 r hanzhi(7,3,9,1); //输入“按”汉字
) u% N# Q% G: h Show_num(7,6,7); //显示7
9 A' ^0 s& Q# u; H4 f# @0 G$ R: @ hanzhi(7,8,10,1); //输入“开”汉字- o% \ } m' p* ]4 }7 b
hanzhi(7,10,11,1); //输入“始”汉字4 J( X0 ?! T& H- P+ ^& S
}
! V+ {3 I& G" _//**************************************************************************
2 y$ ?$ V* ^( k8 U//= 函数原型:void XiaoFengKuai(uchar x,uchar y,uchar mode)
5 A4 P2 g) K6 H6 P//= 功 能: 显示一个小方块3 b6 q% k2 l/ Q' B/ ]2 s& A) }
//= 参 数: 小方块的横x,坚坐标y,mode=1:显示小方块,mode=0:删除小方块 ( V# z" m- n) F, d6 F5 q
//= 返 回 值:
' H' W; @4 J/ B' l7 e3 J//= 函数性质:私有函数% k, }. e$ }1 H5 i3 n
//= 注 意:) T$ E# C( n" S/ t6 O
//***************************************************************************
/ q( l- U& Y# Yvoid XiaoFengKuai(uchar x,uchar y,bit mode)
8 H1 j: s2 N/ O! {; a{
: Z( _6 ?+ M0 ?7 d) P) b& K uchar x1=5*x+BX_START; //将方块在平台的位置转化成LCD的点坐标(地址转换)
/ J1 ^5 J% m: ]/ A. a _ uchar y1=5*y+BY_START;
7 ]9 O2 C2 Y3 x2 f3 ?1 T2 a7 o uchar i;4 R4 V! H# V) e0 Z7 ?4 {3 C; }1 U
- R( A& E$ _. k" y5 ]2 u3 ? if(mode==1)! R5 V& S: n+ ]9 d P# I8 A
{( N- g; R" Z1 B( P1 t
# b, D& x0 u9 A- r) a
for(i=0;i<5;i++)
) ^. d5 a( n- a {0 ^ `$ K& ~# M3 [
Point(x1+i,y1,1); //画一条横线# ` t/ V$ E) x: D8 ]. j3 J& S6 v
}3 _5 ~9 T3 J! R9 W+ r I
. X. i- h! [1 W8 ?/ n
+ K- G, T8 Z8 B, F( C
y1+=4;/ ~6 u: E4 w, j/ `5 ]0 K0 [ |7 p5 W
9 ]# {* u; N% K* o9 Z for(i=0;i<5;i++)) w. J; y% O: j% D; {
{
& \; o2 [% O0 l, Q- _+ c( K" l Point(x1+i,y1,1); //画第二条横线
: ^0 M! [, w: g+ m# { }
: v6 D$ O) x1 S2 l$ S0 F( G' |8 C6 R% V$ C2 D0 c) f
for(i=0;i<5;i++); Q# T+ |9 ]0 f3 b
{
$ y& {, K9 u* I( d Point(x1,y1-i,1); //画第1条坚线
* M4 F3 V2 P8 o* i1 f }9 V! T$ m3 ^: r
9 g/ M6 W, V& ^) r# @
x1+=4;' J s: s8 n2 F x/ ~5 X
$ |; I: h, A+ J: ^3 p1 M4 k2 @
for(i=0;i<5;i++)
% l3 f8 M2 F. u! R {
& d l+ M/ k5 u7 { Point(x1,y1-i,1); //画第2条坚线
c6 s9 f1 t0 q/ j$ W } s2 I& x }/ h. ~
( @! [8 E9 j7 g" j$ n' T3 V( W y1-=4;- h0 t& n' N- m4 k# y
for(i=0;i<5;i++)
' D) A% U6 ^7 d, N' |1 q0 w {
/ g; J: H8 @$ B- y6 i: m Point(x1-i,y1+i,1); //画斜线
8 S S3 E C. n0 t% e" l, D6 i- ?# `) f }
' s+ z: ~- \3 H+ g; D1 e }. U+ F* h5 @. B3 u3 a" ^
4 `: C' |* C7 @$ ^- P5 J; q8 E
else
# Q; k. J) ?" U: K: J' r {
6 Q5 ~8 Z2 H, N& @- {5 D( h for(i=0;i<5;i++)
# x( l. m; v1 y* {; k8 v {
1 s9 G+ l- {# j3 H Point(x1+i,y1,0); //画一条横线
9 v7 Q& w7 a F9 Z8 O! l8 s }
, ]4 ]8 |6 J9 ]
$ _/ d3 \( t" S7 V! c( r' R% b y1+=4;, T# X( G3 h2 `- H' t8 |
for(i=0;i<5;i++)
: w/ J- O- J/ v {$ [- x! u3 O( Z! F# F2 Q1 t
Point(x1+i,y1,0); //画第二条横线
1 S; z2 v9 V0 o) v$ e# P R3 ?) L/ t }
. w6 b* I0 o9 G* w; S6 @! M+ _: s& y \
for(i=0;i<5;i++)
4 ~, z( @1 O) X# H0 ~ {
4 q: Y7 {7 _ P% ] Point(x1,y1-i,0); //画第1条坚线1 e% Z y5 X# r6 I1 l+ D- \
}
0 v- B( F5 ~) `; {+ l# y. S! K) m8 ]7 W c1 i0 W$ g$ s$ B
x1+=4;
% Z5 F d0 g* K1 k7 D for(i=0;i<5;i++)
& b% d. s2 u& U$ E3 T {6 [+ b4 K. q2 U* A
Point(x1,y1-i,0); //画第2条坚线; H x8 p% D* t6 y, H: f
}
/ d3 w. S4 d3 [, y! S1 Q- g
0 I: p" n$ m& N( W y1-=4;' f( n- }2 C8 i
for(i=0;i<5;i++)
+ G5 ~1 `6 c+ ?( V {
' y7 u8 x. V5 Y' c5 j- F Point(x1-i,y1+i,0); //画斜线7 K2 J2 S) S1 g9 E; b+ { t
}
o& o$ v; {/ i }: w2 y7 J1 I6 J7 r2 B! _: U
}9 P# ]# M1 @& V) s
//////////////////////////////////////////////////////////////////////////' I1 @ [; }- ]1 W& X. d* U' n6 p
////////////////左冲突检测//////////////////////////////////////////////
6 F, C. m( ^8 U2 l9 ]; ~1 Ibit Left_Anti()
0 ]8 S! V; y- w{
5 q# ?8 `* ?8 ?* F( G q! A uchar i;1 l+ B# x f- O) J
for(i=0;i<4;i++)
/ }+ {5 b- D% C- F, V( m0 Y. S {
, e& m: U3 c& R1 ~. i0 ~ if(Platform[xx+shape[This_shape].point.x-1][yy+shape[This_shape].point.y]==1)
3 n" G+ p5 H C% V# h1 P return 1;9 a% D7 K! o2 w: _4 E. U! F+ E
}* E, x" I! B P
return 0;# P% y! `- S9 ]$ y
} ( p* D! c. q' P- U
9 m1 T/ F4 v6 E9 H' r- X( g
////////////////右冲突检测///////////////////////////////////////////
6 ]. X. o9 D( Qbit Right_Anti()* z& s) ?7 _. a# z+ }) F& d8 t
{! Q# k7 U% d1 E3 b
uchar i;
2 K' A8 t: z0 ^# [( v0 m8 l' X q2 z for(i=0;i<4;i++)
: _6 ^4 J' U1 \ {7 K' Z0 {; p: l9 @$ S' v6 H3 D
if(Platform[xx+shape[This_shape].point.x+1][yy+shape[This_shape].point.y]==1)
( O# e2 T2 F) X- j# S return 1;
- F/ J% p4 u1 P6 m9 P' k- |( \ } ! u" c$ N; z: R2 W0 m
return 0;4 I+ I6 I4 l8 M8 z
4 z* _. M: u0 d0 i7 y' H$ z& }, V}+ t& q% D) B3 U$ n! i
5 l. D( s( L# _////////////////////////////////////////下冲突检测//////////////////////////7 R0 u" [; D! `0 L+ M
bit Bottom_Anti()
/ R9 J4 y" p$ Z& F{2 u8 ?( j& O$ z( d8 G/ M
uchar i; c! J: s% d$ j3 L$ q( W
for(i=0;i<4;i++)
3 Y- M- q- L" p2 u( W; h( @ {
/ B5 n4 E* f8 r1 L' [' ~, |3 }5 D* r if(Platform[xx+shape[This_shape].point.x][yy+shape[This_shape].point.y+1]==1), w% `# L/ m/ z3 ^' S+ b" l @
return 1;6 E* Q" Z- K' T' j- s! Z) e2 ]
}
, b. @7 y, U! o& z+ w return 0;
1 ]2 m0 u a. q}; X/ U' E; u5 i! N% q6 i5 w0 [
//////////////////////////////////改变形状时产生的冲突检测////////////////////+ S5 Y/ ]2 V6 ?* L3 D _3 ?
bit Change_Shape_Anti(): S- }5 O# A( j7 _ @
{
p ~ X$ d t9 \0 o uchar i;) d& w1 m# i J' `
for(i=0;i<4;i++)
6 o8 q9 W6 k/ b5 ^& L {
) D' b" {: k* l/ B3 p' O5 Q if(Platform[xx+shape[shape[This_shape].next].point.x][yy+shape[shape[This_shape].next].point.y]==1)' q+ u: O# M: ?# C+ W n" o
return 1; //检测一个形状的冲突情况5 I2 {( |( C" i: W6 O
}
- B3 i- G6 j# N( G; G) M return 0;, N' f; P! d$ \' P
}6 p/ W6 H, o( V$ d. q, R
//////////////////////////////////产生一个随机数,返回一个随机数///////////////
; P0 d# G9 m" S2 l, l% [+ C1 e6 t$ luchar Random()0 f7 E2 k- A( u% Z p
{
" P5 m8 v# a+ |) F: o( R1 H static uchar m;! F# }7 u# f5 A& H; \# b) h6 M
m+=49;- N t9 d; N/ G( k
return (m%19);! a& w. q9 [1 C- b) M9 q+ F
}8 l1 [+ R7 \9 b8 ^9 |0 v8 F
. B7 ]! X$ m- D3 A. @; f% |
//////////////计分函数,参数为 消行行数n///////////////////////////////////////
: N+ z6 s5 s( N9 @0 w9 w4 s C4 A6 d2 |7 j: G9 s, E
void Show_score(uchar n)2 l9 }4 i0 A* Z8 O- P
{, O& [' u5 b' x" \ u& v
Game_Score=Game_Score+10*n;) ?* x1 X. m- _1 w5 y4 s
7 M5 j& {$ o0 S
if(Game_Score<10)
$ P1 E9 ^/ z1 H; J" W6 b {- b! E3 P7 `, v
Show_num(13,6,Game_Score%10); //显示个位
) m% @& A( J: p- G: K* B }$ X: v) A7 o2 e% H" ^
else if(Game_Score<100)3 N, [6 Z/ C0 B# d
{
, U% ~1 G5 c! Y1 P" i Show_num(14,6,Game_Score%10);, h! D( h, O, {8 r4 {- @
Show_num(13,6,Game_Score/10%100); //显示个位,十位
4 S; ?" w5 w) U+ L% M/ a }
) c6 ^1 r6 i( R( M6 J) u* y else if(Game_Score<1000)
- m5 s/ j9 B6 ^. K# Q0 n2 t, y {
) [- |# R0 c E/ }1 Z Show_num(14,6,Game_Score%10); Y3 `7 L6 Z. |. o
Show_num(13,6,Game_Score/10%10);
$ V/ m) j" ?5 ^0 g; a1 u! z, l Show_num(12,6,Game_Score/100%10); //显示个位 ,十位,百位
8 ?5 b$ }3 ]5 [ }
9 K: s5 h5 V, O else
4 w+ V; J7 m- v# A5 ^- ~. p" \ {
; @( S% C) y8 F' Q/ g; m9 T& P Show_num(15,6,Game_Score%10);
8 h! N4 g* {- O7 r2 y# ^0 c3 c: l2 D* d& J Show_num(14,6,Game_Score/10%10);1 P7 A7 ?5 k4 u4 j
Show_num(13,6,Game_Score/100%10); //显示个位 ,十位,百位,千位. ?: J I) C; n& F1 }
Show_num(12,6,Game_Score/1000);; m+ \: b) [2 N
}" [& ?6 t9 v( s: d2 P# \& R4 I
) L4 G+ [* a4 ` E3 V; Y2 s
if(Game_Score%1000==0)
F9 k' H: Y( C# i1 h9 Q. ]+ ? {
' ~9 i/ g7 c1 Q5 J if(Game_Score>0)! f. G3 i- m6 |
{# s: X1 [" i1 S3 i
Game_Level++;/ m' t- g- D/ S7 X. f" [
if(Game_Level==10)
7 p& u: w$ S+ B5 S% T {$ i7 M0 k* w% v. D/ n7 }
Game_Stop=1;! B' `( e; r7 M1 h+ ]5 F8 s8 y7 A
hanzhi(7,5,12,1); // 输出“太棒了"9 E8 S& Q3 ^; @0 U+ m+ [
hanzhi(7,7,13,1); 4 g: n: B D' f% r9 p& L
hanzhi(7,9,14,1);" [$ D i1 T A$ ?* y4 B. Z' K
! t9 _+ x. F3 \7 s" c( D8 g* S& |" f }& I! l: `! D( Z# l, l4 s
Show_num(13,11,Game_Level); //显示水平
" T- F$ N( F1 j* b' \$ ?$ j6 f
% Q% j( ^$ I! Q( T+ s5 D: f) z }
5 ~$ ~4 g8 X' [ f! ~ }/ ^- h* b+ R0 a9 @' }
}
2 P" j2 H. }8 T9 d7 z+ `. c- K. o$ F: {% g
//**************************************************************************
6 t8 \8 ~3 H2 i5 q: v, H//= 函数原型:void Undisplay_line()! M, l8 v% N, j/ q5 Y5 `( x
//= 功 能: 消除行" X e* n4 e* F: \- e- {* V& _" {
//= 参 数: 无
+ X) ~* |6 r5 j" p1 F//= 返 回 值: 无) z: l6 E* V4 e
//= 函数性质:私有函数; n' L8 O$ _2 E
//= 注 意:. ^ G8 [5 `! t& K% {
//*************************************************************************** ) V8 z( D, Z. f3 Q, z
void UnDisplay_line()' \; q* j" i& T m
{
( X* } W/ [. D" { uchar Del_Line; //标识要删除的行
1 \* u" ?" e( a/ L8 N& ]+ T% k; x: h; C uchar Del_Line_Num=0; //标识删除的行数5 w! V( M- b7 S5 Y+ u! h
uchar i,j,k;
- I& n& b$ h; }1 F bit HavePoint; //标识一行中是否有空白点
$ L* b/ k; |3 z, L' g d- ]& A/ |! O: g( q
for(i=0;i<4;i++)
5 G' a; o" r% m {& {3 |% q+ H/ I6 w+ s: S
for(j=1;j<13;j++)
- k) h+ i3 f# h3 p) o' S) c {: N% J# c7 t* |* L
if(Platform[j][yy+i]==0) " t' f9 t# Q7 a7 K, U
break; //如果这一行中有一个为空,则退出这一行的循环
8 Q/ g) ?3 g; X; }9 b" ]5 Q0 { else if(j==12)
6 o, ~( W& w& q X; o {
# v2 U/ |9 }" h( d) D Del_Line=yy+i; //确定要删除的行& ^, x: M# D6 q7 e9 j& [& w
if(Del_Line<20)8 E1 ` }( d" d( i7 d# }
{
7 ~) n: [& ^" H' c) R$ d1 Q Del_Line_Num++; //计算共删除的行数, Q& }; A7 i9 ^
for(k=1;k<13;k++)) y/ x& p$ X: ~+ B
{
# N8 |+ K) D& [7 C3 @/ {8 ]1 { XiaoFengKuai(k,Del_Line,0); //删除行
. D: ^- [$ E# i: E+ X Y Platform[k][Del_Line]=0; //平台数据清零$ ^. A6 Y) u+ w* L
}: c& G: _7 F0 a+ K- P
while(1) //下移
; [3 m J' p4 U* w' l8 f0 f- V
# y8 R, H D6 t; u5 R2 D, V! _! i" S# v8 H* U6 } r8 i
) q2 A& ]5 w0 p
…………限于本文篇幅 余下代码请从论坛下载附件…………2 _+ P' `6 {. H1 o. {' O+ m
! W1 ?, e) F* g) s' l' _( j
! K/ ^% C3 e" O" O |
|