东南大学MFC课程设计个人小结.docx_第1页
东南大学MFC课程设计个人小结.docx_第2页
东南大学MFC课程设计个人小结.docx_第3页
东南大学MFC课程设计个人小结.docx_第4页
东南大学MFC课程设计个人小结.docx_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机综合课程设计报告目录计算机综合课程设计个人小结小组编号:G13课题名称:推箱子游戏学号:08010124 姓名:黄健翔2011年10月I目录. I .计算机综合课程设计报告摘要、关键词一、个人承担的工作II1.1 程序设计II1.2 搜集资料II1.3 提供建议及解释II2 二、遇到的困难III2.1 核心算法的设计32.2 显示的方法32.3 插入图片32.4 地图的表示方法33 三、如何解决困难23.1 核心算法的设计23.2 显示的方法以及插入图片53.3 地图的表示方法94 四、个人总结11一、个人承担的工作1.1 程序设计本人在项目设计的过程中主要担任程序编写的工作,包括程序设计、代码编写、代码检查修改等。1.2 搜集资料在程序编写的过程中我需要上网查找各种相关资料,阅读相关书籍,从而有足够的知识去编写程序。1.3 提供建议及解释在项目需要做presentation的时候,我会给做presentation的同学提供一些建议以及程序代码的解释,让他更了解我们的程序,做好充分准备。在项目需要撰写报告的时候,我会给撰写报告的同学提供一些建议以及程序代码的解释,以便他写好报告。2 二、遇到的困难. IV .计算机综合课程设计报告Error! No text of specified style in document. Error! No text of specified style in document.2.1 核心算法的设计此困难在于我们以前从没试过设计游戏,因此不知道怎样去用计算机的语言来表达推箱子游戏的规则。2.2 显示的方法老师一直在强调后台的程序运行和前台的显示应该是分开的,最终才连接起来,其中的连接问题是比较困扰的,也是无法用计算机的语言去表达这种“连接”。2.3 插入图片我们小组的打算本来是不用枯燥的小人作推箱子的,想换成一个同学的头像,但是一直苦于没找到这么一个函数:在指定的坐标插入指定大小的图片。2.4 地图的表示方法我们想要知道怎样储存地图的信息,怎样的表示方法可以完全包含地图的信息。3 三、如何解决困难3.1 核心算法的设计核心算法我们采用三个点的坐标来控制游戏的进行:第一个点的坐标是小人当前的位置;第二个点的坐标是小人将要走向的位置;第三个点的坐标是,如果小人走向的是箱子,箱子将要被推向到那一点的坐标。利用这三个坐标可以实现游戏的基本规则设置。比如,如果小人将要走向的位置是箱子,而箱子前面是空地,那么将“箱子在空地上”改为“人在空地上”;将“空地”改成“箱子在空地上”;再将原来的“人在空地上”改为“空地”。下面是对应的代码:void CBoxMan:UpdateMap(int x1, int y1, int x2, int y2, int x3, int y3) switch (m_cMapy2x2) case MAP_BACKGROUP: /地图设计错误,不应该出现 AfxMessageBox(wrong map); break; case MAP_WHITEWALL: /遇到墙,不做任何事情 break; case MAP_BLUEWALL: /通道,可以行走 m_cMapy2x2 = MAP_MANWALL; if (m_cMapy1x1 = MAP_MANWALL) m_cMapy1x1 = MAP_BLUEWALL; else if (m_cMapy1x1 = MAP_MANBALL) m_cMapy1x1 = MAP_BALL; m_ptManPosition.x = x2; m_ptManPosition.y = y2;m_soundState = SOUND_STATE_MOVE; break; case MAP_BALL: /目的地,可以行走 m_cMapy2x2 = MAP_MANBALL; if (m_cMapy1x1 = MAP_MANWALL) m_cMapy1x1 = MAP_BLUEWALL; else if (m_cMapy1x1 = MAP_MANBALL) m_cMapy1x1 = MAP_BALL; m_ptManPosition.x = x2; m_ptManPosition.y = y2;m_soundState = SOUND_STATE_MOVE; break; case MAP_YELLOWBOX: /箱子 if (m_cMapy3x3 = MAP_BALL) /目的地可以行走 m_cMapy3x3 = MAP_REDBOX; m_cMapy2x2 = MAP_MANWALL; if (m_cMapy1x1 = MAP_MANWALL) m_cMapy1x1 = MAP_BLUEWALL; else if (m_cMapy1x1 = MAP_MANBALL) m_cMapy1x1 = MAP_BALL; m_ptManPosition.x = x2; m_ptManPosition.y = y2;m_soundState = SOUND_STATE_PUSH; else if (m_cMapy3x3 = MAP_BLUEWALL) /通道,可以行走 m_cMapy3x3 = MAP_YELLOWBOX; m_cMapy2x2 = MAP_MANWALL; if (m_cMapy1x1 = MAP_MANWALL) m_cMapy1x1 = MAP_BLUEWALL; else if (m_cMapy1x1 = MAP_MANBALL) m_cMapy1x1 = MAP_BALL; m_ptManPosition.x = x2; m_ptManPosition.y = y2;m_soundState = SOUND_STATE_PUSH; break; case MAP_REDBOX: /安放好的箱子 if (m_cMapy3x3 = MAP_BALL) /目的地可以行走 m_cMapy3x3 = MAP_REDBOX; m_cMapy2x2 = MAP_MANBALL; if (m_cMapy1x1 = MAP_MANWALL) m_cMapy1x1 = MAP_BLUEWALL; else if (m_cMapy1x1 = MAP_MANBALL) m_cMapy1x1 = MAP_BALL; m_ptManPosition.x = x2; m_ptManPosition.y = y2;m_soundState = SOUND_STATE_PUSH; else if (m_cMapy3x3 = MAP_BLUEWALL) /通道,可以行走 m_cMapy3x3 = MAP_YELLOWBOX; m_cMapy2x2 = MAP_MANBALL; if (m_cMapy1x1 = MAP_MANWALL) m_cMapy1x1 = MAP_BLUEWALL; else if (m_cMapy1x1 = MAP_MANBALL) m_cMapy1x1 = MAP_BALL; m_ptManPosition.x = x2; m_ptManPosition.y = y2;m_soundState = SOUND_STATE_PUSH; break; case MAP_MANWALL: /地图设计错误,不应该出现 AfxMessageBox(wrong map); break; case MAP_MANBALL: /地图设计错误,不应该出现 AfxMessageBox(wrong map); break; 至于如何判断游戏是否完成,我们采用的方法是,扫描一次全地图,如果全地图上没有“人在目的地”或者“目的地上什么都没有”这两项,那么游戏完成。对应代码如下:bool CBoxMan:IsFinish() bool bFinish = true; for (int i = 0; i M_TAB_HEIGHT; i+) for (int j = 0; j M_TAB_WIDTH; j+) if (m_cMapij = MAP_BALL | m_cMapij = MAP_MANBALL) bFinish = false; return bFinish;3.2 显示的方法以及插入图片鉴于我们最终还是没能找到那个函数(在指定的坐标插入指定大小的图片),最终我们采用用函数画图的方法来显示当前游戏的状况,对应代码如下:void CBoxMan:DrawGameArea(CDC* pDC) int i, j, x, y;/绘制整个地图游戏区域 for (i = 0; i M_TAB_HEIGHT; i+) for (j = 0; j GetTextColor(); COLORREF crOldBack = pDC-GetBkColor();/更改当前的文本配置 pDC-SetTextColor(RGB(0, 0, 102);pDC-SetBkColor(RGB(0, 0, 0);/输出文本 CString sTmp; sTmp.Format(当前关数 : %d , m_iMissionNum); pDC-TextOut(50, 270, sTmp);/恢复原来文本配置 pDC-SetTextColor(crOldText); pDC-SetBkColor(crOldBack);/ 绘制背景/void CBoxMan:DrawBackGroup(int x, int y, CDC* pDC) COLORREF clr = RGB(0, 0, 0); pDC-FillSolidRect(x, y, BLOCK_WIDTH, BLOCK_HEIGHT, clr);/ 绘制墙/void CBoxMan:DrawWhiteWall(int x, int y, CDC* pDC) COLORREF clr1 = RGB(255, 255, 255); COLORREF clr2 = RGB(48, 48, 48); COLORREF clr3 = RGB(192, 192, 192); pDC-FillSolidRect(x, y, 19, 19, clr1); pDC-FillSolidRect(x + 1, y + 1, 19, 19, clr2); pDC-FillSolidRect(x + 1, y + 1, 18, 18, clr3);/绘制墙的缝隙 pDC-MoveTo(x, y + 10); pDC-LineTo(x + 20, y + 10); pDC-MoveTo(x + 10, y + 10); pDC-LineTo(x + 10, y + 20);/ 绘制通道/void CBoxMan:DrawBlueWall(int x, int y, CDC* pDC) COLORREF clr = RGB(0, 0, 255); pDC-FillSolidRect(x, y, 20, 20, clr); pDC-MoveTo(x, y + 10); pDC-LineTo(x + 20, y + 10); pDC-MoveTo(x + 10, y + 10); pDC-LineTo(x + 10, y + 20);/ 绘制目的地/void CBoxMan:DrawBall(int x, int y, CDC* pDC) COLORREF clr = RGB(0, 0, 255); pDC-FillSolidRect(x, y, 20, 20, clr); pDC-MoveTo(x, y + 10); pDC-LineTo(x + 20, y + 10); pDC-MoveTo(x + 10, y + 10); pDC-LineTo(x + 10, y + 20); pDC-Ellipse(x, y, x + 20, y + 20); pDC-Ellipse(x + 5, y + 5, x + 15, y + 15);/ 绘制未放好的箱子/void CBoxMan:DrawYellowBox(int x, int y, CDC* pDC) COLORREF clr = RGB(255, 255, 0); pDC-FillSolidRect(x, y, 20, 20, clr); COLORREF clr2 = RGB(255, 192, 0); pDC-FillSolidRect(x + 2, y + 2, 16, 16, clr2); COLORREF clr3 = RGB(0, 0, 0); pDC-SetPixel(x + 3, y + 3, clr3); pDC-SetPixel(x + 17, y + 3, clr3); pDC-SetPixel(x + 3, y + 17, clr3); pDC-SetPixel(x + 17, y + 17, clr3);/ 绘制安放好的箱子/void CBoxMan:DrawRedBox(int x, int y, CDC* pDC) COLORREF clr = RGB(255, 255, 0); pDC-FillSolidRect(x, y, 20, 20, clr); COLORREF clr2 = RGB(255, 0, 0); pDC-FillSolidRect(x + 2, y + 2, 16, 16, clr2); COLORREF clr3 = RGB(0, 0, 0); pDC-SetPixel(x + 3, y + 3, clr3); pDC-SetPixel(x + 17, y + 3, clr3); pDC-SetPixel(x + 3, y + 17, clr3); pDC-SetPixel(x + 17, y + 17, clr3);/ 绘制人在通道/void CBoxMan:DrawManWall(int x, int y, CDC* pDC) COLORREF clr = RGB(0, 0, 255); /蓝色墙 pDC-FillSolidRect(x, y, 20, 20, clr); pDC-MoveTo(x, y + 10); pDC-LineTo(x + 20, y + 10); pDC-MoveTo(x + 10, y + 10); pDC-LineTo(x + 10, y + 20);/人的绘制 pDC-Ellipse(x + 6, y + 2, x + 14, y + 10); /人头 pDC-MoveTo(x + 2, y + 11); /人手 pDC-LineTo(x + 18, y + 11); pDC-MoveTo(x + 10, y + 10); /人身体 pDC-LineTo(x + 10, y + 12); pDC-MoveTo(x + 2, y + 20); /人脚 pDC-LineTo(x + 10, y + 12); pDC-LineTo(x + 18, y +20);/ 绘制人在目的地/void CBoxMan:DrawManBall(int x, int y, CDC* pDC) COLORREF clr = RGB(0, 0, 255); /球 pDC-FillSolidRect(x, y, 20, 20, clr); pDC-MoveTo(x, y + 10); pDC-LineTo(x + 20, y + 10); pDC-MoveTo(x + 10, y + 10); pDC-LineTo(x + 10, y + 20); pDC-Ellipse(x, y, x + 20, y + 20); pDC-Ellipse(x + 5, y + 5, x + 15, y

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论