问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

请问有没有什么网站或者论坛对五子棋的AI比较有研究的?

发布网友 发布时间:2022-04-27 10:02

我来回答

2个回答

热心网友 时间:2023-09-11 05:26

五子棋的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;
}
pwin=cwin=false;
//初始化计算机和玩家的获胜组合情况
for(i=0;i<15;i++)
for(j=0;j<15;j++)
for(k=0;k<572;k++)
{
ptable[i][j][k]=false;
ctable[i][j][k]=false;
}
for(i=0;i<2;i++)
for(j=0;j<572;j++)
win[i][j]=0;
for(i=0;i<15;i++)
for(j=0;j<15;j++)
board[i][j]=2;
for(i=0;i<15;i++)
for(j=0;j<11;j++)
{
for(k=0;k<5;k++)
{
ptable[j+k][i][count]=true;
ctable[j+k][i][count]=true;
}
count++;
}
for(i=0;i<15;i++)
for(j=0;j<11;j++)
{
for(k=0;k<5;k++)
{
ptable[i][j+k][count]=true;
ctable[i][j+k][count]=true;
}
count++;
}
for(i=0;i<11;i++)
for(j=0;j<11;j++)
{
for(k=0;k<5;k++)
{
ptable[j+k][i+k][count]=true;
ctable[j+k][i+k][count]=true;
}
count++;
}
for(i=0;i<11;i++)
for(j=14;j>=4;j--)
{
for(k=0;k<5;k++)
{
ptable[j-k][i+k][count]=true;
ctable[j-k][i+k][count]=true;
}
count++;
}
}

热心网友 时间:2023-09-11 05:26

http://www.programfan.com/blog/article.asp?id=3588
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 完整的计算机系统包括___系统两部分。 有没有illustrator的论坛啊 国内都有哪些可以交流人工智能技术的技术社区? 电脑下的系统和系统盘安装的系统有什么区别? illustrator的专属论坛 哪位知道AI论坛网址? 一个系统都包含什么 从微信好友里怎么能找回我的和密码? 操作系统和系统软件有什么区别 .___系统,___系统和___系统是目前操作系统所具有的三种形式. 体系和系统有什么分别? 体系和系统有何区别 如何用加入微信群 如何通过微信昵称找到? 如何从微信账单中查对方 怎样通过微信原始账号,查询? 武汉市医保大病种类 武汉退休职工大病医保报销比例是多少 武汉重特大疾病医保 武汉医保大病门诊报销 什么叫做系统和系统还原有什么区别 有没有国内很大的illustrator论坛,网上? PS、AI等平面设计工具或者平面设计有交流的地方吗,论坛网页啥的 AI 和illustrator 是一个软件吗? flash画得矢量图导出为AI格式导入Illustrator里变色了 柠檬树叶子黄怎么办 今年百度世界大会上,百度Apollo将分为哪些分论坛? 人工智能“泡沫论”从业者仍存“盲人摸象”误区? 柠檬黄叶落叶怎么办 AI俱乐部 柠檬树幼苗为何会叶黄,长势迟缓? 请问柠檬树叶子掉光还长吗? 老板请员工吃年夜饭,老板在吃饭前第一句话应该说些什么呢 老板请年夜饭说点什么 老板请客吃年夜饭的时候敬老板酒说什么好听的话 年会上老板应该说些啥 老板请客吃年夜饭的时候敬老板酒说什么好听的话? 怎样根据数据库里的数据自动生成Table 公司年夜饭给领导敬酒说些什么话? 我是保安公司上班的吃年夜饭老板认为上台讲话不知道说什么?