韩尚颖吃豆子VC++课程设计结题书Word格式.docx
- 文档编号:20887055
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:25
- 大小:76.40KB
韩尚颖吃豆子VC++课程设计结题书Word格式.docx
《韩尚颖吃豆子VC++课程设计结题书Word格式.docx》由会员分享,可在线阅读,更多相关《韩尚颖吃豆子VC++课程设计结题书Word格式.docx(25页珍藏版)》请在冰豆网上搜索。
4、课程设计总结与心得体会......................
5、附录:
程序代码..............................
谷歌翻译
窗体顶端
RealizationofchildhoodclassicPCgame,usingMFCC++programminglanguagecombinedunderwin8.1environment,usingVS2010developmenttoolstocompletethePacmangamedesigncourse.
ThefirsttousetheMFCclassmemberfunctionEllipseCDC,RectangleandPie,drawacircle,beans,wall(rectangle)andthesector(mouth)intherangeof500*650;
mapusingthemaparraytostore10*13,differentvaluesrepresentdifferentobjects,andcoordinatevaluesintoacorrespondingarraysubscript;
Afterthestartofthegame,whenyoupressthekeyboardarrowkeys,intheCViewderivedclass,thekeymessagesforWM_KEYDOWNmessagesaccordingly,switch-casestatementtodeterminethemessageinwhichthecorrespondingfunctionusingakey,andvariableassignmentDirection.
ThenWM_CREATEusingSetTimer()functiontosetoneevery300millisecondstosendoutamessageWM_TIMERtimer,thentheresponsefunctionGamedrawWM_TIMERmessagemouthdrawninthecurrentgraphicsandfunctionGamePaycompletearrayofcoordinatesthatchangeindexchanges,thespeedsettinginadvancemouthSetTimerfunction.
WhenthemouthaftereatingbeansbeanswithGamePlaydeletefunctiontoachieve,whenthebeansreachthemouthwherethecoordinatescorrespond;
Zhangcombinednumberofadvancesbeforeparityisachieved,thedefinitionofaglobalvariablepanduan,torepresentthenumberofadvancesinthemouthbeforeAnarrayofvaluesassignedto0;
attheendofthegame,GameOverfunctiongivesthegameendedtips.
窗体底端
有道
ImplementtheclassicPCgameasachild,theuseofMFCincombinationwithc++programminglanguageundertheenvironmentofwin8.1,VS2010developmenttoolstofinisheatbeansgamecurriculumdesign.
TheCDCofthefirsttouseMFCclassmemberfunctionoftheEllipse,RectangleandPie,withinthescopeofthe500*650drawingcircle,beans,wall(rectangular)andfan(mouth);
Mapusing10*13maparraytostore,differentNumbersfordifferentobjects,andthecorrespondingcoordinatescanbeconvertedtoanarraysubscript;
Atthestartofthegame,accordingtothekeyboardupanddownorsokey,inthederivedclassesoftheCViewtomessagecorrespondingbuttonsWM_KEYDOWNmessageinthemessagecorrespondingfunctionusingtheswitch-acasestatementjudgmentwhichisakey,andthevariableDirectionassignment.
AndthentotheSetTimerusedinWM_CREATEmessagehandler()functionsetsthe1every300millisecondssendWM_TIMERmessagetimer,andtheninresponsetoaWM_TIMERmessagefunctionGamedrawdrawthemouthofthegraphandfunctionGamePaycompletecoordinatechangesthearraysubscript,mouthforwardspeedsettingintheSetTimerfunction.
Sharestepsforwardinthemouthofaparity,defineaglobalvariablepanduan,torepresentthestepsforward;
WhenthemouthaftereatingthebeansbeansisdeletedinGamePlayfunctiontorealize,whenreachthebeansmouth,wherecoordinates,correspondingtothearrayvaluesassignedtozero;
Attheendofthegame,GameOverfunctiongametipsaregiven.
一、游戏功能描述
(一)设计目的:
实现小时候经典PC游戏,基于C++,用MFC编程,完成“吃豆子”课程设计。
(二)设计要求:
1.用MFC编程,在客户区绘制一个嘴的图形、若干个圆豆子和墙壁;
2.按上下左右方向键时嘴可以按照对应的方向一张一合地前进;
3.当嘴吃掉一个豆子后,这个豆子就要消失,不能再出现;
4.当所有豆子都吃掉后,弹出对话框,提示用户“恭喜!
你吃完了全部豆子!
”
(三)编程提示:
1.嘴的图形是一个圆形与一个扇形交替显示,圆形表示嘴闭合的情况,扇形表示嘴张开的形状;
绘制圆形和扇形的函数为CDC类的成员函数Ellipse和Pie;
2.豆子可以存储在一个数组中,数组的数据是每个豆子圆心的坐标;
在OnDraw()函数中画出每个豆子和嘴的原始位置;
3.键盘上下左右方向键的虚拟键码分别为VK_UP、VK_DOWN、VK_LEFT、VK_RIGTH,在CView的派生类中对WM_KEYDOWN按键消息进行消息相应,在消息相应函数中用switch-case语句判断是哪一个键,然后用SetTimer()函数设置4个定时器;
嘴行进的动画用定时器来实现,SetTimer()函数可以每隔一定的时间发出WM_TIMER消息,那么就可以在响应WM_TIMER消息的函数中绘制当前嘴的图形,用switch-case语句,根据SetTimer()函数设置的不同ID的定时器来判断是哪一个方向,然后按照不同方向绘制开口方向不同的嘴的形状,并且要让嘴沿着这个方向一步一步前进,完成动画效果;
嘴前进的速度在SetTimer函数中设置;
4.嘴的张合可以用前进步数的奇偶来实现,在CView派生类中定义一个成员变量用来表示前进步数,用判断语句,当前进步数为偶数时画嘴张开时的扇形,当前进步数为奇数时画嘴闭合时的圆形。
当嘴吃到豆子后豆子的删除是程序的难点,可以使用一个C++标准库的容器来存储豆子,实现豆子的动态删除,效率比用数组存储要高;
5.注意要包含头文件
#include<
vector>
usingnamespacestd;
豆子都吃完后弹出对话框用MessageBox()函数。
3、课程设计分析
在本次课程设计中,我负责游戏架构、前期分析、函数的编写及具体功能的实现;
吃豆子游戏是很经典的一款的游戏,在我很小的时候,就玩过它,因此我对这次课设有着不一样的感受:
当年都是在玩,而现在我确实在做,确实不一样啊!
首先,我开始自学MFC,从老师推荐的《深入浅出MFC》学起,慢慢的懂得了如何使用它;
接着我就开始,对游戏进行前期分析和思路总结,总结出了开发思路,然后就开始具体编码,实现函数功能;
下面是我的具体思路:
1.嘴的图形是一个圆形与一个扇形交替显示,圆形表示嘴闭合的情况,扇形表示嘴张开的形状;
2.豆子和墙壁数据信息存储在一个数组中,‘2’表示豆子、‘1’表示墙壁、‘0’代表可以走的通道;
在Gamemap()函数中画出每个豆子和墙壁、一些提示信息;
3.键盘上下左右方向键的虚拟键码分别为VK_UP、VK_DOWN、VK_LEFT、VK_RIGTH,在CView的派生类中对WM_KEYDOWN按键消息进行消息相应,在消息相应函数中用switch-case语句判断是哪一个键,然后定义一个变量:
Direction,表示四个方向:
1代表上,2代表下,3代表左,4代表右,并在WM_KEYDOWN按键消息中进行赋值;
4.然后在WM_CREATE中用SetTimer()函数设置1个定时器;
SetTimer()函数每隔300毫秒的时间发出WM_TIMER消息,那么就在响应WM_TIMER消息的函数Gamedraw()中绘制当前嘴的图形,在函数中用switch-case语句,根据Direction赋予的不同的值来判断是哪一个方向,然后按照不同方向绘制开口方向不同的嘴的形状(Gamedraw()函数来实现),并且要让嘴沿着这个方向一步一步前进,完成动画效果;
5.嘴的张合用前进步数的奇偶来实现,所以定义一个全局变量panduan,来表示前进步数,用判断语句,当前进步数为偶数时画嘴张开时的扇形,当前进步数为奇数时画嘴闭合时的圆形。
6.当嘴吃到豆子后豆子的删除是用GamePlay()来实现的,当嘴到达豆子所在坐标是,对应数组值赋为0;
7.游戏结束用GameOver()函数来判断,每次绘制时都做判断;
满足条件给出提示窗口;
3、程序运行结果
初始游戏进入画面:
游戏画面:
4、课程设计总结与心得体会
最初进行设计的时候,啥也不懂,就看了看老师推荐的书,看懂后,我就着手游戏实现思路的设计,当然也参考了很多网上的思路,最终弄清了整个游戏的窗口过程。
而对于编程,是最庞大又棘手的一块,那是学得更多了,于是把课本和图书馆借来的参考书重新针对性的学了一次,遇到难处先是仔细的思考然后就去网上找答案。
编写代码的过程中是很痛苦的,我一遍又一遍的修改、重置并测试功能,最终实现了全部的功能、收获了快乐!
通过这次课程设计,我的编程能力有了很大的提高,虽然有时候自己没有思路,但是可以借鉴别人的设计的思路,理解的同时自己小试一下也可以编出来,所以凡事不能被困难吓倒,只要有开始,去尝试,就会有意想不到的收获!
五、附录:
1.主要函数
#pragmaonce
iostream>
#include"
resource.h"
cstring>
cstdlib>
//#include<
cstdio>
cmath>
voidpaintcircle(HDC&
hdc,int&
x,int&
y);
//暂停画圆
#definetimer1;
//响应键盘
#defineL_up1;
#defineL_down2;
#defineL_left3;
#defineL_right4;
#defineMax_x550;
#defineMin_x0;
#defineMax_y650;
#defineMin_y0;
//intDirection=4;
//四个方向:
1代表上,2代表下,3代表左,4代表右
staticintmap[10][13]=
{//2代表空,1代表有墙壁;
{1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1},//
{1,0,0,1,2,1,1,1,2,1,0,2,1},//3
{1,0,1,1,2,0,1,0,2,1,1,2,1},//3
{1,0,2,2,2,2,2,2,2,2,2,2,1},//10
{1,0,0,1,2,1,1,1,2,1,0,2,1},//3
{1,1,1,1,1,1,1,1,1,1,1,1,1}
};
staticintscore=0;
//成绩
//嘴的初始位置
staticintlx=75,ly=75,gx=475,gy=0;
longpanduan=0,m=0,n=0;
voidGamemap(HDChdc,intx1,inty1,intx2,inty2,intmap[][13],int&
score)//地图初始化
{//charS[100];
for(inti=0;
i<
650;
i=i+50)
{
for(intj=0;
j<
500;
j=j+50)//550
{
if(map[j/50][i/50]==2)//map[1+(j-50)/50][1+(i-50)/50]==2
{
HBRUSHhb6;
hb6=CreateSolidBrush(RGB(255,255,0));
//黄色画刷
SelectObject(hdc,hb6);
Ellipse(hdc,i+18,j+18,i+33,j+33);
//画豆子
DeleteObject(hb6);
}
else
if(map[j/50][i/50]==1)//map[1+(j-50)/50][1+(i-50)/50]==1
{HBRUSHhb7;
hb7=CreateSolidBrush(RGB(255,255,255));
//白色
SelectObject(hdc,hb7);
Rectangle(hdc,i,j,i+50,j+50);
//画墙
DeleteObject(hb7);
}
}
HPENhps;
hps=CreatePen(PS_INSIDEFRAME,3,RGB(255,0,0));
//红色
SelectObject(hdc,hps);
//Rectangle(hdc,680,0,900,530);
填充颜色为白色
//画出框
MoveToEx(hdc,680,0,NULL);
LineTo(hdc,680,500);
LineTo(hdc,900,500);
LineTo(hdc,900,0);
LineTo(hdc,680,0);
DeleteObject(hps);
TCHARszBuffer[100];
TextOut(hdc,700,50,szBuffer,wsprintf(szBuffer,TEXT("
PS:
'
↑'
'
↓'
←'
→'
进行控制"
)));
TextOut(hdc,700,80,szBuffer,wsprintf(szBuffer,TEXT("
按下ESC键,游戏暂停"
TextOut(hdc,700,110,szBuffer,wsprintf(szBuffer,TEXT("
按下ENTER键,游戏开始"
TextOut(hdc,700,150,szBuffer,wsprintf(szBuffer,TEXT("
游戏成绩:
%d"
),score));
}
voidGamedraw(HDChdc,int&
y,long&
k,int&
dr)//嘴的绘制
{HPENhp1;
hp1=CreatePen(PS_SOLID,2,RGB(128,0,128));
SelectObject(hdc,hp1);
switch(dr)
{
case0:
//y=y;
//paintcircle(hdc,x,y);
Pie(hdc,x-20,y-20,x+20,y+20,x+10,y-10,x+10,y+10);
HPENhp5;
hp5=(HPEN)GetStockObject(WHITE_BRUSH);
SelectObject(hdc,hp5);
Ellipse(hdc,x-3,y-13,x-13,y-3);
DeleteObject(hp5);
break;
case1:
//嘴向上
if(k%2==0
if(y>
=75)
{
if(map[(y-25)/50-1][(x-75)/50+1]==2||map[(y-25)/50-1][(x-75)/50+1]==0)
Pie(hdc,x-20,y-20,x+20,y+20,x-10,y-10,x+10,y-10);
//向上的嘴
HPENhp2;
hp2=(HPEN)GetStockObject(WHITE_BRUSH);
SelectObject(hdc,hp2);
Ellipse(hdc,x-3,y+13,x-13,y+3);
//眼睛
DeleteObject(hp2);
y=y-25;
}
else
Ellipse(hdc,x-20,y-20,x+20,y+20);
//圆
HPENhp3;
hp3=(HPEN)GetStockObject(WHITE_BRUSH);
SelectObject(hdc,hp3);
DeleteObject(hp3);
}
break;
case2:
//嘴向下
if(k%2==0)
if(y<
=475)
{
if(map[(y-25)/50+1][(x-75)/50+1]==2||map[(y-25)/50+1][(x-75)/50+1]==0)
Pie(hdc,x-20,y-20,x+20,y+20,x+10,y+10,x-10,y+10);
HPENhp3;
hp3=(HPEN)GetStockObject(WHITE_BRUSH);
SelectObject(hdc,hp3);
Ellipse(hdc,x-3,y-13,x-13,y-3);
DeleteObject(hp3);
y=y+25;
Ellipse(hdc,x-20,y-20,x+20,y+20);
HPENhp3;
case3:
//嘴向左
{
if(x>
=25)
if(map[(y-75)/50+1][(x-25)/50-1]==2||map[(y-75)/50+1][(x-25)/50-1]==0)
Pie(hdc,x-20,y
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 豆子 VC 课程设计 结题书