C++俄罗斯方块实验报告(附实验体会)Word格式.doc
- 文档编号:13064058
- 上传时间:2022-10-04
- 格式:DOC
- 页数:18
- 大小:506.50KB
C++俄罗斯方块实验报告(附实验体会)Word格式.doc
《C++俄罗斯方块实验报告(附实验体会)Word格式.doc》由会员分享,可在线阅读,更多相关《C++俄罗斯方块实验报告(附实验体会)Word格式.doc(18页珍藏版)》请在冰豆网上搜索。
(2)由方向键控制游戏:
上键控制方块变形、下键控制方块下移并判断是否有消行、左键控制方块左移、右键控制方块右移;
(3)游戏积分:
一次性消的行数越多加的分数越多,当消行每超过30行自动提高一个游戏等级。
2、总体设计:
(1)用数组存放方块
(2)输出地图
(3)在地图里面输出方块
(4)开始游戏
(5)方块的旋转
(6)方块是否能下落
(7)判断方块是否能下落
(8)提示下一个即将下落的方块
(9)控制方块的下落速度
(10)分成10等级,等级越高方块下落得更快
(11)消行处理
(12)游戏结束
3、详细设计设计说明:
本程序运行代码如下:
#include<
conio.h>
stdlib.h>
windows.h>
#include"
colorConsole.h"
#defineSQUARE_COLORFOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY//方块的颜色
#defineup72
#definedown80
#defineleft75
#defineright77
#defineesc27
#defineMAPW12//地图的宽度
#defineMAPH20//地图的高度
BOOLisavailable(inta[],intx,inty,intw,inth);
//判定是否能放下
voidturn(inta[][4],intw,inth,int*x,inty);
//转动
int*create();
//创建方块
voidinit();
//初始化工作
voiddrawblocks(inta[],intw,inth,intx,inty,WORDwColors[],intnColors);
voidclearcache();
//清除键盘缓冲区
voidend();
voidclearsquare(int*a,intw,inth,intx,inty);
voidgameover();
voiddeletemap(intm[][MAPW],introw,intw,inth);
//消除一行
intdx=30,dy=5;
//屏幕上的偏移量
intscore=0,level=0;
intmap[MAPH][MAPW];
inta1[4][4]={{1},{1,1,1}};
inta2[4][4]={{0,1},{1,1,1}};
inta3[4][4]={{1,1},{0,1,1}};
inta4[4][4]={{0,0,1},{1,1,1}};
inta5[4][4]={{0,1,1},{1,1}};
inta6[4][4]={{1,1,1,1}};
inta7[4][4]={{1,1},{1,1}};
inta[4][4];
intmain()
{
init();
int*b=NULL;
b=create();
//预创建方块
intq=0;
intsign,blank,x,y;
while
(1)
{
for(inti=0;
i<
4;
i++)//复制方块
for(intj=0;
j<
j++)
if(a[i][j]=*(b+i*4+j))blank=i;
y=1-blank;
x=4;
clearsquare(&
a[0][0],4,4,13,13);
b=create();
HANDLEhandle;
handle=initiate();
WORDwColors[1]={FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY};
drawblocks(b,4,4,13,13,wColors,1);
wColors[0]=SQUARE_COLOR;
drawblocks(&
a[0][0],4,4,x,y,wColors,1);
clearcache();
charstring[5];
wColors[0]=FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY;
textout(handle,26+dx,5+dy,wColors,1,itoa(score,string,10));
textout(handle,26+dx,9+dy,wColors,1,itoa(level,string,10));
sign=1;
while(sign)
{
intdelay=0,max_delay=100-10*level;
//延迟量
while(delay<
max_delay)
{
if(_kbhit())//用if避免按住键使方块卡住
{
intdraw=0;
intkey=_getch();
switch(key)
{
caseup:
clearsquare(&
a[0][0],4,4,x,y);
turn(a,4,4,&
x,y);
draw=1;
break;
casedown:
delay=max_delay;
caseleft:
if(isavailable(&
a[0][0],x-1,y,4,4))
{
clearsquare(&
x--;
draw=1;
}
caseright:
a[0][0],x+1,y,4,4))
x++;
}
caseesc:
end();
}
if(draw)
HANDLEhandle;
handle=initiate();
WORDwColors[1]={SQUARE_COLOR};
drawblocks(&
draw=0;
}
_sleep(8);
delay++;
}
if(isavailable(&
a[0][0],x,y+1,4,4))//判断是否能下移
clearsquare(&
y++;
HANDLEhandle;
handle=initiate();
WORDwColors[1]={SQUARE_COLOR};
drawblocks(&
else
sign=0;
//标记,使跳出while(sign)循环,产生新方块
if(y<
=1)gameover();
//是否结束
for(inti=0;
i++)//放下方块
for(intj=0;
if(a[i][j]&
&
((i+y)<
MAPH-1)&
((j+x)<
MAPW-1))
map[i+y][j+x]=a[i][j];
intfull,k=0;
for(i=y;
min(y+4,MAPH-1);
i++)
full=1;
for(intj=1;
11;
if(!
map[i][j])full=0;
if(full)//消掉一行
deletemap(map,i,MAPW,MAPH);
k++;
q++;
score=score+k;
level=min(q/30,9);
}
}
returnEXIT_SUCCESS;
}
BOOLisavailable(inta[],intx,inty,intw,inth)
for(inti=max(y,1);
y+h;
for(intj=x;
x+w;
if(map[i][j]&
a[w*(i-y)+j-x])
return0;
return1;
int*create()
int*a=NULL;
intc=rand()%7;
switch(c)
case0:
a=&
a1[0][0];
break;
case1:
a2[0][0];
case2:
a3[0][0];
case3:
a4[0][0];
case4:
a5[0][0];
case5:
a6[0][0];
case6:
a7[0][0];
returna;
voidinit() //初始化工作
for(inti=0;
20;
map[i][0]=-2;
map[i][11]=-2;
for(i=0;
12;
map[0][i]=-1;
map[19][i]=-1;
map[0][0]=-3;
map[0][11]=-3;
map[19][0]=-3;
map[19][11]=-3;
HANDLEhandle;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 俄罗斯方块 实验 报告 体会