打砖块游戏设计报告_扫雷游戏的设计报告
打砖块游戏设计报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“扫雷游戏的设计报告”。
*************
面向对象方法及程序设计
课程设计报告
打砖块游戏的设计与开发
分 组: 第九组 组员姓名:******************** 班 级: *********** 指导教师: ****
完成日期:2014年 06月21日
面向对象方法及程序设计课程设计
题目:打砖块游戏的开发与设计
为了加强计算机科学与技术专业学生的学科实践能力,巩固和强化所学专业知识,提高学生的学习兴趣,本课程设计实践周特别强调理论与实践相结合,利用所学专业知识,进行实践项目的开发,提高学生的实践编程能力和技术文档的写作能力,提高学生的学习兴趣,为后期的学习奠定一定的实践基础。
目 录
第一章 课程设计的目的与要求.............................................................................................3 1.1课程设计目的................................................................................................................3 1.2 课程设计的实验环境...................................................................................................3 1.3 课程设计的预备知识...................................................................................................3 1.4课程设计要求................................................................................................................3 1.4.1人员分配,形成课程设计小组............................................................................3 1.4.2 分析课程设计的题目要求.................................................................................3 1.4.3写出详细的设计说明............................................................................................3 第二章 课程设计内容.............................................................................................................3 2.1设计思路........................................................................................................................3 2.2功能介绍........................................................................................................................4 2.3相关素材........................................................................................................................4 2.4程序整体设计说明........................................................................................................4 2.5程序部分源代码及注释................................................................................................4 2.6程序结构流程图............................................................................................................6 2.7程序代码........................................................................................................................6 2.8运行程序......................................................................................................................17 第三章 课程设计总结...........................................................................................................17/ 19 面向对象方法及程序设计课程设计
第一章 课程设计的目的与要求
1.1课程设计目的本次课程设计是计算机科学与技术专业最重要的实践环节之一。本次课程设计的目的和任务:
1.巩固和加深学生对VC++语言的基本知识的理解和掌握; 2.掌握VC++语言编程和程序调试的基本技能; 3.利用VC++语言进行基本的软件设计; 4.掌握书写程序设计说明文档的能力; 5.提高运用VC++解决实际问题的能力;
1.2 课程设计的实验环境
硬件环境要求能运行Windows 2000/XP操作系统的微机系统,VC++程序设计及相应的开发环境。
1.3 课程设计的预备知识
熟悉C语言及C语言的开发工具
1.4课程设计要求
1.4.1人员分配,形成课程设计小组
按照指导教师的要求,参与课程设计的同学根据彼此学习间的默契度以及在游戏设计上想法的不谋而合,自由的选择自己的队友,形成课题设计小组。
指导教师要求每组成员人数必须控制在3~5人之间,使得在课程设计的过程中,尽量的保证每个人都能够参与其中,积极的动脑思考。我们是第九组课程设计小组。
1.4.2 分析课程设计的题目要求
为了使得课程设计能够更加的独特,并且能够在最大限度上呈现出一个完美的课程设计,体现出同学们的创新的好的想法,指导教师给我们准备了不同的设计课题。
我们组选择的课题是“打砖块”的游戏设计与开发。
1.4.3写出详细的设计说明
针对我们的这个课程设计,我们小组的成员,查阅了大量的相关的专业书籍,并在游戏的一些细节问题上,充分参考了指导老师的意见和建议。
第二章 课程设计内容
2.1设计思路
首先,本次课程设计的主要目的就是为了增强同学们的专业课知识,是对专业书上的知识的进一步巩固和实践!为了更好的去完成本次的课程设计,我们针对手机游戏被广大消费/ 19
面向对象方法及程序设计课程设计
者接受的现状以及小组成员的真实感受,设计了这一款手机游戏!
随着社会生活节奏的加快,越来越多的人,选择在自己的闲暇时间用玩游戏的方式去缓解自己生活和工作上的压力,所以,此款游戏的最终目标就是给游戏玩家带来一种精神上的放松以及娱乐消遣带来的快乐。
所以经过反复仔细的思考,我们小组成员共同决定:在用一种简单、大方的颜色,作为游戏的背景色,主色调采用欢快,鲜明的绿色,在视觉上来达到一种使人感到有活力积极的不紧绷的一种生活的状态!
2.2功能介绍
此款游戏的设计步骤没有主次之分,每一步都至关重要!
可以简单的分为初始化状态,游戏状态以及游戏结束状态!
初始化状态:
在此状态下,感受最鲜明的就是游戏界面的呈现!为了能够吸引更广大的消费群体,我们除了在界面颜色的选择上有所侧重之外,在页面的布局上也要有设计,要给人一种惊喜感!
游戏状态:
此状态下,是检验游戏功能是否实现的状态,也是验收我们实验成果的一个状态!
游戏能够在系统下顺利进行只是是课程设计成功的一方面!我们认为更为重要的是能够在玩家那里得到一种好的反馈!这样我们才会在游戏点击量上有所取胜!(前提:游戏被投资运行。)
在游戏刚刚被激活时,小球的挡板会在界面的最左端,并且此时玩家可以任意的滑动挡板,来接住下落的小球,由于每一次小球与挡板碰撞角度不同,那么,所达到的再次上升撞击砖块的角度也会不同,所以在此功能上我们设计小组成员根据自然规律以及数学函数设计出了10中不同的角度范围,分别是0···20度,20···40度,40··60度,60···80度,80···90度,90···100度,100···120度,10···140度,140···160度,160···180度。当小球成功撞击到砖块的时候,被成功撞击都的砖块,我们采用用背景色覆盖的方式来完成,从而达到游戏功能实现的目的。游戏结束状态:
此状态的前提是,小球没有成功的被挡板接住,出现此种情况是,游戏界面会自动显示提示信息的消息框######。
2.3相关素材 2.4程序整体设计说明
本程序整体设计思路是首先建立三个类:弹球CBoll、弹板CDong、砖块CRet,再向各个类中添加变量和函数,如向CBoll中添加变量choice和bollpoint,还有函数Draw()和move();其次在各个函数下添加代码实现函数的功能,最后添加3个windows消息,响应用户消息。
2.5程序部分源代码及注释
(1)首先新建三个类:CBoll(弹球)、CDong(弹板)和CRet(砖块)
CBoll类有以下成员及变量:
public:
int choice;//判断小球从哪个方向来
void Draw(CDC* pDC);//绘制小球
CPoint bollpoint;//小球位置坐标/ 19 面向对象方法及程序设计课程设计
void move(CDC *pDC);//小球的移动
CDong类有以下成员及变量:
public:
void Draw(CDC *pDC);//绘制弹板
int direct;//弹板的移动方向---键盘控制
void Move(int direct,CDC* pDC);//弹板的移动
CPoint dongpoint;//弹板坐标
CRet 类有以下成员及变量:
public:
BOOL Isliving[5][6];//判断砖块是否还存在,是否已被小球打掉
CRet FK[5][6];//存放砖块的数组
void Destroy(int x,int y,CDC* pDC);//销毁砖块
void Draw(CDC* pDC);//绘制砖块
(2)通过类向导新建以上三个类,一次添加各个成员及变量
CBoll类中各个成员的实现:CBoll::CBoll()
函数实现:void CBoll::move(CDC* pDC)
绘制小球:void CBoll::Draw(CDC *pDC)
CDong类的实现:CDong::CDong()
函数实现:弹板移动void CDong::Move(int direct,CDC* pDC)
绘制弹板:void CDong::Draw(CDC *pDC)
CRet类的实现:CRet::CRet()
函数实现:绘制砖块void CRet::Draw(CDC *pDC)
销毁砖块:void CRet::Destroy(int x, int y,CDC* pDC)
(3)在View类中声明以上三个类的对象
CBoll boll;
CDong dong;CRet rc;
(4)在View类的OnDraw()函数中添加以下代码
//绘制背景
CBrush beijing;
CBrush* obeijing;beijing.CreateSolidBrush(RGB(160,240,120));
obeijing=pDC->SelectObject(&beijing);
pDC->Rectangle(0,0,1272,765);
pDC->SelectObject(obeijing);
//绘制方块/ 19 面向对象方法及程序设计课程设计
rc.Draw(pDC);
//绘制动块
dong.Draw(pDC);
//绘制小球
boll.move(pDC);
boll.Draw(pDC);
(5)右击View类添加三个windows消息:
WM_KEYDOWM;WM_CREATE;WM_TIMER;
(6)在OnKeyDown()函数中添加: CDC* pDC=GetDC();
switch(nChar)
{
case VK_LEFT :
dong.Move(2,pDC);
dong.Draw(pDC);
break;case VK_RIGHT :
dong.Move(1,pDC);
dong.Draw(pDC);
break;}
2.6程序结构流程图
2.7程序代码/ 19 面向对象方法及程序设计课程设计
CBricksView:
void CBricks1View::OnDraw(CDC* pDC){ CBricks1Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);//绘制背景
CBrush beijing;CBrush* obeijing;beijing.CreateSolidBrush(RGB(160,240,120));obeijing=pDC->SelectObject(&beijing);
pDC->Rectangle(0,0,1272,765);pDC->SelectObject(obeijing);
//绘制方块
rc.Draw(pDC);//绘制动块
dong.Draw(pDC);//绘制小球
boll.move(pDC);boll.Draw(pDC);}
///////////////////////////////////////////////////////////////////// // CBricks1View diagnostics
#ifdef _DEBUG void CBricks1View::AertValid()const { CView::AertValid();}
void CBricks1View::Dump(CDumpContext& dc)const { CView::Dump(dc);}
CBricks1Doc* CBricks1View::GetDocument()// non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CBricks1Doc)));return(CBricks1Doc*)m_pDocument;}/ 19 面向对象方法及程序设计课程设计
#endif //_DEBUG
///////////////////////////////////////////////////////////////////////////// // CBricks1View meage handlers
void CBricks1View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags){ // TODO: Add your meage handler code here and/or call default
CDC* pDC=GetDC();switch(nChar){ case VK_LEFT :
dong.Move(2,pDC);
dong.Draw(pDC);
break;case VK_RIGHT :
dong.Move(1,pDC);
dong.Draw(pDC);
break;}
CView::OnKeyDown(nChar, nRepCnt, nFlags);}
int CBricks1View::OnCreate(LPCREATESTRUCT lpCreateStruct){ if(CView::OnCreate(lpCreateStruct)==-1)
return-1;
// TODO: Add your specialized creation code here SetTimer(1,1,NULL);
return 0;}
void CBricks1View::OnTimer(UINT nIDEvent){ // TODO: Add your meage handler code here and/or call default
CDC* pDC=GetDC();for(int i=0;i
for(int j=0;j
{
if((boll.bollpoint.x>=(rc.FK[i][j].left-10)&&boll.bollpoint.x
((boll.bollpoint.y+10==rc.FK[i][j].top)||(boll.bollpoint.y+50==rc.FK[i][j].bottom)))/ 19 面向对象方法及程序设计课程设计
{
rc.Destroy(rc.FK[i][j].left,rc.FK[i][j].top,pDC);
rc.Isliving[i][j]=false;
}
}
if((boll.bollpoint.x>=dong.dongpoint.x)&&(boll.bollpoint.x
&&(boll.bollpoint.y+10==dong.dongpoint.y)){
if(boll.choice==7)
boll.choice=8;
else if(boll.choice==1)
boll.choice=4;
else if(boll.choice==2)
boll.choice=3;}
InvalidateRect(CRect(boll.bollpoint.x-10,boll.bollpoint.y-10,boll.bollpoint.x+10,boll.bollpoint.y+10),NULL);
CView::OnTimer(nIDEvent);}
CBALL: void CBoll::Draw(CDC *pDC){ CBrush bru;
CBrush* obru;
bru.CreateSolidBrush(RGB(255,2,5));
obru=pDC->SelectObject(&bru);
pDC->SelectObject(::GetStockObject(NULL_PEN));
pDC->Ellipse(bollpoint.x-10,bollpoint.y-10,bollpoint.x+10,bollpoint.y+10);
pDC->SelectObject(obru);
bru.DeleteObject();}
void CBoll::move(CDC *pDC){//移动之前先将上一个小球用背景色掩盖掉,如下
CBrush bru;
CBrush* obru;
bru.CreateSolidBrush(RGB(160,240,120));
obru=pDC->SelectObject(&bru);
pDC->SelectObject(::GetStockObject(NULL_PEN));//选入透明画笔/ 19 面向对象方法及程序设计课程设计
pDC->Ellipse(bollpoint.x-10,bollpoint.y-10,bollpoint.x+10,bollpoint.y+10);
pDC->SelectObject(obru);
bru.DeleteObject();
//根据小球来的方向判断小球碰到墙壁之后的移动方向,并设置移动后将要运行的方向
if((choice==4&&bollpoint.y==10)||(choice==2&&bollpoint.x==10)||(bollpoint.x==10&&bollpoint.y==10))
{
choice=1;
bollpoint.x++;
bollpoint.y++;
}
else if((bollpoint.x==1262&&bollpoint.y==10)||(choice==3&&bollpoint.y==10)||(choice==1&&bollpoint.x==1262))
{
choice=2;
bollpoint.x--;
bollpoint.y++;
}
else if((bollpoint.x==1262&&bollpoint.y==755)||(choice==2&&bollpoint.y==755)||(choice==4&&bollpoint.x==1262))
{
choice=3;
bollpoint.x--;
bollpoint.y--;
}
else if((bollpoint.x==10&&bollpoint.y==755)||(choice==1&&bollpoint.y==755)||(choice==3&&bollpoint.x==10))
{
choice=4;
bollpoint.x++;
bollpoint.y--;
} //正常情况下(没有碰壁),根据小球的移动方向设置小球的坐标
else
{
switch(choice)
{
case 1 :
bollpoint.x++;/ 19 面向对象方法及程序设计课程设计
bollpoint.y++;
break;
case 2 :
bollpoint.x--;
bollpoint.y++;
break;
case 3 :
bollpoint.x--;
bollpoint.y--;
break;
case 4 :
bollpoint.x++;
bollpoint.y--;
break;
case 5 :
bollpoint.x++;
break;
case 6 :
bollpoint.x--;
break;
case 7 :
bollpoint.y++;
break;
case 8 :
bollpoint.y--;
break;
}
} }
CDong:
CDong::CDong(){ direct=0;
dongpoint.x=0;//弹板初始坐标
dongpoint.y=600;}
CDong::~CDong(){ }/ 19
面向对象方法及程序设计课程设计
void CDong::Draw(CDC *pDC){pDC->SelectObject(::GetStockObject(NULL_PEN));CBrush bru;CBrush *obru;bru.CreateSolidBrush(RGB(255,1,2));obru=pDC->SelectObject(&bru);pDC->Rectangle(dongpoint.x,dongpoint.y,dongpoint.x+100,dongpoint.y+30);pDC->SelectObject(obru);}
void CDong::Move(int direct, CDC *pDC){//同样先将上一个弹板用背景色覆盖掉
CBrush bru;CBrush *obru;bru.CreateSolidBrush(RGB(160,240,120));obru=pDC->SelectObject(&bru);pDC->SelectObject(::GetStockObject(NULL_PEN));pDC->Rectangle(dongpoint.x,dongpoint.y,dongpoint.x+100,dongpoint.y+30);pDC->SelectObject(obru);switch(direct){
case 1:
if(dongpoint.x
{
dongpoint.x+=10;
}
break;
case 2 :
if(dongpoint.x>0)
{
dongpoint.x-=10;
}
break;} }
#include “stdafx.h” #include “Bricks1.h” #include “Ret.h”/ 19 面向对象方法及程序设计课程设计
#ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__;#define new DEBUG_NEW #endif //////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////
CRet::CRet(){ //初始化砖块生命值 for(int i=0;i
for(int j=0;j
Isliving[i][j]=true;
//1 //砖块所在区域初始化
FK[0][0].left=0;
FK[0][0].top=0;
FK[0][0].right=212;
FK[0][0].bottom=100;
FK[0][1].left=212;
FK[0][1].top=0;
FK[0][1].right=424;
FK[0][1].bottom=100;
FK[0][2].left=424;
FK[0][2].top=0;
FK[0][2].right=636;
FK[0][2].bottom=100;
FK[0][3].left=636;
FK[0][3].top=0;
FK[0][3].right=848;
FK[0][3].bottom=100;
FK[0][4].left=848;
FK[0][4].top=0;
FK[0][4].right=1060;
FK[0][4].bottom=100;
FK[0][5].left=1060;
FK[0][5].top=0;
FK[0][5].right=1272;
FK[0][5].bottom=100;
//2
FK[1][0].left=0;/ 19
面向对象方法及程序设计课程设计
FK[1][0].top=100;
FK[1][0].right=212;
FK[1][0].bottom=200;
FK[1][1].left=212;
FK[1][1].top=100;
FK[1][1].right=424;
FK[1][1].bottom=200;
FK[1][2].left=424;
FK[1][2].top=100;
FK[1][2].right=636;
FK[1][2].bottom=200;
FK[1][3].left=636;
FK[1][3].top=100;
FK[1][3].right=848;
FK[1][3].bottom=200;
FK[1][4].left=848;
FK[1][4].top=100;
FK[1][4].right=1060;
FK[1][4].bottom=200;
FK[1][5].left=1060;
FK[1][5].top=100;
FK[1][5].right=1272;
FK[1][5].bottom=200;
//3
FK[2][0].left=0;
FK[2][0].top=200;
FK[2][0].right=212;
FK[2][0].bottom=300;
FK[2][1].left=212;
FK[2][1].top=200;
FK[2][1].right=424;
FK[2][1].bottom=300;
FK[2][2].left=424;
FK[2][2].top=200;
FK[2][2].right=636;
FK[2][2].bottom=300;
FK[2][3].left=636;
FK[2][3].top=200;
FK[2][3].right=848;
FK[2][3].bottom=300;
FK[2][4].left=848;
FK[2][4].top=200;
FK[2][4].right=1060;/ 19
面向对象方法及程序设计课程设计
FK[2][4].bottom=300;
/*FK[2][5].left=1060;
FK[2][5].top=200;
FK[2][5].right=1272;
FK[2][5].bottom=300;*/ //4
/*FK[3][0].left=0;
FK[3][0].top=300;
FK[3][0].right=212;
FK[3][0].bottom=400;
FK[3][1].left=212;
FK[3][1].top=300;
FK[3][1].right=424;
FK[3][1].bottom=400;
FK[3][2].left=424;
FK[3][2].top=300;
FK[3][2].right=636;
FK[3][2].bottom=400;
FK[3][3].left=636;
FK[3][3].top=300;
FK[3][3].right=848;
FK[3][3].bottom=400;
FK[3][4].left=848;
FK[3][4].top=300;
FK[3][4].right=1060;
FK[3][4].bottom=400;
FK[3][5].left=1060;
FK[3][5].top=300;
FK[3][5].right=1272;
FK[3][5].bottom=400;*/
//5
/*FK[4][0].left=0;
FK[4][0].top=400;
FK[4][0].right=212;
FK[4][0].bottom=500;
FK[4][1].left=212;
FK[4][1].top=400;
FK[4][1].right=424;
FK[4][1].bottom=500;
FK[4][2].left=424;
FK[4][2].top=400;
FK[4][2].right=636;/ 19
面向对象方法及程序设计课程设计
FK[4][2].bottom=500;
FK[4][3].left=636;
FK[4][3].top=400;
FK[4][3].right=848;
FK[4][3].bottom=500;
FK[4][4].left=848;
FK[4][4].top=400;
FK[4][4].right=1060;
FK[4][4].bottom=500;
FK[4][5].left=1060;
FK[4][5].top=400;
FK[4][5].right=1272;
FK[4][5].bottom=500;*/ }
CRet::~CRet(){ }
void CRet::Destroy(int x, int y, CDC *pDC){CBrush brush;CBrush *obrush;brush.CreateSolidBrush(RGB(160,240,120));obrush=pDC->SelectObject(&brush);pDC->SelectObject(::GetStockObject(NULL_PEN));pDC->Rectangle(x,y,x+132,y+40);pDC->SelectObject(obrush);brush.DeleteObject();}
void CRet::Draw(CDC *pDC){for(int i=0;i
for(int j=0;j
{
if(Isliving[i][j])
{
CBrush brush;
CBrush *obrush;
brush.CreateSolidBrush(RGB((16*i+i)%5,(49*j+j)%5,(i*25+j*87)%5));
obrush=pDC->SelectObject(&brush);
pDC->SelectObject(::GetStockObject(NULL_PEN));/ 19 面向对象方法及程序设计课程设计
pDC->Rectangle(FK[i][j].left,FK[i][j].top,FK[i][j].right-80,FK[i][j].bottom-60);
pDC->SelectObject(obrush);
}
//Isliving[i][j]=true;//如果砖块生命值为false,就用背景色把它覆盖掉
else
{
CBrush brush;
CBrush *obrush;
brush.CreateSolidBrush(RGB(160,240,120));
obrush=pDC->SelectObject(&brush);
pDC->SelectObject(::GetStockObject(NULL_PEN));
pDC->Rectangle(FK[i][j].left,FK[i][j].top,FK[i][j].right-80,FK[i][j].bottom-60);
pDC->SelectObject(obrush);
}
} }
2.8运行程序 2.8.1结果
2.8.2效果
第三章 课程设计总结
士不可以不弘毅,任重而道远!经过近两个星期的努力,终于完成了本次的课程设计!/ 19 面向对象方法及程序设计课程设计
在本次课程的设计过程中,很感谢指导老师给予的意见和建议,包括前期在准备素材的时候,老师给予和很多宏观上的指导。可能我们很大一部分同学更加看重的是游戏的运行结果,而忽略了一些细节方面的东西!就像是老师说的那样,游戏界面的设计同样很重要!所以我们小组在游戏的编程初期,在游戏的界面设计方面花了很多的心思,想了好几种不同的游戏风格的界面,而且针对我们开发的游戏设计了不同的关卡,大大的增加了游戏的趣味性!但由于自身的专业知识受限,并没有达到我们预期的结果!但这个过程是确确实实的给我们小组的成员带来了很大的不同于以往的感受!我们真心的感受到了,认认真真去做一件事情,是需要多么大的耐心和决心!同时也认识到了,短暂的灵感,只是一个很美好的想法,真正的要做到把每一个有价值的想法,都进行更加完备的整理,是一件很困难的事情!本次打砖块游戏的设计过程中,我们遇到了很多的瓶颈。起初在收集素材的阶段还算比较顺利,因为我们每个人都有自己的设计风格,都想要把自己的设计想法应用到本次的游戏设计中,所以我们小组成员决定,每一个人都针对游戏界面的设计模块部分设计出自己的作品,根据最后所呈现出的效果,再挑选出最好的那一份设计!在游戏功能的实现方面,是我们进展最困难的一个模块!我们要把我们的一个个想法都变成我们不是很理解的编程代码来实现!这真的是考验我们小组凝聚力的时候了!因为本次的游戏编程很可能止步于此阶段!一个不小心,两个一放松,三个一懈怠,就会造成很难挽回的局面,游戏编程就次无法进行!
通过本次的课程设计,使我们更深刻的了解到了程序设计的基本思想,巩固了程序设计的基本知识,理解了读万卷书不如行万里路的真正意义,并学会了合作与分工,一次次的搜集查阅资料,一次次的调试代码,终于完成本次课程设计——打砖块游戏。游戏实现了一些基本功能,如界面设置、动画设置、玩家的控制键设置。但游戏功能还存在很大不足,首先,没有游戏开始提示界面,让玩家丈二和尚摸不着头脑;其次,对游戏的动画设计不够熟悉,技巧性不强,界面的设置也不美观,这些对于玩家来说非常重要;最后,还有一些功能没有实现,比如消掉砖块会有道具下落,增加生命值,或减慢小球速度等等。游戏还有很多需要改进的地方,我们需要不断学习去提高自己的技术,做出好的游戏。
通过游戏设计,我们意识到理论与实践的差距有多大,明白“纸上得来终觉浅,绝知此事要躬行”的意义。最后感谢老师的指导!/ 19 面向对象方法及程序设计课程设计
参 考 文 献
[1]AndreLamothe.WINDOWS游戏编程大师技巧.北京:中国电力出版社,2001.[2]谭浩强,贾振华.VC++程序设计项目实践.北京:清华大学出版社,2010./ 19