版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 湖南工业大学课 程 设 计资 料 袋 计算机与通信学院 学院(系、部) 2014 2015 学年第 2 学期 课程名称 面向对象程序设计 指导教师 左新娥 职称 讲师 学生姓名 自己填写 专业班级 自己填写 学号 自己填写 题 目 自己填写 成 绩 起止日期 2015 年 6 月 22 日 2015 年 6 月 28 日目 录 清 单序号材 料 名 称资料数量备 注1课程设计任务书12课程设计说明书13456课程设计任务书2014 2015学年第 2 学期学院(系、部) 计算机与通信学院 专业 自己填写 班级 自己填写 课程名称: 面向对象程序设计 学生姓名: 自己填写 设计题目: 课 自己
2、填写 指导教师: 左新娥 完成期限:自 2015 年 6 月 22 日至 2015 年 6 月 28 日 共 1 周内容及任务一、设计内容自己填写二、设计任务课程设计说明书(纸质+电子版),内容包括:设计内容、系统分析(包括可行性分析、需求分析等)及功能分析;系统设计(要求画出系统整体功能框图、流程图、并给出相应地关键的代码且对所使用的主要数据结构进行说明等。)、设计总结(评价/遇到的问题/体会/建议等)、使用说明等。三、设计要求1. 按功能要求开发系统,能正确运行。程序代码书写规范,有充足的注释。2. 课程设计所使用的编程语言任选,但建议使用C或C+;3. 绿色软件:程序运行不需安装,避免写
3、系统和注册表;进度安排起止日期工作内容课程设计前一周召开动员大会,学生选题;2015-6-222015-6-23系统分析和设计;2015-6-242015-6-26熟悉软件开发工具、编码系统、系统测试以及中期答辩;2015-6-272015-6-28撰写并提交课程设计说明书 (含电子文档)、源程序等。主要参考资料1谭浩强.C+面向对象程序设计M.北京:清华大学出版社,2006.2张海林,杜忠友,姜玉波. Visual C+简明教程M.北京:电子工业出版社,2007.3丁展,四维科技.Visual C+游戏开发技术与实例M北京:人民邮电出版社,20054姚领田精通MFC程序设计M北京:人民邮电出
4、版社.2000.5清宏计算机工作室Visual C+6.0编程技巧(多媒体与系统篇)M.北京:机械工业出版社,2001.6 王华,叶爱亮,祁立学等.Visual C+6.0编程实例与技巧M.北京:机械工业出版社,1999.7钱新贤,杨猛,程兆炜等.Visual C+编程疑难详解M.北京:人民邮电出版社,2000.指导教师(签字): 年 月 日系(教研室)主任(签字): 年 月 日课程设计说明书 课程名称: 面向对象程序设计与c+语言 设计题目: c+实现拼图游戏 专 业: 物联网工程 班级: 1302 学生姓名: 彭文斌 学 号: 指导教师: 左新娥 2015年 6月 26 日目录1 课程设计
5、简介51.1 课程设计的目的51.2 课程设计内容52课程设计实现过程62.1系统结构框图62.2模块流程图62.3关键代码62.4主要数据结构62.5测试与评价63设计总结74参考文献8整个写完后使用更新域(在目录上点击右键选择更新域)确定各部分的页码!1 课程设计简介(宋体,三号)1.1 课程设计的目的(宋体,小三)通过c+来实现拼图游戏,用户可以使用鼠标和键盘来控制游戏(正文字体要求为宋体,字号为小四,行间距20磅,每段前空2字符)1.2 课程设计内容(宋体小三)数据结构,将整个所有图像块记为一个二维数组m_board,写了一个Board类来控制图像的移动和修改。Flip类是用来实现这个
6、功能的,其中定义了移动一格的帧数、速度等信息。然后整个游戏是一个类Game。算法及其他,基本上全是小算法,有一点就是游戏开始时必须将所有的图像块置乱,但是如果是随机打乱就不能保证这个游戏一定有可行解,这个问题的讨论可以参见8数码问题,这种问题的有解是需要条件的。至于如何保证这个游戏有解,我用了最笨的方法,就是进行逆操作,一开始随机对原图进行操作,循环一定次数以后的图像就是置乱的图像了,但是这种方法有一个缺陷,当图像块非常多时,比如20*20,这种方法只能置乱图像的一部分,而另一部分却和原图差不多。为了消除这个问题,对每种操作(比如向上移动)重复执行随机次,这样就基本上解决的前面的问题了。其实这
7、个问题可以用数学方法来解决,又快又省力,但是自己对这一部分不是很了解,只能用笨方法了。关于平滑运动 ,只要在图像变换的时候插入几帧图像就好了,利用定时器来不断显示,写这个图像滑动效果很纠结,细节的问题考虑的比较多,一个好的数据结构的支持是必不可少的。(正文字体要求为宋体,字号为小四,行间距20磅,每段前空2字符)2课程设计实现过程(宋体,三号)(要求写详细过程)(正文字体要求为宋体,字号为小四,行间距20磅,每段前空2字符)该部分必须包括:系统结构框图、各模块流程图、关键代码、主要的数据结构、测试与评价等2.12.3头文件(宋体,小三)#include stdh.hclass Boardpri
8、vate: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;int m_dir;/ reverse-direction of empty blockbool m_bMove;/ if the board movedint m_nx,m_ny;int m_nBlock;public:Board();int Create();bool Check();/ check if the game winint G
9、etMat(int ,int );int SetMat(int ,int , int );int SetXY(int ,int );int GetEX();int GetEY();int GetOEX();int GetOEY();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
10、.h/*Class Flip stored all elements of the flipping-block.It will be used when the clicked block moving to the destination.*/class Flip public:int m_cnt;int m_ux,m_uy;/ uX , uY pixels are moved per m_timeint m_time;/ uSecondsint m_dir;/direction of flipint m_cx,m_cy;/ current pos of blockint m_sx,m_s
11、y;/ source pos of blockint m_dx,m_dy;/ destination pos of blockint GetXY(int , int& , int&);int GetTime();int SetXY(int ,int ,int ,int );int SetTime(int );int SetCnt(int ,int ,int );int SetDir(int);bool Finish(HWND );/ check if the flipping over;#include stdh.h#include Flip.h#include Board.hclass Ga
12、meprivate:Board m_board;Flip m_flip;bool m_bMove;int m_ex,m_ey;int m_nx,m_ny;int m_nBlock;int m_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(HINSTANCE,int);int Init(H
13、WND);/ Init the gameint Create(HWND);int 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./ Us
14、ed by res.rc/#define IDB_AC 103#define IDB_BH 104/ Next default values for new objects/ #ifdef APSTUDIO_INVOKED#ifndef APSTUDIO_READONLY_SYMBOLS#define _APS_NEXT_RESOURCE_VALUE 105#define _APS_NEXT_COMMAND_VALUE 40001#define _APS_NEXT_CONTROL_VALUE 1001#define _APS_NEXT_SYMED_VALUE 101#endif#endif#p
15、ragma once#include #include #include using namespace std;const int MAXN_BOARD = 10;const int CLIENT_X = 1024;const int CLIENT_Y = 768;const int OFFSET_LINE = 1;const int DIR_UP = 0;const int DIR_DOWN = 1;const int DIR_LEFT = 2;const int DIR_RIGHT = 3;const int FLIP_CNT = 8;const int FLIP_TIME = 18;2
16、.2源文件(宋体,小三)#include Board.hBoard: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
17、- 1;m_oey = m_ey = 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 Bo
18、ard:Check()int 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)return false;return true;int Board:Init()/ VARIABLE: nStep , nLoop/ nStep: /In order to generate the random block positions and/ to make su
19、re 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: if the number of blocks is huge, then
20、 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()&(18)-1)+100;int nLoop;int tmp;int id = 0;for(int i = 0; i m_ny; +i)for(int
21、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 action for(int j = 0; j Up(); break;case 1: this-Down(); break;case 2: this-Left(); break;case 3: this-Right(); break;return 0;int Board:Move(int nx
22、, 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;Move(m_ex,m_ey);if(m_ey = 0)return -1;m_bm_eym_ex = m_bm_ey-1m_ex;m_bm_ey-1m_ex = -1;-m_ey;m_dir = DIR_DOWN;m_bMove = true;
23、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_bm_ey+1m_ex;m_bm_ey+1m_ex = -1;+m_ey;m_dir = DIR_UP;m_bMove = true;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
24、;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+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 = m_nx | y = m_ny)return -1;if(abs(
25、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();return 0;if(y - m_ey 0)this-Down();return 0;if(m_ey - y 0)this-Up();return 0;return 0;#include PingTu.hGame:Game()m_bMove = false;m_nx = m_ny = m_ux = m_uy = 0;m_nBlock = 0;int Game:Create(HWND hWnd)m_bMo
26、ve = false;m_nx = m_ny = m_ux = m_uy = 0;m_nBlock = 0;m_mdc = CreateCompatibleDC(GetDC(hWnd);m_bufdc = CreateCompatibleDC(GetDC(hWnd);srand(unsigned(time(NULL);m_board.Create();return 0;int Game:Init(HWND hWnd)m_ux = m_bmp.bmWidth/m_nx;m_uy = m_bmp.bmHeight/m_ny;m_hWnd = hWnd;m_board.Init();MoveWind
27、ow(hWnd,0,0,m_bmp.bmWidth+m_ux+m_nx*OFFSET_LINE+20,m_bmp.bmHeight+20,TRUE);/ initialize flipm_flip.SetCnt(FLIP_CNT,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 i
28、d)m_hBmp = LoadBitmap(hInst,MAKEINTRESOURCE(id);GetObject(m_hBmp,sizeof(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 = CreateCompatibleBitmap(GetDC(hWnd),CLIENT_X,CLIENT_Y);SelectObject(m_mdc,m_hMemBmp);Sel
29、ectObject(m_bufdc,m_hBmp);cur_block = m_board.GetMat(m_board.GetOEX(),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*OFFSET_LINE,m_uy-2*OFFSET_LINE,/m_bufdc,0,0,m_
30、bmp.bmWidth,m_bmp.bmHeight,SRCCOPY);continue;else if( 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_LINE1)+(OFFSET_LINE),i*(m_uy+(OFFSET_LINE1)+OFFSET_LINE,m_ux,m_uy,m_
31、bufdc,x*m_ux,y*m_uy,SRCCOPY);BitBlt(hdc,0,0,m_bmp.bmWidth,m_bmp.bmHeight,m_mdc,0,0,SRCCOPY);StretchBlt(hdc,m_bmp.bmWidth,0,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
32、0;int Game:Key(WPARAM 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,0,m_flip.GetTime(),0);return 0
33、;int Game:InitFlip()/ source x&y/ destination x&yint sx,sy,dx,dy;sx = m_board.GetEX()*(m_ux+(OFFSET_LINE1)+OFFSET_LINE;sy = m_board.GetEY()*(m_uy+(OFFSET_LINE1)+OFFSET_LINE;dx = m_board.GetOEX()*(m_ux+(OFFSET_LINE1)+OFFSET_LINE;dy = m_board.GetOEY()*(m_uy+(OFFSET_LINE1)+OFFSET_LINE;m_flip.SetXY(sx,s
34、y,dx,dy);/ set directionm_flip.SetDir(m_board.GetDir();return 0;bool Game:CheckWin()if(m_board.Check()return true;return false;int Game:Release(HWND hWnd)ReleaseDC(hWnd,m_mdc);ReleaseDC(hWnd,m_bufdc);DeleteObject(m_hBmp);DeleteObject(m_hMemBmp);return 0;#include Flip.hint Flip:GetXY(int dir, int& x,
35、 int& y)if(m_dir = DIR_UP)m_cy -= m_uy;if(m_cy m_dy)m_cy = m_dy;else if(m_dir = DIR_LEFT)m_cx -= m_ux;if(m_cx m_dx)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;
36、int Flip:SetTime(int t)m_time = t;return 0;int Flip:SetCnt(int cnt, int bx, int by)m_cnt = cnt;m_ux = bx/cnt;m_uy = by/cnt;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,0);return true;return false;#include #include PingTu
37、.h#include resource.hLRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;/ 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 ; wndcla
38、ss.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ;wndclass.cbWndExtra = 0 ;wndclass.hInstance = hInstance ;wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;wndclass.hbrBackground = (HBRUSH) GetStockObject
39、 (WHITE_BRUSH) ;wndclass.lpszMenuName = NULL ;wndclass.lpszClassName= szAppName ;if (!RegisterClass (&wndclass)return 0 ;ghInst = hInstance;hWnd = CreateWindow( szAppName, / window class nameTEXT (Win32), / window captionWS_OVERLAPPEDWINDOW, / window styleCW_USEDEFAULT,/ initial x positionCW_USEDEFAULT,/ initial y position800,/ initial x size600,/ initial y sizeNULL, / parent window handleNULL, / window menu handlehInstance, / program instance handleNULL) ; / creation parametersShowWi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 芯诗珀莉护理考核测试卷及答案
- 2026电容器考试题库及答案
- 2026电气符号考试题及答案解析
- 2026电镜分析笔试题目及答案
- 市政工程质量监督工作方案
- 室内装饰装修专项施工方案
- 2026年外贸样品管理员考试题库及答案
- 室外管网回填砂砾铺设规范
- 中小学教师体育教育试题及答案
- 抗高血压药物考试试卷(附答案)
- 信用卡部培训大纲
- 代建公司代建管理制度
- T/CSWSL 007-2019饲料原料酵母水解物
- 滚针美容治疗技术解析
- 儿童自闭症康复中心项目商业计划书
- 莱州市月季产业发展规划(2018-2022年)
- 2025黑龙江七台河辰能生物质发电有限公司招聘笔试参考题库附带答案详解
- 《毛泽东思想和中国特色社会主义理论体系概论》附有答案
- 兰州市文职辅警招聘考试真题
- 田英章毛笔楷书2500字(简体版)
- 柴油机发电作业岗位职业危害告知卡
评论
0/150
提交评论