Java Socket通信实现带联机功能的俄罗斯方块

来源:互联网 发布:mac照片应用储存位置 编辑:程序博客网 时间:2024/05/04 15:26

转载自:http://blog.csdn.net/a343902152/article/details/49914759

实验项目内容

1、实现俄罗斯方块的基本游戏逻辑。

2、利用Socket编写服务器端和客户端程序。

3、实现俄罗斯方块的联网对战功能。

4、实现计分、音效等辅助功能。



本文联网对战是指在本地运行两个程序,一个做server一个做client进行通信。

本程序Client部分 new Socket时默认host为localhost,如需远程联机,只需将localhost改为server处的ip即可。



这是本人初次MVC的练习,关于俄罗斯方块的控制代码借鉴了网上的一些资料,不足之处尽请谅解。

注:本程序存在一个偶尔会发生的方块堆积到顶端时无法停止游戏的bug,原因未知。。

一、程序结构及类的介绍

Model的功能为实现游戏的逻辑控制,如:游戏过程中的碰撞检测、分数计算、音乐控制等,包含了GameDao以及MusicPlayer这两个类。而实现单机以及联网对战的通信模块采用Socket通信机制,由包MySocket中的Client,Server以及ExchangeThread这三个类来实现。View则主要负责游戏的界面显示,包括游戏的启动界面(LauncherJPanel)、单机模式界面(OfflinePanel)以及对战模式的界面(OnlinePanel),以及控制整个游戏运行的界面(MainFrame)。而显示界面所需的控件如背景图、方块、文本框等则是由entity中的MyButton,Rect,LabelWithBG,GameWindow以及BackGround这些类来实现。Controller则是与用户交互的接口,根据用户操作来控制游戏进程。KeyController相应的用户的按键操作,根据用户按键来控制方块移动变形等操作,RemoteController则相应对战方用户操作以显示对战方当前战况,GameController则是游戏整体的控制器,如命令方块移动、游戏暂停开始等一系列操作。


根据不同功能我们主要将程序分为4个模块,分别用于界面显示(view)、逻辑处理(model)、用户交互(Controller)、通信(MySocket).

其中,model包中包含了GameDao以及MusicPlayer这两个类。MusicPlayer主要负责设置游戏中的音效,包括背景音乐以及按键音效。而GameDao则负责整个游戏过程中碰撞检测、行的消除、分数与等级计算等。

MySocket包中的类则是负责实现联网对战的通信,包含了Client,Server以及ExchangeThread这三个类。 Server为服务器端,用于新建一个IP地址,即在游戏中可以“创建房间”,而Client为客户端,用于连接服务器已创建的IP,即在游戏中可“进入房间”。ExchangeThread是一个用于进程之间通信的线程,既可以读取消息,也可以写入消息。在对战中,采用此线程用户可将自己当前的对战情况写入,供对方读取,同样也可以读取对方发送的信息,以此来实现联网对战。

View包中的类则主要负责游戏的界面显示,包括游戏的启动界面(LauncherJPanel)、单机模式界面(OfflinePanel)以及对战模式的界面(OnlinePanel),以及控制整个游戏运行的界面(MainFrame)这四个类。而显示界面所需的控件如背景图、方块、文本框等则是由包entity中的MyButton,Rect,LabelWithBG,GameWindow以及BackGround这些类来实现。

Controller包中的类实现了根据用户操作来控制游戏进程。KeyController可以相应的用户的按键操作,根据用户按键来控制方块移动变形等操作。RemoteController则相应对战方用户操作以显示对战方当前战况,GameController则是游戏整体的控制器,如命令方块移动、游戏暂停开始等一系列操作。


二、程序运行效果

1.  启动界面

   运行程序,首先看到的是启动界面,包括中部的一个俄罗斯方块字样,以及右下方单人模式、创建房间以及进入房间三个按钮。

图1. 启动界面


2. 单人模式

点击单人模式可以进入单人游戏,运行效果如下:


图2. 单机版游戏界面

游戏通过上下左右再加上空格和A键进行操控。其中空格为暂停游戏,A键为恢复游戏。随着得分的提升,游戏等级也会随之提升,从而加快游戏速度,增加难度。

右上方为音乐开关,可以点击自由的开闭音乐,下图为关闭音乐后的效果图。

图3. 音乐开关效果演示

(3) 对战模式

要双人对战,那么首先需要创建一个游戏房间。点击“创建房间”按钮后,输入一个10000-50000之间的数字,作为房间号(使用这个端口,如果端口已经被占用,那么游戏会创建失败),如下图所示:


图4. 创建房间

点击确定时候,可以在控制台看到:,此时程序阻塞等待客户端接入。

 

另在再启动一个程序模拟另一名玩家,选择进入房间并输入12345(与上面创建的房间号一样即可),并点击确定。此时可以看到,控制台处显示连接成功,并且游戏窗口变为双人模式的界面,如图:

图6. 双人对战模式游戏界面

对战模式中,每位玩家自己操控左侧界面,而对方玩家实时操作及得分将会显示在右侧界面中。

 



0 0