C++课程设计报告 - 拼图游戏
C#面向对象课程设计--拼图游戏
《C#程序设计》课程设计题目:拼图游戏专业:计算机科学与技术学号:姓名:指导老师:完成日期: 2012/12/26《C#课程设计》评分标准题目:拼图游戏专业:计算机科学与技术学号:姓名:目录1 前言 (4)2 需求分析 (4)要求 (4)任务 (4)运行环境 (4)开发工具 (4)3 概要设计与详细设计 (5)系统流程图 (5)结构功能图 (5)4 编码与实现 (6)编码分析 (6)具体代码实现(附源代码) (9)5 课程设计总结 (18)参考文献 (19)1.前言拼图游戏一款非常经典的小游戏,因为它比较简单有趣,无论老少都比较适合。
拼图的设计对每一个C#语言设计者进行语言提高和进阶都是一个很好的锻炼机会。
拼图游戏的设计比较复杂,它涉及面广、牵涉方面多,如果不好好考虑和设计,将难以成功开发出这个游戏。
在这个游戏的设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用类的继承机制以及一些设计模式。
因此,如何设计和开发好这个拼图游戏,对于提高C#开发水平和系统的设计能力有极大的帮助。
在设计开发过程中,需要处理好各个类之间的继承关系,还要处理各个类相应的封装,并且还要协调好各个模块之间的逻辑依赖关系和数据通信关系。
一个3×3的魔板,有一个格子是空的,其他格子内随机放置1-8共8个编号的方块,通过单击任意一个与空格子相邻的方块可以把该方块移入空格子,不断的移动方块,直到方块按照图片的原来的顺序排好。
2 需求分析要求(1)用C#语言实现程序设计;(2)利用PictureBox控件来实现图片的移动(3)超过200步提示重新来(4)界面友好(良好的人机互交),程序要有注释。
任务(1)制作流程图(2)编写代码;(3)程序分析与调试。
运行环境(1)WINDOWS2000/XP/win7系统(2)编译环境开发工具C#语言3 概要设计与详细设计系统流程图如图所示。
图系统流程图功能结构图如图所示。
c拼图游戏课课程设计
c 拼图游戏课课程设计一、教学目标本课程的目标是让学生了解和掌握C拼图游戏的基本原理和技巧,培养学生的逻辑思维能力和团队协作能力。
具体目标如下:知识目标:使学生了解C拼图游戏的历史、类型和规则,理解游戏中的基本概念和原理。
技能目标:培养学生能够独立完成C拼图游戏,并能够分析和解题的能力。
情感态度价值观目标:培养学生对C拼图游戏的兴趣,增强学生的自信心和耐心,培养学生的团队协作精神和竞争意识。
二、教学内容本课程的教学内容主要包括C拼图游戏的基本概念、原理、技巧和实战演练。
具体内容包括:1.C拼图游戏的历史和发展:介绍C拼图游戏的起源、发展及其在世界各地的流行情况。
2.C拼图游戏的类型和规则:讲解不同类型的C拼图游戏及其规则,使学生了解各种游戏的特点和玩法。
3.C拼图游戏的技巧和方法:教授学生如何观察、思考和操作,以便快速完成游戏。
4.实战演练:安排一定的课时让学生进行实际操作,锻炼学生的解题能力和团队协作能力。
三、教学方法为了提高教学效果,本课程将采用多种教学方法,如讲授法、讨论法、案例分析法和实验法等。
具体方法如下:1.讲授法:教师讲解C拼图游戏的基本概念、原理和技巧。
2.讨论法:学生就C拼图游戏的相关问题进行讨论,促进学生思考。
3.案例分析法:分析典型的C拼图游戏案例,使学生掌握解题方法和技巧。
4.实验法:让学生进行实战演练,提高学生的实际操作能力和团队协作能力。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将选择和准备以下教学资源:1.教材:选用国内权威、实用的C拼图游戏教材,作为学生学习的主要参考资料。
2.参考书:推荐学生阅读一些与C拼图游戏相关的书籍,以拓宽知识面。
3.多媒体资料:制作和收集一些与C拼图游戏相关的多媒体资料,如视频、图片等,以直观展示游戏原理和技巧。
4.实验设备:准备足够的C拼图游戏设备,确保学生能够进行实际操作。
五、教学评估为了全面、客观地评估学生的学习成果,本课程将采取多种评估方式,包括平时表现、作业、考试等。
c#拼图游戏课程设计
c#拼图游戏课程设计一、课程目标知识目标:1. 学生理解C#编程语言的基本语法和结构,掌握面向对象编程的基本概念;2. 学生掌握Windows Forms应用程序开发流程,理解事件驱动编程机制;3. 学生了解并能运用图形图像处理相关类库,实现拼图游戏界面设计。
技能目标:1. 学生能够运用C#编写拼图游戏的逻辑代码,实现游戏的基本功能;2. 学生能够运用Windows Forms设计拼图游戏的用户界面,提高用户交互体验;3. 学生能够通过调试和优化代码,提高拼图游戏的性能和稳定性。
情感态度价值观目标:1. 学生培养对编程的兴趣,增强学习信息技术的自信心;2. 学生培养团队协作精神,提高沟通与表达能力;3. 学生通过拼图游戏的设计与开发,培养创新思维和问题解决能力。
课程性质:本课程为信息技术课程,以实践操作为主,理论讲解为辅。
学生特点:学生具备一定的C#编程基础,对游戏开发感兴趣,具有较强的动手能力和学习积极性。
教学要求:教师需引导学生掌握拼图游戏的核心算法,关注学生个体差异,鼓励学生创新和优化代码,提高游戏品质。
通过本课程的学习,使学生能够将所学知识运用到实际项目中,培养具备实际操作能力的编程人才。
二、教学内容1. C#语言基础回顾:变量、数据类型、运算符、控制结构(选择、循环);2. 面向对象编程:类与对象、属性、方法、构造函数、继承与多态;3. Windows Forms基础:窗体与控件、事件与委托、图形绘制;4. 图像处理:位图与图像类、图像加载与显示、图像变换;5. 拼图游戏核心算法:拼图布局生成、图片切割与随机排列、移动与验证;6. 游戏界面设计:界面布局、控件使用、用户交互;7. 游戏功能实现:计时器、分数统计、游戏难度设置;8. 调试与优化:异常处理、性能优化、用户体验改进。
教学大纲安排:第一课时:C#语言基础回顾,面向对象编程;第二课时:Windows Forms基础,图像处理;第三课时:拼图游戏核心算法,游戏界面设计;第四课时:游戏功能实现,调试与优化。
C++课程设计报告 - 拼图游戏
目录一、需求分析 (1)1.课程设计目的 (1)2.程序所实现的功能 (1)二、设计内容 (1)1. 主模块图 (1)2.1. 主程序流程图 (2)2.2 用例图 (2)2.3主程序调用关系图 (3)2.4函数主要调用关系图 (3)三、设计方案论述 (3)四、调试分析 (4)1.实际完成的情况 (4)2.程序的性能分析 (4)3.上机过程中出现的问题及其解决方案 (4)4.程序中可以改进、扩充的功能及设计实现构想 (4)五、用户手册 (4)六、设计总结 (5)七、程序中主要的功能函数 (6)八、主要参考文献 (6)九、附录 (6)一、需求分析1.课程设计目的(1)运用C++语言设计拼图游戏具有极强的实践性,加强我们对C++课程基础知识点的理解掌握和灵活运用理能力,培养实际分析问题能力,养成良好的编程习惯;了解C++面向对象的设计方法与技巧,有效地、深刻地理解课程内容,体会理论、方法和设计原则;培养分析实际问题和解决问题的能力,具备使用面向对象程序设计开发工具设计实际系统的能力。
(2)进一步领会程序设计的特点和应用,提高运用C++ 以及面向对象知识解决实际问题的能力,初步掌握MFC编程的基本功能,掌握一种可视化编程的方法,学习使用CStatic控制操作位图,加强对C++面向对象程序设计的理解。
(3)掌握用C++ 编写面向对象的实用程序的设计方法,对面向对象方法和思想增加感性的认识,学会利用C++程序设计语言编写出一些短小、可靠的Windows实用程序,切实提高面向对象的程序设计能力,为后续的相关课程的学习打下基础。
(4)锻炼实际的编程能力,提高调查资料、查阅技术文献、资料以及编写软件设计文档的能力,提高自学编程的能力。
2.程序所实现的功能(1)本程序除了实现了拼图所要求的基本功能外,还添加了背景音乐、计算步数和游戏所用的时间,当游戏开始时背景音乐自动循环播放,步数随player操作自动增加,时间自动增加。
用C++做的拼图游戏
青岛理工大学C++面向对象课程设计报告院(系):计算机工程学院专业:计算机科学与技术学生姓名:__班级:___学号:题目:__拼图游戏设计_____起迄日期:__2011.7.4—2011.7.设计地点:指导教师:完成日期: 2010 年月日一、课程设计目的(1)通过拼图游戏设计加强对C++课程基础知识点的理解和掌握,培养对基础知识综合运用能力、实际分析问题能力,养成良好的编程习惯。
(2)通过拼图游戏设计进一步领会程序设计的特点和应用,提高运用C++ 以及面向对象知识解决实际问题的能力,初步掌握MFC编程的基本功能,掌握一种可视化编程的方法,加强对C++面向对象程序设计的理解。
(3)通过拼图游戏设计掌握用C++ 编写面向对象的实用程序的设计方法,对面向对象方法和思想增加感性的认识,学会利用C++程序设计语言编写出一些短小、可靠的Windows实用程序,切实提高面向对象的程序设计能力,为后续的相关课程的学习打下基础。
(4)通过拼图游戏设计锻炼实际的编程能力,提高调查资料、查阅技术文献、资料以及编写软件设计文档的能力,初步接触自学编程的思想,转变死读的观念。
二、课程设计内容与实现的功能(1)课程设计内容将一张图片切分成若干小片,打乱顺序任意显示,用户通过操作各小片到正确位置以恢复原来的图像,要求有不同的等级,切分成不同的片数,完成拼图后程序可以判断是否完成,游戏还应有显示原图片的功能。
(2)实现的功能①本程序除了实现了拼图所要求的基本功能外,还添加了背景音乐和游戏所用的时间,当游戏开始时背景音乐自动播放,时间自动增加。
②为了制作拼图游戏,首先要动态创建一组静态控件,这些控件将作为拼图块进行移动。
用户用户需要选择拼图图像,可以使用程序中自带的图像,亦可以自己选则择图像,然后程序将根据用户选择的游戏级别设置静态控件的大小和位置,并将用户选择的图像绘制到静态控件上。
当用户选择开始游戏以后,程序将隐藏右下角的拼图块,使拼图空出一个位置,用户可以使用上、下、左、右键来控制剩余拼图块的移动,在移动的过程中,用户可以通过菜单栏的游戏助手来查看原图片。
拼图游戏课程设计
武汉工程大学计算机科学与工程学院项目报告设计名称:《Windows程序设计》综合项目设计题目:MFC开发拼图游戏实验学生学号:1005110201专业班级:二〇一〇级信息技术02班学生姓名:蔡杰猛学生成绩:指导教师(职称):课题工作时间:2012年4月成绩评定表答辩记录表目录摘要 (I)ABSTRACT (II)第一章课题背景(或绪论、概述) (1)1.1课题背景 (1)1.2课题目的及意义 (1)1.3应解决的主要问题及应达到的技术要求 (1)1.4本设计的基本理论依据和主要工作内容 (1)第二章设计简介及设计方案论述.............................................................................................................................. - 2 -2.1设计简介 (2)2.2设计方案论述 (2)第三章详细设计 ............................................................................................................................................................. - 4 -3.1创建初始界面 (4)3.2位图的读入和显示 (6)3.2.1 Windows位图的基本结构........................................................................................................................... - 6 -3.2.2 位图资源的读入......................................................................................................................................... - 7 -3.2.3 自定义位图文件的读入.............................................................................................................................. - 9 -3.3用S TATIC控件显示位图 (12)3.3.1 设置Static 控件的初始位置................................................................................................................ - 12 -3.3.2 图格的显示.................................................................................................................................................. - 16 -3.4图格的移动 (20)3.5游戏的启动代码 (25)3.6游戏完成条件的判断 (27)3.7游戏的进一步完善 (29)3.7.1 添加帮助画面.............................................................................................................................................. - 29 -3.7.2 用Status Bar显示提示信息................................................................................................................. - 32 -3.7.3 游戏计时器的加入..................................................................................................................................... - 36 -第四章设计结果及分析.............................................................................................................................................. - 38 -4.1初始化选择拼图中的手帕图片(简单) (38)4.2选择拼图中的手帕图片(困难) (39)4.3开始游戏的图片 (40)4.4选择图片风格(平面) (41)4.5选择图片风格(3D) (42)4.6自定义一张图片进行游戏 (42)总结 ............................................................................................................................................................................... - 43 -致谢 ............................................................................................................................................................................... - 44 -参考文献............................................................................................................................................................................. - 45 -附录.................................................................................................................................................................................. - 46 -摘要摘要:“拼图”游戏的核心规则是将一张整图分成N小块,随机打乱,让用户拼回原图,根据用户所花费的时间和步数的多少来评价其玩游戏的水平。
c语言拼图游戏课程设计
c语言拼图游戏课程设计一、课程目标知识目标:1. 学生能理解C语言的基本语法,如变量声明、数据类型、控制结构等;2. 学生能掌握C语言中数组的使用,理解二维数组的结构和操作方法;3. 学生能运用C语言编写简单的拼图游戏逻辑,理解游戏设计的基本原理。
技能目标:1. 学生能运用所学知识,独立设计并编写一个简单的拼图游戏程序;2. 学生能通过调试程序,找出并修正代码中的错误,提高问题解决能力;3. 学生能运用算法思维,优化拼图游戏的逻辑,提高程序运行效率。
情感态度价值观目标:1. 学生在课程中培养对编程的兴趣和热情,激发探究计算机科学的欲望;2. 学生通过团队协作,培养沟通与协作能力,增强团队意识;3. 学生在课程实践中,体验编程的乐趣,培养克服困难、不断尝试的良好品质。
本课程针对高年级学生,结合C语言学科特点,注重培养学生的编程实践能力和逻辑思维能力。
课程以拼图游戏为载体,使学生将所学知识应用于实际项目中,提高学生对C语言的掌握程度。
在教学过程中,关注学生个体差异,激发学生的学习兴趣,引导学生主动探究,培养其团队合作精神。
通过课程目标的设定,为教学设计和评估提供明确的方向,确保学生在课程中学有所获,提高其编程素养。
二、教学内容1. C语言基本语法复习:变量声明、数据类型、运算符、控制结构(条件语句、循环语句);2. 二维数组概念及应用:二维数组的声明、初始化、访问及操作方法;3. 游戏设计原理:拼图游戏的基本规则、界面设计、逻辑实现;4. C语言编程实践:编写拼图游戏程序,包括游戏界面绘制、用户交互、逻辑判断;5. 程序调试与优化:查找并修正代码错误,优化程序性能,提高运行效率;6. 团队协作与项目实践:分组进行项目实践,培养学生沟通协作能力。
教学内容依据课程目标,紧密结合教材,以C语言编程为核心,覆盖基本语法、数组、游戏设计等方面。
教学大纲明确,按照以下进度安排教学内容:1. 第1-2课时:复习C语言基本语法;2. 第3-4课时:学习二维数组概念及应用;3. 第5-6课时:介绍游戏设计原理,分析拼图游戏的基本规则;4. 第7-8课时:编写拼图游戏程序,实践C语言编程技能;5. 第9-10课时:进行程序调试与优化;6. 第11-12课时:团队协作完成项目实践,进行总结与展示。
拼图游戏课程设计c
拼图游戏课程设计c一、教学目标本课程的学习目标包括知识目标、技能目标和情感态度价值观目标。
知识目标要求学生掌握拼图游戏的基本原理和技巧,了解不同类型的拼图游戏以及其适用场景。
技能目标要求学生能够独立完成拼图游戏,提高观察力、耐心和解决问题的能力。
情感态度价值观目标培养学生对拼图游戏的兴趣,增强自信心和团队合作意识。
通过对学生的特点和教学要求的分析,我们将课程目标分解为具体的学习成果。
学生将能够理解并运用拼图游戏的基本原理,独立完成各类拼图游戏,并在游戏中培养观察力、耐心和解决问题的能力。
同时,学生将能够积极参与团队合作,分享游戏经验和心得,培养自信心和团队合作意识。
二、教学内容根据课程目标,我们选择和了以下教学内容:1.拼图游戏的基本原理:介绍拼图游戏的概念、发展历程以及各类拼图游戏的特点和适用场景。
2.拼图游戏的技巧:讲解拼图游戏的技巧和方法,包括观察力、耐心和解决问题的能力。
3.不同类型的拼图游戏:介绍常见的拼图游戏类型,如平面拼图、立体拼图、数字拼图等,并分析其特点和适用场景。
4.团队合作拼图游戏:探讨团队合作拼图游戏的意义和价值,介绍团队合作拼图游戏的规则和方法。
教学大纲将根据以上教学内容进行详细安排,确保教学进度的合理性和科学性。
三、教学方法为了激发学生的学习兴趣和主动性,我们将采用多种教学方法:1.讲授法:通过讲解拼图游戏的基本原理和技巧,为学生提供系统的知识结构。
2.案例分析法:分析典型拼图游戏案例,引导学生理解不同类型拼图游戏的特点和适用场景。
3.实验法:学生进行团队合作拼图游戏,培养学生的观察力、耐心和解决问题的能力。
4.讨论法:鼓励学生分享拼图游戏的经验和心得,培养学生的团队合作意识和自信心。
通过多样化的教学方法,我们将激发学生的学习兴趣,培养学生的观察力、耐心和解决问题的能力,提高学生的团队合作意识和自信心。
四、教学资源为了支持教学内容和教学方法的实施,我们将选择和准备以下教学资源:1.教材:选用权威、实用的拼图游戏教材,为学生提供系统的知识结构和学习指导。
MFC课程设计——拼图游戏
课程设计Visual C++指导老师:孔令德班级1020542学号03姓名李伯涵目录1 设计描述1.1项目简介 (1)1.2设计目的 (1)2 设计分析2.1设计特点 (1)2.2主要头文件、源文件 (1)3 项目代码3.1头文件 (2)3.2源文件 (3)4 游戏截图 (1)1设计描述1.1项目简介设计主要为MFC对位图的处理,包括窗口背景、位图透明处理、双缓冲处理动画等。
内容为一张分成若干块的图片,当鼠标点击其中一部分,被点击部分自动移动到空白部分,其中默认有两张图,也可以自己导入图片,游戏可选择难度,即图片被分成的块数。
界面右边有实例图,并统计移动次数。
1.2设计目的设计是对于mfc处理位图的巩固,及鼠标消息的应用,学习双缓冲处理技术、对话框的设计、在菜单栏工具栏添加功能按钮,获得系统资源,对mfc技术进行小规模综合应用。
2设计分析2.1设计特点程序默认窗口大小显示,动画自然,可以导入自己喜欢的图片,选择适当难度。
2.2主要头文件、源文件1头文件:pintu.h pintuDlg.h picture.h spell.h2 源文件:pintu.cpp pintuDlg.cpp picture.cpp spell.cpp3 项目代码3.1头文件#include "resource.h"// CMyApp:class CMyApp : public CWinApp{public:CMyApp();DECLARE_MESSAGE_MAP()}#include "picture.h"class CMyDlg : public CDialogpublic:CMyDlg(CWnd* pParent = NULL);protected:HICON m_hIcon;int step; // 移动的步数BOOL begin; // 游戏是否完成CPicture pic;int size; // 方块数BOOL border; // 边框void Show(CDC * dc);DECLARE_MESSAGE_MAP()};#include <atlbase.h>class CPicture {public:CPicture();~CPicture();BOOL Load(UINT nIDRes);BOOL Load(LPCTSTR pszPathName);BOOL Load(CFile& file);BOOL Load(CArchive& ar);BOOL Load(IStream* pstm);BOOL Render(CDC* pDC, CRect rc=CRect(0,0,0,0),LPCRECT prcMFBounds=NULL) const;CSize GetImageSize(CDC* pDC=NULL) const;operator IPicture*() {return m_spIPicture;}void GetHIMETRICSize(OLE_XSIZE_HIMETRIC& cx, OLE_YSIZE_HIMETRIC& cy) const { cx = cy = 0;const_cast<CPicture*>(this)->m_hr = m_spIPicture->get_Width(&cx);ASSERT(SUCCEEDED(m_hr));const_cast<CPicture*>(this)->m_hr = m_spIPicture->get_Height(&cy);ASSERT(SUCCEEDED(m_hr));}void Free() {if (m_spIPicture) {m_spIPicture.Release();}}protected:CComQIPtr<IPicture>m_spIPicture;HRESULT m_hr;class CSpell{protected:int * map;int width, height; // 长宽int blank; // 空白块的位置#define LENGTH width*height // 总长度public:CSpell(int w = 3, int h = 3, int bx = 0, int by = 0); // 构造函数,传入长宽和空白块位置~CSpell();int GetPic(int w, int h); // 获取个某个位置的图片int Move(int w, int h); // 移动某个位置的图片void Init(); // 初始化(生成随机位置)void ReCreate(int w, int h, int bx = 0, int by = 0); // 重新构建大小};3.2源文件#include "stdafx.h"#include "pintu.h"#include "pintuDlg.h"BOOL CMyApp::InitInstance(){AfxEnableControlContainer();#ifdef _AFXDLLEnable3dControls();#elseEnable3dControlsStatic();#endifCMyDlg dlg;m_pMainWnd = &dlg;int nResponse = dlg.DoModal();if (nResponse == IDOK){// TODO: Place code here to handle when the dialog is}else if (nResponse == IDCANCEL){// TODO: Place code here to handle when the dialog is}Return FALSE;}#include "stdafx.h"#include "pintu.h"#include "pintuDlg.h"#include "spell.h"CSpell spell(3, 3, 2, 2);void ShowTranBmp(CDC * dc, CBitmap * bmp, COLORREF bgcolor, int x, int y, int w, int h, int bx, int by, int bw, int bh){CDC mdc;CDC tdc; // 图像CDC ddc; // 遮罩CBitmap tbmp;CBitmap dbmp;CBitmap *ob;CBitmap *tob;CBitmap *dob;mdc.CreateCompatibleDC(dc);tdc.CreateCompatibleDC(dc);ddc.CreateCompatibleDC(dc);tbmp.CreateBitmap(bw, bh, 1, 32, NULL);dbmp.CreateBitmap(bw, bh, 1, 1, NULL);ob = mdc.SelectObject(bmp);tob = tdc.SelectObject(&tbmp);dob = ddc.SelectObject(&dbmp);tdc.BitBlt(-bx, -by, bw+bx, bh+by, &mdc, 0, 0, SRCCOPY);tdc.SetBkColor(bgcolor);ddc.BitBlt(0, 0, bw, bh, &tdc, 0, 0, SRCCOPY);dc->BitBlt(x, y, w, h, &tdc, 0, 0, SRCINVERT);dc->BitBlt(x, y, w, h, &ddc, 0, 0, SRCAND);dc->BitBlt(x, y, w, h, &tdc, 0, 0, SRCINVERT);mdc.SelectObject(ob);tdc.SelectObject(tob);ddc.SelectObject(dob);class CAboutDlg : public CDialog{public:CAboutDlg();DECLARE_MESSAGE_MAP()};void CAboutDlg::OnPaint(){CPaintDC dc(this); // device context for paintingCBitmap lygame;lygame.LoadBitmap(IDB_ABOUTIM);ShowTranBmp(&dc, &lygame, RGB(0,0,0), 8, 8, 307, 92);CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/): CDialog(CMyDlg::IDD, pParent){m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);begin = TRUE;step = 0;pic.Load(IDR_IMAGEB);size = 3;border = TRUE;}BOOL CMyDlg::OnInitDialog(){CDialog::OnInitDialog();ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);SetIcon(m_hIcon, TRUE);SetIcon(m_hIcon, FALSE);CMenu* pMenu = this->GetMenu(); pMenu->CheckMenuItem(ID_MENU_3, MF_CHECKED);pMenu->CheckMenuItem(ID_MENU_BORDER, MF_CHECKED);return TRUE; }void CMyDlg::OnPaint(){CPaintDC dc(this);if (IsIconic()){SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;dc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();}Show(&dc);}HCURSOR CMyDlg::OnQueryDragIcon(){return (HCURSOR) m_hIcon;}void CMyDlg::Show(CDC * dc){CDC tdc;CBitmap bmp, *obmp;bmp.LoadBitmap(IDB_BG);tdc.CreateCompatibleDC(dc);obmp = tdc.SelectObject(&bmp);CDC bmpdc, picdc;bmpdc.CreateCompatibleDC(dc);picdc.CreateCompatibleDC(dc);CBitmap bbmp, * obbmp;CBitmap pbmp, * opbmp;bbmp.CreateCompatibleBitmap(dc, 360, 360);pbmp.CreateCompatibleBitmap(dc, (360/size), (360/size));obbmp = bmpdc.SelectObject(&bbmp);opbmp = picdc.SelectObject(&pbmp);pic.Render(&bmpdc, CRect(0, 0, 360, 360));int i;if(border){ //画边框CPen pen, * open;pen.CreatePen(PS_SOLID, 1, RGB(96, 96, 96));open = bmpdc.SelectObject(&pen);for(i = 0; i < size; i++){bmpdc.MoveTo(0, (360/size)*(i+1)-1);bmpdc.LineTo(359, (360/size)*(i+1)-1);bmpdc.MoveTo((360/size)*(i+1)-1, 0);bmpdc.LineTo((360/size)*(i+1)-1, 359);}bmpdc.SelectObject(open);pen.DeleteObject();pen.CreatePen(PS_SOLID, 1, RGB(240, 240, 240));open = bmpdc.SelectObject(&pen);for(i = 0; i < size; i++){bmpdc.MoveTo(0, (360/size)*i);bmpdc.LineTo(359, (360/size)*i);bmpdc.MoveTo((360/size)*i, 0);bmpdc.LineTo((360/size)*i, 359);}bmpdc.SelectObject(open);}obmp = tdc.SelectObject(&bmp);for(i = 0; i < size; i++){for(int j = 0; j < size; j++){int n = spell.GetPic(i, j);if(n != size*size-1){picdc.BitBlt(-(n%size)*(360/size), -(n/size)*(360/size), 360, 360, &bmpdc, 0, 0, SRCCOPY);tdc.BitBlt((360/size)*i+2, (360/size)*j+2, (360/size), (360/size), &picdc, 0, 0, SRCCOPY);}dc->BitBlt(10, 10, 364, 364, &tdc, 0, 0, SRCCOPY);pic.Render(&bmpdc, CRect(0, 0, 150, 150));dc->BitBlt(393, 45, 150, 150, &bmpdc, 0, 0, SRCCOPY);dc->MoveTo(392, 44);dc->LineTo(392, 194);dc->LineTo(542, 194);dc->LineTo(542, 44);dc->LineTo(392, 44);bmpdc.SelectObject(obbmp);picdc.SelectObject(opbmp);tdc.SelectObject(obmp);}void CMyDlg::OnMenuAbout() {// 关于对话框CAboutDlg dlgAbout;dlgAbout.DoModal();}void CMyDlg::OnMenuExit() {// 退出OnOK();}void CMyDlg::OnMenuBegin() {// 重新开始游戏spell.Init();step = 0;SetDlgItemText(IDC_STEP, "0");begin = TRUE;Invalidate(FALSE);}void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point){if(begin){if(point.x > 12 && point.x < 372 && point.y > 12 && point.y < 372){ int w = (point.x - 12) / (360/size);int h = (point.y - 12) / (360/size);int r = spell.Move(w, h);Invalidate(FALSE);if(0 <= r){step ++;CString str;str.Format("%d", step);SetDlgItemText(IDC_STEP, str);}if(1 == r){MessageBox("完成!");begin = FALSE;}CDialog::OnLButtonDown(nFlags, point);}void CMyDlg::OnMenuHard() {// 选择数字pic.Load(IDR_IMAGEH);Invalidate(FALSE);}void CMyDlg::OnMenuBird() {// 选择风景pic.Load(IDR_IMAGEB);Invalidate(FALSE);}void CMyDlg::OnMenuCatone() {// 选择草莓pic.Load(IDR_IMAGEC);Invalidate(FALSE);}void CMyDlg::OnMenu3() {// 选择3*3的方块if(3 != size){CMenu* pMenu = this->GetMenu();pMenu->CheckMenuItem(ID_MENU_3, MF_CHECKED);pMenu->CheckMenuItem(ID_MENU_4, MF_UNCHECKED);pMenu->CheckMenuItem(ID_MENU_5, MF_UNCHECKED);spell.ReCreate(3, 3, 2, 2);size = 3;OnMenuBegin();void CMyDlg::OnMenu4() {// 选择4*4的方块if(4 != size){CMenu* pMenu = this->GetMenu();pMenu->CheckMenuItem(ID_MENU_4, MF_CHECKED);pMenu->CheckMenuItem(ID_MENU_3, MF_UNCHECKED);pMenu->CheckMenuItem(ID_MENU_5, MF_UNCHECKED);spell.ReCreate(4, 4, 3, 3);size = 4;OnMenuBegin();void CMyDlg::OnMenu5() {// 选择5*5的方块if(5 != size){CMenu* pMenu = this->GetMenu();pMenu->CheckMenuItem(ID_MENU_5, MF_CHECKED);pMenu->CheckMenuItem(ID_MENU_3, MF_UNCHECKED);pMenu->CheckMenuItem(ID_MENU_4, MF_UNCHECKED);spell.ReCreate(5, 5, 4, 4);size = 5;OnMenuBegin();void CMyDlg::OnMenuBorder() {// 是否有边框border = !border;CMenu* pMenu = this->GetMenu();pMenu->CheckMenuItem(ID_MENU_BORDER, border?MF_CHECKED:MF_UNCHECKED); Invalidate(FALSE);}void CMyDlg::OnMenuOpen() {// 打开文件CFileDialog file(true, NULL, NULL, OFN_OVERWRITEPROMPT, "图片文件|*.bmp;*.jpg;*.gif|*.jpg|*.jpg|*.bmp|*.bmp|*.gif|*.gif|", NULL);if(file.DoModal()==IDOK){pic.Load(file.GetPathName());Invalidate(FALSE);#include "StdAfx.h"#include "Picture.h"CPicture::~CPicture()BOOL CPicture::Load(UINT nIDRes)HINSTANCE hInst = AfxGetResourceHandle();HRSRC hRsrc = ::FindResource(hInst,MAKEINTRESOURCE(nIDRes),"IMAGE");if (!hRsrc)return FALSE;DWORD len = SizeofResource(hInst, hRsrc);BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc);if (!lpRsrc)return FALSE;CMemFile file(lpRsrc, len);BOOL bRet = Load(file);FreeResource(hRsrc);GlobalFree(lpRsrc);return bRet;}BOOL CPicture::Load(LPCTSTR pszPathName){CFile file;if (!file.Open(pszPathName, CFile::modeRead|CFile::shareDenyWrite))return FALSE;BOOL bRet = Load(file);file.Close();return bRet;}BOOL CPicture::Load(CFile& file){CArchive ar(&file, CArchive::load | CArchive::bNoFlushOnDelete);return Load(ar);}BOOL CPicture::Load(CArchive& ar){CArchiveStream arcstream(&ar);return Load((IStream*)&arcstream);}BOOL CPicture::Load(IStream* pstm){Free();HRESULT hr = OleLoadPicture(pstm, 0, FALSE,IID_IPicture, (void**)&m_spIPicture);ASSERT(SUCCEEDED(hr) && m_spIPicture);return TRUE;}BOOL CPicture::Render(CDC* pDC, CRect rc, LPCRECT prcMFBounds) const{ASSERT(pDC);if (rc.IsRectNull()) {CSize sz = GetImageSize(pDC);rc.right = sz.cx;rc.bottom = sz.cy;}long hmWidth,hmHeight;GetHIMETRICSize(hmWidth, hmHeight);m_spIPicture->Render(*pDC, rc.left, rc.top, rc.Width(), rc.Height(),0, hmHeight, hmWidth, -hmHeight, prcMFBounds);return TRUE;}CSize CPicture::GetImageSize(CDC* pDC) const{if (!m_spIPicture)return CSize(0,0);LONG hmWidth, hmHeight;m_spIPicture->get_Width(&hmWidth);m_spIPicture->get_Height(&hmHeight);CSize sz(hmWidth,hmHeight);if (pDC==NULL) {CWindowDC dc(NULL);dc.HIMETRICtoDP(&sz);} else {pDC->HIMETRICtoDP(&sz);}return sz;}#include "spell.h"#include <stdlib.h>#include <time.h>CSpell::CSpell(int w, int h, int bx, int by){// 构造函数,传入长和宽width = w;height = h;bx = (bx>=w)?(w-1):(bx<0 ? 0 : bx);by = (by>=h)?(h-1):(by<0 ? 0 : by);blank = by * w + bx;map = new int[w*h];for(int i = 0; i < w*h; i++){map[i] = i;}CSpell::~CSpell(){delete [] map;}void CSpell::ReCreate(int w, int h, int bx, int by){ // 重新构建大小delete [] map;width = w;height = h;bx = (bx>=w)?(w-1):(bx<0 ? 0 : bx);by = (by>=h)?(h-1):(by<0 ? 0 : by);blank = by * w + bx;map = new int[w*h];for(int i = 0; i < w*h; i++){map[i] = i;} // 初始化Init();}int CSpell::GetPic(int w, int h){// 获取个某个位置的图片if(w < 0 || w >= width || h < 0 || h >= height){return -1;}return map[h*width + w];}int CSpell::Move(int w, int h){// 移动某个位置的图片if(w < 0 || w >= width || h < 0 || h >= height){return -10;}if(blank == map[h*width+w]){return -1;}if(blank == GetPic(w-1, h)){int t = map[h*width+w];map[h*width+w] = map[h*width+w-1];map[h*width+w-1] = t;}else if(blank == GetPic(w, h-1)){int t = map[h*width+w];map[h*width+w] = map[(h-1)*width+w];map[(h-1)*width+w] = t;}else if(blank == GetPic(w, h+1)){int t = map[h*width+w];map[h*width+w] = map[(h+1)*width+w];map[(h+1)*width+w] = t;}else{return -1;}for(int i = 0; i < LENGTH; i++){if(i != map[i]){return 0;}return 1;}4 游戏截图。
c语言拼图课程设计
c语言拼图课程设计一、课程目标知识目标:1. 理解C语言的基本语法,掌握数组的使用和二维数组在拼图游戏中的应用;2. 学会使用循环和条件语句实现拼图的逻辑功能;3. 掌握在C语言中处理图形用户界面(GUI)的基本方法,并应用于拼图游戏设计。
技能目标:1. 能够编写C语言代码实现拼图游戏的逻辑,包括初始化、移动和胜利条件判断;2. 能够运用所学的编程技能解决拼图过程中出现的问题,具备调试程序的能力;3. 能够在团队合作中发挥个人优势,与他人协作完成一个完整的拼图游戏项目。
情感态度价值观目标:1. 培养学生对C语言的兴趣,激发编程热情,形成主动学习和探究的良好习惯;2. 培养学生面对问题时的分析、解决能力,增强自信心和挑战精神;3. 通过团队协作,培养学生的沟通能力、团队精神,使其体会集体智慧的力量。
分析课程性质、学生特点和教学要求,本课程旨在使学生在掌握C语言基础知识的基础上,通过拼图游戏的实践,提高编程技能,培养解决问题的能力,同时注重培养团队协作精神和良好的情感态度价值观。
课程目标具体明确,便于后续教学设计和评估。
二、教学内容1. C语言基础知识回顾:数组、循环、条件语句等基本概念与使用方法,对应教材第二章和第三章内容。
2. 二维数组在拼图游戏中的应用:介绍如何使用二维数组表示拼图游戏的界面,以及如何通过数组操作实现拼图移动,对应教材第三章和第四章内容。
3. 拼图游戏逻辑设计:讲解拼图游戏的基本规则,引导学生运用C语言实现拼图逻辑,包括初始化、移动和胜利条件判断,对应教材第五章内容。
4. 图形用户界面(GUI)设计:介绍简单的图形用户界面设计方法,使学生能够将拼图游戏界面可视化,对应教材第六章内容。
5. 程序调试与优化:教授学生如何调试程序,找出并修复代码中的错误,提高程序性能,对应教材第七章内容。
6. 团队协作与项目实践:组织学生分组,每组共同完成一个拼图游戏项目,培养学生团队协作能力和实际操作能力。
C语言拼图问题课程设计
C语言拼图问题课程设计一、课程目标知识目标:1. 学生能够掌握C语言的基本语法和结构,包括变量声明、循环控制、条件判断等。
2. 学生能够理解二维数组的含义及其在拼图问题中的应用。
3. 学生能够运用函数的概念,实现拼图问题的相关功能,如移动、旋转等。
技能目标:1. 学生能够运用C语言编写简单的程序,解决拼图问题。
2. 学生能够通过分析问题,设计合理的算法,将大问题分解为小问题,逐步解决。
3. 学生能够培养逻辑思维能力和问题解决能力,通过调试和修改程序,优化拼图问题的解决方案。
情感态度价值观目标:1. 学生在学习过程中,培养对编程的兴趣和热情,树立自信心,勇于面对挑战。
2. 学生能够培养良好的团队协作意识,主动与同伴沟通交流,共同解决问题。
3. 学生能够认识到编程在解决实际问题中的重要性,激发进一步学习计算机科学的兴趣。
本课程针对高年级学生,他们在前期的学习中已经具备了一定的C语言基础,能够理解并运用基本语法。
课程性质为实践性较强的编程课程,旨在让学生通过解决实际问题,巩固所学知识,提高编程能力。
在教学过程中,注重培养学生的逻辑思维和问题解决能力,同时关注学生的情感态度,激发学习兴趣。
课程目标的设定旨在使学生在完成本章节学习后,能够独立完成拼图问题的程序设计,并具备一定的编程素养。
二、教学内容本章节教学内容主要包括以下三个方面:1. C语言基础语法回顾:- 变量的定义与使用- 数据类型及其转换- 循环结构(for、while、do-while)- 条件判断(if-else、switch)2. 二维数组和函数:- 二维数组的定义和初始化- 二维数组的访问和操作- 函数的定义与调用- 递归函数的编写与理解3. 拼图问题程序设计:- 拼图问题的分析- 拼图算法的设计与实现(如移动、旋转等)- 程序调试与优化- 测试用例的设计与执行教学内容按照以下进度安排:第一课时:回顾C语言基础语法,重点讲解二维数组的定义和使用。
mfc拼图游戏课程设计
mfc拼图游戏课程设计一、课程目标知识目标:1. 让学生掌握MFC编程的基本框架和常用控件的使用,特别是拼图游戏中涉及到的图片处理和鼠标事件处理。
2. 使学生理解拼图游戏的逻辑规则,并能用MFC实现拼图的随机打散和正确性判断。
技能目标:3. 培养学生运用MFC进行简易游戏开发的能力,通过实践操作,掌握编程解决问题的方法和技巧。
4. 提高学生团队协作和沟通能力,通过分组合作完成拼图游戏的开发。
情感态度价值观目标:5. 培养学生对计算机编程的兴趣,激发创造力和创新意识,形成积极主动探索新知识的良好习惯。
6. 增强学生的自信心和成就感,通过完成拼图游戏项目,认识到努力和坚持的重要性,培养面对困难的勇气和毅力。
7. 引导学生树立正确的价值观,认识到编程在生活中的广泛应用和实际意义,激发为我国信息技术产业发展贡献力量的责任感。
二、教学内容本课程教学内容主要包括以下几部分:1. MFC编程基础:复习MFC的基本框架,包括窗口创建、消息映射等,涉及教材第三章内容。
2. 常用控件使用:学习使用按钮、图片框等控件,为拼图游戏界面设计打下基础,涉及教材第四章内容。
3. 图像处理:学习图像的加载、显示和剪切等操作,为拼图游戏图片处理提供技术支持,涉及教材第五章内容。
4. 鼠标事件处理:学习鼠标点击、移动等事件的处理方法,为拼图游戏的交互功能实现提供技术支持,涉及教材第六章内容。
5. 拼图游戏逻辑:分析拼图游戏的逻辑规则,学习随机打散和正确性判断的实现方法,涉及教材第七章内容。
6. 项目实践:分组进行拼图游戏的开发,将所学知识运用到实际项目中,巩固和提高编程能力。
7. 教学进度安排:共8课时,第1-2课时复习MFC基础和常用控件;第3-4课时学习图像处理和鼠标事件处理;第5-6课时分析拼图游戏逻辑;第7-8课时进行项目实践和总结。
教学内容的选择和组织确保了科学性和系统性,旨在帮助学生掌握MFC编程及相关知识,为开发拼图游戏打下坚实基础。
C语言课程设计_拼图游戏
C语言课程设计--拼图游戏一、实验内容玩家通过鼠标单击相邻位有空位的方块来移动方块,从而最终将一副散乱的图片拼成完整的图片。
要求如下:1.游戏的初始界面如图一,单击空格键进入游戏,进入游戏之后系统将完成的图片分成大小相同的15分并随机摆放成如图二。
图一图二2.启动游戏,单击空格键进入游戏。
通过鼠标单击周围有空格的方块来移动方块,直到全图拼接成图二中右下角的图案样式,游戏结束,重新回到图一界面。
3.游戏的原理是定义一个4 * 4的方块矩阵(二维数组),前15个的值按顺序从1-15依次递增,第16个留空为0。
按照这个顺序排列的矩阵值代表游戏胜利。
初始化的时候,将该16个矩阵值随机排布即得到本局关卡。
为0的空位代表附近上下左右的4个方块可以移动过来4.每次单击鼠标左键,方块移动一格。
鼠标必须移动到方块范围内单击才能有效移动方块。
二、实验指南实验一开始实验【实验任务】步骤一、打开FunCode,创建一个的C语言项目;步骤二、导入Puzzle模板。
【实验思路】按实验指导完成。
【实验指导】1、打开FunCode,点击“项目”菜单,选择“创建C语言工程”注意:工程名名称要求字母开头,只能包含字母和数字,且名字中间不能有空格。
2、点击菜单“项目”中的“导入地图模块”,如图一。
跳出一个对话框,选中“Puzzle”模板,点击“导入到工程”按钮,如图二。
图一图二3、导入成功后的,界面如下图所示:实验二单击空格键,开始游戏【实验内容】步骤、启动游戏显示“空格开始”,单击空格键进入游戏初始界面。
【实验思路】系统会自动响应d OnKeyDown函数来响应键盘按下消息,这部分代码实现在main.cpp 里。
我们要做的就是通过在main.cpp的dOnKeyDown函数里实现我们的代码。
当用户单击键盘上的空格键之后,设置GameBegin即“空格开始”精灵不可见。
【实验指导】1、游戏是有状态的,我们定义一个全局的游戏状态变量g_iGameState2、判断空格键是否按下,如果按下,我们就转变游戏的状态为1,表示游戏开始,并且以藏“空格开始”精灵。
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在指定位置上进行绘画,实现图形的分割。
拼图游戏实验报告殷有军
拼图游戏实验报告课程名称:Visual Basic课程设计姓名:殷有军学号:1003280137一、设计题目及要求:题目介绍:该程序的使用方法如下:①制定一幅完整的图片,将其分割为m×n个小图片并打乱顺序后重新排列,其中有一个没有图片的空档;②使用鼠标单击与空档相邻的图片使该图块与空档位置互换;③利用空档位置移动各块图片,最终恢复图片原貌,完成拼图。
游戏过程中可以打开参考图帮助查找各图片的正确位置。
二、用到的主要知识点和相关控件:拼图游戏用到的几个主要知识点和相关控件:1.pictureclip控件用来管理打开的图片并将其分为指定的行列图片,用到其picture属性,rows属性,cols属性等;2.加载image控件数组;3.“打开图片”和“颜色”对话框均由公共对话框commondialog控件实现。
三、设计重点与难点:我认为该拼图游戏的编程过程中存在以下难点:1.对于commond dialog控件和pictureclip控件的一些属性的理解;2.该拼图游戏中如何创建正确数量的image控件,并将这些控件进行有规则的排列;3.如何使pictureclip控件切割的图片能够附给相应的image控件,并能够体现随机性(我认为这是比较难也是很关键的地方);4.如何能够使空白处上下左右的图片能够正确移动到空白处;5.如何判断是否已经拼好。
四、遇到的问题和解决方法:在编程过程中遇到了很多难题,以下我就仅列举几个我所遇到的难题以及我想出的问题的解决办法:1.在编程中我遇到了自己大一没有学过的控件和一些不熟悉的属性,但是通过对图书馆资料的查询以及对MSDN的利用,让我很容易就查到了这些控件和属性,例如大一下学的窗体上的单位是缇,但是这次编程遇到的图片本身却定义为像素,通过MSDN了解到可以通过改变form窗体的scalemode属性可实现单位的转换,由缇变为像素。
2.这个游戏的编程过程中需要用到image控件数组,比较难的一个地方在于如何正确的加载image,并且放置在正确的位置上,通过For x=1To n-1Load frmmain.Image1(x)Next实现对image控件数组的加载通过c=325/frmmain.pc.Colsk=244/frmmain.pc.RowsFor m=1To frmmain.pc.RowsFor z=1To frmmain.pc.Colsfrmmain.Image1(ct).Left=(z-1)*cfrmmain.Image1(ct).Top=(m-1)*kct=ct+1NextNext实现对image的排列。
C语言拼图游戏实验报告
课程设计实验报告班级:光电104—2 姓名:刘云龙学号:201058501220一、实验题目:使用C语言编写一个小游戏(拼图游戏)二、实验目的:C语言是每一个通信学生的必修课之一,此次课程设计要求我们使用C语言编写一个小游戏,在完成课程设计的过程中,加强了我们对C语言的综合应用。
虽然在平时的课堂上积累了很多的理论知识,但在实际应用时还是有很多不明白的地方。
为了更好地完成实验要求,通过翻课本,请教同学,在网上查找资料等途径解决了试验中遇到的疑难。
在完成实验的过程中,暴露了自己在C语言学习上的很多不足和缺陷,同时也解决了很多平时不明白的地方。
三、实验内容本次试验选定的实验项目是使用C语言编写一个拼图游戏以下是拼图游戏的源代码:// 九宫格拼图Dlg.cpp : implementation file//#include "stdafx.h"#include "九宫格拼图.h"#include "九宫格拼图Dlg.h"#include "spell.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endifCSpell spell(3, 3, 2, 2);////////////////////////////////////////////////void ShowTranBmp(CDC * dc, CBitmap * bmp, COLORREF bgcolor, int x, int y, int w, int h, int bx, int by, int bw, int bh){CDC mdc;CDC tdc; // 图像CDC ddc; // 遮罩CBitmap tbmp;CBitmap dbmp;CBitmap *ob;CBitmap *tob;CBitmap *dob;mdc.CreateCompatibleDC(dc);tdc.CreateCompatibleDC(dc);ddc.CreateCompatibleDC(dc);tbmp.CreateBitmap(bw, bh, 1, 32, NULL);dbmp.CreateBitmap(bw, bh, 1, 1, NULL);ob = mdc.SelectObject(bmp);tob = tdc.SelectObject(&tbmp);dob = ddc.SelectObject(&dbmp);tdc.BitBlt(-bx, -by, bw+bx, bh+by, &mdc, 0, 0, SRCCOPY);tdc.SetBkColor(bgcolor);ddc.BitBlt(0, 0, bw, bh, &tdc, 0, 0, SRCCOPY);/////////////////////////////////////显示dc->BitBlt(x, y, w, h, &tdc, 0, 0, SRCINVERT);dc->BitBlt(x, y, w, h, &ddc, 0, 0, SRCAND);dc->BitBlt(x, y, w, h, &tdc, 0, 0, SRCINVERT);mdc.SelectObject(ob);tdc.SelectObject(tob);ddc.SelectObject(dob);}void ShowTranBmp(CDC * dc, CBitmap * bmp, COLORREF bgcolor, int x, int y, int w, int h){CDC tdc; // 图像CDC ddc; // 遮罩CBitmap dbmp;CBitmap *tob;CBitmap *dob;tdc.CreateCompatibleDC(dc);ddc.CreateCompatibleDC(dc);dbmp.CreateBitmap(w, h, 1, 1, NULL);tob = tdc.SelectObject(bmp);dob = ddc.SelectObject(&dbmp);tdc.SetBkColor(bgcolor);ddc.BitBlt(0, 0, w, h, &tdc, 0, 0, SRCCOPY);/////////////////////////////////////显示dc->BitBlt(x, y, w, h, &tdc, 0, 0, SRCINVERT);dc->BitBlt(x, y, w, h, &ddc, 0, 0, SRCAND);dc->BitBlt(x, y, w, h, &tdc, 0, 0, SRCINVERT);tdc.SelectObject(tob);ddc.SelectObject(dob);}/////////////////////////////////////////////////////////////////////////////// CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog{public:CAboutDlg();// Dialog Data//{{AFX_DATA(CAboutDlg)enum { IDD = IDD_ABOUTBOX };//}}AFX_DATA// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL// Implementationprotected://{{AFX_MSG(CAboutDlg)virtual BOOL OnInitDialog();afx_msg void OnPaint();//}}AFX_MSGDECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){//{{AFX_DATA_INIT(CAboutDlg)//}}AFX_DATA_INIT}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CAboutDlg)//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)//{{AFX_MSG_MAP(CAboutDlg)ON_WM_PAINT()//}}AFX_MSG_MAPEND_MESSAGE_MAP()BOOL CAboutDlg::OnInitDialog(){CDialog::OnInitDialog();// TODO: Add extra initialization hereSetDlgItemText(IDC_QQ, "252351107");SetDlgItemText(IDC_EMAIL, "_tg15@");return TRUE; // return TRUE unless you set the focus to a control// EXCEPTION: OCX Property Pages should return FALSE }void CAboutDlg::OnPaint(){CPaintDC dc(this); // device context for paintingCBitmap tg15;tg15.LoadBitmap(IDB_TG15);ShowTranBmp(&dc, &tg15, RGB(255,255,255), 8, 8, 93, 96);// Do not call CDialog::OnPaint() for painting messages}/////////////////////////////////////////////////////////////////////////////// CMyDlg dialogCMyDlg::CMyDlg(CWnd* pParent /*=NULL*/): CDialog(CMyDlg::IDD, pParent){//{{AFX_DATA_INIT(CMyDlg)//}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);begin = TRUE;step = 0;pic.Load(IDR_PIC_VIEW);size = 3;border = TRUE;// m_pp5.SetText(_T(""));}void CMyDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CMyDlg)//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CMyDlg, CDialog)//{{AFX_MSG_MAP(CMyDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_COMMAND(ID_MENU_EXIT, OnMenuExit)ON_COMMAND(ID_MENU_ABOUT, OnMenuAbout)ON_WM_LBUTTONDOWN()ON_COMMAND(ID_MENU_BEGIN, OnMenuBegin)ON_COMMAND(ID_MENU_NUMBER, OnMenuNumber)ON_COMMAND(ID_MENU_VIEW, OnMenuView)ON_COMMAND(ID_MENU_PERSON, OnMenuPerson)ON_COMMAND(ID_MENU_3, OnMenu3)ON_COMMAND(ID_MENU_4, OnMenu4)ON_COMMAND(ID_MENU_5, OnMenu5)ON_COMMAND(ID_MENU_6, OnMenu6)ON_COMMAND(ID_MENU_BORDER, OnMenuBorder)ON_COMMAND(ID_MENU_OPEN, OnMenuOpen)ON_WM_LBUTTONDBLCLK()//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CMyDlg message handlersBOOL CMyDlg::OnInitDialog(){CDialog::OnInitDialog();// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);// CMenu* pSysMenu = GetSystemMenu(FALSE);// if (pSysMenu != NULL)// {// CString strAboutMenu;// strAboutMenu.LoadString(IDS_ABOUTBOX);// if (!strAboutMenu.IsEmpty())// {// pSysMenu->AppendMenu(MF_SEPARATOR);// pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); // }// }// Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon// TODO: Add extra initialization hereCMenu* pMenu = this->GetMenu();pMenu->CheckMenuItem(ID_MENU_3, MF_CHECKED);pMenu->CheckMenuItem(ID_MENU_BORDER, MF_CHECKED);pp5.m_link = _T("");pp5.SubclassDlgItem(IDC_PP5, this);return TRUE; // return TRUE unless you set the focus to a control}void CMyDlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}// If you add a minimize button to your dialog, you will need the code below// to draw the icon. For MFC applications using the document/view model,// this is automatically done for you by the framework.void CMyDlg::OnPaint(){CPaintDC dc(this); // device context for paintingif (IsIconic()){SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// Draw the icondc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();}Show(&dc);}// The system calls this to obtain the cursor to display while the user drags // the minimized window.HCURSOR CMyDlg::OnQueryDragIcon(){return (HCURSOR) m_hIcon;}void CMyDlg::Show(CDC * dc){CDC tdc;CBitmap bmp, *obmp;bmp.LoadBitmap(IDB_BG);tdc.CreateCompatibleDC(dc);obmp = tdc.SelectObject(&bmp);CDC bmpdc, picdc;bmpdc.CreateCompatibleDC(dc);picdc.CreateCompatibleDC(dc);CBitmap bbmp, * obbmp;CBitmap pbmp, * opbmp;bbmp.CreateCompatibleBitmap(dc, 360, 360);pbmp.CreateCompatibleBitmap(dc, (360/size), (360/size));obbmp = bmpdc.SelectObject(&bbmp);opbmp = picdc.SelectObject(&pbmp);pic.Render(&bmpdc, CRect(0, 0, 360, 360));int i;if(border){//画边框CPen pen, * open;pen.CreatePen(PS_SOLID, 1, RGB(96, 96, 96));open = bmpdc.SelectObject(&pen);for(i = 0; i < size; i++){bmpdc.MoveTo(0, (360/size)*(i+1)-1);bmpdc.LineTo(359, (360/size)*(i+1)-1);bmpdc.MoveTo((360/size)*(i+1)-1, 0);bmpdc.LineTo((360/size)*(i+1)-1, 359);}bmpdc.SelectObject(open);pen.DeleteObject();pen.CreatePen(PS_SOLID, 1, RGB(240, 240, 240));open = bmpdc.SelectObject(&pen);for(i = 0; i < size; i++){bmpdc.MoveTo(0, (360/size)*i);bmpdc.LineTo(359, (360/size)*i);bmpdc.MoveTo((360/size)*i, 0);bmpdc.LineTo((360/size)*i, 359);}bmpdc.SelectObject(open);}obmp = tdc.SelectObject(&bmp);for(i = 0; i < size; i++){for(int j = 0; j < size; j++){int n = spell.GetPic(i, j);if(n != size*size-1){picdc.BitBlt(-(n%size)*(360/size), -(n/size)*(360/size), 360, 360, &bmpdc, 0, 0, SRCCOPY);tdc.BitBlt((360/size)*i+2, (360/size)*j+2, (360/size), (360/size), &picdc, 0, 0, SRCCOPY);}}}dc->BitBlt(10, 10, 364, 364, &tdc, 0, 0, SRCCOPY);pic.Render(&bmpdc, CRect(0, 0, 150, 150));dc->BitBlt(393, 45, 150, 150, &bmpdc, 0, 0, SRCCOPY);dc->MoveTo(392, 44);dc->LineTo(392, 194);dc->LineTo(542, 194);dc->LineTo(542, 44);dc->LineTo(392, 44);bmpdc.SelectObject(obbmp);picdc.SelectObject(opbmp);tdc.SelectObject(obmp);}void CMyDlg::OnMenuAbout() {// 关于对话框CAboutDlg dlgAbout;dlgAbout.DoModal();}void CMyDlg::OnMenuExit() {// 退出OnOK();}void CMyDlg::OnMenuBegin() {// 重新开始游戏spell.Init();step = 0;SetDlgItemText(IDC_STEP, "0");begin = TRUE;Invalidate(FALSE);}void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultif(begin){if(point.x > 12 && point.x < 372 && point.y > 12 && point.y < 372){ int w = (point.x - 12) / (360/size);int h = (point.y - 12) / (360/size);int r = spell.Move(w, h);Invalidate(FALSE);if(0 <= r){step ++;CString str;str.Format("%d", step);SetDlgItemText(IDC_STEP, str);}if(1 == r){MessageBox("完成!");begin = FALSE;}}}CDialog::OnLButtonDown(nFlags, point);}void CMyDlg::OnMenuNumber() {// 选择数字pic.Load(IDR_PIC_NUMBER);Invalidate(FALSE);}void CMyDlg::OnMenuView() {// 选择风景pic.Load(IDR_PIC_VIEW);Invalidate(FALSE);}void CMyDlg::OnMenuPerson() {// 选择草莓pic.Load(IDR_PIC_CM);Invalidate(FALSE);}void CMyDlg::OnMenu3() {// 选择3*3的方块if(3 != size){CMenu* pMenu = this->GetMenu();pMenu->CheckMenuItem(ID_MENU_3, MF_CHECKED);pMenu->CheckMenuItem(ID_MENU_4, MF_UNCHECKED);pMenu->CheckMenuItem(ID_MENU_5, MF_UNCHECKED);pMenu->CheckMenuItem(ID_MENU_6, MF_UNCHECKED);spell.ReCreate(3, 3, 2, 2);size = 3;OnMenuBegin();}}void CMyDlg::OnMenu4() {// 选择4*4的方块if(4 != size){CMenu* pMenu = this->GetMenu();pMenu->CheckMenuItem(ID_MENU_4, MF_CHECKED);pMenu->CheckMenuItem(ID_MENU_3, MF_UNCHECKED);pMenu->CheckMenuItem(ID_MENU_5, MF_UNCHECKED);pMenu->CheckMenuItem(ID_MENU_6, MF_UNCHECKED);spell.ReCreate(4, 4, 3, 3);size = 4;OnMenuBegin();}}void CMyDlg::OnMenu5() {// 选择5*5的方块if(5 != size){CMenu* pMenu = this->GetMenu();pMenu->CheckMenuItem(ID_MENU_5, MF_CHECKED);pMenu->CheckMenuItem(ID_MENU_3, MF_UNCHECKED);pMenu->CheckMenuItem(ID_MENU_4, MF_UNCHECKED);pMenu->CheckMenuItem(ID_MENU_6, MF_UNCHECKED);spell.ReCreate(5, 5, 4, 4);size = 5;OnMenuBegin();}}void CMyDlg::OnMenu6() {// 选择5*5的方块if(6 != size){CMenu* pMenu = this->GetMenu();pMenu->CheckMenuItem(ID_MENU_6, MF_CHECKED);pMenu->CheckMenuItem(ID_MENU_3, MF_UNCHECKED);pMenu->CheckMenuItem(ID_MENU_4, MF_UNCHECKED);pMenu->CheckMenuItem(ID_MENU_5, MF_UNCHECKED);spell.ReCreate(6, 6, 5, 5);size = 6;OnMenuBegin();}}void CMyDlg::OnMenuBorder() {// 是否有边框border = !border;CMenu* pMenu = this->GetMenu();pMenu->CheckMenuItem(ID_MENU_BORDER,border?MF_CHECKED:MF_UNCHECKED);Invalidate(FALSE);}void CMyDlg::OnMenuOpen() {// 打开文件CFileDialog file(true, NULL, NULL, OFN_OVERWRITEPROMPT, "图片文件|*.bmp;*.jpg;*.gif|*.jpg|*.jpg|*.bmp|*.bmp|*.gif|*.gif|", NULL);if(file.DoModal()==IDOK){pic.Load(file.GetPathName());Invalidate(FALSE);}}四、实验结果选择这个小游戏的时候,没有想到会有这么难做,开始做甚至不知道从哪里下手,问了很多的人,加上上网查阅,最后才把这个小游戏做出来。
c拼图游戏课程设计
c 拼图游戏课程设计一、教学目标本课程旨在通过C拼图游戏的学习,让学生掌握C语言的基本语法和编程技巧,培养学生解决实际问题的能力。
具体目标如下:1.理解并掌握C语言的基本语法和数据类型。
2.学会使用C语言进行控制结构和函数的编写。
3.了解C语言的输入输出操作和文件操作。
4.能够运用C语言编写简单的程序,解决实际问题。
5.具备调试和运行C语言程序的能力。
6.能够阅读和理解C语言的代码和文档。
情感态度价值观目标:1.培养学生对计算机编程的兴趣和热情。
2.培养学生解决问题的耐心和毅力。
3.培养学生团队协作和分享成果的意识。
二、教学内容本课程的教学内容主要包括C语言的基本语法、数据类型、控制结构、函数、输入输出操作和文件操作。
具体安排如下:1.第一章:C语言概述和基本语法。
2.第二章:数据类型和变量。
3.第三章:控制结构(条件语句、循环语句)。
4.第四章:函数和数组。
5.第五章:输入输出操作和文件操作。
三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。
1.讲授法:通过教师的讲解,让学生掌握C语言的基本概念和语法。
2.讨论法:引导学生进行问题讨论,培养学生的思考和解决问题的能力。
3.案例分析法:通过分析实际案例,让学生学会运用C语言解决实际问题。
4.实验法:让学生动手编写C语言程序,培养学生的编程能力和实践能力。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将选择和准备以下教学资源:1.教材:《C语言程序设计》。
2.参考书:《C语言编程思想》。
3.多媒体资料:教学PPT、视频教程。
4.实验设备:计算机、编程环境。
以上是本课程的教学设计,通过明确的教学目标和多样化的教学方法,以及丰富的教学资源,相信能够有效地帮助学生掌握C语言编程知识,提高解决实际问题的能力。
五、教学评估为了全面、客观、公正地评估学生在C拼图游戏课程中的学习成果,我们将采用多种评估方式:1.平时表现:通过学生在课堂上的参与度、提问回答、小组讨论等表现,评估其学习态度和积极性。
c语言课程设计--拼图游戏
c语言课程设计–拼图游戏一、教学目标本课程的教学目标是使学生掌握C语言的基本语法和编程技巧,通过制作一个简单的拼图游戏,培养学生的编程思维和实际操作能力。
具体目标如下:1.知识目标:学生能够熟练使用C语言进行简单的程序设计,理解基本的数据结构和算法。
2.技能目标:学生能够独立完成一个拼图游戏的程序设计,包括游戏逻辑的实现、用户界面的设计等。
3.情感态度价值观目标:通过课程的学习,学生能够培养团队合作的精神,增强对计算机科学的兴趣和热情。
二、教学内容本课程的教学内容主要包括C语言的基本语法、数据结构、算法和游戏设计。
具体安排如下:1.C语言的基本语法:包括变量、数据类型、运算符、控制结构等。
2.数据结构:包括数组、链表、栈和队列等。
3.算法:包括排序、查找等基本算法。
4.游戏设计:包括游戏逻辑的实现、用户界面的设计等。
三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。
1.讲授法:用于讲解C语言的基本语法和数据结构。
2.讨论法:通过小组讨论,培养学生的团队合作精神和解决问题的能力。
3.案例分析法:通过分析已有的拼图游戏案例,帮助学生理解游戏设计的原理和方法。
4.实验法:学生通过实际操作,完成拼图游戏的编程和调试。
四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:《C语言程序设计》2.参考书:《C语言参考手册》3.多媒体资料:PPT课件、视频教程等。
4.实验设备:计算机、网络等。
五、教学评估本课程的评估方式包括平时表现、作业和考试三个部分,以全面客观地评价学生的学习成果。
1.平时表现:包括课堂参与度、团队合作、问题解决能力等,占总评的30%。
2.作业:包括编程练习和小项目等,占总评的40%。
3.考试:包括期中考试和期末考试,占总评的30%。
评估方式将采用客观、公正的原则,通过教师评分和学生互评相结合的方式进行。
c拼图游戏课程设计
c 拼图游戏课程设计一、课程目标知识目标:1. 学生能理解并掌握C拼图游戏的基本原理和算法逻辑;2. 学生能够运用所学知识,设计并实现一个简单的C拼图游戏;3. 学生了解程序设计中的顺序、循环和条件语句,并能将其应用于C拼图游戏中。
技能目标:1. 学生能够运用C语言编写程序,实现拼图游戏的基本功能;2. 学生通过分析问题,培养解决问题的能力,提高逻辑思维能力;3. 学生在团队协作中,学会沟通与表达,提高团队协作能力。
情感态度价值观目标:1. 学生在编程实践中,培养对计算机科学的兴趣和热情;2. 学生在克服困难、解决问题的过程中,增强自信心和自主学习能力;3. 学生通过C拼图游戏的设计与实现,体验创新的乐趣,培养创新精神。
课程性质分析:本课程为计算机编程入门课程,通过设计C拼图游戏,使学生在实际操作中掌握编程知识和技能,培养编程兴趣。
学生特点分析:学生处于初级阶段,对编程有一定的好奇心,但缺乏实际操作经验。
因此,课程设计需注重实践操作,激发学生的学习兴趣。
教学要求分析:教师需关注学生的个体差异,提供个性化的指导与帮助。
课程要求学生在掌握基本知识的基础上,提高实际操作能力和团队协作能力。
通过分解课程目标,确保学生能够实现具体的学习成果。
二、教学内容1. C语言基础:变量定义、数据类型、运算符、表达式、输入输出函数等;教材章节:第一章至第三章。
2. 控制结构:顺序结构、选择结构、循环结构;教材章节:第四章至第六章。
3. 数组与字符串:一维数组、二维数组、字符串操作;教材章节:第七章。
4. 函数:函数定义、函数调用、传参方式;教材章节:第八章。
5. 拼图游戏原理:游戏规则、算法逻辑;教材章节: 第九章实例分析。
6. 编程实践:设计并实现C拼图游戏;教材章节:实践环节。
教学安排与进度:1. 第一周:C语言基础学习,完成相关练习;2. 第二周:学习控制结构,完成相关练习;3. 第三周:数组与字符串知识学习,完成相关练习;4. 第四周:学习函数相关知识,完成相关练习;5. 第五周:讲解拼图游戏原理,分析案例;6. 第六周至第七周:分组进行编程实践,设计并实现C拼图游戏;7. 第八周:展示成果,总结评价。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录一、需求分析 (1)1.课程设计目的 (1)2.程序所实现的功能 (1)二、设计内容 (1)1. 主模块图 (1)2.1. 主程序流程图 (2)2.2 用例图 (2)2.3主程序调用关系图 (3)2.4函数主要调用关系图 (3)三、设计方案论述 (3)四、调试分析 (4)1.实际完成的情况 (4)2.程序的性能分析 (4)3.上机过程中出现的问题及其解决方案 (4)4.程序中可以改进、扩充的功能及设计实现构想 (4)五、用户手册 (4)六、设计总结 (5)七、程序中主要的功能函数 (6)八、主要参考文献 (6)九、附录 (6)一、需求分析1.课程设计目的(1)运用C++语言设计拼图游戏具有极强的实践性,加强我们对C++课程基础知识点的理解掌握和灵活运用理能力,培养实际分析问题能力,养成良好的编程习惯;了解C++面向对象的设计方法与技巧,有效地、深刻地理解课程内容,体会理论、方法和设计原则;培养分析实际问题和解决问题的能力,具备使用面向对象程序设计开发工具设计实际系统的能力。
(2)进一步领会程序设计的特点和应用,提高运用C++ 以及面向对象知识解决实际问题的能力,初步掌握MFC编程的基本功能,掌握一种可视化编程的方法,学习使用CStatic控制操作位图,加强对C++面向对象程序设计的理解。
(3)掌握用C++ 编写面向对象的实用程序的设计方法,对面向对象方法和思想增加感性的认识,学会利用C++程序设计语言编写出一些短小、可靠的Windows实用程序,切实提高面向对象的程序设计能力,为后续的相关课程的学习打下基础。
(4)锻炼实际的编程能力,提高调查资料、查阅技术文献、资料以及编写软件设计文档的能力,提高自学编程的能力。
2.程序所实现的功能(1)本程序除了实现了拼图所要求的基本功能外,还添加了背景音乐、计算步数和游戏所用的时间,当游戏开始时背景音乐自动循环播放,步数随player操作自动增加,时间自动增加。
(2)进入游戏界面后,player可以在菜单栏中选择游戏的难度、图片风格和拼图图像,亦可以自定义图片,若选择“简单”,程序将图片分成9块,若选择“困难”,程序将图片分成16块.(3)单击“重置”或按F3菜单项会弹出一个对话框让用户确认是否重置游戏。
(4)单击任意图象,图像将随机排列,并开始计时和记步,用户通过鼠标单击空格周围的图片来改变其位置,用户没单击一次,步数增加一次。
(5)游戏中用户可通过单击“提示”菜单项或按F4来查看图像的缩略图及游戏相关信息。
(6)游戏状态栏显示用户所用时间及步数,成功时状态栏给出提示信息和所花费时间、步数,用户可选择其他图像或难度进行游戏。
二、设计内容1.主模块图2.1主程序流程图2.2用例图:用户选择背景图片选择难度级别开始游戏是否选择不显示显示原图原图提示拼图成功返回重新选择背景图片及难度级别2.3主程序类调用关系图2.4 CPictureDlg类中成员函数主要调用关系图三、设计方案论述本程序有一个CPictureDlg类,它公有继承CDialog类的一些性质。
CDialog类中包括位图的读入和显示,拼图游戏中的Picture都是位图资源。
在游戏程序中,采用Static Text即静态文本控件来显示位图。
静态文本控件的功能比较简单,可显示字符串,图标,位图。
先为对话框的“游戏”中的菜单项“容易”和“困难”添加消息响应为另外还需为CPictureDlg 类添加BOOL型变量Easy来标识游戏的难度(分为9格或16格),同时添加BOOL型变量IsRnd 用来标识图格是否进行了随机位置的初始化,接下来为CPictureDlg对话框添加16个Static 控件(可以先设置好一个控件后,再通过复制得到其它的控件),并设置它们的属性:ID 设为IDC_IMAGE0到IDC_IMAGE15,Tabstop请勾上,Type属性设为Bitmap,控件添加好了后,我们需要添加一个CStatic类型的数组m_Image[16],与这16个Static控件相关联,通过这个操作这个数组的下标来控制这16个控件对图像进行分格显示。
建立关联的代码应写在CPictureDlg类中系统生成的OnInitDialog()函数体内,这个函数是整个对话框程序运行的入口,相当于一个main函数,在这个函数体里,我们也需要为之前声明的变量提供初始值,即将变量初始化,变量没有初始化的后果通常会造成内存泄露,使程序在运行时出现莫名奇妙的错误。
判断游戏是否完成的函数IsWin(),只要所有的Static控件都回到了相应的位置,就可以认为用户己完成了拼图,即游戏完成。
四、调试分析1.实际完成的情况(1)完成的功能:本程序除了实现了拼图所要求的基本功能外,还添加了背景音乐、计算步数和游戏所用的时间,当游戏开始时背景音乐自动循环播放,步数随player操作自动增加,时间自动增加。
(2)支持的数据类型:BOOL类型、控件数组类型。
2.程序的性能分析本程序能够很好的运行,并且画面质量以及音质方面都很高3.上机过程中出现的问题及其解决方案1)开始导入图片时,图片不能显示,重新导入bmp格式的图片后解决了。
2)开始建立了时间函数OnTimer,但是游戏运行后时间并不增加,在开始游戏对应的函数中增加SetTimer函数,得到想要的结果。
3)初始设置的快捷键无效,查阅资料后加入Accelerator及相应的函数,使得快捷键有效。
4.程序中可以改进、扩充的功能及设计实现构想。
1)游戏的难度等级有点少,可以适当增加几个等级。
2)游戏未设置根据用户花费的时间和步数判定用户的成绩并进行排名的功能,可以增设,以便用户了解自己玩的水平。
五、用户手册1.打开Picture文件夹,双击Ppicture.dsw标志打开程序,然后运行。
2.开始程序会出现以下欢迎界面:3.用户需要选择图片、难度和图片风格,然后单击图片开始游戏,计时器开始计时,用户通过鼠标单击空格周围的图片来改变其位置,用户每单击一次,步数增加一次。
4.游戏中用户可通过单击“提示”菜单项或按F4来查看图像的缩略图及游戏相关信息。
图像缩略图游戏相关信息5.用户也可以单击菜单栏中的重置或按快捷键F3重置图片,会出现提示信息,用户单击确定重置图片。
提示框如下:6.当完成拼图后系统会自动给出成功提示,并显示用户的成绩,用户单击确定后可以选择其他图片或难度继续游戏,也可以选择单击“退出”或按Esc退出游戏。
六、设计总结通过本次课程设计,学习并初步掌握了基于对话框的MFC程序的设计,并学会了使用CStatic控件操作位图。
熟悉了在基于对话框的工程中加入菜单操作、用代码操作菜单、Windows位图文件的基本结构、Visual C++中对位图资源的操作、Visual C++中对自定义位图文件的操作、设置相关位图的概念、用Static控件显示位图以及用Status Bar显示提示信息和Visual C++随机函数。
在设计过程中,曾遇到了两个瓶颈导致程序一度无法完成,第一个是位图文件的添加,包括将图片格式转换成BMP格式、添加相关Static控件,尤其是对控件图标不熟悉的情况下,一时不知道在哪儿添加控件,后来上网查阅并请教同学才得以完成控件的添加,使得程序可以继续完成。
不过在程序即将结束的时候,又遇到了一个新的问题,导致程序差点功亏一篑,问题就是图片的缩略图的添加,也就是游戏中的“提示”的应用,当然没有“提示”操作,并不会影响整个程序的运行环境,但是为了使游戏者能够顺利的完成游戏,此“提示”操作必不可少,在纠结了一段时间之后,在与同学的商讨下,终于完成了缩略图的添加,为程序的顺利完成提供了帮助。
在本次设计的完成过程中,我对软件的开发有了一个初步的认识,一个小型游戏软件尚且需要不断地查阅资料、请教别人,那么完成一个大型的软件,必定需要更加复杂的过程。
所以在做软件开发时首先要保持一个平静的心态,静下心来潜心去研究,同时还要熟悉的掌握、灵活的运用所学知识,方能完成设计。
也对MFC程序开发也有了相应的了解,每一个函数都有其特定的用途,掌握好这其中的一些关联,对一个程序的完成不无好处,这次课程设计为我以后编程的相关学习奠定了基础,使我在不同方面得到了锻炼。
七、程序中类的主要的成员函数BOOL OnInitDialog(); //初始化函数void OnRun(UINT nBitmapID,UINT nMenuID);//加载位图资源BOOL IsWin(); //判断拼图是否成功void MoveImage(int num); //移动随机小图块void Rnd(); //随机设置小图块的位置UINT MapRand(UINT nMax); //随机函数void SetImage(); //把图像拷贝到Static控件void SetPos() // 初始化Staic 控件的位置CString IntToString(int number); //为游戏添加计时器void OnTimer(UINT nIDEvent); //计时函数void SetPre(); //生成略缩图void CPictureDlg::OnForHelp() //显示略缩图void ShowItem(); //显示帮助对话框八、主要参考文献1.郑莉.C++语言程序设计(第3版).北京:清华大学出版社,2005.72.钱能.C++程序设计教程(第2版).北京:清华大学出版社,2005.83.黄维通.Visual C++面向对象与可视化程序设计(第2版).北京:清华大学出版社,2003.124..刘路放.Visual C++与面向对象程序设计教程(第二版).北京:高等教育出版社,2007.85. 潘爱民.COM原理与应用.北京:清华大学出版社,1999.11九、附录BOOL CPictureDlg::OnInitDialog()//整个对话框程序运行的入口{CDialog::OnInitDialog();// Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small iconsrand((unsigned)time(NULL));hAccel = ::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERA TOR1));// TODO: Add extra initialization hereBitmap.LoadBitmap(IDB_BITMAP6);//初始界面是图像BITMAP6pKDC = new CDC;pMainMenu = GetMenu(); //获取菜单Style3d = TRUE;Islong = FALSE;Advan = FALSE;Easy = TRUE;TimeCon = "计时器";IntStep = 0;Strstep = "步数";SetWindowPos(NULL,0,0,600,700,SWP_NOMOVE); //控制窗口大小SetTimer(10,1000,NULL);//10表示计时器的名字,1000表示时间间隔是1000毫秒,NULL表示使用onTimer函数。