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. 双人对战模式游戏界面
对战模式中,每位玩家自己操控左侧界面,而对方玩家实时操作及得分将会显示在右侧界面中。
- Java Socket通信实现带联机功能的俄罗斯方块
- Java Socket通信实现带联机功能的俄罗斯方块
- 俄罗斯方块java的实现
- java通信二:利用Socket实现聊天室功能
- java通信socket实现
- java实现socket通信
- Java实现简单的socket通信
- java实现多线程的socket通信技术
- java实现简单的Socket通信
- java--实现简单的socket通信
- Java Socket实现简单的即时通信
- 示例:PHP使用socket协议实现的即时通信功能
- java的socket通信
- Java的Socket通信
- Java socket 实现tcp通信
- Java socket 实现tcp通信
- java Socket通信实现步骤
- Java swing实现的俄罗斯方块小游戏源码
- js中常用的事件,onclick 单击事件、onblur 失去焦点事件、onchange改变事件、onmouseover鼠标进入事件、onmouseout鼠标移除事件、onsubmit提交事件
- 移动支付在智慧生活-必不可少的生活方式
- 数据库常见问题
- Windows小技巧 -- 关机时清理系统垃圾
- Ajax请求及服务端返回数据解析的陷阱
- Java Socket通信实现带联机功能的俄罗斯方块
- 121----$rste = preg_replace("/$a/",$b,$rst);//***在数组中替换
- 让Libevent帮我们表白吧
- QT 5.3.2+OpenCV3.0的安装与配置
- C++中string erase函数的使用(转载)
- 使用viewpager adapter实现微信的滑动界面
- uwsgi+nginx+flask简单部署
- Morphia快速入门
- 简单模拟 CodeForces - 404B Marathon