基于局域网的扫雷对战游戏的设计与实现
吴 开
(重庆三峡学院数学与计算机科学学院计算机科学与技术专业2005级 重庆万州 404000)
摘要: 本论文研究的是以Java语言和Eclipse工具作为开发平台,设计并开发一款基于局域网的扫雷对战游戏,其功能为在Windows的自带的扫雷游戏基础上,为了提高游戏对玩家点击的响应效率,利用Java强大的网络编程技术将其扩展成为网络对战游戏。
基于局域网的扫雷对战游戏的设计与实现的主要关键点有:随机生成雷区,并即时对雷区进行监听,自动清除未靠进雷区的方块,以及利用网络发送对游戏的控制信息。该系统主要采用Java提供的随机函数生成雷区,利用Java GUI技术对雷区的每个方块添加鼠标点击事件监听,鼠标事件是利用鼠标所发出的信息了解使用者的意图,进而做出相对应的动作。用递归算法来自动清除未靠进雷区的方块。采用P2P模式来实现网络对战,一个服务程序分别实现二个功能:一、网络侦听,接受从网络传送过来的游戏控制信息进行相应的处理。二、网络发送,将本地的游戏控制信息通过网络传送给另一个服务程序。在论文中描述了游戏设计构想、游戏结构、完整的设计过程、所用到的相关技术同时也展示了程序最终编译执行的结果。通过试运行,该系统完成了Windows自带扫雷游戏的基本功能,在扩展的局域网对战中,也能成功传送游戏控制信息。
关键词:扫雷 局域网 设计 网络编程
1 引言
1.1 课题背景及意义
在计算机逐步渗入社会生活各个层面的今天,计算机已经成为人们日常生的一部分,越来越多的人使用计算机办公、娱乐等等。
扫雷游戏是Windows操作系统自带的一款小游戏,在过去的几年里,Windows操作系统历经数次换代更新,变得越来越庞大、复杂,功能也越来越强大,但是这款小游戏依然保持原来的容貌,可见这款小游戏受到越来越多人的喜爱。
通过研究Windows操作系统自带的扫雷游戏,可以发现在这个游戏中主要有以下两个关键的地方:
第一个是初始化问题,包括随机产生本局游戏中雷的总数,雷的分布对于每一个小区域如何获取周围地区分布的雷数等等。
第二就是对鼠标事件的处理问题,既在游戏过程中对鼠标事件应如何做出反应。
本设计利用Eclipse作为开发工具,采用面向对象的方式、使用Java GUI(图形用户界面)进行设计,并将其扩展成为基于网络的"扫雷游戏"。
经过四年的大学学习,我对理论知识已经有了一定的了解与认知,本次的毕业设计便是将书本上所学的理论知识与实际相结合,同时也
是对所学知识的一种检查,希望通过本次的毕业设计使自己在程序的开发和设计上有新的认识并能有所提高。本次毕业设计既锻炼了我们的实际动手能力,又在老师的指导下进行了一次模拟实际产品的开发,对于我们以后工作能力的培养具有重要意义。
1.2 开发工具的选用及介绍
1.2.1 语言
开发本程序可以用VB、C#、C/C++、Java语言。由于我比较熟悉Java语言,所以次设计选用了Java语言和以Eclipse为开发工具。
Java是一种跨平台,适合于分布式计算环境的面向对象编程语言。其主要特点有:
(1) 平台无关性
平台无关性就是指 Java能运行于不同的平台。Java引进虚拟机原理,并运行于虚拟机,实现不同平台的Java接口之间。使用Java编写的程序能在世界范围内共享。Java的数据类型与机器无关,Java虚拟机(Java Virtual Machine)是建立在硬件和操作系统之上,实现 Java代码的解释执行功能,提供于不同平台的接口的。
(2) 安全性
Java的编程类似于C++,学习过C++的读者将很快能掌握Java的精髓。Java舍弃了C++的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针侵入系统。Java对程序提供了安全管理器,防止程序的非法访问。
(3) 面向对象
Java吸取了C++面向对象的概念,将数据封装的简洁性和便于维护性。类的封装性、继承性等有关对象的特性,使程序代码只需一次编译,然后通过上述特性到达反复利用上。Java提供了众多的一般对象的类,通过继承即可使用父类的方法。
Java已有的类的能强大,如输入输出类,进行普通输入输出和文件设计图形界面的常用部件,图形用户界面的设计上给程序员很大的方便。
游戏免费源码分享网站
(4) 简单性
Java舍弃C++的头文件,没有全局变量,这样可节省维护头文件是不符合网络编程的。头文件中有全局变量的定义,这对可维护性和安全性都是不可取的。Java舍弃了C++的多重继承,引进了垃圾管理上绞尽脑汁去设计。
(5) 多线程
多线程是Java的一大特点,能够在程序中实现多任务操作。传统的程序设计语言的程序只能单任务操作,效率非常低,例如程序往往在接收数据输入时被阻塞,只有等到程序获得数据后才能够继续运行。而多线程程序可以创建一个线程来进行输入输出操作,创 建另一个线程在后台进行数据处理,输入输出的线程在接收数据时阻塞,而另一个线程仍然在运行。这样,多线程程序大大提高了运行的效率和处理能力。
1.2.2 开发工具
Java的开发工具很多,而且各有优缺点,常用的开发工具有:
(1) UltraEdit
UltraEdit是共享软件 。最新
版本是V10.20b。它是一个功能强大的文本、HTML、程序源代码编辑器。作为源代码编辑器,它的默认配置可以对C/C , VB, HTML, Java和 Perl进行语法着。用它设计Java程序时,可以对Java的关键词进行识别并着,方便了Java程序设计。它具有完备的复制、粘贴、剪切、查、替换、格式控制等编辑功能。可以在Advanced菜单的Tool Configuration 菜单项配置好Java的编译器Javac和解释器Java,直接编译运行Java程序。
(2) Editplus
EditPlus是共享软件。最新版本是EditPlus 2.12。EditPlus也是功能很全面的文本、HTML、程序源代码编辑器。默认的支持HTML、CSS、PHP、ASP、Perl、C/C 、Java、JavaScript和VBScript的语法着。通过定制语法文件还可以扩展到其他程序语言。可以在Tools菜单的Configure User Tools菜单项配置用户工具,类似于UltraEdit的配置,配置好Java的编译器Javac和解释器Java后,通过EditPlus的菜单可以直接编译执行Java程序。
(3) Jcreator
Jcreator是一个用于Java程序设计的集成开发环境,具有编辑、调试、运行Java程序的功能。。当前最新版本是Jcreator 3.10,它又分为LE和Pro版本。LE版本功能上受到一些限制,是免费版本。Pro版本功能最全,但这个版本是一个共享软件。这个软件比较小巧,对硬件要求不是很高,完全用C 写的,速度
快、效率高。具有语法着、代码自动完成、代码参数提示、工程向导、类向导等功能。第一次启动时提示设置Java JDK主目录及JDK JavaDoc目录,软件自动设置好类路径、编译器及解释器路径,还可以在帮助菜单中使用JDK Help。但目前这个版本对中文支持性不好。
(4) Eclipse
Eclipse是一个开放可扩展的集成开发环境(IDE)。是由IBM所释出。IBM花了4千万美金来开发这个IDE。它不仅可以用于Java的开发,通过开发插件,它可以构建其他的开发工具。Eclipse是开放源代码的项目,并可以免费下载。提供Releases、Stable Builds、Integration Builds和Nightly Builds几种版本。建议使用Releases或Stable Builds版本。
Eclipse是一种通用工具平台--普遍适用的开放式扩展IDE。所谓普遍适用就是它不仅仅可以用来开发Java程序,也可以用来开发C/C++等;所谓开放式扩展就是任何人都可以扩展Eclipse的功能。
Eclipse核心非常小,其他功能都基于此核心写成插件, Eclipse还对这些插件的协同工作提供了良好的支持,不仅安装简单,还可以无缝结合。Eclipse对这些插件是动态载入并动态调用的。所谓动态就是指,Eclipse启动后要真正用到某个插件时,该插件才会被调入内存,当该插件不再被使用时,它就会在适当的时候被清除出内存。因此即使装了一大堆插件在Eclipse
中,也不必担心某些不常用的插件白白消耗内存。
Eclipse与UltraEdit和Editplus两种编辑器和Jcreator IDE比较,Eclipse更专业,功能更强大,
又简洁小巧,可自动补全代码,节省了很多时间,所以本程序选用Eclipse作为Java的开发工具。
2 游戏的总体分析与设计
2.1 游戏介绍
大多数使用Windows操作系统的使用者,对这款游戏都不陌生。这款游戏不止操作简单,规则也不难,再加上游戏速度的控制机制得宜,让整个游戏在操作过程中充满了快乐与紧张的气氛。除了游乐当中能带给使用者快乐之外,游戏的设计内容无形中也不断训练使用者的逻辑思考能力,对于依靠高度脑力工作的现代人,都可以通过这个游戏,不时的检验一下自己,所以,在各种可携带的电子产品上都有这款游戏的踪影。
扫雷游戏的规则:在不掀开任何藏有地雷的方块情况下,以最快的速度出所有的地雷。如果在掀开方块的过程中,不小心翻开(踩到)藏有地雷的方块,则宣告失败(游戏结束),唯有将所有不含地雷的方块掀开,游戏才算成功。
游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示地雷,反复按下右键则方块会以未标示→标示二者关系不
断循环。游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字"3",则表示以其为中心的周边方块内藏有3个地雷。当按下的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。
在网络对战中,玩家可以通过另一玩家通过网络发送过来的游戏控制来查看对方扫雷的情况,营造紧张的气氛。判断胜利的标准是:看谁先扫完,先扫完者胜。
2.2 游戏结构
本设计的类的介绍及使用:
Data:保存鼠标单击事件的内容。
S_ClearMine:接收从SendDataLocallhost传来的数据,开始扫雷。
S_CustomDialog:设置自定义雷区。
S_IsWin:判断游戏是否胜利。
S_LevelInfo:等级信息,分为初级,中级,高级,和自定义四个等级。级别不同,难度也不同。
S_MainFrame:游戏入口,初始化游戏主界面,并为菜单项添加鼠标监听事件,当选择某项菜单后执行相应的操作。
MineButton:每个方块。
S_MineServer:在游戏菜单中选择"网络--二人对战"开始网络对战的时候,启动游戏服务器端,实现网络对战。
S_OtherFrameThread:以多线程方式启动S_OtherFrame。
S_OtherFrame:在网络对战中显示的另一玩家的界面。
S_SetMineButton:设置雷区,创建游戏地图,以及监听鼠标单击事件,调用SendDataLocallhost和 SendDataNet:通过网络把数据传送给客户端。
S_TimeThread:时间线程,控制本局所消耗时间的显示。
本程序的类图如2-1:
2.3 流程规划
流程规划大致上可以分为三个部分,分别为:画面初始、游戏者按下第一个方块和为非地雷方块时展开。
画面初始时,以游戏者最后一次设定的地雷区大小为范围画出地雷区,但此时并未产生地雷。当游戏者按下第一个方块时产生地雷资料并启动定时器,不要让游戏者第一次就踩到地雷,这样在某种程度上可以提高游戏者游玩的气氛。接着就是如何判断按下的方块是非地雷时的处理,这也是整个游戏的技术核心,我们可以通过递归的观念来检查周边的方块是否含有地雷及是否继续往外翻开。
本程序单机版的流程由S_MainFrame类作为游戏的开始,先初始化界面,为菜单项添加鼠标监听。然后构造S_SetMineButton类由createButton方法来设置雷区,并为鼠标单击事件添加监听。当鼠标单击时(当鼠标左键第一次按下时,调用createMine方法生成地图),传送数据给S_ClearMine开始进行扫雷。如果为鼠标右键单击则调用rightClick方法进行处理;如果是鼠标左键单击则调用leftClick方法进行处理。当鼠标左键单击的位置为地雷时,游戏失败,打印整个地图。如果不是地雷,则进行相应的处理。地图中非地雷的位置全部被出来,则游戏胜利。
图2-2为本程序单机版的流程图。
图 2-1 类图
图2-2 流程图
2.4 设计所用技术
实现扫雷游戏用控制台输出也可以玩,但是用控制台玩没有考虑到使用者的感受,游戏可玩性不高。所以要使用图形界面,用友好的界面使游戏更易用、耐玩。
在本程序中,地雷计数器、计时器、雷区、菜单都要用通过界面打印出来,用鼠标选择菜单,点击雷区,需要添加对鼠标单击事件的监听,所以要用到Java GUI技术。
要实现时间显示,程序需要对数据进行并行处理。另起一个线程处理时间的走动,每一秒钟改变一次数据,并显示出来。因此,要使用到Java所提供的多线程技术。
下面分别介绍Java GUI技术和多线程技术。
2.4.1 Java GUI技术
AWT(Abstract Window Tools),抽象窗口工具类
GUI(Graphic User Interface),图形化的用户接口
构造图形界面的步骤:
(1)选择一个容器
(2)设置容器的布局管理器 xxx.setLayout( xxxx )
(3)向容器添加组件 xxx.add( xxx ); 或 xxx.add( xxx1,xxx2 );
(4)事件的监听 xxx.addYyyListerner( ne
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论