俄罗斯方块C++课程设计报告-DOC

  • 格式:doc
  • 大小:30.00 KB
  • 文档页数:5

下载文档原格式

  / 5
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计报告

题目:基于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++课程设计前期准备阶段,设想一些构想和主要任务;后期则是具体功能的实现。

这次设计中我遇到了不少困难,本来设想实现双人版对战,美化界面和增加背景音乐等功能,可是由于时间的短促,最终没能实现,心里不免有些遗憾,在实现类的封装和类的继承和多态性时,也遇到了不少问题,通过大家的一起探讨和分析,问题最终一个个迎刃而解,系统开发基本完毕。

通过这次课程设计,使我懂得了不少东西。我们在日常的学习中应该注意对所学知识的实践运