Android在线游戏联机平台开源

背景

当以前开始玩安卓机的时候,就发现Android可以玩以前在红白机玩的游戏,而且可以联机,感觉真的很神奇,加上自己对红白机有特殊的情感,当时就琢磨着什么时候把这个模拟器改成可以在线联机,后来可能是运气吧,恰好找到了模拟器的源代码,于是就开始看源码琢磨,发现好像代码并不是很复杂,底层的模拟器C,C++和汇编代码可以不懂,只需要了解如何在上层调用接口就好。后来做了个聊天软件的项目,发现这个聊天软件服务器软件Openfire,Openfire作为服务端,Smack作为客户端,发送消息,传输文件都可以,可以在这个地方使用。于是就花了一段时间完成了这个联机平台。这个平台的目的是想吸引怀念经典的玩家加入,然后形成一个良好的游戏氛围。

项目解析

截图

1.主界面

主界面

2.创建连接

创建连接

3.游戏中

游戏中

游戏开始前

游戏联机平台需要由一方通过选择ROM创建连接,然后另一方连接,连接成功后,连接方判断本地是否存在此ROM:1.存在即发送存在消息双方同时开始游戏。2.不存在,发送请求获取ROM的消息。对方收到获取ROM的消息,把ROM发过去,另一端接收完毕,发送接收完毕消息,同时开始游戏。

游戏进行中

两端在帧更新的时候就把键值发送给对方,帧更新是从底层传回来的,实现 ,Emulator.FrameUpdateListener接口的int onFrameUpdate(int keys)方法可以监听得到。除了发送键值,服务端还要发送游戏的状态来实现同步,public native boolean saveState(String file)方法可以将当前游戏状态保存为文件。public native boolean loadState(String file)可以加载游戏状态文件。游戏状态以文件的方式定时发送,每几秒发送一次就好,不用太频繁。游戏进行中支持发送信号,与联机队友沟通,而发送信号时以Smack普通的文本消息发送。而上文说到的请求,应答消息,键值,均是通过自定义消息体实现。在游戏中还给创建联机的那端实现控制,比如重置游戏,这些消息也是通过自定义消息体实现的。

总结

在这种同步要求很高的情况下,openfire服务器效果并不是很好,不过思路在这里,有空用netty写个服务端的。效果应该会好很多。

项目地址

https://github.com/luoyesiqiu/LuoyeGameCenter
欢迎Star哦~

猜你喜欢

转载自blog.csdn.net/e_one/article/details/77865064