俄罗斯方块C++课程设计报告-DOC
- 格式:doc
- 大小:30.00 KB
- 文档页数:5
课程设计报告
题目:基于C++俄罗斯方块
学院:
专业:
学号:
姓名:
二○一三年十二月
经典小游戏设计-俄罗斯方块
一、;
二、需求分析。
、游戏需求
随机给出不同的形状(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充给定的区域,若填满一条便消掉,若在游戏中各形状填满了给定区域,为输者,弹出相应提示。
、游戏界面需求
良好的用户界面,有关信息显示(如操作方法、等级等)。让方块在一定的区域内运动和变形,该区域用一种颜色表明,即用一种颜色作为背景,本游戏的背景设为黑色。还需用另一种颜色把黑色围起来,宽度适中,要实现美感。而不同的方块用不同的着色表示,使游戏界面更加清晰、有条理。消层时采用一定的时间延迟,增加视觉消行的感官效果。
、游戏方块需求
良好的方块形状设计,绘制七种常见的基本图形(长条形、Z字形、反Z形、田字形、L字形、反L形、T字型)以及另外本程序另外加入的点形方块,各个方块要能实现它的变形,可设为顺时针或逆时针变形,一般为逆时针。为体现游戏的趣味性和扩展性,本游戏象征性的增加了点形方块,其他更多形状的方块可用类似方法增加。
、游戏控制的需求
《
游戏控分为多个方面,包括画面绘制,控制命令的获取,控制命令的分配、控制命令的处理,方块的绘制,方块的移动,方块的旋转,方块下落和消层以及计分等。对各个命令的合理处理和综合控制十分重要,一旦出错可能导致整个程序的崩溃,因此需要小心设计。
三、系统设计。
、程序流程图:
、游戏设计概述
从整体上而言,在该游戏可设计一个方块类,其中包括对方块的信息描述(如:ID)、方块的操作(如:旋转、下沉)。再设计一个控制类,实现各种控制(如:获取控制信号,分发控制信号)。另定义一个游戏区类,用以处理游戏区绘制等内容。框图如下:
》
while((c&0xF)==0)
{
;
c>>=4;
}
ir[];
intx,y;
{
for(inti=0;i<16;i++,b<<=1)
if(b&0x8000)
{
x=+i%4;
y=4;
if(y DrawUnit(x,y,g_Blocks[].color,_draw); } $ } ir[]; intx,y; for(inti=0;i<16;i++,b<<=1) if(b&0x8000) { x=+i%4; y=4; ? if((x<0)||(x>=WIDTH)||(y<0)) returnfalse; if((y returnfalse; } returntrue; } ir[]; | for(i=0;i<16;i++,b<<=1) if(b&0x8000) { if4>=HEIGHT) { //如果方块的固定位置超出高度,结束游戏 GameOver(); return; } @ else g_World[+i%4][4]=1; } //检查是否需要消掉行,并标记 BYTEremove=0; //低4位用来标记方块涉及的4行是否有消除行为 for(y=;y>=max,0);y--) { i=0; < for(x=0;x if(g_World[x][y]==1) i++; if(i==WIDTH) { remove|=(1<<); setfillcolor(LIGHTGREEN); setlinecolor(LIGHTGREEN); | setfillstyle(BS_HATCHED,HS_DIAGCROSS); fillrectangle(0,(HEIGHT-y-1)*UNIT+UNIT/2-5,WIDTH*UNIT-1,(HEIGHT-y-1)*UNIT+UNIT/2+5); setfillstyle(BS_SOLID); } } if(remove) //如果产生整行消除 { //延时300毫秒 ~ Sleep(300); //擦掉刚才标记的行 IMAGEimg; for(i=0;i<4;i++,remove>>=1) { if(remove&1) { for(y=+1;y ) for(x=0;x { g_World[x][y-1]=g_World[x][y]; g_World[x][y]=0; } getimage(&img,0,0,WIDTH*UNIT,(HEIGHT-+1))*UNIT); putimage(0,UNIT,&img); score++; outtextxy(50,150,_T(score)); } } } //产生新方块 NewBlock(); } 四、测试结果。 程序完成后运行如下,达到预期结果,运行效果良好。 成功地完成了方块的显示、旋转、消行功能,游戏可玩性强,且具有封装性、通用性、容错性。 五、实验总结。 本次C++课程设计前期准备阶段,设想一些构想和主要任务;后期则是具体功能的实现。 这次设计中我遇到了不少困难,本来设想实现双人版对战,美化界面和增加背景音乐等功能,可是由于时间的短促,最终没能实现,心里不免有些遗憾,在实现类的封装和类的继承和多态性时,也遇到了不少问题,通过大家的一起探讨和分析,问题最终一个个迎刃而解,系统开发基本完毕。 通过这次课程设计,使我懂得了不少东西。我们在日常的学习中应该注意对所学知识的实践运