邮电学院生产实习报告-连连看.doc_第1页
邮电学院生产实习报告-连连看.doc_第2页
邮电学院生产实习报告-连连看.doc_第3页
邮电学院生产实习报告-连连看.doc_第4页
邮电学院生产实习报告-连连看.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

西安邮电学院计算机学院实习报告西安郵電學院生 产 实 习 报 告 书院(系)名称:计算机学院学生姓名:朱连博专业名称:计算机科学与技术班 级:计科0706实习时间:11年3月7日 至11年3月18日 VC连连看 一、任务目标: 由学校和易思博软件公司组织的这次校内生产实习具有非凡的意义,这是我们学习生涯的最后一站,更重要的是我们学生踏上社会征途的第一站,为我们提供了很好的平台和环境,这次实习的最重要目标就是锻炼学生们的项目开发意识,从项目开发的过程中了解到项目开发所注重的要点和乐趣,更重要的是培养学生们的团队精神,能让学生们了解到自己的任务,努力去完成自己所分配的任务,通过小组成员间的互相帮助共同完成项目的开发。二、实习项目:VC连连看游戏开发三、实习地点: 西安邮电学院南校区一号实验室楼407实验室环境设施:小教室人少安静,学习氛围好,通风好设备条件:PC一人一台四、实习内容:1、 C+测评: 进入实验室认识了我们的项目经理杨帆经理,给我们讲了生产实习每天的流程以及要遵守的纪律等。登录软酷网,每天工作结束时写一篇生产实习报告,记录当天的工作情况的和心得体会,还有每天4次的录指纹签到。最后杨帆经理给我们每人一套C+网络测评,由于久不接触,好多题都熟悉又陌生,最后做完没有及格,才58分。要想继续做好后面的生产实习工作,必须巩固一下C+的基本知识了。2、 MFC学习: 第二天另一位项目经理带我们进行了MFC的学习,先给我们安排了大概一个小时来看我们经理录的视频资料(MFC),有不懂得地方随时可以喊停提问。由于我们大多没有接触过MFC,有些陌生,项目经理给我亲自演示了基本的创建和界面实现等操作,并让我们回去用MFC做一个计算器程序。 一开始有些摸不着门路,但是理清思路以后很快界面成型,并且在小组群策群力下很快便实现了功能而且还继续讨论如何让其更人性化更方便使用,如添加数字和小数点按钮以及平方等功能按钮。大四找完工作以后记不起有多久没有这种开动脑筋、有兴趣、有动力的学习和讨论了,这种感觉真好。短暂的MFC学习不但让我们熟悉适应了MFC编程,还开启了我们学习MFC的兴趣,为后面的生产实习开了一个好头。很大的帮助。3、 VC连连看游戏开发: 实习任务终于分配下来了,我们教室分到了VC连连看,虽然整体做下来应该有难度,但是小组合作的话,有任何困难都能克服的!而且对于游戏我们这群男生都比较有兴趣,很有动力。 由于那天许多同学请假去考试,小组剩下的人不多了,对核心的随机生成地图以及图片的消除不得要领,只能自己先从简单的界面开始做起。界面我们采用了MENU模块,先总分为“游戏”“选项”“帮助”三项,每项点开后有具体的功能。“游戏”包括开始,放弃,退出程序等功能,“选项”包括提示暂停以及查看积分等辅助功能,“帮助”顾名思义,提供帮助文件以及程序说明。如下为截图:以下为开始游戏以及退出游戏功能的代码:void CZLLKView:OnMenuFirst() / TODO: Add your command handler code hereint i,j;int temprand;CString str;CRect rect;/产生随机序列 srand(unsigned)time(NULL);for(i=1;i=ROW_NUMBER;i+)for(j=1;j=LINE_NUMBER;j+) while(1)temprand=rand()%15; / 产生0-14的随机数if(pic_numbertemprand6)pic_numbertemprand+; llk_mapij.state=0; llk_mapij.event=0;llk_mapij.PicIndex=temprand+1; / 1-15 break; /列出每幅图片所有的位置ListPicPlace();/初始化事件InitEvent();g_userscore=0;g_userlevel=1;g_usergate=1;/程序控制bingame=true; bfirst=true;DrawRectangleHollow();m_nUpper=0;DrawProgress(m_nUpper); / 总共400个时间 m_nSpeed=2; SetTimer(1,1200,0); DrawInfo(120,20,剩余时间); DrawInfo(20,20,重列:); DrawInfo(20,40,提示:);DrawInfo(540,20,分数:); DrawInfo2(60,20,m_sortnumber); DrawInfo2(60,40,m_tishinumber); DrawInfo2(560,40,g_userscore);DrawMap(); /音效/if(m_soundeffect)/ PlaySound(MAKEINTRESOURCE(IDR_WAVE_NEWGAME),AfxGetResourceHandle(),SND_RESOURCE|SND_ASYNC);void CZLLKView:DrawMap()/输出图形CDC *pDc;pDc=GetDC();CDC dcMemory;dcMemory.CreateCompatibleDC(pDc); dcMemory.SelectObject(&bitmap1);int i,j;for(i=1;i=ROW_NUMBER;i+)for(j=1; j0)if(llk_mapij.state=0) pDc-BitBlt(tilex(j),tiley(i),PIC_WIDTH,PIC_HEIGHT,&dcMemory,PIC_WIDTH*(llk_mapij.PicIndex-1),0 ,SRCCOPY);void CZLLKView:OnMenuExit() / TODO: Add your command handler code herePostQuitMessage(0);游戏开始后界面中间为随机生成的游戏地图,上方有一个倒计时条,左边是剩余的两种帮助“提示”“重排”的剩余次数,右边是所得分数。请看下图:下面是我们VC连连看程序的游戏地图初始化的代码:BOOL CZLLKView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT csbitmap1.LoadBitmap(IDB_BITMAP_FOREFACE);bitmap2.LoadBitmap(IDB_BITMAP_FACE);return CView:PreCreateWindow(cs);void CZLLKView:InitMap() /初始化地图int i,j;for(i=0;iVIRTUAL_ROW;i+)for(j=0;jVIRTUAL_LINE;j+)llk_mapij.PicIndex=0;llk_mapij.state=0; llk_mapij.event=0;/for(i=0;iFillSolidRect(&rcBlock,RGB(34,139,34);CDC dcMemory1,dcMemory2; dcMemory1.CreateCompatibleDC(pDC); dcMemory1.SelectObject(&bitmap1); dcMemory2.CreateCompatibleDC(pDC); dcMemory2.SelectObject(&bitmap2);/输出图形int i,j;for(i=1;i=ROW_NUMBER;i+)for(j=1; j0)if(llk_mapij.state=0) pDC-BitBlt(tilex(j),tiley(i),PIC_WIDTH,PIC_HEIGHT,&dcMemory1,PIC_WIDTH*(llk_mapij.PicIndex-1),0 ,SRCCOPY);else if(llk_mapij.state=1)pDC-BitBlt(tilex(j),tiley(i), PIC_WIDTH,PIC_HEIGHT,&dcMemory2,PIC_WIDTH*(llk_mapij.PicIndex-1),0 ,SRCCOPY);if(bfirst)DrawRectangleHollow();DrawInfo(120,20,剩余时间);DrawInfo(20,20,重列:);DrawInfo(20,40,提示:);DrawInfo(540,20,分数:);DrawInfo2(60,20,m_sortnumber);DrawInfo2(60,40,m_tishinumber);DrawInfo2(560,40,g_userscore);游戏图片我们选取了我们喜爱的DOTA英雄头像。在头像图片下方有一小块黄色底座,用来实现 伪3D效果,使游戏图片看上去像是一个个按钮,增强游戏性。另外每个头像按钮我们都制作了两套,在另一套的边框加一圈红线,游戏时被点下的图片会被换成有红线的,以表示这张图片被选中,更人性化一些。Resource文件如下图:游戏的核心消除图片功能的实现,我们小组经过好几天的讨论研究,并不断地补充修改,才终于最后实现图片的正确消除。我们最终得出的连接判断算法比项目经理给的“直连”“一个拐点”“两个拐点”三种方式要复杂一些,但是我们觉得程序复杂,考虑到的情况更具体,程序执行起来会更快一些。我们将判断两块图片师父能相连消除分为八种情况,代码如下:bool CZLLKView:CheckConnection(int x1, int y1, int x2, int y2)int i,temp;/分为八种if(x1=x2)/同一行if(IsLineConnection(x1,y1,x2,y2) return true;elsefor(i=1;i=x1;i+)if(IsLinePicEmpty(x1,y1,(x1-i),y1) if(IsNotLineConnection(x1-i),y1,x2,y2)return true;temp=VIRTUAL_ROW-x1;for(i=1;i=temp;i+)if(IsLinePicEmpty(x1,y1,(x1+i),y1) if(IsNotLineConnection(x1+i),y1,x2,y2)return true;if(y1=y2)/同一列if(IsLineConnection(x1,y1,x2,y2) return true;elsefor(i=1;i=y1;i+)if(IsLinePicEmpty(x1,y1,x1,(y1-i) if(IsNotLineConnection(x1,(y1-i),x2,y2)return true;temp=VIRTUAL_LINE-y1;for(i=1;ix1)&(y2y1) /(x2,y2)在(x1,y1)右下方if(IsNotLineConnection(x1,y1,x2,y2)/先判断只有一个折点 * 代表两个点 / *-| return true; / | | / |_*/先往下判断temp=VIRTUAL_ROW-x1; for(i=1;i=temp;i+)if(IsLinePicEmpty(x1,y1,(x1+i),y1)if(IsNotLineConnection(x1+i),y1,x2,y2)return true;/往右判断temp=VIRTUAL_LINE-y1;for(i=1;i=temp;i+)if(IsLinePicEmpty(x1,y1,x1,(y1+i)if(IsNotLineConnection(x1,(y1+i),x2,y2)return true;/往上判断for(i=1;i=x1;i+)if(IsLinePicEmpty(x1,y1,(x1-i),y1)if(IsNotLineConnection(x1-i),y1,x2,y2)return true;/往左判断for(i=1;ix1)&(y2y1) /(x2,y2)在(x1,y1)左下方if(IsNotLineConnection(x1,y1,x2,y2)/先判断只有一个折点 * 代表两个点 / |-* return true; / | | / *_|/先往下判断temp=VIRTUAL_ROW-x1; for(i=1;i=temp;i+)if(IsLinePicEmpty(x1,y1,(x1+i),y1)if(IsNotLineConnection(x1+i),y1,x2,y2)return true;/往左判断temp=y1;for(i=1;i=temp;i+)if(IsLinePicEmpty(x1,y1,x1,(y1-i)if(IsNotLineConnection(x1,(y1-i),x2,y2)return true;/往上判断temp=x1; for(i=1;i=temp;i+)if(IsLinePicEmpty(x1,y1,(x1-i),y1)if(IsNotLineConnection(x1-i),y1,x2,y2)return true;/往右判断temp=VIRTUAL_LINE-y1;for(i=1;i=temp;i+)if(IsLinePicEmpty(x1,y1,x1,(y1+i)if(IsNotLineConnection(x1,(y1+i),x2,y2)return true;if(x2x1)&(y2y1) /(x2,y2)在(x1,y1) 左上方if(IsNotLineConnection(x1,y1,x2,y2)/先判断只有一个折点 * 代表两个点 / *-| return true; / | | / |_*/先往上判断temp=x1; for(i=1;i=temp;i+)if(IsLinePicEmpty(x1,y1,(x1-i),y1)if(IsNotLineConnection(x1-i),y1,x2,y2)return true;/往左判断temp=y1;for(i=1;i=temp;i+)if(IsLinePicEmpty(x1,y1,x1,(y1-i)if(IsNotLineConnection(x1,(y1-i),x2,y2)return true;/先往下判断temp=VIRTUAL_ROW-x1; for(i=1;i=temp;i+)if(IsLinePicEmpty(x1,y1,(x1+i),y1)if(IsNotLineConnection(x1+i),y1,x2,y2)return true;/往右判断temp=VIRTUAL_LINE-y1;for(i=1;i=temp;i+)if(IsLinePicEmpty(x1,y1,x1,(y1+i)if(IsNotLineConnection(x1,(y1+i),x2,y2)return true;if(x2y1) /(x2,y2)在(x1,y1)右上方if(IsNotLineConnection(x1,y1,x2,y2)/先判断只有一个折点 * 代表两个点 / |-* return true; / | | / *_|/先往上判断temp=x1; for(i=1;i=temp;i+)if(IsLinePicEmpty(x1,y1,(x1-i),y1)if(IsNotLineConnection(x1-i),y1,x2,y2)return true;/往右判断temp=VIRTUAL_LINE-y1;for(i=1;i=temp;i+)if(IsLinePicEmpty(x1,y1,x1,(y1+i)if(IsNotLineConnection(x1,(y1+i),x2,y2)return true;/先往下判断temp=VIRTUAL_ROW-x1; for(i=1;i=temp;i+)if(IsLinePicEmpty(x1,y1,(x1+i),y1)if(IsNotLineConnection(x1+i),y1,x2,y2)return true;/往左判断temp=y1;for(i=1;iy1) for(i=1;itemp;i+) if(llk_mapx1y1+i.PicIndex!=0) return false; else for(i=1;ix1) for(i=1;itemp;i+) if(llk_mapx1+iy1.PicIndex!=0) return false; else for(i=1;iy1) for(i=1;i=temp;i+) if(llk_mapx1y1+i.PicIndex!=0) return false; else for(i=1;ix1) for(i=1;i=temp;i+) if(llk_mapx1+iy1.PicIndex!=0) return false; else for(i=1;i=temp;i+) if(llk_mapx1-iy1.PicIndex!=0) return false; return true;/ 情况二:经过一个折点相连(+号代表折点)/ 0 0 0 0 0 0 / 0 2 0 0 0 + * - + / 0 + 0 0 0 2 + - */ (两条路都可连通)bool CZLLKView:IsNotLineConnection(int x1, int y1, int x2, int y2)if(IsLinePicEmpty(x1,y1,x1,y2)if(IsLineConnection(x1,y2,x2,y2)return true;if(IsLinePicEmpty(x1

温馨提示

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

评论

0/150

提交评论