俄罗斯方块论文最终版 - 图文(8)

2019-03-28 17:02

辽宁科技大学本科生毕业设计(论文) 第32页

与Frame类似。从界面上来讲主类中包含一个SingleGameCanvas画布类的实例和一个控制面板(SingleControlPanel)的实例。

在这个类中定义一个内部类——Game,它是一个线程类,负责创建一个新的游戏

并对游戏进行初始化、启动游戏块线程等工作。一个Game对象就是一局新游戏。

这里创建游戏线程的方法是实现Runnable接口。实现Runnable接口就必须实现run

方法,run()方法是Game的核心代码,负责实现线程的功能。同前面的方块线程一样,一轮游戏也是一个while循环控制,控制循环的变量是playing。在这个循环中每隔100ms就检查游戏中的当前落下的方块是否已经到底了,如果没有继续等待;如果到底了则看有没有全填满的行,如果有就删除它并为游戏者加分,同时随机产生一个新的当前块,让它按所定级别的速度自动下落。 5.6.6 单机版游戏模块流程图

图5-9所示为单机版游戏模块的流程图。

开始设置难度级别设置方块颜色设置背景颜色设置背景音乐设置窗口风格开始游戏结束

图5-9 单机版游戏流程图

进入单机版游戏后,可以设置游戏难度级别、方块颜色、背景颜色和背景音乐的播放情况。然后即可开始游戏。

5.7 双人对战俄罗斯方块游戏的设计与实现

5.7.1 双人对战版游戏的设计方法

辽宁科技大学本科生毕业设计(论文) 第33页

双人对战版与单机版最大的不同之处在于:游戏的开始首先需要由双方建立网络连接和数据通道,并且添加了通过对对方发送过来的数据分析判断游戏输赢的功能。在传递数据的过程中要考虑到:每个方块运动时每个状态的数据能否传递到对方、对方能否接收到数据、在“对方玩家”状态窗口上能否及时显示等问题。此外,还要在一方游戏结束的时候将游戏结束的信息传递给对方来判断游戏的输赢。为了方便起见,在数据传递中采用对象流来传递游戏数据,即将所有要传递的游戏数据都用一个对象来表示,将游戏的信息定义成一个类。游戏服务器端和客户端都是通过这个类的对象流进行传递和分析来将对方的信息反馈到自己的机器上的。俄罗斯方块双人对战版采用多线程(Thread)机制控制游戏块的运行,使用基于客户端/服务器模式(C/S),利用Socket传递对象流实现双方玩家的数据传输。 5.7.2 Socket数据传输

Java使用TCP/IP套接字机制(Socket)来提供访问TCP/IP协议的通信方法,并用

一些类实现了套接字中的概念。Socket是网络驱动层提供给应用程序编程的接口和机制,双人对战版俄罗斯方块游戏在运行过程中需要实时传输数据,如当前主机的游戏状态要在另一个主机上显示就必须将本机当前显示面板的状态传递给对方,使对方玩家能够看到自己的游戏状态,在一方游戏结束时要通知另一方以判断游戏胜负。

要用C/S模式实现网络通信就要先建立客户端和服务器端。客户端和服务器端分工明确,客户端负责向服务器端发送通信数据,服务器端则要对接收到的数据进行处理,然后转发到相应的客户端。根据“双人对战”这一特点可以将游戏的服务器端、客户端以及游戏本身集成在一起,游戏开始运行后分别启动一个客户端和服务器端。对战双方要传递的数据直接由本方客户端发送给对方服务器端,从而实现点对点的通信。 5.7.3 双人对战版游戏主类的实现

双人对战版游戏主类DoubleBlocksGame继承于JFrame类(因为该类继承了DoubleGameMenu类,而DoubleGameMenu类是JFrame的子类),负责双人对战版游戏的全局控制。从界面上来讲,该类包含一个DoubleGameCanvas画布类的实例和一个控制面板(DoubleControlPanel)类的实例以及一个DoubleMusic(音乐控制类)的实例引用。

在这个类中还有一个内部类Game,这个类与单机版的Game类有所不同,它仍然实现Runnable接口,为一个新游戏的开始,该类对游戏的设置进行初始化,但同时要

辽宁科技大学本科生毕业设计(论文) 第34页

