收藏 分销(赏)

网络扫雷游戏大学本科方案设计书.doc

上传人:精*** 文档编号:2343858 上传时间:2024-05-28 格式:DOC 页数:45 大小:660.50KB 下载积分:14 金币
下载 相关 举报
网络扫雷游戏大学本科方案设计书.doc_第1页
第1页 / 共45页
网络扫雷游戏大学本科方案设计书.doc_第2页
第2页 / 共45页


点击查看更多>>
资源描述
西华大学毕业设计说明书 目录 前言 1 1扫雷游戏概述 2矚慫润厲钐瘗睞枥庑赖。 1.1基本信息 2聞創沟燴鐺險爱氇谴净。 1.2 游戏玩法简介 2残骛楼諍锩瀨濟溆塹籟。 2 系统平台与技术选择 3酽锕极額閉镇桧猪訣锥。 2.1开发语言与工具 3彈贸摄尔霁毙攬砖卤庑。 2.2技术选择 3謀荞抟箧飆鐸怼类蒋薔。 3扫雷游戏需求分析 4厦礴恳蹒骈時盡继價骚。 3.1编写需求分析的目的 4茕桢广鳓鯡选块网羈泪。 3.2功组织结构图 4鹅娅尽損鹌惨歷茏鴛賴。 4扫雷游戏软件总体设计 5籟丛妈羥为贍偾蛏练淨。 4.1主要功能模块划分 5預頌圣鉉儐歲龈讶骅籴。 4.2设计步骤流程 6渗釤呛俨匀谔鱉调硯錦。 5扫雷游戏程序详细设计 8铙誅卧泻噦圣骋贶頂廡。 5.1编写详细设计的目的 8擁締凤袜备訊顎轮烂蔷。 5.2单机版扫雷游戏的实现 8贓熱俣阃歲匱阊邺镓騷。 5.3完成单机版扫雷游戏界面设计 9坛摶乡囂忏蒌鍥铃氈淚。 5.4单机游戏状态转换图 11蜡變黲癟報伥铉锚鈰赘。 5.5网络扫雷的实现 12買鲷鴯譖昙膚遙闫撷凄。 6程序功能完善与优化 17綾镝鯛駕櫬鹕踪韦辚糴。 6.1增加音乐效果 17驅踬髏彦浃绥譎饴憂锦。 6.2保存功能 17猫虿驢绘燈鮒诛髅貺庑。 6.3发送鼠标功能的优化 17锹籁饗迳琐筆襖鸥娅薔。 6.4增加排行榜功能 17構氽頑黉碩饨荠龈话骛。 6.5增加首次点击不会点到雷的功能 18輒峄陽檉簖疖網儂號泶。 6.6增加网络版双方玩家点击计数 18尧侧閆繭絳闕绚勵蜆贅。 6.7增加聊天功能 19识饒鎂錕缢灩筧嚌俨淒。 7网络扫雷游戏功能测试 20凍鈹鋨劳臘锴痫婦胫籴。 8结 论 28恥諤銪灭萦欢煬鞏鹜錦。 总 结 29鯊腎鑰诎褳鉀沩懼統庫。 致 谢 30硕癘鄴颃诌攆檸攜驤蔹。 参 考 文 献 31阌擻輳嬪諫迁择楨秘騖。 附录 32氬嚕躑竄贸恳彈瀘颔澩。 摘 要 本软件是一款具有联机功能的扫雷游戏,并且具有单机游戏功能。联机功能采用C/S模型,通过服务器程序中转消息,完成对游戏消息的传送。程序功能丰富,具有多种难度,且带有保存,排行榜,聊天等功能。釷鹆資贏車贖孙滅獅赘。 程序的设计采用了模块化程序设计的方法,对底层模块和经常被调用的函数,进行封装。使得单机扫雷游戏与网络版的扫雷都可以共用底层的游戏逻辑。且使得在单机版的基础上实现网络功能变得简单。怂阐譜鯪迳導嘯畫長凉。 游戏界面美观,显示的数字和地雷都用贴图实现。 关键词:扫雷游戏;C/S模型;服务器; Abstract This software is a mine sweeper game with online features and functionality with a single game. Online features using C / S model, the game send the the message through the server program . This program has a lot of functions,like a variety of difficulty, and with a save,high scores, chat and other functions. Program was designed with a modular design method, often called the bottom of the module and function of the package. Makes the game stand-alone mine clearance and the network version of the game can share the underlying logic. And makes on the basis of stand-alone networking simple. Game interface is beautiful, showing the number and mine playground with the bitmap.谚辞調担鈧谄动禪泻類。 Key words:miner sweeper ;C/S model;server ; 40 前言 随着计算机与网络的普及,人们生活水平的提高,电脑游戏越来越成为人们生活中不可或缺的一部分,在人们繁忙的工作之余,给人带去欢乐与放松。而一款网络游戏,因为能和真实存在的人一起互动,能和周围的同伴一起游戏,更使得游戏的可玩性大大提高,使得人们更能的投入到游戏中去。嘰觐詿缧铴嗫偽純铪锩。 随着电脑游戏产业的规模越来越大,开发一款成功的电脑游戏靠个人之力已非易事。不过,随着市场上开发的游戏产品越来越丰富,各种题材的游戏越来越多,创意已成为一款成功游戏的最重要的特点。例如目前流行的游戏<<植物大战僵尸>>,<<愤怒的小鸟>>,虽然都是一些很小的休闲游戏,但是因其特有的风格,使得它们都大获好评。熒绐譏钲鏌觶鷹緇機库。 扫雷游戏是Windows操作系统自带的一款小游戏,在过去的几年里,Windows操作系统历经数次换代更新,变得越来越庞大、复杂,功能也越来越强大,但是这款小游戏依然是该系统装机必备的软件,可见这款小游戏受到越来越多人的喜爱。鶼渍螻偉阅劍鲰腎邏蘞。 我的毕业设计题目为2D单机版/网络版扫雷。单机版扫雷作为一款windows平台上最为普及的游戏,玩过的人不计其数,对大部分人来说,扫雷游戏不再具有吸引力。可是扫雷网络版,却是一款全新的游戏。由于其网络功能实现,为扫雷增添了新的趣味,再次丰富了游戏的可玩性。由于设计任务书中的对程序设计的具体要求较少,于是,我就有了很多可以自由发挥的空间,如对网络扫雷游戏玩法的设定,对网络模块的设计等,都是秉着实用与简单的原则进行设计的。纣忧蔣氳頑莶驅藥悯骛。 程序的编写按照的要求,分为两大模块,单机版与网络版。而其中的单机版,参考windows xp上的扫雷版本,基本实现了该版本扫雷游戏所具有的功能。而网络版的扫雷,使用tcp/ip协议,采用c/s模型架构,能够实现两人一起玩同一局扫雷游戏,且服务器支持多人在线功能。颖刍莖蛺饽亿顿裊赔泷。 1扫雷游戏概述 1.1基本信息 扫雷游戏英文名称为mine sweeper,属于益智类游戏。通过鼠标即可操作游戏。游戏特点为操作简单,易于上手。濫驂膽閉驟羥闈詔寢賻。 1.2 游戏玩法简介  在游戏菜单上,单击开局。通过鼠标单击即可挖开方块。如果挖开的是地雷,则输掉游戏。如果方块上出现数字,则表示在其周围的八个方块中共有多少颗地雷。 由玩家逐个翻开方块,以找出所有地雷为最终游戏目标。如果玩家翻开所有非地雷的方块,则游戏通关。且根据游戏计时,判定玩家是否打破了在当前难度下的最短记录,如果是新纪录,则提示玩家输入姓名,进入游戏高分榜。銚銻縵哜鳗鸿锓謎諏涼。  地雷的位置初始时随机生成。可以给确定是雷的格子通过右键进行标记。如果无法判定某方块是否有雷,请用右键单击两次给它标记一个问号 (?)。之后,可以用鼠标右键单击方块一次将该方块标记为地雷或者或用鼠标右键单击方块两次去掉标记。挤貼綬电麥结鈺贖哓类。 游戏除了有中级高级初级难度之外,还允许用户自定义游戏难度。即设定格子的高度,宽度,及雷的数量。 网络扫雷游戏的玩法与单机游戏相同,且可以两个人玩在不同的主机上一起玩同一盘扫雷游戏。 2 系统平台与技术选择 2.1开发语言与工具 程序使用c#语言,开发平台为vs2008。c#语言因其强大的类库与能够十分简便的使用图形界面而著称,可以快速的开发一款桌面应用软件。而且其具有强大的面向对象编程的能力,使得程序功能模块的划分与实现更为容易。赔荊紳谘侖驟辽輩袜錈。 Visual Studio 2008 包括各种增强功能,例如可视化设计器(使用 。NET Framework 3。5 加速开发)、以及能够加速开发和处理所有类型数据的语言增强功能。塤礙籟馐决穩賽釙冊庫。 2.2技术选择 程序的开发使发如题目的要求,分为两大模块,单机版与网络版。 单机版主要参考已有的windows xp上的扫雷版本,根据所需实现的功能,利用c#中的事件处理机制,实现相应各种游戏逻辑。裊樣祕廬廂颤谚鍘羋蔺。 网络版的扫雷,使用tcp/ip协议,c/s模型架构。之所以采用此种模式,是因为相较于UDP而言,我更为熟悉tcp。虽然使用c/s模型还要写相应的服务器程序,但是也因为有了服务器,能够为网络版扫雷很容易的实现一些其它功能,如多人同时聊天,知道对方的游戏状态等。仓嫗盤紲嘱珑詁鍬齊驁。 程序使用到了多线程技术。因此服务器支持多位玩家同时连接到服务器。服务器为每一位玩家打开一个阻塞socket,在一个单独的线程中,接受客户端传来的消息。绽萬璉轆娛閬蛏鬮绾瀧。 消息的传送与处理采用命令头加信息内容的方式。即根据发出命令的类别不同,使用独一的字符串的表示,添加在所要发送消息的前面。然后接受消息时,先分离命令头与内容,根据命令头,采用不同的函数去处理内容。骁顾燁鶚巯瀆蕪領鲡赙。 3扫雷游戏需求分析 3.1编写需求分析的目的 需求分析的主要任务即详细的找出程序所需要的各种功能实现。本程序为扫雷游戏的实现,首先是要实现扫雷游戏的基本功能,根据扫雷游戏的玩法,设计程序,实现程序功能。然后,将其添加为可以联机的网络版扫雷游戏。瑣钋濺暧惲锟缟馭篩凉。 3.2功组织结构图 根据任务书的要求,做出如下需求分析,如图3-1所示: 图3-1功能需求组织结构图 4扫雷游戏软件总体设计 4.1主要功能模块划分 整个程序的架构都由模块化结构,分层结构的思想设计完成。 从设计上主要分为两大模块 1.底层逻辑模块:底层主要由两大模块构成,也是程序底层逻辑所需要的主 要功能。 a) 游戏逻辑模块:完成扫雷游戏时的各种逻辑 b) 通信模块 :完成客户端与服务器之间数据的收发 2.界程序设计的实现面功能模块:界面模块属于上层模块,调用底层模块提供的各种借口,完成游戏游戏功能的实现。并且提供丰富的人机交互界面,方便用户操作 鎦诗涇艳损楼紲鯗餳類。 程序主要功能组织结构图如图4-1 单机/网络扫雷游戏 底层逻辑模块 界面功能模块 游戏逻辑模块 通信模块 人机交互界面 使用底层逻辑模块完成功能 图4-1 程序各模块组织结构图 游戏逻辑模块功能细分的组织结构图如图4-2所示: 游戏逻辑模块 设置游戏基本属性 处理游戏数据 游戏的逻辑设定 游戏的胜负判断 鼠标扫雷逻辑实现 随机生成地雷地图 游戏的保存与读取 游戏状态的设定 雷数,扫雷地图格子长度,宽度等 栉缏歐锄棗鈕种鵑瑶锬。 图4-2 游戏逻辑模块的组织结构图 4.2设计步骤流程 程序设计的流程主要为先实现单机扫雷,然后为单机扫雷添加上网络模块。然后再利用同样的网络模块开发出服务器端程序,提供信息的中转服务。辔烨棟剛殓攬瑤丽阄应。 单机扫雷的系统流程图如图4-3 所示 图4-3 单机扫雷系统流程图 网络扫雷的系统流程图如图4-4 所示 图4-4网络扫雷系统流程图 最终,在实现了网络与单机游戏的基础之上,在为程序添加上一些其它功能。如排行榜功能,保存功能等。并且对程序的部分地方予以优化。峴扬斕滾澗辐滠兴渙藺。 5扫雷游戏程序详细设计 5.1编写详细设计的目的 清楚的说明各个模块是如何实现的,各个模块的主要功能,设计程序时的思路等内容。 5.2单机版扫雷游戏的实现 5.2.1完成扫雷游戏底层逻辑的设计 1.设计实现:在程序中,使用一个SweepGame类完成所有底层的游戏逻辑功能。 2.扫雷的底层表现形式:使用二维数组存储当前游戏状态。2D扫雷游戏,抽象的说来,游戏的实质即是在二维空间,不同的点之间所具有的不同状态,例如该格子是雷,可以用数字-1表示,该格子周围一个雷也没有,可以用0表示,。使用二维数组能够完全表示所有地雷地图的数据。并且,再利用另一个二维数组,用以表示当前点是否已被用户点击。詩叁撻訥烬忧毀厉鋨骜。 3.游戏基本属性:地雷数组宽度,高度,地雷数量,游戏难度。 4.游戏状态 :游戏失败,游戏通关,游戏进行中 5.SweepGame类主要功能:初始化游戏状态:生成随机的地雷数组,根据生成的地雷位置,将其余并非地雷的位置填上数字,数字代表该格子周围八个格子里,有几个地雷。。则鯤愜韋瘓賈晖园栋泷。 设置游戏等级:游戏等级分为四等:初级,中级,高级和自定义。其中,其三者都由默认设置设置游戏属性。通过游戏等级的设置,间接设置游戏的基本属性。胀鏝彈奥秘孫戶孪钇賻。 扫雷逻辑实现:即当用户点击鼠标,通过界面传入到SweepGame时,是作为SweepGame二维数组中的一个下标。通过该下标所指示的地雷二维数组,判断用户是否踩到雷了,或者是数字。然后,在进行下一步判断。鳃躋峽祷紉诵帮废掃減。 5.2.2扫雷游戏状态分类 当玩家扫雷时,即用鼠标左键点击一个格子时,有以下几种状态: 踩到雷:游戏失败,结束游戏并且在界面中显示所有的雷。 点到的是数字:显示数字,游戏继续。 若玩家点到的格子周围一颗雷也没有时:就采用递归算法,继续向周围扩展。 当玩家点开所有的非雷的格子:提示游戏通过,并且结束游戏。 扫雷底层逻辑关键函数分析: public bool checkMines(int col, int row){} checkMine(int ,int) 函数的主要功能即是对传入的格子的坐标,判断当前格子是什么,然后根据此,判断下一步游戏该如何进行。 稟虛嬪赈维哜妝扩踴粜。 private void serch(int col,int row){} Serch(int col,int row) 该函数由checkMines函数调用,用于根据该格子所显示的数字,实现游戏逻辑,该函数的实现使用了递归调用。如果数字非0,则直接显示。否则,就要向该格子的周围八个格子进行递归,继续查找下去。并且,当翻开所有非雷格子后,更改游戏状态为游戏通关。陽簍埡鲑罷規呜旧岿錟。 SweepGame类的功能如图5-1所示: 图5-1 SweepGame类主要功能 5.3完成单机版扫雷游戏界面设计 5.3.1界面功能实现 1模仿windows xp版本的扫雷界面,添加界面元素: a)计时窗口 b) 当前地雷剩余数窗口 c) 扫雷面板 d) 菜单栏 2.实现方式 计时窗口与当前地雷剩余数窗口用PictureBox控件实现。 用一个SpiltContainer控件划分两个Panel,分别添加扫雷面板和计时、地雷数窗口。并且添加菜单控件。沩氣嘮戇苌鑿鑿槠谔應。 3.功能的实现 a)菜单功能 开局:根据当前游戏难度直接开始一盘新游戏 初级,中级,高级游戏设定:根据选项设定游戏难度后开始新游戏。 自定义难度:首先弹出游戏设置对话框,让用户设置扫雷游戏基本属性,然后根据用户设定的属性开始新游戏。 自定义对话框设计如图5-2所示: 图5-2 自定义难度时弹出的对话框 b)扫雷面板功能 功能描述:使扫雷面板接受鼠标事件,并根据不同的键,定义不同的功能。 鼠标左键定义:打开该鼠标坐标所在的格子,并以此点开始执行扫雷逻辑。 鼠标右键定义:点击一次时完成地雷的标记,点击两次对此点进行疑问标记。点击三次消除标记。 5.3.2寻找素材,完成贴图 游戏中需要用到很多贴图,如下所示:地雷,雷爆炸,问号,0~8大小数字图片等。从网络上收索合适图片,使用PhotoShop对其进行裁剪,变换大小等操作。钡嵐縣緱虜荣产涛團蔺。 5.3.3游戏界面与游戏底层逻辑之间的对应关系 根据格子的不同状态,显示不同的图片 1.未点击的格子---为一张蓝色带有立体感的纯色图片。 2.点击之后,非地雷的格子,显示其周围地雷的数量--直接有数字对应相应的数字图片,若果数字为0,则显示比未点击格子浅色的图片懨俠劑鈍触乐鹇烬觶騮。 3.地雷--对应地雷图片 4.点击地雷--对应地雷爆炸的图片。 5.3.4游戏界面展示 最终生成的中级难度的游戏界面如图5-3所示: 图5-3 中级游戏难度 5.4单机游戏状态转换图 单机扫雷游戏的状态转换图如图5-4 所示,描述了根据不同的事件,游戏的状态的转换: 开始新游戏 左右键 鼠标事件 等待事件 调用扫雷逻辑,进行下一步判断 点到雷 游戏失败 点开一片数字, 继续判断 点完数字 游戏胜利 地图标记 菜单事件 重设游戏 Le R Ye Ne Ye Ne 謾饱兗争詣繚鮐癞别瀘。 图5-4单机扫雷状态转换图 5.5网络扫雷的实现 5.5.1完成扫雷客户端通信模块实现 1.C#提供的TcpClient类的使用 该类为 TCP 网络服务提供客户端连接,它提供了一些简单的方法,用于在同步阻止模式下通过网络来连接、发送和接收流数据。呙铉們欤谦鸪饺竞荡赚。 tcpClient.Connect(ipAd, port);//连接服务器的代码 tcpClient..Send(data);//向服务器发送数据 2.通信模块 a)设计实现:在程序中添加类Client,用它来完成与服务器的所有通信操作,如发送数据,接受数据等操作。莹谐龌蕲賞组靄绉嚴减。 b)传送数据分类及数据处理:考虑到游戏中,玩家之间要传送数据的类型有很多,于是增加数据类NetCommand,其中封装着所有需要传送的文件类型的文件头。例如鼠标左键,用public const string LEFT_BUTTONDOWN ,在发送数据的时候,在数据文件之前先把这个文件头传送过去,然后接收端或者是服务器根据文件头的内容,按照不同的方式处理数据。麸肃鹏镟轿騍镣缚縟糶。 NetCommand类:使用NetCommand封装了所有的命令头。 部分命令如下所示: public const string PRIVCE_CHAT = "privcchat";//私聊 public const string INVITE_JOIN = "invitejoin";//邀请游戏納畴鳗吶鄖禎銣腻鰲锬。 public const string AGREE_JOIN = "agreejoin";//同意加入游戏風撵鲔貓铁频钙蓟纠庙。 public const string NO_AGREE_JOIN = "noagreejoin"; public const string MOUSE_POS = "mousepos";//鼠标位置 public const string LEFT_BUTTONDOWN = "leftbuttondown";//鼠标左键灭嗳骇諗鋅猎輛觏馊藹。 c)传送的消息的内容:根据所传递消息类型的不同,传送的内容也发生相应的变化。 鼠标消息内容:1.左右键2.鼠标的坐标 聊天消息内容:1.是否为私聊2.聊天的文本消息 地雷数据消息:地雷的分布 d)传送消息的目的:任何消息首先都是传给服务器,由服务器将消息处理之后,取得消息最后该发往那个服务器。所以,目的游戏客户端的地址也作为消息内容的一部分传送。铹鸝饷飾镡閌赀诨癱骝。 e)所需功能的分析:游戏客户端能够把联机游戏时所需要的各种内容都首先发送给服务器,服务器在转发信息给其它客户端。即通信模块又分为两大功能。发送与接收。攙閿频嵘陣澇諗谴隴泸。 游戏客户端之间的通信由图5-5所示: 收到并处理信息 服务器解析并将消息 发给正确的客户 GameClientA GameServer GameClientB 向ClientB发送消息 将消息传给服务器 将消息传ClientB 图5-5通信过程 趕輾雏纨颗锊讨跃满賺。 f)发送功能的实现 通过底层函数: private int sendVarData(Socket s,byte[] data),函数功能为使用Socket s,向服务器附送数据,并且具有发送数据时,同时将数据的长度给发出去的功能。其实现原理为封装了c#的socket类的send函数的使用。夹覡闾辁駁档驀迁锬減。 中间层函数: public void sendData(string command,string msg)函数,其目的为供其他函数传入相应的命令头和数据,然后其将命令与数据组合之后,再调用sendVarData将数据直接发送给服务器。视絀镘鸸鲚鐘脑钧欖粝。 最上层函数:上层函数根据消息类型的不同,分别建立不同的函数。例如传递鼠标消息到服务器的函数public void sendMousePosToParter(int xPos, int yPos){},参数为传入客户端鼠标坐标,然后将它封装成数据,调用sendData函数,将其传给服务器。偽澀锟攢鴛擋緬铹鈞錠。 h)处理传递过来的消息的实现: 底层函数:程序使用函数 void receiveData()接受数据,然后,将数据分离为命令与内容。再通过switch-case语句, 选择不同的分支完成对命令的处理。緦徑铫膾龋轿级镗挢廟。 高层处理函数:处理命令的函数都以hand开头,例如handMousePos与handMousePosChange一起,处理对方发送过来的鼠标消息,然后更改自己窗体中,代表对方鼠标的位置。騅憑钶銘侥张礫阵轸蔼。 5.5.2服务器的实现 1. 服务器的主要功能及实现 a)显示当前连接的玩家列表 实现方式:对每一个与服务器连接的客户端,记录其ip地址与端口,然后通过一个ListBox控件显示。当用户断开连接时,则清楚ListBox中该用户的信息。疠骐錾农剎貯狱颢幗騮。 b)转发玩家之间发送的信息 此功能的实现的过程如下: 首先,得到客户端传过来的信息,然后将其分解成命令与内容。并根据命令头,选择相应处理程序。(此过程与客户端接收命令以后的过程相同,但不同之处在于,服务器是利用多线程,对每个客户端都有一个单独的serviceClient,接收并处理命令)镞锊过润启婭澗骆讕瀘。 在startListener中接收客户端的连接,并新建线程,建立对这个客户端socket的监听。 开启一个监听工作线程的代码如下:榿贰轲誊壟该槛鲻垲赛。 ThreadStart tStart = new ThreadStart(serviceClient);邁茑赚陉宾呗擷鹪讼凑。 通过serviceClient里的阻塞套接字,等待客户端发送过来的信息。并且交给消息处理函数处理。 在消息处理函数的实现原理与客户端的一样,实现方式为由serverClient根据聊天命令头进行调用,知道以后发送过来消息必然是聊天信息,通过handChat函数,从clientSocket中将聊天信息读出,然后,在根据客户端链表,将信息发送给其他用户。嵝硖贪塒廩袞悯倉華糲。 c)发送服务器消息,客户端之间的状态信息 服务器消息即为从服务器向所有用户转发的信息,实现方式为为所有的用户建立一张链表,然后,遍历所有的客户,将信息发送给他们。该栎谖碼戆沖巋鳧薩锭。 public void sendSysMsg(string msg){} 服务器要想向客户端发送很多状态信息,如有新客户端加入,两个客户端一起进入游戏等。 5.5.2开始联机游戏时的状态转换图 网络扫雷游戏时进行联机游戏的状态转换图如图5-6所示: 玩家A 玩家B 连接服务器 邀请对方 服务器 开启服务 转发信息 连接服务器 同意邀请 收到邀请 创建游戏 发送游戏 数据 等待数据 收到数据 开始游戏数据 创建游戏数据 服务器 连接 连接 邀请信息 邀请信息 同意信息 游戏数据 同意反馈 游戏数据 开始游戏数据 游戏状态信息 游戏状态信息 等待 等待 劇妆诨貰攖苹埘呂仑庙。 图5-6 玩家A 邀请 玩家B 进行联机游戏的状态转换图 说明:由于双方玩的是同一盘游戏,为保证双方的数据相同,由游戏的邀请方生成地雷的信息,然后将该信息通过服务器传给被邀请方。双方游戏时,通过对鼠标事件的处理,将本方的信息不断的传给对方。臠龍讹驄桠业變墊罗蘄。 6程序功能完善与优化 6.1增加音乐效果 1.目的:通过音乐的添加,使得游戏的效果得到增强。 2.实现方式:通过c#提供的SoundPlayer,添加并播放音乐。添加了三个音乐效果,点击时的音效,地雷爆炸音效及游戏通过时的音乐。鰻順褛悦漚縫冁屜鸭骞。 6.2保存功能 1功能描述:在单机模式下,允许用户在退出时保存当前游戏,当用户下次进 行游戏时,提示用户可以继续上次保存的游戏。穑釓虚绺滟鳗絲懷紓泺。 2实现方法:把当前的游戏信息,如游戏的雷数,高度,宽度,地雷数组和当前的访问数组一起写入一个文本文件,然后当继续游戏时,从文本文件中读取数据并赋值给游戏的状态变量。实现原理为c#语言中提供的访问文本文件的类。隶誆荧鉴獫纲鴣攣駘賽。 6.3发送鼠标功能的优化 1.功能描述:当双方进行联机游戏时,要将本机的鼠标信息发送给对方,以更新对方客户端上的信息。但是,由于鼠标的移动,会产生大量的消息。而这些消息,对于扫雷并非都是需要的。因为,大量鼠标的移动,也许都没有移动出一个扫雷的小格子。浹繢腻叢着駕骠構砀湊。 2.优化方式:设置两个变量表示鼠标旧的坐标,当前坐标与旧坐标的距离大于某个值时,此时更新旧值,同时发送鼠标值。鈀燭罚櫝箋礱颼畢韫粝。 6.4增加排行榜功能 1.功能描述:记录初级,中级,高级难度中的最短时间作为排行榜。当用户当前游戏通过后时间比记录的时间短,则告知用户,让用户输入自己的姓名,并且记录在排行榜上。惬執缉蘿绅颀阳灣熗鍵。 2.实现方式:将排行榜信息记录在一个文本文件中,每次开始游戏的时候,就将文本文件的信息读取出来。并且,网络版扫雷的排行榜文本文件保存在服务器上,当游戏客户端进行联机游戏之时,由服务器读取文件并且传给用户。当用户修改了这些信息时,还要讲信息发送给服务器。让服务器更新排行榜。如图6-1所示:贞廈给鏌綞牵鎮獵鎦龐。 图6-1 单机版扫雷排行榜 6.5增加首次点击不会点到雷的功能 1.功能描述:即当用户第一次点击时,如果点到的是一个雷,则此时,程序会自动调整地雷的位置,然后,根据此重新生成相应的游戏地图。在网络版游戏中也实现了此功能。嚌鲭级厨胀鑲铟礦毁蕲。 2.实现方式:记录是否是首次点击标志,如是,则自动将雷向右移动至一个不是雷的位置。 6.6增加网络版双方玩家点击计数 1.功能描述:即当玩家点击游戏的格子的时候,当点击的是一个没有被点开的格子时,算作有效点击一次,并在相应的控件上显示薊镔竖牍熒浹醬籬铃騫。 2.实现方式:在制作的聊天控件上,新创建两个Label控件,并且,当有鼠标左键按键和接受到连接方发送的鼠标左键信息时,将Label控件上的数字增加。齡践砚语蜗铸转絹攤濼。 6.7增加聊天功能 功能描述:在用户连接服务器时起,就有群聊与私聊这两个功能。当用户进行联机游戏时,双方自动变为私聊。 联机时聊天窗口如图6-2所示: 图6-2 联机聊天时窗口界面 说明:发送按钮左边的即为消息发送框,将消息写入,然后发送,与自己联机的玩家就会受到该信息,并且在发送按钮上面的文本框中显示。绅薮疮颧訝标販繯轅赛。 7网络扫雷游戏功能测试 1 通过菜单选项进入网络版扫雷游戏,如图7-1 所示 图7-1 游戏开始界面 选择两人游戏选项,开始进入网络版扫雷游戏界面,如图7-2所示: 图7-2 填写游戏服务器的地址 2.打开服务器 此时,开启服务器,服务器界面及功能如图7-3所示所示: 图7-3 开启服务器之后等待客户端连接 当有两位玩家进入游戏时,服务器显示信息如图7-4所示: 图 7-4 有两位客户连接服务器 服务器功能说明:服务器支持多客户端的连接,当有客户端连接,或者退出时,消息栏里将显示客户端的状态。可以在文本框中输入信息,点击发送按钮,将所有的信息发送给所有连接的用户。饪箩狞屬诺釙诬苧径凛。 当客户端连接到服务器时,客户端显示的状态如图7-5所示: 图7-5 当客户连接至服务器时收到的服务器信息 3.聊天功能测试 聊天有群聊与私聊的功能。 私聊:通过点击私聊按钮,然后将文本框中的信息发送给当前选则用户,其他用户则收不到此消息。 群聊:即发送的消息所有的人都能接收到。 聊天功能的私聊与群聊功能测试如图7-6所示: 图7-6 聊天功能测试 4.邀请游戏功能测试 步骤为:首先用鼠标选中对方,然后点击邀请,此时,客户端会发送消息至所选的客户端。对方会受到对话框提示,问是否加入游戏。如图7-7所示:烴毙潜籬賢擔視蠶贲粵。 图7-7 收到对方邀请信息 当同意对方邀请时,则双方同时进入新游戏,新游戏的地雷分布都是一样的,而且,双方的鼠标都会在对方的窗口上同步显示为一个小黑箭头。如图7-8所示:鋝岂涛軌跃轮莳講嫗键。 图7-8 双方一起玩扫雷游戏的界面 当其他游戏客户端连接到服务器时,状态栏会显示当前玩家正处于联机游戏中,并且不能邀请其进行游戏。如图7-9所示:撷伪氢鱧轍幂聹諛詼庞。 图7-9 不能邀请已进入游戏的玩家 5.测试游戏难度调整 设置为初级游戏难度如图7-10 所示: 图7-10 初级游戏难度 自定义游戏难度时,弹出设置难度的对话框,如图7-11所示: 图7-11 自定义游戏对话框 设定游戏之后游戏显示如图7-12所示 图7-12 自己设定的游戏难度 8结 论 经过将近三个月的时间,基本完成了本次的毕业设计----2D单机/网络扫雷游戏。本程序已经过我与同学的多次测试,在不同的PC上通过网络功能可以成功进行游戏,并且在带宽充足的局域网内,游戏能够运行的很流畅。踪飯梦掺钓貞绫賁发蘄。 虽然在程序网络模块设计的时候,有很多其它能够使得程序联网功能更好,更快的技术,但由于本人自身开发经验的欠缺,所以选择了最熟悉的C/S模型,服务器利用多线程与阻塞套接字的技术。但服务器在少量客户端连接的情况下,效率仍能够满足需要。婭鑠机职銦夾簣軒蚀骞。 在本系统的开发中,由于本人是初次开发软件,在知识、经验方面都存在着不中间。另外,在整个开发的过程中,时间比较仓促。因此,该系统必然会存在一些缺陷和不足。譽諶掺铒锭试监鄺儕泻。 总结 毕业设计作为我大学四年学习的一个检验,无论在量上还是质上都是以前所做的课程设计所不能比拟的。为了圆满的完成它,我也为此付出了大量的时间。去图书馆借书,查资料,请教老师等。出拿到任务书时,还对任务似懂非懂,但是经过一段时间的学习与知识储备,毕业设计的开发方案也渐渐在心中浮现。俦聹执償閏号燴鈿膽賾。 首先是选择开发语言,c#虽然是自学的,但是由于其强大的GUI库与编译VS2008,所以我也就毫不犹豫的选择了它。然后,一点一点,一个模块一个模块的去完成,完善程序。从底层开始写起,从字符界面的扫雷游戏开始做起,完成了游戏底层。接着,开发了一个单机版的游戏模型,图形界面,鼠标事件。当时,心中满是喜悦与激动。因为,离最后的完成,我已迈出了一大步。接着便是网络模块的添加了,由于对widows网络编程的不熟悉,所以,专门的去熟悉socket的使用,为此,还照着书上的例子写了一个聊天程序。而这个聊天程序,也直接成了我的C/S模型的原型。在技术上已经没有任何问题之后,我的开发也走上了正轨,每天写一点,添加一些新的功能,就像修房子一样,最终,一个颇具规模的,具有完善功能的网络扫雷就给我实现了。那时,心中的成就感让我感觉到很快乐。缜電怅淺靓蠐浅錒鵬凜。 写程序,并且把程序写好,并不是一件容易的事情,需要耐心,遇到问题更需要不放弃的毅力,恒心,和信心。还有,要多喝老师与同学交流,听取别人的意见,是战胜困难的一条捷径。骥擯帜褸饜兗椏長绛粤。 但是通过艰辛的努力,所收获到的,不仅是一个程序的完成,而是通过自己努力战胜困难的喜悦,通过写大量程序对自己技术的又一次促进,对程序设计又有更多的理解与感悟。也为以后,程序员的生涯做好了准备。癱噴导閽骋艳捣靨骢鍵。 致 谢 不久的六月,就将离开校园了。看这自己一行一行写出来的代码,十分欣慰。通过四年的努力,使得自己已拥有一定的编程水平了,所以面对毕业设计的这个题目时,也没有多分的担忧。虽然面对着很多的问题,但是因为周围丰富的可以利用的资源,很多问题也就一个个被攻克了。鑣鸽夺圆鯢齙慫餞離龐。 在此,感谢指导老师xxx,在我有问题的时候,能够为我解答。也感谢专业里帮助了我的的同学,不仅解答了我的一些问题,而且扩宽了我的思路。最后,感谢西华大学,为我提供了一个良好的学习平台,为我的专业知识打下了坚固的基础。榄阈团皱鹏緦寿驏頦蕴。 参 考 文 献 [1] C#2.0完全自学手册/张立等编著 北京:机械工业出版社,2007 [2] C#程序设计语言/(美) Anders Hejlsberg等著 顾雁宏,徐旭铭译 北京:机 械工业出版社逊输吴贝义鲽國鳩犹騸。 [3] C#网络编程技术教程 金华, 华进编著 人民邮电出版社 2009 [4] C# .NET课程设计指导/主编龚自霞, 高群 北京:北京大学出版社,2008.01 [5]C# 3.0从基础到项目实战/李海涛等编著 北京:化学工业出版社,2010 [6]C#与.NET 3.5高级程序设计/(美) Andrew Troelsen著 朱晔 ... [等] 译 幘觇匮骇儺红卤齡镰瀉。 [7]C#基础与实例教程 郝春强编著 中国电力出版社 2005.08 [8]C# .NET课程设计指导 主编龚自霞, 高群 北京大学出版社 2008.01 [9]C#快速入门 B-power工作室编著 中国铁道出版社 2001.08 [10]C#网络程序设计 B-power工作室编著 中国铁道出版社 2001 附录 部分核心函数的代码: 1游戏逻辑类的核心函数 SweepGame类作用:完成游戏底层逻辑的设定与处理,如用二维数组表现游戏,判定游戏胜负状态。其部分核心函数将在下面介绍。誦终决懷区馱倆侧澩赜。 serch,作用是当点到的是一个周围没有雷的格子时,将向周围递归继续点开格子。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 大学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服