课程设计连连看_第1页
课程设计连连看_第2页
课程设计连连看_第3页
课程设计连连看_第4页
课程设计连连看_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

课 程 设 计 报 告 课程名称:面向对象程序设计C+ 设计题目: 连连看 专 业: 计算机科学与技术 姓 名: 学 号: 指导教师: 李 晓 虹 2016 年 1 月 7日一、系统需求分析 随着人们工作压力变得越来越大,现如今更多的人开始通过玩游戏来排解内心的压力,而各种各样的游戏也排入市场,一些大型网络游戏更是一些年轻用户的最爱,所有连连看游戏面对市场的竞争压力还是非常大的。分析连连看游戏,查找规则并对主要功能进行模仿程序实现,对于实现过程中出现的bug进行调试解决。经过对游戏的初步分析,连连看游戏含有如下规则:根据输入的信息,执行相应的布局,设定游戏的难以程度等,游戏能继续玩的基本点是两次点击的图案相同,并且能够通过某种不超过三个转折点的路线连接起来,使两个图案块消除。2、 总体设计2.1 界面设计界面采用C#技术实现,分为游戏状态区、游戏区和玩家排行榜。游戏状 态区左边是游戏进度,右边是游戏时间,从点开第一个方块开始计时,时间是倒着计算的;每消除一对游戏进度则会加1,时间也会加1,后面会显示对应的百分比;中间一大块区域是游戏区;游戏区的右边是玩家排行榜,排行榜显示对应等级中成绩前三的玩家名称以及分数。2.2 功能设计实现功能包括:重新开始、计时、计分、游戏进度显示、排行榜、游戏 主题切换、游戏等级切换。当玩家不想玩当前这局或玩的比较困难,觉得玩不下去了,可以点击重新开始进行重新布局,重新计时。计时和计分从实际上来说其实质是一样的,计分是根据玩家某局胜利后所花费的时间,也就是说花了多少时间,分数就是多少,花时间越少,对应的分数越靠前。游戏进度是以一个进度条来显示的,后面还有对应的百分比,能让玩家清晰的知道目前的游戏状态。排榜功能是本游戏中的一个难点,排行榜的数据时存放在xml文件里面的,不同的等级对应不同的排行榜,每当用户变换等级时系统会从xml文件中读取出前三玩家,当玩家胜利时,系统会对当前所得分数与xml中的数据进行比对,如果可以排榜,则提示玩家是否进行排榜,如果玩家想进入排行榜则还需输入名称,系统将会把当前玩家列入排行榜,然后显示到游戏界面上。2.3 游戏流程设计运行游戏程序,系统进行初始化、初始化操作包括游戏参数初始化、时 间初始化、游戏状态初始化、布局方块、随机排图等,之后等待鼠标单击游戏方块,第一次单击时,游戏开始计时。第一次点击时记录下该方块的坐标,点击的方块边框会显示红色,第二次点击时也获得对应坐标,并进行判断,如果两次点击的为同一个方块,则直接返回,不做任何操作,否则判断两个方块的图案是否相等,如果相等,则进行两个方块位置的判断;两个方块的位置分为两种情况,整个游戏的核心算法也在这里,第一种情况是两个方块的位置处在同一条直线上,水平线上或者垂直线上;第二种情况是两个方块能形成一个矩阵,两个方块分别是这个矩阵的两个对角。在第二种情况中分为两种情况,一种是a转一个拐点能到达b点,另一种是a经过两个拐点到达b点。如果两个点能达成其中的某个条件连通,则画线,然后消除两个点,这里是直接把两个方块从面板上删除了(有些程序是把这两个方块隐藏)。消除一对方块后,游戏进度会加1,剩余时间也会加1秒,右边显示的对应的方块对数会减1。当这些条件都不成立的时候,说明两点之间不能连线,则不进行任何操作。游戏会在两种情况下结束,一种是玩家在规定的时间内把所有的方块都消除了,判断方式有三个,一个是判断进度完成,一个是判断面板上是否还有方块,一个是判断右边显示的方块对数是否为0。运行流程图2.4开发环境开发环境:visual c+ 6.0开发语言:MFC+C/C+操作系统:windows7/XP三、详细设计实现该功能的代码如下:/ 连连看View.cpp : implementation of the CMyView class/#include stdafx.h#include 连连看.h#include 连连看Doc.h#include 连连看View.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CMyViewIMPLEMENT_DYNCREATE(CMyView, CFormView)BEGIN_MESSAGE_MAP(CMyView, CFormView)/AFX_MSG_MAP(CMyView)ON_COMMAND(ID_Exit, OnExit)ON_COMMAND(ID_Begin, OnBegin)ON_WM_LBUTTONDOWN()ON_WM_TIMER()/AFX_MSG_MAPEND_MESSAGE_MAP()/ CMyView construction/destructionCMyView:CMyView(): CFormView(CMyView:IDD)/AFX_DATA_INIT(CMyView)/ NOTE: the ClassWizard will add member initialization here/AFX_DATA_INIT/ TODO: add construction code hereCMyView:CMyView()void CMyView:DoDataExchange(CDataExchange* pDX)CFormView:DoDataExchange(pDX);/AFX_DATA_MAP(CMyView)/ NOTE: the ClassWizard will add DDX and DDV calls here/AFX_DATA_MAPBOOL CMyView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT csreturn CFormView:PreCreateWindow(cs);void CMyView:OnInitialUpdate()CFormView:OnInitialUpdate();GetParentFrame()-RecalcLayout();ResizeParentToFit();initdata();/ CMyView diagnostics#ifdef _DEBUGvoid CMyView:AssertValid() constCFormView:AssertValid();void CMyView:Dump(CDumpContext& dc) constCFormView:Dump(dc);CMyDoc* CMyView:GetDocument() / non-debug version is inlineASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CMyDoc);return (CMyDoc*)m_pDocument;#endif /_DEBUG/ CMyView message handlersvoid CMyView:OnDraw(CDC* pDC) / TODO: Add your specialized code here and/or call the base classMyPaint();/*void CMyView:initdata()CDC *pDC=GetDC();int i,j;int n=129;for(i=0;i7;i+)for(j=0;j12;j+)mapij.x=100+41*j;mapij.y=100+41*i;mapij.flag=0;mapij.p=0;bmp0.LoadBitmap(234);cbmp0.CreateCompatibleDC(pDC);cbmp0.SelectObject(&bmp0);bmp200.LoadBitmap(IDB_BITMAP200);cbmp200.CreateCompatibleDC(pDC);cbmp200.SelectObject(&bmp200);for(i=1;im_pMainWnd-SetWindowPos(NULL,300,100,690,530,NULL);void CMyView:MyPaint()CDC *pDC=GetDC();int i,j;int x,y,f;mdc.BitBlt(0,0,680,480,&cbg,0,0,SRCCOPY);for(i=0;i7;i+)for(j=0;jBitBlt(0,0,680,480,&mdc,0,0,SRCCOPY);ReleaseDC(pDC);void CMyView:OnExit() / TODO: Add your command handler code hereexit(0);void CMyView:OnBegin() / TODO: Add your command handler code herestart=1;srand(time(NULL);int i,j;int f42;for(i=0;i42;i+)fi=1+rand()%21;for(i=0;i7;i+)for(j=0;j12;j+)if(i*12+j42) mapij.flag=fi*12+j;elsemapij.flag=fi*12+j-42;SetTimer(1,40,NULL);void CMyView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultif(0=start)return;int i=100,j=100;get_ij(point,&i,&j);if(100=i|100=j)return;if(200=mapij.flag|1=mapij.p)return;m_pflag.x=i;m_pflag.y=j;mapij.p=1;if(1=flag)judge();mapm_p0.xm_p0.y.p=0;mapm_p1.xm_p1.y.p=0;flag=(flag+1)%2;CFormView:OnLButtonDown(nFlags, point);void CMyView:get_ij(CPoint p,int *x,int *y)int i,j;for(i=0;i7;i+)for(j=0;j12;j+)if(mapij.x=p.x&p.x=mapij.x+40)&(mapij.y=p.y&p.y=mapij.y+40)*x=i;*y=j;return;void CMyView:judge()if(mapm_p0.xm_p0.y.flag!=mapm_p1.xm_p1.y.flag)return;int i,j,n=0;bool right=false;int f84=0;search(m_p0.x,m_p0.y,&right,f);if(true=right)mapm_p0.xm_p0.y.flag=200;mapm_p1.xm_p1.y.flag=200;for(i=0;i7;i+)for(j=0;j12;j+)if(200=mapij.flag)n+;if(84=n)AfxMessageBox(恭喜你n你胜利啦!n);start=0;void CMyView:search(int i,int j,bool *right,int *p)int n=i*12+j;pn=1;if(i-1=m_p1.x&j=m_p1.y)*right=true;else if(i=m_p1.x&j-1=m_p1.y)*right=true;else if(i=m_p1.x&j+1=m_p1.y)*right=true;else if(i+1=m_p1.x&j=m_p1.y)*right=true;if(0=i-1)&(0=j)&200=mapi-1j.flag&0=p12*(i-1)+j) search(i-1,j,right,p);if(0=i)&(0=j-1)&200=mapij-1.flag&0=p12*i+j-1) search(i,j-1,right,p);if(0=i)&(j+112)&200=mapij+1.flag&0=p12*i+j+1) search(i,j+1,right,p);if(i+17)&(0=j)&200=mapi+1j.flag&0=p12*(i+1)+j) search(i+1,j,right,p);void CMyView:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call defaultswitch(nIDEvent)case 1:MyPaint();break;CFormView:OnTimer(nIDEvent);四、系统调试系统调试截图如下:主界面图:游戏开始的截图:游戏开始的截图2:游戏中的截图:五、结果分析 本程序完成了连连看的基本功能,界面简洁明了,但在实现更多功能上还有待进步,希望在以后的设计中加入计时,关卡和排行榜的设计。六、总结C+课程设计是学习阶段一次很好的理论与实际相结合的机会,通过这次比较完整的一个程序的设计,我认识了单纯的理论知识的学习状态是不行的,实际设计的结合锻炼了我综合运用所学的基础知识,解决实际问题的能力,同时也

温馨提示

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

评论

0/150

提交评论