打砖块游戏设计报告(共五则)

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

打砖块游戏设计报告(共五则)
第一篇:打砖块游戏设计报告
*************
面向对象方法及程序设计
课程设计报告
打砖块游戏的设计与开发
分组:第九组组员姓名:******************** 班级:*********** 指导教师: ****
完成日期: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=p DC->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::AssertValid()const { CView::AssertValid();}
void CBricks1View::Dump(CDumpContext& dc)const { CView::Dump(dc);}
CBricks1Doc* CBricks1View::GetDocument()// non-debug version is inline
{ ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CBricks1D oc)));return(CBricks1Doc*)m_pDocument;}
/ 19 面向对象方法及程序设计课程设计
#endif //_DEBUG
/////////////////////////////////////////////////////////////////// ////////// // CBricks1View message handlers
void CBricks1View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags){ // TODO: Add your message 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 message handler code here and/or call default
CDC* pDC=GetDC();for(int i=0;i<5;i++)
for(int j=0;j<6;j++)
{
if((boll.bollpoint.x>=(rc.FK[i][j].left-
10)&&boll.bollpoint.x<=(rc.FK[i][j].right-70))&&
((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< =dong.dongpoint.x+100)
&&(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&&bollp oint.y==10)||(choice==1&&bollpoint.x==1262))
{
choice=2;
bollpoint.x--;
bollpoint.y++;
}
else
if((bollpoint.x==1262&&bollpoint.y==755)||(choice==2&&boll point.y==755)||(choice==4&&bollpoint.x==1262))
{
choice=3;
bollpoint.x--;
bollpoint.y--;
}
else
if((bollpoint.x==10&&bollpoint.y==755)||(choice==1&&bollpoi nt.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->SelectOb ject(&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->Sele ctObject(&bru);pDC->SelectObject(::GetStockObject(NULL_PEN) );pDC->Rectangle(dongpoint.x,dongpoint.y,dongpoint.x+100,do ngpoint.y+30);pDC->SelectObject(obru);switch(direct){ case 1:
if(dongpoint.x<1272)
{
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<5;i++) for(int j=0;j<3;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].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].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].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(N ULL_PEN));pDC->Rectangle(x,y,x+132,y+40);pDC->SelectObject( obrush);brush.DeleteObject();}
void CRet::Draw(CDC *pDC){for(int i=0;i<5;i++)
for(int j=0;j<6;j++)
{
if(Isliving[i][j])
{
CBrush brush;
CBrush *obrush;
brush.CreateSolidBrush(RGB((16*i+i)%5,(49*j+j)%5,(i*25+j*8 7)%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 / 19
第二篇:砼砖块供应商合同
钢管承包合同
发包商(简称甲方):
承包方(简称乙方):池州市第三建筑公司两个班组
1、经双方友好协商,就九华山雨润月松阁度假酒店二期工程池州三建两个班组,甲方提供乙方各个班组占地2000平方钢管、内排架所有扣件等材料,供木工支模。

2、钢管扣件以承包方计划单时间为材料第一次到场时间,总工期为六个月,木工内排架以各栋号木工用料开始计算,工期每栋为三个月,如出现超期现象,按超期后每天每平方米加收0.2元计算(贰角整)
3、面积为图纸建筑面积,单价每平方为31.5元计算(叁拾壹元伍角整)
4、付款方式按每月工程进度的百分之七十付款,剩余款在竣工后两个月内付清。

甲方:乙方
年月日年月日
第三篇:亲子游戏-打豆腐
亲子游戏:打豆腐
游戏目标:锻炼孩子身体的灵活性。

玩法:
1、妈妈和孩子相对站立,双手互相拉开后一高一低。

2、游戏时,一边换手的高低位置,一边说:“哪边高,哪边低,打豆腐,快来买。


3、说完后,让孩子从拉开的双手中间穿插,翻身360度。

第四篇:scratch3.0_前置课_第八讲弹球打砖块讲义无logo 软件编程系列课讲义
Scratch前置课第八讲:弹球打砖块
一、教学目标
1、重点掌握面向()方向,移动()步,碰到边缘就反弹,重复执行直到()、克隆【克隆(自己)、当作为克隆体启动时、删除此克隆体】的积木脚本使用
2、掌握移到x()y()、在()和()之间取随机数的积木脚本使用。

3、学习侦测角色碰到舞台下边缘的方法。

二、主要程序脚本
编号
详细内容
功能描述
【1】
“面向()方向”
让角色面向指定方向,改变角色在舞台区的面向方向
(方向的赋值范围为:-179-180之间的整数)
【2】
“移到x()y()”
让角色移动到舞台区指定坐标位置
(赋值范围为:和角色大小相关)
【3】
“移动()步”
让角色在舞台区移动指定的步数,使角色的位置发生变化
(步数的赋值范围为:0-240之间的整数)
【4】
“碰到边缘就反弹”
角色碰到舞台区四周边缘时,面向方向改变为反射方向
【5】
“重复执行直到()”
该积木内的脚本一直执行直到指定的条件为真
【6】
“y坐标”
记录角色当前在舞台区的y坐标
【7】
“()<()”
用于比较前面的值是否小于后面
(可填入数字或字母,也可放入其他返回型积木)
【8】
“停止()”
停止脚本执行
(可停止的脚本为:全部脚本、这个脚本、该角色的其他脚本)
三、课堂准备
编号
名称
内容
来源
备注
【1】
PPT课件
课堂全流程演示文稿
火星科学盒官网
【2】
课程资料
PPT课件、讲义、视频
火星科学盒官网
【3】
学生上课使用器材
笔记本电脑或者台式电脑
老师自备
电脑建议使用Windows系统,苹果电脑和Linux系统需要从官网上单独下载对应的软件
游戏手柄
火星人商城采购
弹球打砖块初始程序
网盘链接下载
【4】
编程软件下载
Scratch3.0
火星科学盒官网
火星科学盒官网在线编辑版
离线下载版
安装好后测试一下是否可以使用
四、上课流程
本节课包括7步具体流程:
(1)第1步为引入部分,可以通过让学生介绍自己喜欢的球类运动来引出弹球或者通过让学生介绍打砖块游戏来引入本节课的弹球打砖块游戏。

时长控制在10分钟内。

(2)第2步为角色功能分析,通过展示效果视频分析角色的动作,对任务进行拆分。

时长控制在5分钟内。

(3)第3-6步为项目制作,首先使用移到x()y()、面向()方向与在()和()之间取随机数,为小球设置初始位置和随机的出发方向;之后实现小球在舞台区自由弹跳,重点学习移到()步和碰到边缘就反弹;实现小球碰到挡板后弹起的效果;学习重复执行直到()积木,实现小球碰到下边缘后停止移动并停止游戏运行。

最后复习克隆相关积木,修改砖块角色的脚本,实现多个砖块在舞台区出现。

时长控制在70分钟内。

(3)第7步为总结与巩固,考察对本节课重点知识脚本和脚本逻辑的掌握。

时长控制在5分钟内。

上课步骤
主要内容
备注
【第1步】引入
【对应PPT】“开始页”“效果视频”部分
【时长】10min
【引入话术】有没有同学玩过或者看其他人玩过打砖块的游戏,能描述一下打砖块的游戏是什么样子的吗?(学生自由回答)【话术】在我们平时玩的打砖块游戏中,最上方会有几行砖块,下面有一个能自由弹跳的小球,还有一个挡板,我们可以控制挡板去接住小球,然后小球碰到砖块时砖块会消失。

这是我们平时玩的普通的打砖块游戏,那在这节课中,老师带大家一起来制作一个不一样、不普通的弹球打砖块游戏。

在我们要制作的游戏中,砖块不是排列成一行一行的了,而是能够出现在舞台区的随机位置。

(播放效果视频)课堂引入时多和学生互动。

【第2步】角色功能分析
【对应PPT】“项目拆解”
【时长】5min
【衔接话术】在给出的初始程序中,挡板的脚本已经拼接完成,也就是说,我们已经可以用左右方向键控制挡板左右移动了,现在,我们只需要为小球和砖块这两个角色拼接脚本就可以了。

那下面就看一下我们本节课要完成的任务,任务一:实现小球在舞台区弹跳,并且挡板能接住小球;任务二:实现砖块在舞台区随机出现,被小球击中后消失。

让学生打开初始程序,根据初始程序分析任务。

【第3步】小球自由弹跳
【对应PPT】任务一小球自由弹跳
【时长】35min
【衔接话术】下面我们就拼接积木让小球弹跳起来吧。

在小球开始跳之前,我们要为它设置一个出发的初始位置和面向的方向。

【提问】同学们还记得设置初始位置和初始面向方向的积木是什么吗?(学生回答)
【讲解】设置角色初始位置的积木是“移到x()y()”,设置
初始方向的是“面向()方向”。

现在我们想让角色向随机方向出发,所以还需要用到“在()和()之间取随机数”积木。

因为旋转一周的角度是360度,所以在取随机数积木中可以填入的数字范围是0~360。

(等待学生拼接)(程序样例见“第五部分

程序1-1”)
【衔接话术】初始位置和出发方向已经设置好了,接下来我们就添加积木让小球动起来。

【提问】我们学过的能让角色移动的积木有哪些?(学生自由回答)
【讲解】我们学过的能让角色移动的积木有“移到x()y()”、“在()秒内滑行到x()y()”、“将x坐标增加()”和“将y 坐标增加()”。

现在,小球是向一个不确定的随机方向移动,还可以使用这些积木吗?是不可以的,使用这些积木时角色移动的方向是固定的,比如“将x坐标增加()”是让角色左右移动。

所以,应该使用“移动()步”积木,这个积木会让角色向面向的方向移动。

小球弹出去之后会在舞台区不停地弹跳,所以还需要在“移动()步”的外面添加“重复执行”。

(等待学生拼接)(程序样例见“第五部分

程序1-2”)
【衔接话术】拼接好这组积木之后,点击小绿旗运行一下,看看小球在舞台区有什么样的效果,可以在舞台区不停地自由弹跳吗?(学生运行观察并描述效果)
【讲解】小球现在并不能在舞台区自由的弹跳,在小球碰到边缘之后就会沿着边缘滚动。

为了实现小球碰到边缘后就弹回来的效果,需要添加运动分类中的“碰到边缘就反弹”积木。

这块积木会让小球检测到碰到边缘时,改变面向方向为相反的反向。

小球在弹跳的过程中需要一直检测有没有碰到边缘,所以要把这个积木放在“重复执行”中。

(等待学生拼接)(程序样例见“第五部分

程序1-3”)
【衔接话术】小球在碰到边缘时会反弹,那它在碰到挡板时应不应该改变方向弹起来呢?小球在碰到挡板时是应该向上弹起的。

【提问】小球由向下移动变成了向上移动是什么发生了改变?位置还是方向?(学生回答)
【讲解】小球碰到挡板时向上弹起是方向发生了改变,也就是说“如果小球碰到挡板,那么面向向上的方向”。

改变角色方向的积木是“面向()方向”,在这里,我们让小球弹起时不要朝向一个固定的方向,所以,使用“在()和()之间取随机数”积木来选取一个范围。

在这里选取的是-40~40的范围,可以点击角色区“方向”后面的数字打开小圆盘可以看到,-40到40的范围是一个朝上的夹角。

拼接完成这组积木,实现用挡板接住小球的效果。

(等待学生拼接)(程序样例见“第五部分

程序1-4”)
【衔接话术】既然可以用挡板去接小球了,那我们就为游戏增加一些难度,让小球碰到下边缘的时候就停下来。

【讲解】也就是小球会一直移动,直到碰到下边缘。

在实现小球一直移动时,使用的是“重复执行”积木,让脚本不停地执行。

现在,小球仍然会一直移动,但是碰到下边缘就会停下来,所以我们不能再使用“重复执行”积木,而是使用“重复执行直到()”。

“重复执行直到()”会让这个积木内的脚本一直执行,在满足直到后面的条件时停下来。

【衔接话术】小球会碰到下边缘时停止,也就是在“重复执行直到()”这个积木中我们要填入的条件是碰到下边缘。

【提问】在积木区的侦测分类中可以找到能侦测小球碰到下边缘的积木吗?(学生自由回答)
【讲解】在侦测分类中只有“碰到舞台边缘”没有直接侦测角色碰到舞台下边缘的积木。

相关文档
最新文档