《扫雷游戏》程序设计报告院系中兴电信学院专业计算机科学与技术班级7B1431小组成员强建敏张伟田志杰赵立一、开发环境Intel®Pentium®2及以上的处理器,32M以上内存,20M以上硬盘空间。Microsoft®WindowsTM22000或XP以上操作系统。800×600或以上的屏幕分辨率microsoftvisualstudio2010二、系统功能游戏共由两个类组成主界面对话框类:主要负责主界面、菜单及各个窗口类对象的创建和调用等处理。扫雷窗口类:主要负责接收玩家鼠标输入的打开格子位置、格子变换、花费时间及地雷格子的显示等处理。三、系统设计1、扫雷格子模块功能设计地雷格子的处理是扫雷游戏的核心内容,包括如下几个部分。(1)地雷铺设模块。游戏中的地雷个数可以根据玩家设定。地雷分布是调用随机数发生函数生成随机数。利用随机数去除最大行数或者最大列数,得到放置地雷行列坐标。然后分别防止地雷到不同的行和列的格子中去。(2)自动打开周围不是地雷的格子。在游戏中,当玩家单击的格子周围没有地雷格子时,就需要程序自动地把周围的格子自动打开来提高玩家的效率。以上的实现,由如下代码实现。publicvoidLoadGame(){intx=Convert.ToInt16(cbX.Text);//行坐标inty=Convert.ToInt16(cbY.Text);//纵坐标intmine_count=Convert.ToInt16(cbMinecount.Text);//地雷个数mines=newListMine();mines=CreateMines(x,y,mine_count);//生成随机地雷集合intbtnx=plMines.Location.X+5;intbtny=5;for(inti=0;ix;i++){for(intj=0;jy;j++){Buttonbtn=CreateButton(btnx,btny);btn.Tag=j+,+i;plMines.Controls.Add(btn);btnx+=40;}btnx=plMines.Location.X+5;btny+=40;Application.DoEvents();}}2、玩家输入模块功能设计在扫雷游戏中,用的最多的就是鼠标的输入。而鼠标输入又分为鼠标左键单击和右键单击两种处理类型。1.鼠标左键的处理要实现鼠标左键的处理,需要如下几个步骤。(1)接收玩家在界面上的鼠标左键输入信息。(2)对当前鼠标的坐标进行判断。(3)当在按钮区时,调用控制按钮的处理函数。(4)当在地雷区时,如果当前游戏的状态是等待输入或者正在运行时,就得到当前选中的格子指针;反之,不进行响应。(5)在得到格子指针后,对选中格子的状态进行判断。如果是正常的格子,即未被打开过的格子,就转到格子处理函数;如果不是不是能够的格子,则不进行响应。2.鼠标右键的处理要实现鼠标右键的处理,需要如下几个步骤。(1)接收玩家在界面上的鼠标右键输入信息。(2)对当前鼠标的坐标进行判断。(3)当在地雷区时,如果当前游戏的状态是等待输入或者正在运行时,就得到当前选中的格子指针;反之,不进行响应。(4)根据当前格子的状态进行变化。其变化规则为:如果是正常状态,则变成标记(★)状态;如果是标记状态,则变成未知(?)状态;如果是未知状态,则变成正常状态。voidbtnMine_MouseUp(objectsender,MouseEventArgse){if(e.Button.ToString().ToUpper()==RIGHT){Buttonbtn=(Button)sender;if(btn.Text==){btn.Text=★;btn.BackColor=Color.YellowGreen;}elseif(btn.Text==★){btn.Text=?;btn.BackColor=Color.Salmon;}elseif(btn.Text==?){btn.Text=;btn.BackColor=Color.Transparent;}IsSuccess();}}3、游戏规则模块功能设计游戏规则模块的实现,主要由游戏胜利和游戏结束判断函数组成。通过对游戏的结果进行判断,实现扫雷游戏的规则。(1)游戏胜利的判断通过遍历整个地雷数组,查找是否全部的地雷格子已经被标记或者找出来。如果已经全部被找出来或者标示出来,那么说明玩家胜利。反之,说明玩家未胜利,需要继续游戏。(2)游戏结束的判断当玩家打开一个格子时,就对当前格子进行判断。如果是地雷,说明玩家不幸踩雷。游戏以失败结束。而如果不是地雷,就对玩家选中的格子周围的标示进行判断,如果有判断错误的格子,也说明玩家失败游戏结束。游戏胜利判断代码:publicvoidIsSuccess(){boolSuccess=false;intmcount=0;foreach(ControliteminplMines.Controls){if(itemisButton){if(item.Text==||item.Text==?){Success=false;break;}if(item.Text==★){mcount++;}}}intmine_count=Convert.ToInt16(cbMinecount.Text);//地雷个数if(mcount==mine_count){Success=true;}if(Success){timer1.Enabled=false;DialogResultresult=MessageBox.Show(this,好厉害,你赢了,是否再来一次!,成功,MessageBoxButtons.YesNo,MessageBoxIcon.Asterisk);if(result==DialogResult.Yes){Reload();}}}游戏失败判断代码:publicvoidDoClickMine(Buttoncurbtn){if(curbtn.Text==★)return;if(!timer1.Enabled){timer1.Enabled=true;}intmx=Convert.ToInt16(curbtn.Tag.ToString().Split(',')[0]);intmy=Convert.ToInt16(curbtn.Tag.ToString().Split(',')[1]);Minem=newMine(mx,my);intcountm=GetMinecount(m);if(IsMine(m)){timer1.Enabled=false;//点到炸弹停止计时plMines.Enabled=false;//点到炸弹禁用面板foreach(ControlcinplMines.Controls){if(cisButton){intmxc=Convert.ToInt16(c.Tag.ToString().Split(',')[0]);intmyc=Convert.ToInt16(c.Tag.ToString().Split(',')[1]);Minemc=newMine(mxc,myc);if(IsMine(mc)){c.BackColor=Color.Green;}}}curbtn.Text=countm.ToString()==-1?:countm.ToString();curbtn.BackColor=Color.Red;timer1.Enabled=false;DialogResultresult=MessageBox.Show(this,就这么挂了,敢不敢再来一次!,失败,MessageBoxButtons.YesNo,MessageBoxIcon.Asterisk);if(result==DialogResult.Yes){Reload();}}else{if(countm==0){Removem(m);}else{curbtn.Text=countm.ToString();}IsSuccess();}}四、系统实现1.游戏开始后,玩家慢慢找出地雷,直到有一个地雷格子被不小心踩到,弹出失败提示对话框。如图1所示图1游戏失败状态2.游戏开始后,玩家找到所有地雷提示胜利,如图2所示图2游戏胜利状态五、总结本系统以VisualC++6.0作为前台开发工具,VisualC++6.0以简单、易用等优点成为开发本系统的首选工具。本论文阐述了扫雷游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。扫雷游戏是一款益智类游戏,该游戏与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。从知识获得方面来说,各种已经学习到的c++知识以及各种从网上搜索到的案例,我们小组都是随着设计的不断深入而不断熟悉的。和老师以及同学,组内成员的沟通交流更使我对程序整体的规划与设计有了新的认识。也对自己提出了新的要求。提高是有限的但提高也是全面的。正式这一次设计让我积累了许多实际经验,也必然会让我在未来的工作学习中表现出更高的耐力、理解力、实践力。顺利如期的完成本次课程设计给了我很大的信息。但是我也为我指出很多不足的地方。学习其实就是一个不断完善的过程,正视自己的不足指出。在以后的工作和学习中不断的弥补这些不足之处。在扫雷游戏中有些功能还不够完善,例如在扫雷游戏中不能实现播放背景音乐。希望在以后的工作和学习中不断的充实自己的知识结构,把扫雷游戏的功能进一步完善,使它成为一个更具有实用价值的游戏软件。