当前位置:文档之家› VC++(MFC)俄罗斯方块课程设计

VC++(MFC)俄罗斯方块课程设计

VC++(MFC)俄罗斯方块课程设计
VC++(MFC)俄罗斯方块课程设计

C++课程设计俄罗斯方块游戏

姓名:龙潇

班级:1020562

学号:31

目录

一、课程设计的目的与要求 (3)

1.1课程设计的目的 (3)

1.2课程设计的要求 (3)

二、设计正文 (3)

2.1需求分析 (3)

2.1.1 游戏需求 (3)

2.2.2游戏界面需求: (3)

2.1.3游戏形状(方块)需求: (3)

2.2算法分析 (4)

2.2.1程序流程图 (4)

2.2.2定义方块的数据结构 (5)

2.2.3 游戏设计分析 (6)

三系统设计 (7)

3.1创建界面的主框架 (7)

3.2正常流程的设计 (7)

3.2.1定时制机制 (7)

3.2.2定时处理 (8)

4.1底部到达的判断与销行的实现 (9)

4.2中断操作流程的实现 (10)

4.3变形的实现 (10)

4.4 游戏区域绘图的实现 (11)

4.5 功能的完善 (11)

4.6 游戏演示 (12)

4.7主程序源程序清单 (13)

六、参考文献 (19)

用VC++实现俄罗斯方块的程序设计

一、课程设计的目的与要求

1.1课程设计的目的

综合运用所学知识,熟练掌握VC++程序设计的编码与MFC框架结构。

1.2课程设计的要求

要求用VC++设计与实现俄罗斯方块游戏。要求包括系统的需求分析;系统总框图及每个模块的设计分析;MFC应用程序架构;框架的扩展;算法的设计与实现;游戏的内部实现;游戏区域绘图的实现;系统存在的问题及错误处理;列出所有定义的函数及说明;附上程序源代码。

二、设计正文

2.1需求分析

2.1.1 游戏需求

