基于Python的Reversi游戏设计与开发开题报告
2020-04-13 17:04:10
1. 研究目的与意义(文献综述)
为了熟悉黑白棋规则及技巧,研究简单的人工智能,决定用python开发黑白棋游戏。主要完成了人机对战功能。在人机对弈中通过博弈树搜索和估价函数,来提高ai的智能。 算法的研究有助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有很大的参考作用。尽管黑白棋的规则比较简单,但它所包括的丰富战略,不亚于那些相当“经典”的策略游戏。
根据wikipedia上的词条显示,现在国外比较强的黑白棋程序分别是edax,ntest和logistello。下面从三个方面来介绍这些程序使用的技术:
首先是棋盘的表示方法,一般的想法是采用8*8的二维数组来表示棋盘,虽然这个方法很直观,操作棋盘也很方便,但是会占用大量的空间,这种缺点对拥有庞大的搜索状态空间的棋类ai来说是致命的,执行搜索算法时,复制原有的棋盘状态并生成新的状态是经常发生的事情,基本上每搜索一个节点都会发生一次复制,使用二维数组不仅会消耗大量空间,同时也会使复制状态的时间大大增加。因此他们都采用bitboard来表示棋盘,即通过两个64位的整型数来表棋盘的状态(黑白棋每个位置有三种状态,分别是黑、白、空,所以每个位置至少要用两个bit表示一个位置,64个位置需要128位来表示,在python中,整数的位数是没有限制的,因此可以用1个128位的数来表示棋盘,但考虑到可扩展性,因为c语言中有64bit的long long,但没有128位的整型,所以一般两个64的整型来表示棋盘),这种表示方法不仅比较节约空间,而且可以使用位运算在常数时间内完成一些运算,例如翻转一片棋子,而数组的表示方法通常需要线性时间的运算才能完成。使用bitboard可以让这些程序在相同的时间和空间里达到更高的搜索深度。
2. 研究的基本内容与方案
2.1基本内容
设计并实现一个带声音和图像的reversi游戏。在一个8x8游戏板上下黑白棋,黑棋白棋轮流下,在新棋子和同色棋子之间,如果有对手的棋子,都将其反转。游戏的目标是让你的棋子尽可能多。当任一个玩家不能落子或游戏板填满,游戏结束。棋子多的一方获胜。除了人机对弈模式,还可以修改reversi ai算法,让不同ai进行对战,即计算机自己和自己玩,看哪种ai算法更好。
2.2采用的技术方案
3. 研究计划与安排
(1)2018/1/14—2018/3/5:确定选题,查阅文献,外文翻译和撰写开题报告;
(2)2018/3/6—2018/4/30:系统架构、程序设计与开发、系统测试与完善;
(3)2018/5/1—2018/5/25:撰写及修改毕业论文;
4. 参考文献(12篇以上)
[1][美]al sweigart(斯维加特).《python游戏编程快速上手》.人民邮电出版社.2017-10-01
[2]江红、余青松.《python程序设计与算法基础教程》清华大学出版社.2017-07-01
[3] l. wang, y. wang and y. li, "mining experiential patterns from game-logs of board game," international journal of computergames technology, vol. 2015, pp. 1-20, 2015.