当前位置:文档之家› MFC课程设计之拼图游戏设计报告

MFC课程设计之拼图游戏设计报告

拼图游戏
实验报告
一、实验目的
1、通过实践加强对程序设计语言课程知识点的理解和掌握,培养对课程知识综合运用能力、实际分析问题能力及编程能力,养成良好的编程习惯。

2、通过实践进一步领会程序设计的特点和应用,提高运用C++ 以及面向对象知识解决实际问题的能力,初步掌握MFC变成的基本功能。

3、通过实践掌握用C++ 编写面向对象的实用程序的设计方法,对面向对象方法和思想增加感性的认识;学会利用C++程序设计语言编写出一些短小、可靠的Windows实用程序,切实提高面向对象的程序设计能力,为后续的相关课程的学习打下基础。

二、小组分工
为了发挥组内同学的各自特长,我们小组分工如下:
1、苏嘉彬——前期进行系统需求分析,系统结构设计,完成拼图界面的设计工作,
后期完成课程设计报告
2、嵇鹏飞(组长)——完成主要程序的编写工作(图形分割、存储、拼图)
3、依代吐力·艾尼——搜集资料,完成计时器的设计工作,软件接口的设计及测

三、程序设计思路
1、初步方案讨论
拼图游戏是同学们喜欢的益智游戏之一,带着浓厚的兴趣,我们选择拼图游戏设计
作为我们小组本次MFC课程设计的课题。

在讨论中,有的同学希望用单文档(SDI)
的形式完成本次设计,有的同学则偏向于用对话框(Dialogue)的形式,最终我们小组
讨论决定最终的设计采用对话框形式实现拼图功能。

2、方案变更、疑难解决
(1)最初我们决定采用对话框形式来实现拼图的基本功能,但是在实施过程中出
现了几次很严重的错误:Debug Assertion Failed,缺少ivewers.dll文件等等,在最后的
尝试中我们发现如果采用单文档(SDI)形式写拼图的话,可以实现最基本的功能,因
此我们最终决定使用单文档来完成该课程设计。

(2)一开始我们讨论决定采用的方式是将位图读入后再进行图片的分割,而在实
际的操作过程中由于图片的分割有一定的困难,因此我们最后采用的方式是将位图进行
分割完毕后再逐个用Brush在指定位置上进行绘画,实现图形的分割。

3、系统需求分析
(1)系统功能
简单的拼图游戏应该有拼图、计时、判断拼图成功、游戏者用时统计排名等功能,
拼图内部还应该有难度选择、相邻拼图块自动拼图等功能。

图1所示是拼图游戏的用例
图,表明拼图游戏的主要功能。

图1

2)对象识别
(3)类关系图及类成员
CMosaicApp :拼图游戏线程,应用程序
CMosaicDoc :拼图文档类
CAboutDlg :一个About对话框
CMainFrame :单文档主要框架、计时器
CMosaicView :控制游戏的开始、结束,难度的选择、底图的选取CPlacePicture :存放图形坐标、判断拼图成功与否
public
图2
四、软件接口设计
class CMosaicView : public CView{
protected:
{
void OnMouseMove(UINT nFlags, CPoint point); //拖动鼠标
void OnLButtonDown(UINT nFlags, CPoint point); //点击鼠标左键
void OnLButtonUp(UINT nFlags, CPoint point); //放开鼠标左键
void OnGameCustomnew(); //自定义
void OnBegingame(); //开始游戏
void OnHard(); //超难
void OnPicture1(); //底图1
void OnPicture2(); //底图2
void OnPicture3(); //底图3
void OnPicture4(); //底图4
void OnVeryeasy(); //简约
void OnEasy(); //简单
void OnLittlehard(); //很难
void OnBack();
void OnReset(); //重置
}
};
class CPlacePicture
{
public:
CPlacePicture(); //构造函数初始化virtual ~CPlacePicture(); //析构函数bool LoadPicture(char *strFileName); //载入位图bool InitPatches(DWORD nWdith,int srcx,int srcy,int dstx,int dsty); //初始化矩阵bool IsWin(); //判断拼图胜利
bool ClearAll(); //清除位图
bool DrawPatches(CDC *pDC); //画矩阵
void GetPatchAtPos(POINT *pt,long *pnSrcDest,long *pnPatchIndex); //获得坐标
void OnStartDrag(POINT *pt); //开始拖动
void OnMove(POINT *pt); //拖动
void OnEndDrag(POINT *pt); //结束拖动,判断是否拖动成功
五、流程图
图3
图4
七、程序调试
(1)拼图成功界面
(2)拼图失败界面
八、使用说明
1、进入拼图界面后,点击选择难度可以选不同难度,分为很简单、简单、苦难、很困难,分别可以将位图分为3×3,4×4,5×5,6×6四种
2、点击不同的图片或者从文件读入可以选择不同的图片作为底图
3、点击开始游戏才可以开始移动图片进行拼图,同时计时器开始计时,根据图片的坐标可以确定拼图是否正确
4、当完成拼图时,会出现“你赢了”,拼图游戏结束
5
9.1参考书籍:
1)C++程序设计实践教程第2版吴乃陵李海文高等教育出版社
2)深入浅出MFC第2版候俊杰华中科技大学出版社
3)Visual C++从入门到实践葛亮清华大学出版社
9.2声明
本设计团队对该拼图游戏拥有完全版权,未经本团队允许,不得进行商业交易和任何非法用途。

由于时间仓促,还有许多不当及错误之处,还请高人不吝指正。

联系方式:。

相关主题