前言:
这次是从前就特别喜欢玩的“奥赛罗”,但是国内玩的人不多,后来也就慢慢淡忘了。偶然想起来,觉得还是挺有意思的,就着手开发了。之前已经写过两三个小游戏,所以开发起来也很顺畅,原以为利用业余时间几天应该能写完的,断断续续写了两三个星期。中间觉得不好又推翻重写了一次。目前只完成了java版本,后面有空的话,应该还会继续完善。
开发历程
原本想法是通过加载一些静态图片资源来绘制棋盘和棋子,不过后来自己做的图片效果不是太满意,网上也没有找到合适的图片资源,就把这个想法给pass掉了,改成全部由canvas进行绘制。
原来设计是使用三个canvas,分别是:最底部是棋盘画板,中间是落子画板,最上层是提示落子位置画板。后来觉得三个canvas太浪费,所以把落子位置给挪到最底层棋盘画板上,每次落子完就会重绘一次棋盘和提示落子位置。为什么不适用同一个canvas进行绘制呢?因为重绘实在太耗硬件资源了,最后开发出来的游戏运行时资源占用可以说是非常少的。
以前玩就觉得8x8棋盘太小,所以开发的时候就保留了棋盘的可扩展性,可以支持任意格子数量的棋盘,比如正常的8x8棋盘,也可以9x9,10x10,16x16棋盘等等
原先考虑是需要多线程的,后来没有用到。因为几乎所有计算都在几毫秒之内就完成了,也没必要非要多线程了。但是还是使用了两个线程,一个窗口线程和一个后台保活线程,后台线程暂时只有监控窗口线程运行状态和打打日志这样的功能。
游戏截图
项目维护地址
https://github.com/eguid/Othello
目前开发进程
已完成
1.0版本更新 1、增加赢棋提示和重新开始游戏 2、优化代码结构
0.3版本更新 1、输赢逻辑判断 2、落子位置算法优化和越界bug修复
0.2版本更新 1、落子位置预测算法实现
0.1版本实现 1、界面、棋盘、棋子绘制 2、棋子翻转算法实现
待完成
1、悔棋(悔棋真的很讨厌,所以一直没加这个功能)
2、人机对战
3、联网对战
如果有兴趣的小伙伴也可以参与开发