


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、某某工业大学课程设计资料袋计算机与通信学院 学院系、部2014 2015学年第 2学期课程名称面向对象程序设计指导教师左新娥职称 讲师学生某某自己填写专业班级自己填写学号自己填写 题 目自己填写成绩起止日期2015年6_月_22_日2015 年_6_月_28_日目 录清单序号材料名称资料数量备注1课程设计任务书12课程设计说明书13456课程设计任务书2014 2015学年第2学期学院系、部计算机与通信学院专业自己填写 班级自己填写课程名称: 面向对象程序设计学生 某某:自己填写设计题目: 课自己填写 指导 教师: 左新娥完成期限:自 2015 年_6_月22 日至2015 年_6_月28 日
2、共 _周内 容 与 任 务一、设计内容自己填写二、设计任务课程设计说明书(纸质+电子版),内容包括:设计内容、系统分析(包括可行性分析、需求分析等 )与功能分析;系统设计(要求画岀系统整体功能框图、流程图、并给岀相应地关键的代码且对所使用的主要数据 结构进展说明等。)、设计总结(评价/遇到的问题/体会/建议等)、使用说明等。三、设计要求1. 按功能要求开发系统,能正确运行。程序代码书写规X,有充足的注释。2. 课程设计所使用的编程语言任选,但建议使用C或C+;3. 绿色软件:程序运行不需安装,防止写系统和注册表;进 度 安 排起止日期工作内容课程设计前一周召开动员大会,学生选题;:2015-6
3、-222015-6-23系统分析和设计;2015-6-242015-6-26熟悉软件开发工具、编码系统、系统测试以与中期辩论;:2015-6-272015-6-28撰写并提交课程设计说明书 (含电子文档)、源程序等。主要参考资料1. 谭浩强.C+面向对象程序设计M.:清华大学,2006.2. X海林,杜忠友,姜玉波.Visual C+ 简明教程M.:电子工业,2007.3. 丁展,四维科技.Visual C+游戏开发技术与实例M.:人民邮电,2005 .4. 姚领田.精通 MFC程序设计M.:人民邮电.2000.5清宏计算机工作室.Visual C+6.0编程技巧多媒体与系统篇M.:机械工业,
4、2001.6.王华,叶爱亮,祁立学等.Visual C+6.0 编程实例与技巧M.:机械工业,1999.7 钱新贤,杨猛,程兆炜等.Visual C+编程疑难详解M.:人民邮电,2000.指导教师签字:年 月 日系教研室主任签字:课程设计说明书课程名称:面向对象程序设计与 C+语言设计题目:C+实现拼图游戏专 业:物联网工程班级:1302学生某某:彭文斌学号:指导教师:左新娥2015 年 6 月 26 日目录1课程设计简介51.1课程设计的目的51.2课程设计内容52课程设计实现过程66102323233设计总结244参考文献24整个写完后使用更新域在目录上点击右键选择更新域确定各局部的页码!
5、1课程设计简介宋体,三号1.1课程设计的目的宋体,小三通过C+来实现拼图游戏,用户可以使用鼠标和键盘来控制游戏正文字体要求为宋体,字号为小四,行间距 20磅,每段前空2字符1.2课程设计内容宋体小三数据结构,将整个所有图像块记为一个二维数组m_board,写了一个Board类来控制图像的移动和修改。Flip类是用来实现这个功能的,其中定义了 移动一格的帧数、速度等信息。然后整个游戏是一个类 Game算法与其他,根本上全是小算法,有一点就是游戏开始时必须将所有的图像块置乱,但是如果是随机打乱就不能保证这个游戏一定有可行解,这个问题的讨论可以参见8数码问题,这种问题的有解是需要条件的。 至于如何保
6、证这个游戏 有解,我用了最笨的方法,就是进展逆操作,一开始随机对原图进展操作,循环 一定次数以后的图像就是置乱的图像了, 但是这种方法有一个缺陷,当图像块非 常多时,比如20*20,这种方法只能置乱图像的一局部,而另一局部却和原图差 不多。为了消除这个问题,对每种操作比如向上移动重复执行随机次,这样 就根本上解决的前面的问题了。其实这个问题可以用数学方法来解决,又快又省力,但是自己对这一局部不是很了解,只能用笨方法了。关于平滑运动,只要在图像变换的时候插入几帧图像就好了, 利用定时器来 不断显示,写这个图像滑动效果很纠结, 细节的问题考虑的比拟多,一个好的数 据结构的支持是必不可少的。正文字体
7、要求为宋体,字号为小四,行间距 20磅,每段前空2字符2课程设计实现过程宋体,三号要求写详细过程正文字体要求为宋体,字号为小四,行间距 20磅,每段前空2字符该局部必须包括:系统结构框图、各模块流程图、关键代码、主要的数据结构、测试与评价等2.3头文件宋体,小三#include "stdh.h" class Boardprivate :int m_bMAXN_BOARDMAXN_BOARD;/ empty block position : ex ey/ old empty block position oex,oeyint m_ex,m_ey;int m_oex,m_oey
8、;int m_dir; / reverse-direction of empty block bool m_bMove; if the board movedint m_nx,m_ny; int m_nBlock; public : Board();int Create();bool Check(); / check if the game win int GetMat( int , int );int SetMat( int , int , int );int SetXY( int , int );int GetEX();int GetEY();int GetOEX();int GetOEY
9、();int GetDir();int Move( int , int );bool CheckMove();int ResetMove();int Up();int Down();int Left();int Right();int Click( int , int ); / when User click the pictureint Init();#include "stdh.h"/*Class Flip stored all elements of the flipping-block.It will be used when the clicked block m
10、oving to the destination.*/ class Flip public :int m_t;int m_ux,m_uy; / uX , uY pixels are moved per m_timeint m_time; / uSecondsint m_dir; /direction of flip int m_cx,m_cy; / current pos of blockint m_sx,m_sy; / source pos of blockint m_dx,m_dy; / destination pos of blockint GetXY( intint GetTime()
11、;int & , int &);int );int SetXY( int , int , intint SetTime( int );int Sett( int , int , int );int SetDir( int );bool Finish(HWND ); / check if the flipping over;#include "stdh.h"#include "Flip.h"#include "Board.h" class Gameprivate :Board m_board;Flip m_flip; b
12、ool m_bMove;intm_ex,m_ey;intm_nx,m_ny;intm_nBlock;intm_ux,m_uy;int m_vFlip;int m_xFlip,m_yFlip;HBITMAP m_hBmp;HBITMAP m_hMemBmp;BITMAP m_bmp;HDC m_mdc,m_bufdc;/double cacheHWND m_hWnd;public :Game();int SetLevel( int , int );int LoadBmp(HINSTANCEint );int Init(HWND); /Init the gameint Create(HWND);i
13、nt Paint(HWND);int Click( int , int ); /User clicked the pictureint Key(WPARAM)/User push down the keyboardint InitFlip(); / init the m_flip and then flipping start.bool CheckWin();int Release(HWND );NO_DEPENDENCIES/ Microsoft Visual C+ generated include file./#define IDB_AC103#define IDB_BH104/ Nex
14、t default values for new objects/#ifdef APSTUDIO_INVOKED#ifndef APSTUDIO_READONLY_SYMBOLS#define _APS_NEXT_RESOURCE_VALUE 105#define _APS_NEXT_MAND_VALUE40001#define _APS_NEXT_CONTROL_VALUE 1001#define _APS_NEXT_SYMED_VALUE 101 #endif#endif#pragmaonce#include <windows.h>#include <ctime>#
15、include <cmath> usingnamespace std;constint constint constint constintMAXN_BOARD = 10;CLIENT_X = 1024;CLIENT_Y = 768;OFFSET_LINE = 1;constintconstintDIR_UP = 0;DIR_DOWN = 1;constint DIR_LEFT = 2;constint DIR_RIGHT = 3;constintconstintFLIP_T = 8;FLIP_TIME = 18;2.2源文件宋体,小三#include "Board.h&
16、quot;Board:Board()memset(m_b,-1, sizeof (m_b);m_nx = m_ny = m_ex = m_ey = 0; m_nBlock = 0;int Board:Create()memset(m_b,-1, sizeof (m_b);m_nx = m_ny = m_ex = m_ey = 0; m_nBlock = 0;return 0;int Board:SetXY( int nx, int ny)m_nx = nx;m_ny = ny;m_nBlock = m_nx * m_ny;m_oex = m_ex = m_nx - 1;m_oey = m_ey
17、 = m_ny - 1;return 0;int Board:SetMat( int x, int y, int val)m_byx = val;return val;int Board:GetMat( int x, int y)return m_byx;int Board:GetEX()return m_ex;int Board:GetEY()return m_ey;int Board:GetOEX()return m_oex;int Board:GetOEY()return m_oey;int Board:GetDir()return m_dir;bool Board:Check()int
18、 ck = 0;bool flag = true ;for (int i = 0; i < m_ny; +i)for (int j = 0; j < m_nx; +j)if (ck != m_bij)flag = false ;break ;+ck;if (flag = false && ck < m_nBlock-1)returnfalse ;returntrue ;int Board:lnit()/ VARIABLE: nStep , nLoop/ nStep:/In order to generate the random block positions
19、 and/ to make sure < The Problem > must have a solution, we/ have to simulate The-Inverse-Action of the user./Then nStep mean we will execute the Inverse-Action times./ And each Action will be random generated./ nLoop:/Due to the reason that the method that above-mentioned has/ a big Drawback:
20、 if the number of blocks is huge, then method would/ only change a small area of all. Avoiding this I add a new variable/ nloop, which means a same actions that executed times. It was proved/ that after this improved the new-method work well./int nStep = (rand()&(1<<8)-1)+100;int nLoop;int
21、 tmp;int id = 0;for (int i = 0; i < m_ny; +i)for (int j = 0; j < m_nx; +j)m_bij = id;+id;m_bm_ny-1m_nx-1 = -1;m_oey = m_ey;m_oex = m_ex;for (int i = 0; i < nStep; +i)tmp = (rand( )&3);nLoop = rand( )&7;/ loop of actionfor (int j = 0; j < nLoop; +j)switch (tmp)case0:this->Up();
22、break;case1:this->Down();break ;case2:this->Left();break ;case3:this->Right();breakreturn 0;int Board:Move( int nx, int ny)m_oex = m_ex;m_oey = m_ey;m_ex = nx;m_ey = ny;return 0;bool Board:CheckMove()return m_bMove;int Board:ResetMove()m_bMove = false ;return 0;int Board:Up()m_bMove = false
23、 ;Move(m_ex,m_ey);if (m_ey = 0)return -1;m_bm_eym_ex = m_b【m_ey-1【m_ex;m_bm_ey-1m_ex = -1;-m_ey;m_dir = DIR_DOWN;m_bMove = true ;return 0;int Board:Down()m_bMove = false ;Move(m_ex,m_ey);if (m_ey = m_ny - 1)return -1;m_bm_eym_ex = m_b【m_ey+1【m_ex;m_bm_ey+1m_ex = -1;+m_ey;m_dir = DIR_UP;m_bMove = tru
24、e ;return 0;int Board:Left()m_bMove = false ;Move(m_ex,m_ey);if (m_ex = 0)return -1;m_bm_eym_ex = m_bm_eym_ex-1;m_bm_eym_ex-1 = -1;-m_ex;m_dir = DIR_RIGHT;m_bMove = true ;return 0;int Board:Right()m_bMove = false ;Move(m_ex,m_ey);if (m_ex = m_nx - 1)return -1;m_bm_eym_ex = m_bm_eym_ex+1;m_bm_eym_ex+
25、1 = -1;+m_ex;m_dir = DIR_LEFT;m_bMove = true ;return 0;int Board:Click( int x, int y)m_bMove = false ;if (x < 0 | x >= m_nx | y < 0 | y >= m_ny)return -1;if (abs(x-m_ex) + abs(y-m_ey) > 1)return -1;if (x - m_ex > 0)this ->Right();return 0;if (m_ex - x > 0)this ->Left();ret
26、urn 0;if (y - m_ey > 0)this ->Down();return 0;if (m_ey - y > 0)this ->Up();return 0;return 0;#include "PingTu.h"Game:Game()m_bMove = false ;m_nx = m_ny = m_ux = m_uy = 0;m_nBlock = 0;int Game:Create(HWND hWnd)m_bMove = false ;m_nx = m_ny = m_ux = m_uy = 0;m_nBlock = 0;m_mdc = C
27、reatepatibleDC(GetDC(hWnd); m_bufdc = CreatepatibleDC(GetDC(hWnd);srand( unsigned (time(NULL);m_board.Create();return 0;int Game:lnit(HWND hWnd)m_ux = m_bmp.bmWidth/m_nx;m_uy = m_bmp.bmHeight/m_ny;m_hWnd = hWnd;m_boardnit();MoveWindow(hWnd,O,O,m_bmp.bmWidth+m_ux+m_nx*OFFSET_LINE+20, m_bmp.bmHeight+2
28、0,TRUE);/ initialize flipm_flip.Sett(FLIP_T,m_ux,m_uy); m_flip.SetTime(FLIP_TIME);return 0;int Game:SetLevel( int x, int y)m_nx = x;m_ny = y;m_board.SetXY(x,y);m_nBlock = m_nx * m_ny;return 0;int Game:LoadBmp(HINSTANCE hInst, int id)m_hBmp = LoadBitmap(hlnst,MAKEINTRESOURCE(id);GetObject(m_hBmp, siz
29、eof (BITMAP),&m_bmp);return 0;int Game:Paint(HWND hWnd )int x,y,k,i,j;int cur_block;HDC hdc;hdc = GetDC(hWnd);DeleteObject(m_hMemBmp);m_hMemBmp = CreatepatibleBitmap(GetDC(hWnd),CLIENT_X,CLIENT_Y);SelectObject(m_mdc,m_hMemBmp);SelectObject(m_bufdc,m_hBmp);cur_block = m_board.GetMat(m_board.GetOE
30、X(),m_board.GetOEY();for (i = 0; i < m_ny; +i)for ( j = 0; j < m_nx; +j)k = m_board.GetMat(j,i);x = k%m_nx;y = k/m_nx;if ( -1 = k )StretchBlt(m_mdc,j*m_ux+OFFSET_ LINE,i*m_uy+OFFSET_LINE,m_ux-2*0FFSET_ LIN E,m_uy-2*0FFSET_LINE, m_bufdc,0,0,m_bmp.bmWidth,m_bmp.bmHeight,SRCCOPY); continue ;elsei
31、f ( k = cur_block && !m_flip.Finish(hWnd)m_flip.GetXY(m_board.GetDir(),x,y);BitBlt(m_mdc,x,y,m_ux,m_uy, m_bufdc,(k%m_nx)*m_ux,(k/m_nx)*m_uy,SRCCOPY);elseBitBlt(m_mdc,j*(m_ux+(OFFSET_LINE<<1)+(OFFSET_LINE), i*(m_uy+(0FFSET_LINE<<1)+0FFSET_LINE,m_ux,m_uy, m_bufdc,x*m_ux,y*m_uy,SRCC
32、OPY);BitBlt(hdc,0,0,m_bmp.bmWidth,m_bmp.bmHeight,m_mdc,0,0,SRCCOPY); StretchBlt(hdc,m_bmp.bmWidth,O,m_ux,m_uy, m_bufdc,0,0,m_bmp.bmWidth,m_bmp.bmHeight,SRCCOPY);return 0;int Game:Click( int mx, int my)m_board.ResetMove();int x,y;x = mx/m_ux;y = my/m_uy;m_board.Click(x,y);return 0;int Game:Key(WPARAM
33、 wParam)m_board.ResetMove();switch (wParam)case VK_UP:m_board.Down(); break;case VK_DOWN: m_board.Up(); break;case VK_LEFT: m_board.Right();break ;case VK_RIGHT: m_board.Left();break ;if (m_board.CheckMove() / if board moved.InitFlip();SetTimer(m_hWnd,O,m_flip.GetTime(),O);return 0;int Game:InitFlip
34、()/ source x&y/ destination x&yint sx,sy,dx,dy;sx = m_board.GetEX()*(m_ux+(OFFSET_LINE<<1)+OFFSET_LINE;sy = m_board.GetEY()*(m_uy+(OFFSET_LINE<<1)+OFFSET_LINE; dx = m_board.GetOEX()*(m_ux+(OFFSET_ LIN E<<1)+OFFSET_LINE; dy = m_board.GetOEY()*(m_uy+(OFFSET_ LIN E<<1)+O
35、FFSET_LINE; m_flip.SetXY(sx,sy,dx,dy);/ set directionm_flip.SetDir(m_board.GetDir();return 0;bool Game:CheckWin()if (m_board.Check()returntrue ;returnfalse ;int Game:Release(HWND hWnd)ReleaseDC(hWnd,m_mdc);ReleaseDC(hWnd,m_bufdc);DeleteObject(m_hBmp);DeleteObject(m_hMemBmp);return 0;#include "F
36、lip.h" int Flip:GetXY( int dir, int & x, int & y) if (m_dir = DIR_UP)m_cy -= m_uy;if (m_cy < m_dy)m_cy = m_dy;elseif (m_dir = DIR_DOWN)m_cy += m_uy;if (m_cy > m_dy)m_cy = m_dy;elseif (m_dir = DIR_LEFT)m_cx -= m_ux;if (m_cx < m_dx)m_cx = m_dx;elsem_cx += m_ux;if (m_cx > m_dx)
37、m_cx = m_dx;x = m_cx;y = m_cy;return 0;int Flip:GetTime()return m_time;int Flip:SetXY( int sx, int sy, int dx, int dy)m_sx = sx;m_sy = sy;m_dx = dx;m_dy = dy;m_cx = sx;m_cy = sy;return 0;int Flip:SetTime( int t)m_time = t;return 0;int Flip:Sett( int t, int bx, int by)m_t = t;m_ux = bx/t;m_uy = by/t;
38、return 0;int Flip:SetDir( int dir)m_dir = dir;return 0;bool Flip:Finish(HWND hWnd)if (m_cx = m_dx && m_cy = m_dy)KillTimer(hWnd,O); returntrue ;returnfalse ;#include <windows.h>#include "PingTu.h"#include "resource.h"LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPA
39、RAM);/ my datas /HINSTANCE ghInst;Game game;/ int WINAPI WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)static TCHAR szAppName = TEXT ( "WinApp");HWND hWnd ;MSG msg ;WNDCLASS wndclass ;wndclass.style = CS_HREDRAW | CS_VREDRAW ;wndclass .l pfnWndProc = WndP
40、roc ;wndclass.cbCIsExtra = 0 ;wndclass.cbWndExtra = 0 ;wndclass.hInstance = hInstance ;wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION); wndclass.hCursor = LoadCursor (NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); wndclass .l pszMenuName = NULL ;wndclass .l pszCl
41、assName= szAppName ;if (!RegisterClass (&wndclass)return 0 ;ghInst = hInstance;hWnd = CreateWindow( szAppName,/ window class nameTEXT ("Win32" ),/ window captionWS_OVERLAPPEDWINDOWyindow styleCW_USEDEFAULTriitial x positionCW_USEDEFAULTriitial y position800, / initial x size600, / initial y sizeNULL,/ parent window handleNULL,/ window menu handlehInstance,/ program instance handleNULL) ;/ creati
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度教育产业借款协议
- 2025年度书画家签约经纪代理服务合同
- 2025年度住宅小区公共设施保洁服务合同
- 游泳馆装饰设计合同
- 2025年全球能源安全情景报告(英文版)-壳牌
- 2025年度抖音平台用户增长与活跃度提升合同
- 2025年度企业社保代缴与人才引进激励协议
- 二零二五年度退定金协议:高端酒店预订管理服务合同
- 2025年度多功能手摩托车购销合同范本
- 仓储用地租赁合同
- 【招商手册】杭州ICON CENTER 社交娱乐中心年轻人潮流消费创新实验
- AI一体化智慧校园建设方案中学版
- 2025年国家税务总局辽宁省税务局系统招聘事业单位工作人员管理单位笔试遴选500模拟题附带答案详解
- 2024年思想道德与政治考试题库 (单选、多选)
- 《中国成人白内障摘除手术指南(2023年)》解读
- 七年级语文组名著阅读计划
- 常用消毒剂的分类、配制及使用课件演示幻灯片
- 2025年上半年上饶市上饶县事业单位招考(139名)易考易错模拟试题(共500题)试卷后附参考答案
- 2025年高考数学模拟卷(浙江专用)(解析版)
- 2024托盘行业市场趋势分析报告
- 码头安全生产知识培训
评论
0/150
提交评论