俄罗斯方块 c语言编程思想 怎么实现的一个思路

俄罗斯方块 c语言编程思想 怎么实现的一个思路,第1张

1.定义各基本的图形单元,并把它们实现。桥穗亏

2.定义显示区域中行、列数,实现可以按1中定义的单元进行填充(显示)

3.定义数据结构,进行各行填充满时的判断,此族指时可以进行消除。并把上面各行依次下移。

  (注意:1中定义的图元,在下落到最底行时,就不必要保持图元的信息,而是把相对应的2中

  定义的行列区域进行填充,这实际上就是3中定义的数据结构的 *** 敏神作,图形只是按照数据结构

  中对应的定义显示出来而已,实际上,你先把3定义好之后,再做1,2更合适)

4.加上对图元的控制(加快速度,左右翻转,左右移动)

5.增加积分设计,增加分值对速度的影响等。

6.增加其它好玩的设计,如:爆炸效果、消除时的特效等等。

7.有耐心的话,增加其它元素,如:连网对战,双人对战,历史积分记录等等功能。

8.图形美化,等等其它细节。

1、用C语言绘制图形界面

EasyX图形库(http://www.easyx.cn)即TC的图形库在VC下的移植。

包含库#include <graphics.h>

先初始化图形窗口

initgraph(WINDOW_WIDTH, WINDOW_HIGH) WINDOW_WIDTH为窗口的宽带,WINDOW_HIGH为窗口的高度。

清空绘图设备

cleardevice()

设置画笔颜色

setcolor(RED)

设置线条风格

setlinestyle(PS_SOLID, NULL, 0)

画矩形

rectangle

还有画线、显示文字等函数,可以参照其帮助文档。

注意:由于我们用的是EasyX图形库,故源文件后缀要为.cpp,但其中内容都是C的语法。

2、存储表示出俄罗斯方块的形状

一、我们可以用编号,不同的编号代表不同的俄罗斯方块,根据编号把不同方块的画法写在代码中,这样19种

方块就得有19种相应的代码来描绘。而且这样扩展性不好,若以后设计了新的方块衡胡源,则需要更改大量源代码。

二、我们很自然的想到可用字模点阵的形式来表示,即设置一个4行4列的数组,元素置1即代表这个位置有小

方块,元素置0即代表这个位置无小方块,这个整个的4*4的数组组成俄罗斯方块的形状。

1000

1000

1100

0000

这个方法挺靠谱,但我们还可以优化一下:不用4*4的数组,而是用16个bit位来表示这个点阵。这样存储起来比较方便,故我们用unsigned int 的低16位来咐态表示方块的点阵。

我们可以用掩码与表示俄罗斯方块的位进行 *** 作,来识别并在屏幕上画出方块。

我们把俄罗斯方块点阵的数位存在rockArray中,我们可以事先把这19种方块的字模点阵自己转化成十六进制,然后在rockArray数组的初始化时赋值进去。

但这样做未免有点太费力,且扩展性也不太好,若以后设计的新方块种类加入,要改变数组rockArray中的值。

我们可以考虑把所有俄罗斯方块的点阵存储在配置文件中,在程序初始化时读取文件,把这些点阵转换成unsigned int的变量存储在rockArray中。

这样,以后我们增添新的方块形状只需要在配置文件中增加新的点阵即可。

@###

@###

@@##

####   (为使得看起来更醒目,我们用@表示1,用#表示0)

3、让图形动起来

在某位置处用函数DrawRock在屏幕上画出俄罗斯方块,然后再擦除掉(即用背景色在原位置处重绘一次方块),最后在下落的下一个位置处用函数DrawRock在屏幕上画出俄罗斯方块,如此循环,中间用计时器间隔一段时间以控制下落的速度。

同理,按下屏幕的左右键也是如此,只是在按下键盘时把方块的位置重新计算了。

那么按下上方向键时,如何让方块翻转呢?

我们在配置文件中就把方块的顺时针翻转形态放在了一起:

@###

@###

@@##

####

@@@#

@###

####

####

@@##

#@##

#@##

####

##@#

@@@#

####

####

我们每按一次上方向键改变一次方块的形状即可。若一直按上键,形状应该是循环地翻滚。

我们想到了循环链表的数据结构可实现这个效果。

可是我们若把这些一种类的方块的各种形态串成循环链表形式,那么每次重新生成方块时我们就难以随机地生成方块了。

故还是得用数组来存储,但又要有循环链表的功能,于是我们想到了静态循环链表。

我们用结构体来作为一个方块在rockArray中的元素

typedef struct ROCK

{  //用来表示方做源块的形状(每一个字节是8位,用每4位表示方块中的一行)

unsigned int rockShapeBits

int          nextRockIndex   //下一个方块,在数组中的下标

} RockType

这样,当我们按下上方向键时,把传入函数DrawRock中的rockIndex变为当前方块结构体中的nextRockIndex即可。

参考资料:C语言图形界面篇

#include<stdio.h>

#include<string.h>

#include<bios.h>

#include<stdlib.h>

#include<time.h>

#include<dos.h>

int dx[4],dy[4]/*定义全局变量*/

int zt1,zt2,str[15][19]

/*str[15][19]是把整个屏幕分为15*19个方格,每一个方格用一个数组单元表示,

如果=15,则这个方格已被或搏占用,=0,则还是空的*/

int cx[8][5][4],cy[8][5][4]/*该变量表示每种状态下,旋转时坐标的改变*/

int x,y,j,ji,c

int maxzt[8]={0,2,1,4,2,2,4,4}/*各个种类的方块分别有几种状态*/

cir() /*旋转的处理函数*/

{ dx[0]=dx[0]+cx[zt1][zt2][0]dy[0]=dy[0]+cy[zt1][zt2][0]

dx[2]=dx[2]+cx[zt1][zt2][2]dy[2]=dy[2]+cy[zt1][zt2][2]

dx[3]=dx[3]+cx[zt1][zt2][3]dy[3]=dy[3]+cy[zt1][zt2][3]

}

jiance() /*检测旋转或移动能否进行的函数,能则j=1,不能j=0*/

{ j=1

for(ji=0ji<4ji++)

{ x=dx[ji]y=dy[ji]

if(str[x][y]!=' ') j=0

}

c=bioskey(1)

if(c!=0) c=bioskey(0)

}

main()

{ int dotx[4],doty[4],score/*dotx[]doty[]表示一个方块个点的坐标*/

int ddx,ddy

int rzt1,rzt2,i,u,t=1

int a[5],b[11],o,p,an,bn

int rotx[4],roty[4],spd=0

begin: system("cls")/*游戏初始化阶段*/

printf("londing...")

for(i=0i<12i++) /*变量初始阶段*/

{ for(u=0u<19u++)

str[i][u]=' '

}

for(i=0i<12i++)

{ str[i][0]='薯拆-'str[i][18]='-'}

for(u=0u<衫手祥19u++)

{ str[0][u]='|'str[11][u]='|'}

cx[1][1][0]=1cx[1][1][2]=-1cx[1][1][3]=-2/*对旋转变量进行赋值*/

cy[1][1][0]=1cy[1][1][2]=-1cy[1][1][3]=-2

cx[1][2][0]=-1cx[1][2][2]=1cx[1][2][3]=2

cy[1][2][0]=-1cy[1][2][2]=1cy[1][2][3]=2

cx[2][1][0]=0cx[2][1][2]=0cx[2][1][3]=0

cy[2][1][0]=0cy[2][1][2]=0cy[2][1][3]=0

cx[3][1][0]=1cx[3][1][2]=-1cx[3][1][3]=1

cy[3][1][0]=-1cy[3][1][2]=1cy[3][1][3]=1

cx[3][2][0]=1cx[3][2][2]=-1cx[3][2][3]=-1

cy[3][2][0]=1cy[3][2][2]=-1cy[3][2][3]=1

cx[3][3][0]=-1cx[3][3][2]=1cx[3][3][3]=-1

cy[3][3][0]=1cy[3][3][2]=-1cy[3][3][3]=-1

cx[3][4][0]=-1cx[3][4][2]=1cx[3][4][3]=1

cy[3][4][0]=-1cy[3][4][2]=1cy[3][4][3]=-1

cx[4][1][0]=-1cx[4][1][2]=1cx[4][1][3]=2

cy[4][1][0]=1cy[4][1][2]=1cy[4][1][3]=0

cx[4][2][0]=1cx[4][2][2]=-1cx[4][2][3]=-2

cy[4][2][0]=-1cy[4][2][2]=-1cy[4][2][3]=0

cx[5][1][0]=1cx[5][1][2]=1cx[5][1][3]=0

cy[5][1][0]=-1cy[5][1][2]=1cy[5][1][3]=2

cx[5][2][0]=-1cx[5][2][2]=-1cx[5][2][3]=0

cy[5][2][0]=1cy[5][2][2]=-1cy[5][2][3]=-2

cx[6][1][0]=1cx[6][1][2]=-1cx[6][1][3]=0

cy[6][1][0]=-1cy[6][1][2]=1cy[6][1][3]=2

cx[6][2][0]=1cx[6][2][2]=-1cx[6][2][3]=-2

cy[6][2][0]=1cy[6][2][2]=-1cy[6][2][3]=0

cx[6][3][0]=-1cx[6][3][2]=1cx[6][3][3]=0

cy[6][3][0]=1cy[6][3][2]=-1cy[6][3][3]=-2

cx[6][4][0]=-1cx[6][4][2]=1cx[6][4][3]=2

cy[6][4][0]=-1cy[6][4][2]=1cy[6][4][3]=0

cx[7][1][0]=-1cx[7][1][2]=1cx[7][1][3]=2

cy[7][1][0]=1cy[7][1][2]=-1cy[7][1][3]=0

cx[7][2][0]=-1cx[7][2][2]=1cx[7][2][3]=0

cy[7][2][0]=-1cy[7][2][2]=1cy[7][2][3]=2

cx[7][3][0]=1cx[7][3][2]=-1cx[7][3][3]=-2

cy[7][3][0]=-1cy[7][3][2]=1cy[7][3][3]=0

cx[7][4][0]=1cx[7][4][2]=-1cx[7][4][3]=0

cy[7][4][0]=1cy[7][4][2]=-1cy[7][4][3]=-2

srand(time(0))/*对随机数函数rand()进行初始化*/

zt1=rand()%7+1/*生成第一、二个方块*/

if(zt1==2) zt2=1

if(zt1==1||zt1==4||zt1==5) zt2=rand()%2+1

if(zt1==3||zt1==6||zt1==7) zt2=rand()%4+1

rzt1=rand()%7+1

if(rzt1==2) rzt2=1

if(rzt1==1||rzt1==4||rzt1==5) rzt2=rand()%2+1

if(rzt1==3||rzt1==6||rzt1==7) rzt2=rand()%4+1

score=0

for(o=1o<11o++) b[o]=0

switch(zt1*10+zt2)

/*zt1和zt2分别代表方块的种类和状态,这步是根据这两个变量确定方块的四个点的坐标*/

{ case 11: dotx[0]=4dotx[1]=5dotx[2]=6dotx[3]=7

doty[0]=2doty[1]=2doty[2]=2doty[3]=2

break

case 12: dotx[0]=5dotx[1]=5dotx[2]=5dotx[3]=5

doty[0]=4doty[1]=3doty[2]=2doty[3]=1

break

case 21: dotx[0]=5dotx[1]=6dotx[2]=5dotx[3]=6

doty[0]=1doty[1]=1doty[2]=2doty[3]=2

break

case 31: dotx[0]=4dotx[1]=5dotx[2]=6dotx[3]=5

doty[0]=2doty[1]=2doty[2]=2doty[3]=1

break

case 32: dotx[0]=5dotx[1]=5dotx[2]=5dotx[3]=6

doty[0]=1doty[1]=2doty[2]=3doty[3]=2

break

case 33: dotx[0]=6dotx[1]=5dotx[2]=4dotx[3]=5

doty[0]=1doty[1]=1doty[2]=1doty[3]=2

break

case 34: dotx[0]=6dotx[1]=6dotx[2]=6dotx[3]=5

doty[0]=3doty[1]=2doty[2]=1doty[3]=2

break

case 41: dotx[0]=6dotx[1]=5dotx[2]=5dotx[3]=4

doty[0]=2doty[1]=2doty[2]=1doty[3]=1

break

case 42: dotx[0]=5dotx[1]=5dotx[2]=6dotx[3]=6

doty[0]=3doty[1]=2doty[2]=2doty[3]=1

break

case 51: dotx[0]=4dotx[1]=5dotx[2]=5dotx[3]=6

doty[0]=2doty[1]=2doty[2]=1doty[3]=1

break

case 52: dotx[0]=5dotx[1]=5dotx[2]=6dotx[3]=6

doty[0]=1doty[1]=2doty[2]=2doty[3]=3

break

case 61: dotx[0]=4dotx[1]=5dotx[2]=6dotx[3]=6

doty[0]=2doty[1]=2doty[2]=2doty[3]=1

break

case 62: dotx[0]=5dotx[1]=5dotx[2]=5dotx[3]=6

doty[0]=1doty[1]=2doty[2]=3doty[3]=3

break

case 63: dotx[0]=6dotx[1]=5dotx[2]=4dotx[3]=4

doty[0]=1doty[1]=1doty[2]=1doty[3]=2

break

case 64: dotx[0]=6dotx[1]=6dotx[2]=6dotx[3]=5

doty[0]=3doty[1]=2doty[2]=1doty[3]=1

break

case 71: dotx[0]=6dotx[1]=5dotx[2]=4dotx[3]=4

doty[0]=2doty[1]=2doty[2]=2doty[3]=1

break

case 72: dotx[0]=5dotx[1]=5dotx[2]=5dotx[3]=6

doty[0]=3doty[1]=2doty[2]=1doty[3]=1

break

case 73: dotx[0]=4dotx[1]=5dotx[2]=6dotx[3]=6

doty[0]=1doty[1]=1doty[2]=1doty[3]=2

break

case 74: dotx[0]=6dotx[1]=6dotx[2]=6dotx[3]=5

doty[0]=1doty[1]=2doty[2]=3doty[3]=3

break

}

switch(rzt1*10+rzt2) /*确定第二个方块各个点的坐标*/

{ case 11: rotx[0]=4rotx[1]=5rotx[2]=6rotx[3]=7

roty[0]=2roty[1]=2roty[2]=2roty[3]=2

break

case 12: rotx[0]=5rotx[1]=5rotx[2]=5rotx[3]=5

roty[0]=4roty[1]=3roty[2]=2roty[3]=1

break

case 21: rotx[0]=5rotx[1]=6rotx[2]=5rotx[3]=6

roty[0]=1roty[1]=1roty[2]=2roty[3]=2

break

case 31: rotx[0]=4rotx[1]=5rotx[2]=6rotx[3]=5

roty[0]=2roty[1]=2roty[2]=2roty[3]=1

break

case 32: rotx[0]=5rotx[1]=5rotx[2]=5rotx[3]=6

roty[0]=1roty[1]=2roty[2]=3roty[3]=2

break

case 33: rotx[0]=6rotx[1]=5rotx[2]=4rotx[3]=5

roty[0]=1roty[1]=1roty[2]=1roty[3]=2

break

case 34: rotx[0]=6rotx[1]=6rotx[2]=6rotx[3]=5

roty[0]=3roty[1]=2roty[2]=1roty[3]=2

break

case 41: rotx[0]=6rotx[1]=5rotx[2]=5rotx[3]=4

roty[0]=2roty[1]=2roty[2]=1roty[3]=1

break

case 42: rotx[0]=5rotx[1]=5rotx[2]=6rotx[3]=6

roty[0]=3roty[1]=2roty[2]=2roty[3]=1

break

case 51: rotx[0]=4rotx[1]=5rotx[2]=5rotx[3]=6

roty[0]=2roty[1]=2roty[2]=1roty[3]=1

break

case 52: rotx[0]=5rotx[1]=5rotx[2]=6rotx[3]=6

roty[0]=1roty[1]=2roty[2]=2roty[3]=3

break

case 61: rotx[0]=4rotx[1]=5rotx[2]=6rotx[3]=6

roty[0]=2roty[1]=2roty[2]=2roty[3]=1

break

case 62: rotx[0]=5rotx[1]=5rotx[2]=5rotx[3]=6

roty[0]=1roty[1]=2roty[2]=3roty[3]=3

break

case 63: rotx[0]=6rotx[1]=5rotx[2]=4rotx[3]=4

roty[0]=1roty[1]=1roty[2]=1roty[3]=2

break

case 64: rotx[0]=6rotx[1]=6rotx[2]=6rotx[3]=5

roty[0]=3roty[1]=2roty[2]=1roty[3]=1

break

case 71: rotx[0]=6rotx[1]=5rotx[2]=4rotx[3]=4

roty[0]=2roty[1]=2roty[2]=2roty[3]=1

break

case 72: rotx[0]=5rotx[1]=5rotx[2]=5rotx[3]=6

roty[0]=3roty[1]=2roty[2]=1roty[3]=1

break

case 73: rotx[0]=4rotx[1]=5rotx[2]=6rotx[3]=6

roty[0]=1roty[1]=1roty[2]=1roty[3]=2

break

case 74: rotx[0]=6rotx[1]=6rotx[2]=6rotx[3]=5

roty[0]=1roty[1]=2roty[2]=3roty[3]=3

break

}

system("cls")/*显示初始阶段*/

printf("\n\n\n")/*游戏区域下移3*/

for(u=0u<19u++)

{ for(i=0i<12i++)

printf("%c",str[i][u])

printf("\n")

}

gotoxy(16,5)printf("--------")

gotoxy(16,12)printf("--------")

for(i=6i<12i++)

{ gotoxy(16,i)printf("|")gotoxy(23,i)printf("|")}

for(i=6i<12i++)

{ gotoxy(16,i)printf("|")gotoxy(23,i)printf("|")}

for(i=0i<4i++)

{ gotoxy(rotx[i]+14,roty[i]+6)printf("%c",15)

}

begin2: delay(26000)/*游戏开始,延迟1*/

speed: delay(10000)/*加速,延迟2*/

gotoxy(16,14)printf("Score:%d",score)

for(i=0i<4i++)

{ gotoxy(dotx[i]+1,doty[i]+4)printf(" ")

ddx=dotx[i]ddy=doty[i]

str[ddx][ddy]=' '

}

an=an-0.4/*表示按键是否一直按着,用于方块落地后的移动*/

c=bioskey(1)/*按键处理部分*/

/*bioskey(1)是用来检测是否按下案件的函数*/

if(c!=0)

{ c=bioskey(0)

if(c==8292||c==19712)

{ for(i=0i<4i++)

{ dx[i]=dotx[i]+1dy[i]=doty[i]}

jiance()

for(i=0i<4i++)

dotx[i]=(j)? dx[i] : dotx[i]

an=(j||bn)

}

if(c==7777||c==19200)

{ for(i=0i<4i++)

{ dx[i]=dotx[i]-1dy[i]=doty[i]}

jiance()

for(i=0i<4i++)

dotx[i]=(j)? dx[i] : dotx[i]

an=(j||bn)

}

if(c==6512) /*暂停的处理*/

{ while(1)

{ c=bioskey(0)

if(c==6512) break

}

goto begin3

}

if(c==8051||c==20480) spd=1/*加速(spd==1表示加速状态)*/

if(c==4471||c==18432) /*旋转的处理*/

{ for(i=0i<4i++)

{ dx[i]=dotx[i]dy[i]=doty[i]}

/*dx[]与dy[]是临时变量,这样一旦判断为不能旋转,就可方便的回复旋转前的坐标*/

cir()/*旋转*/

jiance()/*判断旋转是否能进行*/

for(i=0i<4i++)

{ dotx[i]=(j)? dx[i] : dotx[i]doty[i]=(j)?dy[i] : doty[i]}

/*根据jiance()得到的j值,判断是对dotx[]与doty[]赋旋转后的还是旋转前的值*/

if(j==1) /*如果旋转可已经行,就对原方块的状态进行改变*/

{ an=(j||bn)zt2=zt2+1

if(zt2>maxzt[zt1]) zt2=1

goto overif/*结束旋转的处理*/

}

for(i=0i<4i++)

{ dx[i]=dotx[i]+1dy[i]=doty[i]}

/*如果不能旋转,再判断坐标右移一个后能否旋转*/

cir()

jiance()

for(i=0i<4i++)

{ dotx[i]=(j)? dx[i] : dotx[i]doty[i]=(j)?dy[i] : doty[i]}

if(j==1)

{ an=(j||bn)zt2=zt2+1

if(zt2>maxzt[zt1]) zt2=1

goto overif

}

if(dotx[2]==1) goto overif

for(i=0i<4i++)

{ dx[i]=dotx[i]-1dy[i]=doty[i]}

/*判断坐标左移一个后能否旋转*/

cir()

jiance()

for(i=0i<4i++)

{ dotx[i]=(j)? dx[i] : dotx[i]doty[i]=(j)?dy[i] : doty[i]}

if(j==1)

{ an=(j||bn)zt2=zt2+1

if(zt2>maxzt[zt1]) zt2=1

goto overif

}

overif:

}

}

begin3: for(i=0i<4i++) /*方块下移的处理*/

{ dx[i]=dotx[i]dy[i]=doty[i]+1}

jiance()

bn=j

for(i=0i<4i++)

doty[i]=(j)? dy[i] : doty[i]

for(i=0i<4i++)

{ gotoxy(dotx[i]+1,doty[i]+4)printf("%c",15)

ddx=dotx[i]ddy=doty[i]

str[ddx][ddy]=15

}

if(j==1&&spd==1) { spd=0goto speed}

if(j==1||an>0) goto begin2

for(u=17u>0u--) /*方块停止下移(方块移动到底了)的处理*/

{ for(i=1i<11i++) /*判断每一行是否排满*/

if(str[i][u]==15) b[i]=1

if (b[1]+b[2]+b[3]+b[4]+b[5]+b[6]+b[7]+b[8]+b[9]+b[10]<10)

{ for(o=1o<11o++) b[o]=0

continue

}

for(o=1o<11o++) b[o]=0

a[t]=ut++

}

score+=(t)*(t-1)/2

for(i=1i<11i++)

if(str[i][1]==15) b[i]=1

if (b[1]+b[2]+b[3]+b[4]+b[5]+b[6]+b[7]+b[8]+b[9]+b[10]>0 &&t==1) goto over

for(o=1o<11o++) b[o]=0

if(t==1) goto ran

switch(t) /*消除方块的处理,t=要消除的函数+1*/

{ case 5: for(u=a[4]u>1u--) { for(i=1i<11i++) str[i][u]=str[i][u-1]}

/*将要消除的行中,最上面一行,上面的方格整体下移,下面的case 4,3,2类似*/

case 4: for(u=a[3]u>1u--) { for(i=1i<11i++) str[i][u]=str[i][u-1]}

case 3: for(u=a[2]u>1u--) { for(i=1i<11i++) str[i][u]=str[i][u-1]}

case 2: for(u=a[1]u>1u--) { for(i=1i<11i++) str[i][u]=str[i][u-1]}

}

t=1

for(u=1u<18u++)

{ for(i=1i<11i++)

{ gotoxy(i+1,u+4)

printf("%c",str[i][u])

}

}

ran: zt1=rzt1zt2=rzt2rzt1=rand()%7+1/*生成下两个方块*/

if(rzt1==2) rzt2=1

if(rzt1==1||rzt1==4||rzt1==5) rzt2=rand()%2+1

if(rzt1==3||rzt1==6||rzt1==7) rzt2=rand()%4+1

for(i=0i<4i++)

{ dotx[i]=rotx[i]doty[i]=roty[i]

gotoxy(dotx[i]+1,doty[i]+4)printf("%c",15)

}

switch(rzt1*10+rzt2)

{ case 11: rotx[0]=4rotx[1]=5rotx[2]=6rotx[3]=7

roty[0]=2roty[1]=2roty[2]=2roty[3]=2

break

case 12: rotx[0]=5rotx[1]=5rotx[2]=5rotx[3]=5

roty[0]=4roty[1]=3roty[2]=2roty[3]=1

break

case 21: rotx[0]=5rotx[1]=6rotx[2]=5rotx[3]=6

roty[0]=1roty[1]=1roty[2]=2roty[3]=2

break

case 31: rotx[0]=4rotx[1]=5rotx[2]=6rotx[3]=5

roty[0]=2roty[1]=2roty[2]=2roty[3]=1

break

case 32: rotx[0]=5rotx[1]=5rotx[2]=5rotx[3]=6

roty[0]=1roty[1]=2roty[2]=3roty[3]=2

break

case 33: rotx[0]=6rotx[1]=5rotx[2]=4rotx[3]=5

roty[0]=1roty[1]=1roty[2]=1roty[3]=2

break

case 34: rotx[0]=6rotx[1]=6rotx[2]=6rotx[3]=5

roty[0]=3roty[1]=2roty[2]=1roty[3]=2

break

case 41: rotx[0]=6rotx[1]=5rotx[2]=5rotx[3]=4

roty[0]=2roty[1]=2roty[2]=1roty[3]=1

break

case 42: rotx[0]=5rotx[1]=5rotx[2]=6rotx[3]=6

roty[0]=3roty[1]=2roty[2]=2roty[3]=1

break

case 51: rotx[0]=4rotx[1]=5rotx[2]=5rotx[3]=6

roty[0]=2roty[1]=2roty[2]=1roty[3]=1

break

case 52: rotx[0]=5rotx[1]=5rotx[2]=6rotx[3]=6

roty[0]=1roty[1]=2roty[2]=2roty[3]=3

break

case 61: rotx[0]=4rotx[1]=5rotx[2]=6rotx[3]=6

roty[0]=2roty[1]=2roty[2]=2roty[3]=1

break

case 62: rotx[0]=5rotx[1]=5rotx[2]=5rotx[3]=6

roty[0]=1roty[1]=2roty[2]=3roty[3]=3

break

case 63: rotx[0]=6rotx[1]=5rotx[2]=4rotx[3]=4

roty[0]=1roty[1]=1roty[2]=1roty[3]=2

break

case 64: rotx[0]=6rotx[1]=6rotx[2]=6rotx[3]=5

roty[0]=3roty[1]=2roty[2]=1roty[3]=1

break

case 71: rotx[0]=6rotx[1]=5rotx[2]=4rotx[3]=4

roty[0]=2roty[1]=2roty[2]=2roty[3]=1

break

case 72: rotx[0]=5rotx[1]=5rotx[2]=5rotx[3]=6

roty[0]=3roty[1]=2roty[2]=1roty[3]=1

break

case 73: rotx[0]=4rotx[1]=5rotx[2]=6rotx[3]=6

roty[0]=1roty[1]=1roty[2]=1roty[3]=2

break

case 74: rotx[0]=6rotx[1]=6rotx[2]=6rotx[3]=5

roty[0]=1roty[1]=2roty[2]=3roty[3]=3

break

}

for(i=6i<12i++) /*刷新一下用来显示下一个方块的那个区域*/

{ gotoxy(16,i)printf("|")gotoxy(23,i)printf("|")}

for(i=6i<12i++)

for(u=17u<23u++) { gotoxy(u,i)printf("%c",32)}

for(i=0i<4i++)

{ gotoxy(rotx[i]+14,roty[i]+6)printf("%c",15)}

c=bioskey(1)an=0

if(c!=0) c=bioskey(0)

if(spd==1) { spd=0goto speed}

goto begin2

over: system("cls")

gotoxy(36,11)printf("GAME OVER")

bioskey(0)

system("cls")

printf("Your score is %d\n\n",score)

printf("Press 'Q' to exit\nIf you want to play again,please press other keys.")

score=0

c=bioskey(0)

if(c!=4209) goto begin

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12562455.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存