1、韩尚颖吃豆子VC+课程设计结题书课程设计报告 题目: 吃豆子游戏 分 组: 学 院: 数学与计算科学学院 专 业: 信息与计算科学 学生姓名: 韩尚颖 1200710218 小组成员: 郑总文 1200710335 小组成员: 徐维爽 1200710331 指导教师: 宁黎华 完成日期: 2014年 12 月 26 日组员分工:1.韩尚颖负责游戏架构,前期分析,函数编写及具体功能的实现;2.徐维爽负责游戏调试工作,寻找BUG和反馈用户体验;3.郑总文负责论文的撰写、思路整理;目录1、游戏功能描述.2、课程设计分析.3、程序运行结果.4、课程设计总结与心得体会.5、附录:程序代码.谷歌翻译窗体顶
2、端Realization of childhood classic PC game, using MFC C + programming language combined under win8.1 environment, using VS2010 development tools to complete the Pacman game design course. The first to use the MFC class member function Ellipse CDC, Rectangle and Pie, draw a circle, beans, wall (rectan
3、gle) and the sector (mouth) in the range of 500 * 650; map using the map array to store 10 * 13, different values represent different objects, and coordinate values into a corresponding array subscript; After the start of the game, when you press the keyboard arrow keys, in the CView derived class ,
4、the key messages for WM_KEYDOWN messages accordingly, switch-case statement to determine the message in which the corresponding function using a key, and variable assignment Direction. Then WM_CREATE using SetTimer () function to set one every 300 milliseconds to send out a message WM_TIMER timer, t
5、hen the response function Gamedraw WM_TIMER message mouth drawn in the current graphics and function GamePay complete array of coordinates that change index changes, the speed setting in advance mouth SetTimer function. When the mouth after eating beans beans with GamePlay delete function to achieve
6、, when the beans reach the mouth where the coordinates correspond; Zhang combined number of advances before parity is achieved, the definition of a global variable panduan, to represent the number of advances in the mouth before An array of values assigned to 0; at the end of the game, GameOver func
7、tion gives the game ended tips.窗体底端有道Implement the classic PC game as a child, the use of MFC in combination with c + + programming language under the environment of win8.1, VS2010 development tools to finish eat beans game curriculum design. The CDC of the first to use MFC class member function of
8、the Ellipse, Rectangle and Pie, within the scope of the 500 * 650 drawing circle, beans, wall (rectangular) and fan (mouth); Map using 10 * 13 map array to store, different Numbers for different objects, and the corresponding coordinates can be converted to an array subscript; At the start of the ga
9、me, according to the keyboard up and down or so key, in the derived classes of the CView to message corresponding buttons WM_KEYDOWN message in the message corresponding function using the switch - a case statement judgment which is a key, and the variable Direction assignment. And then to the SetTi
10、mer used in WM_CREATE message handler () function sets the 1 every 300 milliseconds send WM_TIMER message timer, and then in response to a WM_TIMER message function Gamedraw draw the mouth of the graph and function GamePay complete coordinate changes the array subscript, mouth forward speed setting
11、in the SetTimer function. Share steps forward in the mouth of a parity, define a global variable panduan, to represent the steps forward; When the mouth after eating the beans beans is deleted in GamePlay function to realize, when reach the beans mouth, where coordinates, corresponding to the array
12、values assigned to zero; At the end of the game, GameOver function game tips are given. 一、游戏功能描述(一)设计目的:实现小时候经典PC游戏,基于C+,用MFC编程,完成“吃豆子”课程设计。(二)设计要求:1.用MFC编程,在客户区绘制一个嘴的图形、若干个圆豆子和墙壁;2.按上下左右方向键时嘴可以按照对应的方向一张一合地前进;3.当嘴吃掉一个豆子后,这个豆子就要消失,不能再出现;4.当所有豆子都吃掉后,弹出对话框,提示用户“恭喜!你吃完了全部豆子!” (三)编程提示:1. 嘴的图形是一个圆形与一个扇形交替
13、显示,圆形表示嘴闭合的情况,扇形表示嘴张开的形状;绘制圆形和扇形的函数为CDC类的成员函数Ellipse和Pie;2. 豆子可以存储在一个数组中,数组的数据是每个豆子圆心的坐标;在OnDraw()函数中画出每个豆子和嘴的原始位置;3. 键盘上下左右方向键的虚拟键码分别为VK_UP、VK_DOWN、VK_LEFT、VK_RIGTH,在CView的派生类中对WM_KEYDOWN按键消息进行消息相应,在消息相应函数中用switch-case语句判断是哪一个键,然后用SetTimer()函数设置4个定时器;嘴行进的动画用定时器来实现,SetTimer()函数可以每隔一定的时间发出WM_TIMER消息,
14、那么就可以在响应WM_TIMER消息的函数中绘制当前嘴的图形,用switch-case语句,根据SetTimer()函数设置的不同ID的定时器来判断是哪一个方向,然后按照不同方向绘制开口方向不同的嘴的形状,并且要让嘴沿着这个方向一步一步前进,完成动画效果;嘴前进的速度在SetTimer函数中设置;4. 嘴的张合可以用前进步数的奇偶来实现,在CView派生类中定义一个成员变量用来表示前进步数,用判断语句,当前进步数为偶数时画嘴张开时的扇形,当前进步数为奇数时画嘴闭合时的圆形。当嘴吃到豆子后豆子的删除是程序的难点,可以使用一个C+标准库的容器来存储豆子,实现豆子的动态删除,效率比用数组存储要高;5
15、. 注意要包含头文件#include using namespace std;豆子都吃完后弹出对话框用MessageBox()函数。3、课程设计分析 在本次课程设计中,我负责游戏架构、前期分析、函数的编写及具体功能的实现;吃豆子游戏是很经典的一款的游戏,在我很小的时候,就玩过它,因此我对这次课设有着不一样的感受:当年都是在玩,而现在我确实在做,确实不一样啊! 首先,我开始自学MFC,从老师推荐的深入浅出MFC学起,慢慢的懂得了如何使用它;接着我就开始,对游戏进行前期分析和思路总结,总结出了开发思路,然后就开始具体编码,实现函数功能;下面是我的具体思路:1. 嘴的图形是一个圆形与一个扇形交替显示
16、,圆形表示嘴闭合的情况,扇形表示嘴张开的形状;绘制圆形和扇形的函数为CDC类的成员函数Ellipse和Pie; 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_KEYDO
17、WN按键消息中进行赋值;4. 然后在WM_CREATE中用SetTimer()函数设置1个定时器;SetTimer()函数每隔300毫秒的时间发出WM_TIMER消息,那么就在响应WM_TIMER消息的函数Gamedraw()中绘制当前嘴的图形,在函数中用switch-case语句,根据Direction赋予的不同的值来判断是哪一个方向,然后按照不同方向绘制开口方向不同的嘴的形状(Gamedraw()函数来实现),并且要让嘴沿着这个方向一步一步前进,完成动画效果;嘴前进的速度在SetTimer函数中设置;5. 嘴的张合用前进步数的奇偶来实现,所以定义一个全局变量panduan,来表示前进步数,
18、用判断语句,当前进步数为偶数时画嘴张开时的扇形,当前进步数为奇数时画嘴闭合时的圆形。6. 当嘴吃到豆子后豆子的删除是用GamePlay()来实现的,当嘴到达豆子所在坐标是,对应数组值赋为0;7. 游戏结束用 GameOver()函数来判断,每次绘制时都做判断;满足条件给出提示窗口;3、程序运行结果初始游戏进入画面:游戏画面:4、课程设计总结与心得体会 最初进行设计的时候,啥也不懂,就看了看老师推荐的书,看懂后,我就着手游戏实现思路的设计,当然也参考了很多网上的思路,最终弄清了整个游戏的窗口过程。而对于编程,是最庞大又棘手的一块,那是学得更多了,于是把课本和图书馆借来的参考书重新针对性的学了一次
19、,遇到难处先是仔细的思考然后就去网上找答案。 编写代码的过程中是很痛苦的,我一遍又一遍的修改、重置并测试功能,最终实现了全部的功能、收获了快乐!通过这次课程设计,我的编程能力有了很大的提高,虽然有时候自己没有思路,但是可以借鉴别人的设计的思路,理解的同时自己小试一下也可以编出来,所以凡事不能被困难吓倒,只要有开始,去尝试,就会有意想不到的收获!五、附录:程序代码.1.主要函数#pragma once#include #include resource.h#include #include /#include #include using namespace std;void paintcirc
20、le(HDC &hdc,int &x,int &y);/暂停画圆#define timer 1;/响应键盘#define L_up 1;#define L_down 2;#define L_left 3;#define L_right 4;#define Max_x 550;#define Min_x 0;#define Max_y 650;#define Min_y 0;/int Direction=4;/四个方向:1代表上,2代表下,3代表左,4代表右static int map1013=/2代表空,1代表有墙壁; 1,1,1,1,1,1,1,1,1,1,1,1,1, 1,0,0,0,0,
21、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,2,2,2,2,2,2,2,2,2,2,1,/10 1,0,1,1,2,0,1,0,2,1,1,2,1,/3 1,0,0,1,2,1,1,1,2,1,0,2,1,/3 1,0,0,0,0,0,0,0,0,0,0,0,1,/ 1,1,1,1,1,1,1,1,1,1,1,1,1;static int score=0;/成绩/嘴的初始位置static int lx=75,ly=75
22、,gx=475,gy=0;long panduan=0,m=0,n=0;void Gamemap(HDC hdc,int x1,int y1,int x2 ,int y2,int map13,int &score)/地图初始化 / char S100; for (int i=0;i650;i=i+50) for (int j=0;j=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);/向上的嘴 HPEN hp2; hp
23、2=(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);/圆 HPEN hp3; hp3=(HPEN)GetStockObject(WHITE_BRUSH); SelectObject(hdc,hp3); Ellipse(hdc,x-3,y-13,x-13,y-3);/眼睛 DeleteObject(hp3); break; case 2:/嘴向下 if(k%2=0) if(y=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
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1