建立端口连接,从而显示相关的提示信息,并为网络传输数据做好端口和输入输出流初始化等工作。同时生成新的游戏块并调用游戏块线程。

双人对战版和单机版最大的不同之处在于:游戏的开始首先需要由建立网络连接和数据通道,并且添加了通过对对方发送过来的数据分析判断游戏输赢的功能。 5.7.4 双人对战版俄罗斯方块类的实现

与单机版中SingleBlock类的实现不同,双人对战的俄罗斯方块游戏需要实时地显示对方状态,因此就需要在本方的游戏状态发送改变是立刻发送通信数据给对方,使对方得悉自己目前的状态。因此在DoubleBlock类中添加了输入输出流等成员变量。 5.7.5 双人对战版游戏画布类的实现

双人对战版俄罗斯方块的趣味性再用它的对战性。与SingleGameCanvas类相同,

它的主要功能也是负责逐行绘制方块。另外,在游戏中一方游戏消除一行或多行是,方块都会改变颜色,并要在另外一方的游戏玩家中的游戏画布底部随机的增加对应的行数,行数为1、2、3、4或者0(表示没有消除行)。

与SingleGameCanvas类相同,游戏画布是游戏中的一个背景窗口,方块的运动、变形都在画布中进行。另外,游戏画布还要响应按键消息,一旦游戏开始,游戏画布便开始显示方块的运行情况。画布类DoubleGameCanvas也是用一个面板来实现的,继承于JPanel类。它的大小完全是根据方格来拼接起来的,游戏中窗口的大小是20×14个方格。

5.7.6 双人对战版游戏菜单类的实现

双人对战版菜单类(DoubleGameMenu)被游戏主类(DoubleBlocksGame)所继承,

所以主类市里建立的同时也就生成了一个菜单类的实例。菜单类主要用于建立游戏菜单,并将“控制”菜单下的“游戏难度设置”项的状态设置为不可用。与菜单类相关的响应设置类都定义在com.heweina.game.Double.set包中。下面就简单介绍这几个类的使用方式和功能。

1)DoubleServerSocketSet(建立游戏服务器端菜单响应设置)类

建立新游戏的操作在客户端和服务器端是不同的,DoubleServerSocketSet类就是为 响应服务器端“建立新游戏”菜单项的点击动作而设计的。当玩家点击“建立新游戏”菜单项时,初始化一个DoubleServerSocketSet对象并设置游戏的端口号,然后建了一个ServerSocket对象监听该端口,同时将“游戏难度设置”设置为可用状态。当单击“开

辽宁科技大学本科生毕业设计(论文) 第35页

始”按钮后需要等待其他玩家的连接,并将其他菜单的状态设置为不可用。双人对战版服务器端启动流程图如图5-10所示。

选择“建立新游戏”菜单项后弹出设置ServerSocket监听端口的对话框,如图5-11 所示。默认的服务器端口号为:8888,玩家可以按照自己的喜好修改此端口号。

开始是输入端口号端口号占有否否设置游戏控制键设置游戏难度级别背景音乐控制启动服务器结束

图5-10 双人版服务器启动流程图

图5-11 设置ServerSocket监听端口的对话框

2)DoubleClientSocketSet(建立游戏客户端菜单响应设置)类

DoubleClientSocketSet类是为响应客户端“连接游戏”菜单项的点击动作而设计的。 当一个玩家作为服务器端建立游戏后,另外一个玩家即为客户端,可选择“连接游戏”菜单项作为客户端连接服务器,首先设置要连接的主机地址和端口号,然后建立一个Socket对象负责收发数据。双人对战版客户端连接流程图如图5-12所示。

辽宁科技大学本科生毕业设计(论文) 第36页

选择“连接游戏”菜单项后,弹出如图5-13所示的对话框。

开始输入服务器地址地址验证正确否?是否设置游戏控制键背景音乐控制连接服务器结束图5-12 双人对战版客户端连接流程图

图5-13 客户端设置要来连接的周地址和端口号

3)DoubleControlkeySet(游戏控制键菜单响应设置)类

DoubleControlkeySet类是为响应“控制”菜单中“控制键设置”菜单项的点击动作而设计的。用户可以按照自己的习惯设置游戏方向键,其界面如图5-14所示:

图5-14 “游戏控制键设置”对话框


俄罗斯方块论文最终版 - 图文(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:世界地理知识点总结 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: