快捷搜索:

人机博弈,吃子棋游戏(一)基本介绍,人机

人机博弈,吃子棋游戏(一)基本介绍,人机
(1)什么是吃子棋?

     吃子棋,是小孩子学围棋的入门棋,其规则部分取自于围棋,但比围棋简单很多。

(2)吃子棋的行棋规则?

    1.吃子棋,在行棋时,若一方棋子没有被打吃,则其必须落子在能够紧对方棋子气的位置。

    2.吃子棋,当一方棋子处于被打吃的状态,则可以逃命,而不用紧对方棋子的气。

    3.吃子棋,当一方棋子被吃提,则输赢即分,吃子方胜。

    4.吃子棋,一般有两种赢棋方式,双打吃和征吃。

    5.吃子棋,起手棋必须位于天元。

 (3)应用设计思路

   设计此应用的总体思路如下:

   DATA:

   1.棋盘表示

   2.棋子表示

   3.计算棋子棋的辅助数据

   AI:

   1:走法产生(依据行棋规则,产生走法)

   2:估值核心(暂时的思路是对双方一气,两气棋窜进行分析统计,并对双打吃与征吃进行特别处理)

   3:优秀走法搜索引擎(暂时仅使用极窄窗口搜索,一种优化过的alpha-beta搜索)

   UI:

   cocos2d-x 3.2

   绘制棋盘,棋子,开始界面,背景等。
(4)吃子棋AI

鉴于吃子棋的规则,在做AI时,也容易许多。题外话,目前现在围棋的AI多为双重随机-AAAA算法之类吧,有兴趣读者可以研究下。

1.走法生成:

   走法的生成会相对容易很多,因为吃子棋大多数情况下,每一步都要紧对方的气,而少数情况只能长气逃命,因此前中期合理走法很少,而游戏很少发展至后期。

2.估值核心:

    对于棋面的判断也相对容易,不需要考虑地域与势等抽象概念,这些抽象的概念连当下计算机科学家都没有找到比较好的解决办法。但这一部分要测试非常难,要微调很多参数,感知棋力变化。对于未发生提子的叶子结点,判断形势与输赢。1.轮到我下,对方存在一个一气的棋窜,则我胜利。2.轮到我下,对方不存在一个一气的棋窜,而我有两个一气的棋窜,则我失败。3.轮到我下,敌方不存在一气的棋窜,若我没有1气的窜,对方可有两气棋窜,若有开始考虑,双打吃与征吃的可能。4.同三情况考虑自己,我方仅存在一个一气窜,则考虑是否被征吃,以及双打吃。5.都没有出现,考虑一些其他的额外参数。

3.搜索引擎:PVS,如果有性能需求考虑使用置换表。


写在最后:

我曾兼职围棋入门班的助教,深知陪着4,5岁小孩子下围棋是一件很头大的事,因为他们下棋时经常会哭鼻子闹脾气刷淘气。孩子们刚入门时下得是吃子棋,下课回家都是家长陪着下,同样无论输赢都是一件头大的事,但是家长们都说孩子和电脑对战不会哭鼻子闹脾气耍淘气。

于是,我上网搜索有没有吃子棋对战软件,使家长脱离苦海,也使孩子能够专心下棋而不是哭鼻子闹脾气耍淘气,但未找到,可能是需求过少的缘故,一般孩子们下一周的吃子棋就可以下真正的围棋了。

目前,本人正在用业余时间,研发此游戏。欢迎和广大围棋爱好者,吃子棋爱好者多多交流。


转载请标明出处,谢谢


我要做一个五子棋游戏,要可以人机对弈,问一下难度有多大提供一下资料

看你要想人机对弈的机器的“智商”有多高了,如果和“快乐五子棋”一个级别的难度的话,应该不难。和做一个很小的数据库管理软件差不多。
 
一个人机博弈五子棋游戏程序 我的要比较苛刻 看问题补充

五子棋的AI(I)
点击数:2262 发布日期:2005-8-7 11:02:00
【收藏】 【评论】 【打印】 【编程爱好者论坛】 【关闭】

“五子棋”软件设计报告
杭州电子科技大学 胡峰令
在本次“五子棋“程序的编写中,只编写了人机对弈部分,运用了博弈树进行搜索,在选取最优的走步时使用极大极小分析法,考虑到搜索的时间复杂度和空间复杂度,在程序中只进行了2步搜索,即计算机在考虑下一步的走法时,只对玩家进行一步的推测。(程序中的棋盘规格为15*15)
下面对具体做法进行描述:
1. 数据结构定义:
棋盘定义:int board[15][15];
在15*15的棋盘上,获胜的情况总共有572种,
如:
* * * * * ……
…… …… …… …… …… ……
…… …… …… …… …… ……
…… …… …… …… …… ……
…… …… …… …… …… ……
…… …… …… …… …… ……
中的第一行“*“所代表的格子就是一种获胜组合。
计算机和玩家的获胜组合情况bool ctable[15][15][572],
bool ptable[15][15][572],来表示棋盘上的各个位置都在那种获胜组合中。
计算机和玩家在各个获胜组合中所填入的棋子数int win[2][572],如有一方在某一获胜组合的棋子数达到5个,该方即获胜。
Bool player:是否轮到玩家下棋
Bool computer:是否轮到计算机下棋
Bool start:游戏是否开始
Bool pwin:玩家是否获胜
Bool cwin:计算机是否获胜
CPoint m_pplastpos;//玩家走的前一步棋
CPoint m_pclastpos;//计算机走的前一步棋
为便于说明程序的主要算法,这里先说本程序中估价函数的选取方法:
e=p1+p2;
p1为下完当前这步棋时计算机的得分;p2为下完当前这步棋时玩家的得分(p2其实为负),这样做即考虑了进攻的因数,由考虑了防守的因数,两个方面都进行了考虑,防止计算机只考虑进攻而忽略防守,同时也防止计算机只考虑防守而忽略进攻,从而达到比较好的情况。
2.主要流程描述
其程序流程图如下:

(1) 初始化棋盘:判断哪方先开始,(2) 初始化计算机和玩家的获胜组合情况
bool ctable[15][15][572],bool ptable[15][15][572]
void CMyChessDlg::InitializeBoard()
{
//初始时双方都还没下子
int i,j,count=0,k;
m_pclastpos.x=-1;
m_pclastpos.y=-1;
m_pplastpos.x=-1;
m_pplastpos.y=-1;
start=true;
//判断哪方先开始
if(m_bwfirst)
{
player=false;
computer=true;
}
else
{
player=true;
computer=false;
......余下全文>>
 

http://www.bkjia.com/Androidjc/892119.htmlwww.bkjia.comtruehttp://www.bkjia.com/Androidjc/892119.htmlTechArticle人机博弈,吃子棋游戏(一)基本介绍,人机 (1)什么是吃子棋? 吃子棋,是小孩子学围棋的入门棋,其规则部分取自于围棋,但比围棋...

本文源自: AG环亚集团

您可能还会对下面的文章感兴趣: