基于Android的中国象棋游戏的模拟
2014-12-16臧利萍等
臧利萍等
摘要:针对Android移动终端人机实时交互的特点,结合中国象棋的特点,牵涉到Android开发和Java程序设计以及算法分析等相关知识。即勾勒了整个程序的结构框架,又详细分析和设计了其中的功能模块,例如棋子绘制,局面状态变量的意义和变化逻辑,人机交互的全过程等。全面讲解了搜索算法,从棋局表示、走法生成、局面估计到搜索树的遍历和Alpha-Beta剪枝算法。
关键词:Android;局面估值;Alpha-Beta搜索;历史表;人机交互
中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2014)32-7742-02
Abstract: This is the feature which is real-time human-computer interaction about android mobile terminal .Combined with the characteristics of Chinese Chess, involving many knowledge of Android development and Java program design and algorithm analysis. Draw the outline of the structure of the entire application framework, and analysis and design of the module in detail, such as chess, situation of state variables and change the meaning of logic, the whole process of human-computer interaction. There is comprehensive interpretation of the search algorithm, from chess said, move generation, situation estimate to search tree traversal and Alpha - Beta pruning algorithm.
Key words:Android; Situation to valuation; Alpha-Beta Search; History lists; Human-computer interaction
1 概述
计算机博弈是博弈游戏与计算机决策系统的结合,是人工智能里一个重要的研究领域,是机器智能、兵棋推演等领域的科研基础。中国象棋是中国古老的游戏,逻辑性极强,中国象棋模拟涵盖场景建模、状态表示、棋局分布、走法生成、搜索算法等方面,如何实现中国象棋的人机对弈显得尤其重要。
随着3G技术和android系统的发展,智能手机的市场占有率极高,智能手机游戏在人们生活中占有重要的位置。中国象棋以它的趣味性、逻辑性、哲理性在棋牌游戏中首屈一指,深受多数玩家的青睐和热衷。基于此,本课题的研究和开发应运而生,并且更加注重人性化(例如多步悔棋、将军等棋局状态提示)、友好操作接口的设计和开发。程序中随时都能进行难度设置,符合多种玩家的技艺要求,并且可以伴随玩家棋艺水平竞相成长。总之,本课题的开发,以逼真的视角,简便的操作方式,人性化的设计,生动的下棋环境,定能让玩家体验到中国象棋的智慧和乐趣。
2 需求分析与设计
2.1 欢迎界面
对事物评价的好坏,第一印象至关重要。程序是通过设置两张精美的中国象棋图片来启动的,就像放映电影一样,使游戏更加有厚重感、故事性和趣味性,从而使玩家进入纯净高远而且玄妙有趣的象棋世界。
2.2 游戏界面
游戏界面是玩家和计算机对弈的阵地,是程序绘制棋盘,排布棋子,并走动棋子的界面。
游戏界面具有动态智能性,要时刻反应人机双方走棋落子的信息,同时熟知走棋规则,对玩家的不合理落子予以拒绝,及时的提醒玩家将军和被将军等重要信息。此外还将对玩家举棋和落子添加声效处理,对人机双方的走棋都标识出走棋位置和落子位置,使整个下棋过程更逼真生动,交互更加清晰明确。
2.3菜单
菜单处于Android的系统级别。提供人机下棋的难度等级“容易”、“中等”和“困难”,并给以选择提示。此外提供悔棋功能,即使在实物象棋对战中,棋手们的悔棋也是不可避免的,甚至是人性化的、无可厚非的,更何况程序是通过不总是精确到像素点的触屏操作呢,并且设置悔棋步数限制。玩家在有悔棋需求时,点击菜单选项中的“悔棋亦君子”来返回上一步的棋局状态,并同时计入悔棋步数中。
3 搜索算法分析
象棋搜索算法是象棋程序的灵魂,体现程序的健壮性和高效性,是整个程序设计和开发的关键。
3.1局面表示
局面表示是象棋程序的基础,它的好坏直接关系到走法生成、局面评估和搜索算法的效率。本象棋程序采用的是16*16的二维数组表示法。
3.2走法和全局走法生成
走法就是一个棋子按照象棋的规则从一个位置移动到另一个位置。棋子走法所遵循的的走棋规则被逻辑映射成一个走棋方向数组,从棋子的原位置出发,朝着走棋数组的值所标识的方向前进并得到棋子的落子位置,记录这个走法即可。
在走法数据结构和各种棋子走法生成的基础上,遍历整个棋盘,找出当前走棋方的棋子,然后逐个棋子生成其所有可能的走法,全部保存下来,就得到了整个局面的全部走法。
3.3局面评估
局面评估是判断局面对红方(或者黑方)的优势,并把这个优势量化。目的是为了在多个局面之间进行比较,然后选择对应局面的走法,从而得到有利的局面。endprint