随机给出不同的形状(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充给定的区域,若填满一条便消掉,记分,当达到一定的分数时,过关,设置六关,每关方块下落的速度不同,若在游戏中各形状填满了给定区域,为输者。

游戏功能要求如下:

2.2.2游戏界面需求:

良好的用户界面,有关数显示和分数显示。让方块在一定的区域内运动和变形,该区域用一种颜色表明,既用一种颜色作为背景,最好设为黑色。还需用另一种颜色把黑色围起来,宽度适中,要实现美感。

2.1.3游戏形状(方块)需求:

良好的方块形状设计,绘制七种常见的基本图形(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型),各个方块要能实现它的变形,可设为顺时针或逆时针变形,一般为逆时针。

2.2算法分析

2.2.1程序流程图

开始

到达底部

销行操作

生成下一个下坠物

下降一个单位

将新生的下坠物代替旧的“下一

个下坠物“

将旧的“下一个下坠物”用作当前

下坠物

到达底部

销行操作

到达底部,

游戏结束

游戏结束处理

结束

图2.2.3 程序运行调用图

2.2.2定义方块的数据结构

对于方块在某一瞬间的位置标识,我们采用一个4×2的小数组标识出来,即用4个存储单位空间存储当前下坠物的每一子块的位置,也就是说,用4个存储单位空间存储当前下坠物的每一子块的位置来对整个下坠物件的位置进行标识,而每个存储空间的大小就是一个典的坐标值(x,y),而每个方块按照从左到右的方式进行编号,并且在编号过程中对于同一列的方块实行从上到下进行编号 [2] 。

图3.1 方块编号

ActiveStatus[0][0]和ActiveStatus[0][1]则是第0号方块的横坐标x 和纵坐标y ;ActiveStatus[2][0]和ActiveStatus[2][1]则是第2号方块的横坐标x 和纵坐标y 。

刷新

游戏结束

重新游戏 下一个图行

达到指定位置

达到指定位置

显示屏幕信息

按向上键

游戏开始

否 按键

7.OnTimer()

10.IsBottom()

12.RectChang

9.OnDraw()

6.invalidatecurren

8.GamePaush

5.RectDown() 11.KeyDown(

13.GameEnd( 1.Main()

2.Rectview()

3.Gamestart()

4.DrawGame

0 1 2 3

(x 0,y 0) (x 1,y 1) (x 2,y 2) (x 3,y 3) 2 3 0 1

(x 0,y 0) (x 1,y 1) (x 2,y 2) (x 3,y 3)

2.2.3 游戏设计分析

有前面的功能描述可知,我先虚拟出俄罗斯方块游戏的类对象,并抽象出核心的数据属性和操作方法等,然后再作细化,最后将整个虚拟类的外壳脱掉,再移植到视图类中去,其实现如下:

CRectGameView : public CView

{

//内部存取数据结构

int m_stateMap[MAX_ROW][MAX_COL];

//初始化操作

GameInitnal(); //游戏的初始化

//用于判断数据相关状态的操作

IsLeftLimit(); //下坠物件是否可向左移动

IsRightLitmit(); //

IsBottom(); //是否已经到达了底部

IsGameEnd(); //是否游戏已经结束

//方块物件下坠过程中的操作

RectChange(); //下坠物件变形

RectDown(); //下坠物件正常下落

RectArrow(); //下坠物件方向移动(左,右,下加速)

//状态控制操作

GameStart(); //游戏开始

GamePause(); //游戏暂停

GameEnd(); //游戏结束

}

通过上面的代码可以看出,在虚拟类中抽象出了核心的内部数据和一些基本的操作函数。对于操作函数,可以把它们分为内部实现的基本核心操作(如判断操作)以及明显提供给外部使用的整体模块外部操作(如状态控制操作)。而内部的基本操作又可以分为判断操作和执行操作这样两种类型[3]。

三系统设计

3.1创建界面的主框架

首先建立一个项目工程,名为skyblue_Rect,并在AppWizard的架构选择过程中选择单文档方式,其他保持默认选项。其项目的架构类视图信息如图所示:

在构架类视图中是MFC基本架构组合:App(应用程序)类、Document(文档)类、View(视图)类、Frame(框架)类和用于提示关于作者的对话框CAboutDlg类,至于COptionDlg 类是用作俄罗斯方块参数选择的对话框类对象。

3.2正常流程的设计

3.2.1定时制机制

从分析游戏的特性可以知道,定时器的产生与生效应该在游戏开始的时候,而在游戏暂停或者游戏结束时则将已经设定的定时器失效/销亡(对于暂停的情况,使它销亡,当游戏从暂停状态又进入游戏状态时候,则重新创建一个定时器并激活它的运作),所以分别在游戏的开始函数、暂停函数已经结束函数中实现定时器的激活与去激活工作。这里,先在资源编辑器菜单资源里面添加三个菜单选项,分别是游戏的“开始”、“暂停”、和“结束”,然后利用ClassWizard直接在视图类对象Cskyblue_RectView中为它们添加空白的处理函数,具体如表2所示。

3.2.1菜单选项功能对应表

菜单选项名称快捷键资源ID 响应处理函数开始游戏&S ID_GAME_STA T OnGameStart()

暂停游戏&P ID_GAME_PAISH OnGamePaush()

结束游戏&E ID_GAME_END OnGameEnd()

3.2.2定时处理

经过定时器的设置后,这里通过利用ClassWizard 跳到定时器到时候的处理函数OnTimer()去实现,当固定时间片间隔到达后,先检测当前下坠物是否已经到达了底部,不是则进行RectDown()下坠物向下移动一个单位的操作,是则到底后产生一个新的“下一个下坠物”,并代替旧的,将原先旧的“下一个下坠物”用作当前激活状态下正在使用的下坠物,并对使用后的一些状态进行检测:是否马上到达底部,使则进行销行操作

;是否在到达底部的同时到达游戏区域的顶部,从而判定游戏是否因违规而结束。

图 3.2.2装载方块

视图类创建了m_icurrentStatus 和m_inextStatus 两个成员变量来记录下坠物的类型,共

有七种形状,并从7种方块中随机抽取图形。而m_currentRect 除了记录下坠物的类型外,还需记录其当前的变形状态,最多用两位表示,第1位用作类型标识(1~7),第2位用作同种类型的不同表现方式,最多有4种状态(1~4)。

在产生新的下一个下坠物前,需要先将当前状态物的记录和旧的下一个下坠物保存下来,然后用随机函数Random()产生一个最大值不大于指定值的随机正整数,将这个新生成的正整数用作新的“下一个下坠物”的形状值。

四、系统实施

7

6

5

4

3 2

1

随机抽取一个数

随机数

一字形 Z 字形 反Z 形

7字形 反7形 倒T 形 田字型

游戏是否结束

保存当前方块坐标

显示方块于屏幕上

游戏结束

调GameEnd() 关数初始化 返回开始界面

4.1底部到达的判断与销行的实现

图3.2.3 处理方块到达图

将新的下坠物放置到游戏区域中去,这时可能出现马上到达底部的情况,因此需要对它进行判断,如果是到达底部,则进行销行处理,并且修改相应的数据状态。而判断是否已经到达了底部,可以通过当前下坠物件所对应的接触面的方块位置为被占用状态(MAP_STA TE_NOT_EMPTY=1)来确定,利用数组InterFace[74][4]记录1~7种下坠物的1~4种形态的接触面信息。

统计分数:在消行处理里面有一个专门用来统计消行数的变量,然后根据变量的值决定分数的多少,程序统计分数是:消一行得100分,同时消2行得400分,销掉x 行,则分数为:x*(x*100)。如果总分数达到过关条件就过关,改变游戏速度,游戏初始化,开启新的一关,然后再加载方块。没有达到过关分数或者没有满行,则加载下一个方块继续游戏。

堆积方块,判断接触面状态及是否得分

2.统计分数

判断是否过关

关数增加,游戏速度将变快。调

用游戏初始化

GameStart()开始新的一关

视图重绘(InvalidateView()) 1.判断行满、处理销行、堆积方块向下移动

4.2中断操作流程的实现

(1)处理键盘事件

关于按键命令消息的响应,可以通过对WM_KEYDOWN消息的处理函数进行截获并重写来实现,下面是对该处理函数OnKeyDown()的重写。

// 功能:处理用户的输入,方块的左,右移,加速及变形

void CSkyblue_RectV iew::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)

{

switch(nChar)

{

case VK_LEFT:

RectArrow(LEFT);

break;

case VK_RIGHT:

RectArrow(RIGHT);

break;

case VK_UP:

RectChange();

break;

case VK_DOWN:

RectArrow(DOWN);

break;

}

CView::OnKeyDown(nChar, nRepCnt, nFlags);

}

4.3变形的实现

当按下向上键时,将会执行方块变化事件(change())。常见的方块有7种(长条形、Z 字形、反Z形、田字形、7字形、反7形、T字型),所有图形都是用两个一维数组来统计它的横坐标和纵坐标,每个方块有4种不同的变化形状。

例计算变形后的小方块的坐标和显示的状态值

//变形后位置在数组中的存放顺序仍需遵循先左后右,在同一列中先上后下

xx1=x1; xx2=x2; xx3=x3; xx4=x4; yy1=y1; yy2=y2; yy3=y3; yy4=y4;

switch(m_currentRect)

{

case 1:

xx1=x1+1; yy1=y1-1; xx3=x3-1; yy3=y3+1; xx4=x4-2; yy4=y4+2;

m_lscurrentRect = 11;

break;

case 11:

xx1=x1-1; yy1=y1+1; xx3=x3+1; yy3=y3-1; xx4=x4+2; yy4=y4-2;

m_lscurrentRect = 1;

break;

……

//省略部分为同类实现的变形后小方块坐标的计算代码

case 73:

xx2=x2+1; yy2=y2-1; xx3=x3+2; yy3=y3-2; xx4=x4-1; yy4=y4-1;

m_lscurrentRect = 7;

break;

}

4.4 游戏区域绘图的实现

首先将外部位图文件rect.bmp中的位图动态导入(映射)到内存位图里面,根据游戏区域中的二维数组GameStatus[MAX_ROW][MAX_COL]中的内部数据将所有数据状态中为被占用状态MAP_STA TE_NOT_EMPTY的小方块区域用指定的小方块图样类型来填充,然后将已经绘制好的游戏区域图像一次性的拷贝到与屏幕关联的设备环境中,从而达到屏幕的显示。

4.5 功能的完善

为了使得游戏功能更加健全,另外为用户提供了一些附加功能,如表4.5.1所示。

表 4.5.1 附加功能描述列表

功能名称选项其他描述

游戏等级选择初级......顶级对游戏快慢难度的设定

功能名称选项其他描述

方块图案样式选择深蓝......条纹对下坠物的小方块图案样式选择

游戏区域大小选择小、中、大对游戏区域的行列数选择

网格的选用有、无是否需要在游戏区域绘制网格

背景音乐的选用有、无在游戏过程中是否播放背景音乐先将这些目标功能通过资源编辑器在主菜单条进行添加,将前面已有的菜单选项补全,再通过ClassWizard添加对应的响应处理函数。其最终效果如图

1

图 4..5.2 游戏设置

游戏是用来给大家娱乐的,所以要能在使用的过程中给大家带来快乐,消除大家的疲劳,所以我在游戏中添加了漂亮的场景和动听的背景音乐,设置了个性化的工具栏快捷键,激发大家的娱乐激情。

4.6 游戏演示

游戏主界面如图所示。

图4..6.1 俄罗斯方块游戏运行主界面4.7主程序源程序清单

CSkyblue_RectView::CSkyblue_Rect V iew()

{

//第一次开始游戏

m_bFistPlay = TRUE;

//缺省为不是游戏暂停状态

m_bGamePaush = FALSE;

//缺省为不插放背景音乐

m_bMusic = FALSE;

//缺省为画网格线

m_bDrawGrid = TRUE;

//总分值清零

m_iPerformance = 0;

//测试值:为12行,10列

m_iRow = 12;

m_iCol = 10;

//左上角X,Y坐标

m_iStartX = 10;

m_iStartY = 10;

//缺省级别为3级

m_iLevel = 2;

//第一种样式

m_iBlockSytle = 0;

//缺省方块大小为m_iLarge个象素

m_iLarge = 30;

//缺省游戏是结束的

m_bGameEnd = TRUE;

int i,j;

//赋初值

for (i=0;i<100;i++)

for (j=0;j<100;j++)

GameStatus[i][j]=0;

//各种形状方块的接触面数据,参见设计书的接触面表格,

//5.判断游戏是否已结束: 碰了底,且第1行有小方块if (m_isBottom)

for (i=0;i

if (GameStatus[0][i])

{

KillTimer(1);

AfxMessageBox("游戏已结束!");

for (j=0;j

for (k=0;k

GameStatus[j][k]=0;

Invalidate(FALSE);

m_bGameEnd = TRUE;

break;

}

}

else //当前方块下降

{

RectDown();

}

CV iew::OnTimer(nIDEvent);

}

// 函数:产生一个最大值不大于指定值的随机正整数(Random) // 参数:MaxNumber : 随机数的上限

// 返回值: 产生的随机数

int CSkyblue_RectV iew::Random(int MaxNumber)

{

//布下随机种子

srand( (unsigned)time( NULL ) );

//产生随机数

int random = rand() % MaxNumber;

//保证非0

if(random == 0 ) random++;

return random;

}

}

}

//内部函数:刷新当前的区域

void CSkyblue_Rect V iew::InvalidateCurrent()

{

int i;

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

{

CRect rect(m_iStartX+ActiveStatus[i][1]*m_iLarge,

m_iStartY+ActiveStatus[i][0]*m_iLarge,

m_iStartX+(ActiveStatus[i][1]+1)*m_iLarge+5,

m_iStartY+(ActiveStatus[i][0]+1)*m_iLarge);

//InvalidateRect(&rect);

Invalidate(FALSE);

}

}

// 内部函数:当前方块下降加速,左移,右移

void CSkyblue_Rect V iew::RectArrow(int m_Type)

{

//获取当前下坠物4个小方块的位置坐标

int x1,x2,x3,x4,y1,y2,y3,y4;

x1 = ActiveStatus[0][0];

x2 = ActiveStatus[1][0];

x3 = ActiveStatus[2][0];

x4 = ActiveStatus[3][0];

y1 = ActiveStatus[0][1];

y2 = ActiveStatus[1][1];

y3 = ActiveStatus[2][1];

y4 = ActiveStatus[3][1];

//对不同的移动命令指示进行分类实现

switch(m_Type)

{

case LEFT:

//对每种不同的移动命令指示特性作相应的可移动分析

if ( (ActiveStatus[0][1]>0) && IsLeftLimit() && !m_isBottom)

{

//清原来的方块

GameStatus[x1][y1]=MAP_STA TE_EMPTY;

GameStatus[x2][y2]=MAP_STA TE_EMPTY;

GameStatus[x3][y3]=MAP_STA TE_EMPTY;

GameStatus[x4][y4]=MAP_STA TE_EMPTY;

//添加新的移动后数据状态

ActiveStatus[0][1] -= 1;

ActiveStatus[1][1] -= 1;

ActiveStatus[2][1] -= 1;

ActiveStatus[3][1] -= 1;

GameStatus[x1][y1-1]=MAP_STA TE_NOT_EMPTY;

GameStatus[x2][y2-1]=MAP_STA TE_NOT_EMPTY;

GameStatus[x3][y3-1]=MAP_STA TE_NOT_EMPTY;

GameStatus[x4][y4-1]=MAP_STA TE_NOT_EMPTY;

InvalidateCurrent();

}

break;

case RIGHT:

if ( (ActiveStatus[3][1]< m_iCol-1) && IsRightLitmit() && !m_isBottom)

{

//清原来的方块

GameStatus[x1][y1]=MAP_STA TE_EMPTY;

GameStatus[x2][y2]=MAP_STA TE_EMPTY;

GameStatus[x3][y3]=MAP_STA TE_EMPTY;

GameStatus[x4][y4]=MAP_STA TE_EMPTY;

//添加新的移动后数据状态

ActiveStatus[0][1] += 1;

ActiveStatus[1][1] += 1;

ActiveStatus[2][1] += 1;

ActiveStatus[3][1] += 1;

GameStatus[x1][y1+1]=MAP_STA TE_NOT_EMPTY;

GameStatus[x2][y2+1]=MAP_STA TE_NOT_EMPTY;

GameStatus[x3][y3+1]=MAP_STA TE_NOT_EMPTY;

GameStatus[x4][y4+1]=MAP_STA TE_NOT_EMPTY;

InvalidateCurrent();

}

break;

case DOWN:

RectDown();

break;

}

}

// 内部函数:方块的变形

void CSkyblue_Rect V iew::RectChange()

{

//先预先变形,然后判断变形后的方块是否有空间,如有足够空间,则进行实际变形,否则不变int xx1,xx2,xx3,xx4,yy1,yy2,yy3,yy4;

int m_lscurrentRect;

CString lsStr;

int x1,x2,x3,x4,y1,y2,y3,y4;

x1 = ActiveStatus[0][0];

x2 = ActiveStatus[1][0];

x3 = ActiveStatus[2][0];

x4 = ActiveStatus[3][0];

y1 = ActiveStatus[0][1];

y2 = ActiveStatus[1][1];

y3 = ActiveStatus[2][1];

y4 = ActiveStatus[3][1];

//变形后位置在数组中的存放顺序仍需遵循先左后右,在同一列中先上后下

xx1=x1; xx2=x2; xx3=x3; xx4=x4; yy1=y1; yy2=y2; yy3=y3; yy4=y4;

switch(m_currentRect)

{

case 1:

xx1=x1+1; yy1=y1-1; xx3=x3-1; yy3=y3+1; xx4=x4-2; yy4=y4+2;

m_lscurrentRect = 11;

break;

case 11:

xx1=x1-1; yy1=y1+1; xx3=x3+1; yy3=y3-1; xx4=x4+2; yy4=y4-2;

m_lscurrentRect = 1;

break;

……

//省略部分为同类实现的变形后小方块坐标计算代码

case 73:

xx2=x2+1; yy2=y2-1; xx3=x3+2; yy3=y3-2; xx4=x4-1; yy4=y4-1;

m_lscurrentRect = 7;

break;

}

//改变形状代码

m_currentRect = m_lscurrentRect;

}

else

{//恢复原来状态

GameStatus[x1][y1] = MAP_STA TE_NOT_EMPTY;

GameStatus[x2][y2] = MAP_STA TE_NOT_EMPTY;

GameStatus[x3][y3] = MAP_STA TE_NOT_EMPTY;

GameStatus[x4][y4] = MAP_STA TE_NOT_EMPTY;

}

//判断是否已到底

IsBottom();

}

//绘图设备环境的初始化

void CSkyblue_Rect V iew::DcEnvInitial(void)

{

if(m_bFistPlay)

{

m_bFistPlay = FALSE;

//黑色的黑笔

m_pBlackPen = new CPen(PS_SOLID,1,BLACK);

//画刷

m_pGrayBrush = new CBrush(RGB(66,66,66));

m_pBlackBrush = new CBrush(BLACK);

}

}

void CSkyblue_Rect V iew::DCEnvClear(void)

{

//设备环境

m_memDC.DeleteDC();

m_memRectDC.DeleteDC();

//位图资源

DeleteObject(m_memBmp);

DeleteObject(m_hMemRectBmp);

delete(m_pBlackPen);

delete(m_pGrayBrush);

delete(m_pBlackBrush);

}

void CSkyblue_Rect V iew::DrawGame(CDC *pDC)

{

int i,j;

//选用黑色画刷,绘制整个游戏所在窗口的背景

pDC -> SelectObject(m_pBlackBrush);

CRect rect;

GetClientRect(&rect);

pDC -> Rectangle(rect);

//选用灰色画刷,绘制游戏区域的背景

pDC -> SelectObject(m_pGrayBrush);

pDC -> Rectangle(m_iStartY ,m_iStartX, m_iStartY + 301, m_iStartX + 360);

pDC->SelectObject(m_pBlackPen);

//画网格线

if (m_bDrawGrid)

{

//画横线

for (i=0;i

{

pDC->MoveTo(m_iStartY, m_iStartX + i*m_iLarge);

pDC->LineTo(m_iStartY+300, m_iStartX +i*m_iLarge);

}

//画竖线

for (i=0;i

{

pDC->MoveTo(m_iStartY+i*m_iLarge, m_iStartX);

pDC->LineTo(m_iStartY+i*m_iLarge, m_iStartX+360);

}

}

int x,y,nW,nH;

//小方块的绘制

for (i=0;i

for (j=0;j

{

if (GameStatus[i][j]==MAP_STA TE_NOT_EMPTY)

{

//在游戏区域中状态为被占用状态的区域绘制小方块

x = m_iStartY+j*m_iLarge +2;

y = m_iStartX+i*m_iLarge +2;

nW = m_iLarge-4;

nH = m_iLarge-4;

pDC->BitBlt(x,y,nW,nH,&m_memRectDC,m_iBlockSytle*30,0,SRCCOPY);

}

}

//画下一次将要出现的方块,用于提示用户

if (!m_bGameEnd)

{

pDC -> SetBkColor(BLACK);

pDC -> SetTextColor(WHITE);

pDC -> TextOut(m_iStartY+320, m_iStartX,"下一个方块:");

int x,y,nW,nH;

for (UINT k=0;k<4;k++)

{

i = NextStatus[k][0];

j = NextStatus[k][1];

x = m_iStartY+j*30 +2+320;

y = m_iStartX+i*30 +2+30;

nW = m_iLarge-4;

nH = m_iLarge-4;

pDC->BitBlt(x,y,nW,nH,&m_memRectDC,m_iBlockSytle*30,0,SRCCOPY);

}

}

}

// 功能:承担所有绘制屏幕工作

void CSkyblue_Rect V iew::OnDraw(CDC* pDC)

{

DcEnvInitial();

DrawGame(&m_memDC); //在内存位图的游戏区域绘制

pDC->BitBlt(0,0,m_nWidth,m_nHeight,&m_memDC,0,0,SRCCOPY);

}

五、课程设计总结或结论

在本次课程设计中,我从指导老师颜宏文身上学到了很多东西。老师认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我收益匪浅。她无论在理论上还是在实践中,都给与我很大的帮助,使我得到不少的提高这对于我以后的工作和学习都有一种巨大的帮助,感她耐心的辅导。另外,在游戏开发过程中谢中科老师也给于我们很大的帮助,帮助解决了不少的难点,使得游戏能及时开发完成,还有所有的同学同样给与我不少帮助,这里一并表示感谢。

六、参考文献

[1]Ben Sawyer. 游戏软件设计与开发指南[M].北京:人民邮电出版社,1998.8~46

[2]钦科技. V isual C++游戏设计[M]. 北京:科海电子出版社,2003.1~211

[3]坂本千寻.V isual C++专业游戏程序设计[M]. 北京:中国铁道出版社,2004

俄罗斯方块游戏的开发需求分析

俄罗斯方块游戏的开发 组长:XXX 组员:XXX XXX XXX XXX 05软件工程一班 一、课程设计的目的和意义 俄罗斯方块游戏是一个经典的小游戏,由于它简单有趣,因而得到了广泛的流行,男女老幼都适合。而俄罗斯方块游戏的设计工作复杂且富有挑战性,它包含的内容多,涉及的知识广泛,与图形界面联系较大,包括界面的显示与更新、数据收集等,在设计的过程中,必将运用到各方面的知识,这对于visualbasi语言设 计者而言,是个很好的锻炼机会。 二、系统功能设计 本系统主要设计以下几种功能 1、游戏难度选择功能 游戏难度选择界面设置在程序运行开始时,一共有九种难度供玩家选择,每选一级难度,都会相应地显示出代表该难度的图片。开始时不设置任何默认的难度,如果玩家不选难度直接按“Enter”进入,将会弹出提示框,提示其先选难度再 进入。 2、方块下落、变形功能 在整个俄罗斯方块游戏中,方块的设计是核心。这里设计了一个方块类:Square(),用来生成方块以及实现块的左移、右移、向下、变形、重画、同步显 示、初始化新块等。 3、自动升级功能 当分数累积到一定大小时,系统将自动为玩家提高难度。这里设置了每消除10行方块,就增加一级难度。当难度增加的时候,方块会相应地改变颜色,以作为 对玩家的提示。 4、游戏音乐功能 游戏开始音乐就自动播放,游戏暂停与结束时音乐相应消除。 5、获取帮助功能 这里设置了一个类,用来显示帮助,按F1键就能弹出窗口,显示游戏规则。

三、系统功能设计分析 俄罗斯方块游戏根据功能的不同,设置了如下12个类:Square,Command, GameArea,GameSetting,GameOver,Help,ImagePanel,JieMian,MyPanel, MyTimer,PlayMidi,WinListener,每个类的描述如下: 1、Square,方块类。这个类中定义了生成方块的方法,用二维数组int[][]pattern,存放7种方块的四种状态。在构造方法中以随机的形式生成方块,同时提供了以下几种方法:reset(),leftTurn(),leftMove(),rightMove(),fallDown(),assertValid(int t,int s,int row,int col),dispBlock(int s)。分别实现方块的重画、翻转、 左移、右移、下落、同步显示等功能。 2、Command,处理控制类。这是一个实现ActionListener接口的类,主要处理点击按钮事件。类中定义了三个int型变量:button_play,button_quit,button_pause,和一个boolean型的变量:pause_resume,并赋值。在GameArea类中通过事件响应,在按钮执行方法中调用其值,使用switch语句,根据不同按钮不同的值, 来响应不同的事件。 3、GameArea,游戏界面类。GameArea继承了JFrame,是俄罗斯方块的主要游 戏界面。这个类定义了GameSetting类的gameScr对象和ImagePanel类的imagepanel对象作为游戏区域面板和控制区域面板。在游戏区域,主要是根据相应格子的设置标志来显示相应的图形图片,这样就实现了俄罗斯方块的实时显 示。 4、GameSetting,游戏画布类。这个类生成的对象将作为游戏界面的方块下落区域,画布的设置为15行10列,当中的方格边长为30,类中还定义了一个二维数组int[][]scrArr作为屏幕数组,表示每一个方格。游戏区域中每一个方格是否存在游戏方块是由该方格的值来决定的,如果该方格的值为1,则表示该方格中存在游戏方块;如果该方格中的值为0,则表示该方格中不存在游戏方块,因此二维数组用于记录游戏区域中每个小方格的值。此外,类中还定义了画方块的方法,根据不同的难度画出不同颜色的方块。单击Play按钮时,系统调用initScr()方法,初始化屏幕,将屏幕数组清零。当满足满行删除的条件时,系统调用deleteFullLine()方法,进行删行加分,而且每删除十行,难度自动增加一级,方块颜色改变,并在难度显示框中相应显示。 5、GameOver,游戏结束弹出提示框类。当游戏结束时,系统弹出提示,包括玩 家分数以及询问玩家要继续游戏还是退出。 6、Help,帮助类。在游戏界面,按F1键,弹出提示窗口,获取帮助。 7、ImagePanel,背景图片类。这个类继承了JPanel类,用来作为游戏界面中控 制区域的容器,并添加图片。 8、JieMian,主界面类。这个类继承了JPanel类,作为游戏的第一个界面,也是难度选择界面。定义了9个单选按钮,当玩家未选任何难度就按Enter时,系统会弹出一个提示框,提示玩家先选难度再进入。 9、MyPanel,重写MyPanel类,使Panel的四周留空间。

俄罗斯方块游戏设计报告

C语言课程设计 报告 设计题目:俄罗斯方块游戏设计 院系: 班级: 学号: 姓名: 指导教师: 设计地点: 开课时间:

学生姓名成绩 评语: 指导教师(签名) 年月日

目录 1.设计目的和任务....................................................................................................................................... - 1 - 1.1目的: .............................................................................................................................................. - 1 - 1.2任务: .............................................................................................................................................. - 1 - 2.开发环境.................................................................................................................................................... - 1 - 2.1硬件环境:.................................................................................................................................... - 1 - 2.2软件环境:.................................................................................................................................... - 1 - 3.设计题目...................................................................................................................................................... - 2 - 3.1题目名称:.................................................................................................................................... - 2 - 3.2题目详细描述: ........................................................................................................................... - 2 - 3.3功能要求: ............................................................................................................................................ - 2 - 4.相关技术以及知识点.......................................................................................................................... - 3 - 4.1编写BLOCK类:............................................................................................................................... - 3 - 4.2 PATHGRADIENTBRUSH 类: ........................................................................................................ - 3 - 4.3 RANDOM类:.................................................................................................................................. - 3 - 4.4 GDI图形处理: ........................................................................................................................... - 3 - 5. 设计与实现 .............................................................................................................................................. - 4 - 5.1 设计流程图................................................................................................................................... - 4 - 5.2 游戏主体界面 .............................................................................................................................. - 4 - 5.3 游戏图形界面 ............................................................................................................................ - 11 - 5.4 图形的移动与消行 ................................................................................................................... - 13 - 5.5 得分的实现................................................................................................................................. - 15 -6.总结 ........................................................................................................................................................ - 16 -7.参考资料................................................................................................................................................ - 16 -

MFC课程设计报告一个简单的计算器应用程序样本

设计一个简单的计算器应用程序 一、设计目标与内容 1.了解Windows编程的基础知识, 掌握MFC应用程序的基本知识; 2.基本掌握面向对象程序设计的基本思路和方法; 3.掌握用VC++开发应用程序的的一般步骤和方法; 4.能够利用所学的基本知识,设计一个简单的计算器应用程序, 实现基本的加、减、乘、除、求平方根, 求倒数等基本运算( 必须实现的功能) , 实现求角度的正弦、余弦、正切等基本运算、实现求指数、自然对数、常见对数等基本运算( 这部分功能选做) 。 5.在程序中注意处理数据和运算符的输入, 计算结果的显示。二,设计要求 1.用VC++进行编码, 实现应用程序的功能。注重编码质量, 代码要有适当的注释; 2.提交设计报告一份( 课程设计任务书、目录、设计的基本思路、设计的步骤及主要代码、心得体会、参考文献) 。

一个简单的计算器应用程序 总体设计 能够利用所学的基本知识,设计一个简单的计算器应用程序, 实现基本的加、减、乘、除、求平方根, 求倒数等基本运算( 必须实现的功能) , 实现求角度的正弦、余弦、正切等基本运算、实现求指数、自然对数、常见对数等基本运算( 这部分功能选做) 。在程序中注意处理数据和运算符的输入, 计算结果的显示。 详细设计 ◆新建工程Counter 新建工程, 选择对话框应用程序。 ◆程序运行主界面

图2-1 在对话框内添加相应的控件, 分别给编辑框添加三个变量m_N1,m_N2和m_Result。 然后添加一个组合框, 在里面添加十二个单选按钮设置第一个单选按钮为组, 如图 图2-2 然后给对话框类添加一个int变量Operator用来作相应运算时的标记。 给控件添加相应的函数 1、给单选按钮添加相应的函数 void CCounterDlg::OnRadio1() { Operator=1; } void CCounterDlg::OnRadio2()

java课程设计报告材料-俄罗斯方块

JAVA程序设计课程设计 之 俄罗斯方块 年级:13级 班级:T412 网络工程 指导老师:朱林 小组成员: 20138346021 许浩洋

时间:2015年11月11日 目录 摘要................................................................. 第一章课程设计要求.................................................. 第二章设计概要...................................................... 2.1 功能设计...................................................... 2.2 功能分析...................................................... 2.2.1 系统操作界面............................................... 2.2.2 程序主要功能说明........................................... 第三章调试分析与测试结果............................................ 3.1 游戏运行界面.................................................. 3.2 测试项目...................................................... 3.2.1 功能区按键测试............................................ 3.2.2 键盘功能测试.............................................. 3.2.3 游戏结束测试.............................................. 第四章设计总结...................................................... 4.1 改进意见...................................................... 4.2 《Java课程设计》心得体会 ......................................

C语言课程设计报告 俄罗斯方块改进版

课程设计 俄罗斯方块改进 2016年4月20 日 设计题目 学号 专业班级 学生姓名 指导教师

目录 1. 课程设计目的错误!未定义书签。 2. 功能分析错误!未定义书签。 3. 程序设计实现过程错误!未定义书签。 程序总体设计结构错误!未定义书签。 界面设计错误!未定义书签。 重要数据的数据结构设计错误!未定义书签。函数设计错误!未定义书签。 4. 运行效果错误!未定义书签。 5. 源代码详解错误!未定义书签。 6. 参考文献错误!未定义书签。

俄罗斯方块改进 1. 课程设计问题 据百度百科,俄罗斯方块(Tetris)是一款由俄罗斯人阿列克谢·帕基特诺夫于1984年6月发明的休闲游戏。游戏的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。 要求支持键盘操作和7种不同类型方块的旋转变换,并且界面上显示下一个方块的提示以及当前的玩家的得分,随着游戏的进行,等级越高,游戏难度越大,即方块的下落速度越快,相应的等级,等级越高,消去一行所得到的分数越高,为玩家提供了不同的选择。 2. 功能分析 俄罗斯方块游戏需要解决的问题包括: ⑴按任意键开始游戏,随机产生方块并自动下移 ⑵用Esc键退出游戏。 ⑶用键变换方块 ⑷用键和键左右移动方块 ⑸用键使方块加速下移 ⑹用空格键使方块暂停 ⑺能正确判断满行并消行、计分、定级别 ⑻设定游戏方块为不同形状重点: *游戏面包的数据结构:二维数组 *7种形状方块的数据结构:结构体保存每种形状方块的坐标 3. 程序设计实现过程 程序总体设计结构 首先初始化进入图形模式,进入欢迎界面,玩家按任意进入主菜单界面,按键进入游戏界面,键然后设置新的时钟中断。开始游戏后,进入该程序最核心的部分——处理和实现进行过程中的各种事件和函数。在处理中判断游戏是否结束,如果没有结束,则重新开始游戏,否则结束游戏。 详解如下: (1)游戏方块预览功能。在游戏过程中,当在游戏底板中出现一个游戏方块时,必须在游戏方块预览区域中出现下一个游戏方块,这样有利于游戏玩家控制游戏的策略。由于在此游戏中存在19种不同的游戏方块,所以在游戏方块预览区域中需要显示随机生成的游戏方块。

俄罗斯方块设计思想

南京邮电大学 通达学院 算法与数据结构设计报告( 2016/ 2017学年第二学期) 专业软件工程嵌入式 学号姓名 学号姓名 学号姓名 学号姓名 指导教师陈兴国 指导单位计算机学院计算机科学与技术系 日期2017-5-26

俄罗斯方块 一、课题内容 实现俄罗斯方块游戏。主要功能为游戏界面显示、上下左右键响应以及当前得分统计。通过该课题全面熟悉数组、字符串等的使用。掌握设计的基本方法及友好界面的设计。 课题要求: 1、游戏界面显示:下落方块和方块堆、左右移动、旋转、删除行等特效以及得分。 2、动作选择:上下左右键对应于旋转、加速、左右移动的功能。 3、得分统计判断:判定能否消除行、并统计得分总数等。 扩展要求: 1、用户数据管理。 二、算法设计与分析 I、俄罗斯方块游戏需要解决的问题包括 (1)、随机产生方块并自动下移 (2)键变体 (3)Q退出,按space暂停 II (1)、声明俄罗斯方块的结构体 (2)、函数原型声明 (3)、制作游戏窗口 (4)、制作俄罗斯方块 (5)、判断是否可动 (6)、随机产生俄罗斯方块类型序号 (7)、判断是否满行并删除满行的俄罗斯方块 (8)暂停,继续功能 (9)新游戏创建 (10)用户的创建,分数用户名的保存,查看分数

Tetris类(主要类) 该类包含m a i n方法,应为应用程序的主类。该类用来创建游戏的用户界面,事件处理功能和menu餐单,用户信息的存储。整个程序从该类的m a i n方法开始执行。 成员变量:String userName; 构造方法:Tetris 内部类:Members,Tetrisblock Tetrisblok类: 用来设计游戏界面。游戏界面显示在由Tetrisblok类创建的整个用户界面的中(Center)区,游戏的即时分数、方块的效果图及方的预览功能都在整个类里面实现。用来封装俄罗斯小方块。一个方块的属性是由方块1位置即x和y的坐标、颜色决定的。 成员变量 private int blockType; Timer timer=null; private int turnState; private int x; private int y; private int i = 0; int j = 0; static int score = 0; int flag = 0; int delay=1000; // 定义已经放下的方块x=0-12,y=0-22; int[][] map = new int[14][24]; // 方块的形状第一组代表方块类型有S、Z、L、J、I、O、T 7种第二组代表旋转几次第三四组为方块矩阵 private final int shapes[][][] 成员方法:public void newblock() public void drawwall() public void newmap() public void newgame()

俄罗斯方块设计实验报告

——————数字电路与逻辑设计实验报告—————基于VHDL的简易俄罗斯方块 实验名称简易俄罗斯方块 姓名 班级电信工程学院04107班 学号 辅导老师高英 日期2006年11月6日

俄罗斯方块游戏是我们熟知的经典小游戏之一,本实验通过硬件编成实现了简易的俄罗斯方块游戏机。VHDL是一种标准的,规范的硬件描述语言,在电子设计领域有着广泛的应用。它具有很强的电路描述和建模能力,能从多个层次多电路进行描述和建模,从而大大简化了硬件设计任务,提高了设计效率和可靠性。 本实验基于VHDL语言,利用电路中心开发的实验板,用一个4×4点阵做为基本显示屏,一个发光点表示一个图形,完成俄罗斯方块游戏的基本功能:下落、左右移动、消行和显示得分情况,当某一列到顶时游戏结束。 关键字俄罗斯方块游戏VHDL 点阵 ◆设计任务 利用电路中心开发的实验板,用点阵做为显示屏,一个发光点表示一个方块,完成下落、左右移动、消行和显示得分情况,当某一列到顶时游戏结束,数码管显示的分数保持不变。 ◆设计思路 由于实验中只用到了16个点来完成显示功能,所以选用一个16位的向量STATUS(0 TO 15)来存储各点状态,再用两个整型数分别控制当前点的坐标,但是这样控制会涉及到乘法运算,因此改为4个4位向量STAN(0 TO 3),每个向量代表一行点阵,这样做不仅使控制简单,而且在扫描显示的时候很方便,代码也很简洁。 设计包括2个大的元件,一个是RUSSIA,其功能是存储状态,分频,完成左右下移动以及计分等功能;另一个是RUSSIA_SCAN,主要完成点阵扫描和数码管译码。具体设计是这样的:4个向量STA0,STA1,STA2,STA3记录游戏状态,点的坐标由COL 和ROW来控制。设置两个指针FLAG和ROW4,如果四列中有一列都为1,表示游戏结束了,置FLAG为1,程序进入NULL;当最后一行及STA3=”1111”时,置ROW4=1,当ROW4=1时,表示要消行,加分,并且将上一行的值赋到下一行。游戏继续,如按下左键或右键,程序更根据下一状态决定是否左移或右移。(BTN1为复位RESET,BTN2为左,BTN3为右)若无键按下,则根据情况当前点是否需要自动下移。

MFC课程设计报告-一个简单的五子棋游戏

设计一个简单的五子棋游戏 一、设计目标与内容 1.了解Windows编程的基础知识,掌握MFC应用程序的基本 知识; 2.基本掌握面向对象程序设计的基本思路和方法; 3.掌握用VC++开发应用程序的的一般步骤和方法; 4.能够利用所学的基本知识, 设计一个简单的五子棋游戏,具有 以下功能:①数据结构的设计;五子棋棋盘的绘制。②两人下棋时,两人下棋算法的设计。③两人下棋时,判断任一方获胜的算法的设计。 二、设计要求 1.用VC++进行编码,实现应用程序的功能。注重编码质量, 代码要有适当的注释; 提交设计报告一份(课程设计任务书、目录、主要的数据结构、设计的基本思路、设计的步骤及主要代码、心得体会、参考文献)。总体设计 运行时效果如下:

图3-1 这个程序只能进行两个人之间的对弈,不能进行人机对弈,由于时间和个人能力的原因所以人机对弈的算法就没有写出。同时程序中也存在着很多漏洞,但基本的功能都已经实现,还有待继续改进。 详细设计 新建工程game_wzq

选择单文档应用程序,在Step 4 of 6中先中Windows Sockets 复选框。如下图: 图3-2 资源编辑 黑白位图Bitmap以表示棋盘上面的棋子: IDB_BLACK DB_WHITE 黑白鼠标Cursor以替换当前鼠标: IDC_CURSOR1 黑棋子

IDC_CURSOR2 白棋子 黑白图标Icon以显示在状态栏供以提示 IDI_BLACK IDI_WHITE 菜单以供操作: 开始:ID_START 保存:ID_SAVE 打开:ID_OPEN 如下图所示: 图3-3 变量函数 首先,为了实现状态栏的应用,我们必须更改它的变量:

C课程设计-俄罗斯方块

C#程序设计实训报告 题目:俄罗斯方块 专业____计算机科学与技术 _ 年级班别___ 计算机09-2班__ 学号 学生姓名_____ _______ 指导教师_ 成绩 2012 年 1 月

目录 一系统设计要求 (3) 课题分析............................................................................. 错误!未定义书签。 设计环境 (3) 设计思路 (3) 二课题总体框架设计 (3) 程序流程图 (4) 类的结构图 (5) 三课题实现 (6) 程序主界面 (6) 开始游戏界面 (6) 游戏结束界面 (7) 暂停游戏界面 (7) 使用说明界面 (8) 关键程序代码 (8) 四总结 (21) 设计总结 (21) 设计体会 (22)

一、系统设计要求 1.1课题分析 本游戏系统是利用C#实现的,是制作为我们所熟悉的非常简单的俄罗斯方块游戏,该系统能实现的具体功能如下: 1).能简便的开始游戏,游戏中的方块的功能与日常我们所熟悉的游戏的功能一致,各种块的设置也一致,包括方块的旋转,加速下降,左右移动,满行消去,满行消去自动加分,以及到顶游戏结束等功能; 2).能够通过对话框窗体说明各个功能的使用说明,以及一些其他功能。 3).界面简洁美观,简单易用。跟其他一般的游戏相差不大。 1.2设计环境 本程序选择Visual Studio 2010作为实验环境。 设计思路 用面向对象的方法分析系统 对于俄罗斯方块的程序制作,我们可以定义一个或者几个类,专门来描述俄罗斯方块,在这个类中,包含与之相关的方法、属性和字段,通过封装,实现其业务逻辑。其中,每一个俄罗斯方块都有相同的特征,由4个小正方形构成,有旋转,左右移动,下落的动作,整行被填满除去并计算分数而构成行的小正方体块。基中块的形状类型有7种:田、一、L、倒L、Z、倒Z、上。 在窗口中通过调用主窗体Form1当中的菜单栏来设置游戏的开始、暂停、结束、重新开始以及推出程序。还可以通过其菜单中游戏说明选项来查看游戏各个键的使用说明,还可调用帮助菜单来查看版权说明。 二、课题总体框架设计

基于单片机的俄罗斯方块设计与实现毕设论文

基于单片机的俄罗斯方块设计与实现 摘要 随着单片机在手持娱乐设备上应用的发展,越来越多的应用在电子领域中,如:电子宠物,俄罗斯方块,智能IC卡等。俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。 本文选用STC89C52RC单片机作为系统的芯片,实现人机交互、娱乐等功能。选用LCD12864实现俄罗斯方块游戏界面、图形显示;选用独立按键实现游戏控制。本设计实现的基本功能是:用按键控制目标方块的变换与移动;消除一行并计分,方块堆满时结束游戏等俄罗斯方块的基本功能。 此次设计初期是在keil和proteus联合仿真中进行,编程语言为c语言,后期是进行实物焊接。 关键词:俄罗斯方块;单片机;控制;仿真

Abstract With the development of the single chip microcomputer application on handheld entertainment equipment, more and more application in the field of electronics.Such as: electronic pet, tetris, smart IC card, etc.Tetris is a popular global TV game and PSP games, it consists of the Russian alexei palmer jeter's invention, therefore the name. This article chooses STC89C52RC single-chip microcomputer as the system of chip, realize human-machine interaction, entertainment, etc.Selection of tetris game interface, graphical display LCD12864 implementation;Choose independent control game buttons.This design is to realize the basic function of: key control target square transformation and movement;Remove a row and scoring, square pile end game tetris, such as the basic functions. The early stage of design is done in keil and proteus simulation, programming language is the c language, is late for real welding. Keywords:Russian square;Microprocessor;Control;Simulation

java课程设计俄罗斯方块

Java课程设计报告 2010 / 2011 学年第二学期 项目名称:俄罗斯方块游戏 项目负责人:李俊杰学号:09030317 同组者:田俊学号:09030325 同组者:殷崧健学号:09030335 指导教师:费贤举班级:09软件课程设计时间:2011年6月21日-2011年7月7日课程设计地点:秋白楼B705 常州工学院计算机信息工程学院 2011年7月7日

目录 1.系统概述 (3) 2.项目计划书以及小组人员分工 (4) 3.系统流程图 (5) 4.系统操作界面 (8) 5.详细设计 (9) 6.用户手册与游戏帮助 (18) 7.测试计划 (20) 8.改进意见 (22) 9.课程设计心得体会 (23) 10.参考书籍及资料 (24)

系统概述 1.1 现状分析 在个人电脑日益普及的今天,一些有趣的桌面游戏已经成为人们在使用计算机进行工作学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一,它以其趣味性强,易上手等诸多特点得到了大众认可,因此开发此游戏软件可满足人们的一些娱乐需求。 此俄罗斯方块游戏可以为用户提供一个可在普通个人电脑上运行的,界面美观的,易于控制的俄罗斯方块游戏。 1.2 项目要求 俄罗斯方块是一款适合大众的游戏软件,它适合不同年龄的人玩。本软件实现的基本功能如下: ●游戏区:玩家可以在游戏区中堆积方块,并能够在游戏过程中随 时了解得分情况和下一个将要出现方块的提示。 ●游戏控制:玩家可以通过游戏控制功能来控制游戏开始,暂停, 结束游戏,游戏难度的设置以及音效控制。 ●玩家游戏信息存储及删除:玩家的得分在前五名时,将会记录在 排行榜上,同时可为玩家清空排行榜。 1.3 系统模块结构图

MFC课程设计之拼图游戏设计报告

拼图游戏 实验报告 一、实验目的

1、通过实践加强对程序设计语言课程知识点的理解和掌握,培养对课程知识综合运用能力、实际分析问题能力及编程能力,养成良好的编程习惯。 2、通过实践进一步领会程序设计的特点和应用,提高运用C++ 以及面向对象知识解决实际问题的能力,初步掌握MFC变成的基本功能。 3、通过实践掌握用C++ 编写面向对象的实用程序的设计方法,对面向对象方法和思想增加感性的认识;学会利用C++程序设计语言编写出一些短小、可靠的Windows实用程序,切实提高面向对象的程序设计能力,为后续的相关课程的学习打下基础。 二、小组分工 为了发挥组内同学的各自特长,我们小组分工如下: 1、苏嘉彬——前期进行系统需求分析,系统结构设计,完成拼图界面的设计工作, 后期完成课程设计报告 2、嵇鹏飞(组长)——完成主要程序的编写工作(图形分割、存储、拼图) 3、依代吐力·艾尼——搜集资料,完成计时器的设计工作,软件接口的设计及测 试 三、程序设计思路 1、初步方案讨论 拼图游戏是同学们喜欢的益智游戏之一,带着浓厚的兴趣,我们选择拼图游戏设计 作为我们小组本次MFC课程设计的课题。在讨论中,有的同学希望用单文档(SDI) 的形式完成本次设计,有的同学则偏向于用对话框(Dialogue)的形式,最终我们小组 讨论决定最终的设计采用对话框形式实现拼图功能。 2、方案变更、疑难解决 (1)最初我们决定采用对话框形式来实现拼图的基本功能,但是在实施过程中出 现了几次很严重的错误:Debug Assertion Failed,缺少ivewers.dll文件等等,在最后的 尝试中我们发现如果采用单文档(SDI)形式写拼图的话,可以实现最基本的功能,因 此我们最终决定使用单文档来完成该课程设计。 (2)一开始我们讨论决定采用的方式是将位图读入后再进行图片的分割,而在实 际的操作过程中由于图片的分割有一定的困难,因此我们最后采用的方式是将位图进行 分割完毕后再逐个用Brush在指定位置上进行绘画,实现图形的分割。 3、系统需求分析 (1)系统功能 简单的拼图游戏应该有拼图、计时、判断拼图成功、游戏者用时统计排名等功能, 拼图内部还应该有难度选择、相邻拼图块自动拼图等功能。图1所示是拼图游戏的用例 图,表明拼图游戏的主要功能。 图1 (

Android俄罗斯方块课程设计报告

河南城建学院 课程设计报告书 专业:计算机科学与技术 课程设计名称:《Java高级应用》 题目:俄罗斯方块 班级: 学号: 设计者: 同组人员: 指导老师: 完成时间:2016年06月08

目录 一、设计目的 (1) 二、需求分析 (1) 2.1游戏功能的需求分析 (1) 2.2方块及旋转变换需求分析 (1) 2.3游戏运行需求分析 (1) 2.4消行和分数统计需求分析 (1) 三、模块分析及设计 (1) 3.1 总体设计思想 (1) 3.2功能模块 (1) 四、制作过程及要点 (1) 4.1 游戏一个单元块的设计与实现 (1) 4.2俄罗斯方块的控制设计 (1) 4.3 俄罗斯方块的设计与实现 (1) 4.4要点分析 (1) 五、设计总结 (1) 六、参考资料 (1)

一、设计目的 在个人电脑日益普及的今天,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一,它以其趣味性强,易上手等诸多特点得到了大众的认可,因此开发此游戏软件可满足人们的一些娱乐的需求。此俄罗斯方块游戏可以为用户提供一个可在普通个人电脑上运行的,界面美观的,易于控制的俄罗斯方块游戏。 俄罗斯方块是家喻户晓的益智小游戏,它由俄罗斯人阿列克谢帕基特诺夫(Alexey Pazhitnov)在1984年6月利用空暇时间编写的游戏程序,故此得名。俄罗斯方块的基本规则是移动、旋转和摆放游戏随机产生的各种方块,使之排列成完整的一行或多行并且消除得分。它看似简单却变化无穷,俄罗斯方块上手极其简单,且游戏过程变化无穷,作为游戏本身很有魅力,但是要熟练掌握其中的操作和摆放技巧,难度却不低。此软件给用户提供了一个展现自己高超技艺的场所,在这里,它不仅放松自己,还能感受到游戏中的乐趣。游戏区域会从顶部不断随机落下7种方块类型的一种,游戏区域右上角有一个区域可以显示下一个方块的形状,玩家可以控制俄罗斯方块移动、旋转。通过玩家的操作,下坠物在游戏区域以“摆积木”的形式出现。下坠物在一行或多行堆满后就可以自动消除,消行后会得到相应的分数,如果当前下坠物堆积至窗口顶端,则游戏结束。

c-俄罗斯方块-课程设计报告-刘阳

c-俄罗斯方块-课程设计报告-刘阳吉林工程技术师范学院 信息工程学院 《 C语言程序设计》 课程设计报告题目: 俄罗斯方块专业: 计算机科学与技术班级: 计算机1241 姓名: 刘阳学号: 1201044120 指导教师:郭天娇时间:2013年6月17日至2013年6月28日 摘要 俄罗斯方块,Tetris, 俄文,Тетрис,是一款风靡全球的电视掌上游戏机游戏,它由俄罗斯人阿列克谢?帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。 原本是前苏联科学家阿列克谢?帕基特诺夫所开发的教育用软件,之后开始提供授权给各个游戏公司,造成各平台上软件大量发行的现象。 由于俄罗斯方块具有的数学性、动态性与知名度,也经常拿来作为游戏程序设计的练习题材。 俄罗斯方块曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事,它看似简单但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。 俄罗斯方块上手极其简单,但是要熟练地掌握其中的操作与摆放技巧,难度却不低。作为家喻户晓老少皆宜的大众游戏,其普及程度可以说是史上任何一款游戏都无法相比的。 关键字,经典俄罗斯方块游戏

I 目录 摘要 .............................................. 错误~未定义书签。错误~未定义书签。 目 录 ..................................................................... ............................................... 1第一章课程设计的目 的 ..................................................................... ............. 2 第二章设计方案的论 证 ..................................................................... .......... 3-4 第三章设计实现过 程 ..................................................................... ................. 5 第四章调试运行及结果分 析 ..................................................................... .. 6-7 第五章测试及问题探 讨 ..................................................................... ............. 8 第六章课设总结及体 会 ..................................................................... ............. 9 第七章致 谢 ..................................................................... ............................... 10 第八章参考文 献 ..................................................................... ....................... 11 第九章附

MFC课程设计报告-一个简单的通讯录应用程序

一、设计目标与内容 1.了解Windows编程的基础知识,掌握MFC应用程序的基本知 识; 2.基本掌握面向对象程序设计的基本思路和方法; 3.掌握用VC++开发应用程序的的一般步骤和方法; 4.能够利用所学的基本知识,设计一个简单的通讯录应用程序, 具有以下功能:①用文件来保存通讯录信息(必须实现的功能)②编程实现通讯录记录的添加、删除、修改、浏览和查询(必须实现的功能)。 二、设计要求 1.用VC++进行编码,实现应用程序的功能。注重编码质量, 代码要有适当的注释; 2.提交设计报告一份(课程设计任务书、目录、主要的数据结 构、设计的基本思路、设计的步骤及主要代码、心得体会、参考文献)。 总体设计 通讯录应用程序,是一个基于单文档单视图的应用程序。 我们在基于但文档视图开发的同时,通过对文档菜单的操作和相应函数的响应实现一个简单的通讯录功能。在通讯录中,我们能够添加学生信息、修改学生信息、删除学生信息、预览学生信息和保存学生信息。进行一系列简单的操作。

详细设计 新建工程COM_book2 新建工程COM_kook2,默认选择单文档应用程序,完成。 在COM_book2View.cpp中初始化文档视图界面 添加函数如下: void CCOM_book2View::OnInitialUpdate() { CListView::OnInitialUpdate(); CListCtrl &m_ListCtrl=GetListCtrl(); CString strHeader[5]={"姓名","专业","电话","QQ","生日"}; int nLong[]={150,200,250,200,200}; for(int nCol=0;nCol<5;nCol++) m_ListCtrl.InsertColumn(nCol,strHeader[nCol],LVCFMT_ LEFT,nLong[nCol]); UpdateData(FALSE); } 程序运行后,界面如下

相关主题
文本预览
相关文档 最新文档