五子棋人機博弈

五子棋,人與人之間博弈,我們不用考慮太多,都是玩家自動思考。

但是如果我們要玩一個單機的五子棋,實現人機的對戰,那么我就得“幫”電腦考慮下走哪步了。

實現的方法大概有三種:

最大權值法

決策樹法

機器學習訓練

這里我們主要針對第一種方法討論下,大致思路如下:

我們繪制好一個棋盤后,假定大小為 15*15;

下棋之前,對於棋盤中的每個空位,我們每都替電腦人“掂一掂”下在哪里合算;(估權過程)

對每個空位按照規則都計算完權重,我們找出權重最大的位置,此位置就是npc落子位置

那么現在的問題就是,這個權重的計算規則是怎樣的呢?

首先,我們思考一下人是怎么下子的。

當該位置四周為空時,這個位置落子可能就不是那么有意義;

我們最大可能地去實現將棋子相連,若該位置四周已出現一條連線,則連子數越多,該子越重要

就算一條線有很多子已經相連,如果該線的一端被堵住,那么該線的重要程度降低,我們稱之為眠連,otherwise,兩端都沒堵住我們稱之為活連。

現在我們來將棋子相連的情況進行下歸類賦權

空子位置我們用 “0” 表示,白子用“2”表示,黑子用“1”表示;

我們主要分為以下幾種情況:

定義

棋子相連情況

權值

活一連

010、020

40

活二連

0110、0220

400

活三連

01110、02220

3000

活四連

011110、022220

10000

眠一連

012、021

20

眠二連

0112、0221

200

眠三連

01112、02221

500

眠四連

011112、022221

3000

主要被分為了以上幾類,當然可以考慮更多以使你的npc更加“智能”;

現在考慮算法

對於每個空位,我們從四個方向進行考察:

水平

豎直

左斜

右斜

我們以水平方向為例進行代碼考察:

int go[row][column]; //記錄每個點的落子情況

int weightarr[row][column]; //記錄每個空位的權值

for piece in chessboard{

if(piece為空){

key1="0"; //記錄空位左邊連子情況

key2="0"; //記錄空位右邊連子情況

(i,j)為空位坐標

ux=i;uy=j; //(ux,uy)記錄左邊連子邊界

dx=i;dy=j; //(dx,dy)記錄右邊邊界

first1=0;

first2=0;

//first1 記錄空位左邊第一個子顏色,first2記錄右邊第一個顏色

//while的目的在於找到最多的顏色相同的連線

while(左邊不越界){

int first=go[i-1][j].color;

first1=first;

if(first==0) break; //如果空位相鄰也為空,退出

else { //如果不為空位

--ux;

if(顏色和first相同) {

key1+=go[ux][uy].color;

}

else {

key1+=go[ux][uy].color;

break;

}

}

}

while(右邊不越界){

... //和上面同理

}

value1=左邊連線權值;

value2=右邊連線權值;

if(左右連線顏色相同) 權值翻倍;

weightarr[i][j]+=該方向權值;

//同理,依此計算 左斜,右斜,豎直情況;

}

}

要注意的是,因為對於每個大方向,比如說水平方向,我們以該空位做間斷點分了水平左和水平右,當水平左和水平右的顏色相同時,權值注意要加強,因為比如說隔開的2個黑子和1個黑子填上空位可以變成4個黑子;

大家可以具體自己重新設置權值,添加更多情況。

我們將具體實現代碼放在github中,供大家參考:

https://github.com/Gray-way/Gobang

java五子棋博弈,五子棋(人機對弈)——Java權值法五子棋博弈相关推荐

  1. 五子棋java程序=权值法_五子棋(人机对弈)——Java权值法五子棋博弈

    五子棋人机博弈 五子棋,人与人之间博弈,我们不用考虑太多,都是玩家自动思考. 但是如果我们要玩一个单机的五子棋,实现人机的对战,那么我就得"帮"电脑考虑下走哪步了. 实现的方法大概 ...

  2. 五子棋(人机对弈)——Java权值法五子棋博弈

    五子棋人机博弈 五子棋,人与人之间博弈,我们不用考虑太多,都是玩家自动思考. 但是如果我们要玩一个单机的五子棋,实现人机的对战,那么我就得"帮"电脑考虑下走哪步了. 实现的方法大概 ...

  3. Java五子棋Ai-权值法

    Java五子棋Ai-权值法 一. 什么是权值法? 二.实现权值法Ai会面临的问题 1.如何表达棋盘上未下处的横竖斜的棋子情况?(类似01120) 2.如何将未下处的横竖斜情况和权值联系起来?(Hash ...

  4. java五子棋ai_Java五子棋Ai-权值法

    一. 什么是权值法? 权值法顾名思义,即是权衡不同的情况并赋予不同的数值,这个数值即代表着这个情况的重要性. 例如,当我们进行五子棋对战的时候,我们每下一个棋子就要判断这个点横竖斜的情况,对于不同的情 ...

  5. 交大校友會高階經理人才培訓班 2009/11/19 演講主題:蒙恬科技- 智慧型人機介面整合專家_蔡義泰,蒙恬科技董事長...

    交大校友會高階經理人才培訓班 2009/11/19 演講主題:蒙恬科技- 智慧型人機介面整合專家 主講人:蔡義泰,蒙恬科技董事長 主持人:交大校友會執行長陳俊秀 董事長金語摘要: 1.  創業時就努力 ...

  6. 权值法实现五子棋AI

    权值法实现五子棋AI 前言 五子棋AI,能根据棋盘局势判断棋子应落在何处获胜,主要有权值法和博弈树法两种实现方案.本篇博客将就权值法展开介绍,笔者水平有限,望各路大神有所建议评论提出,谢谢. 权值法 ...

  7. java scala_经过几天的Scala回归Java的10个最烦人的事情

    java scala 因此,我正在尝试使用Scala,因为我想编写一个解析器,而Scala Parsers API似乎非常合适. 毕竟,我可以在Scala中实现解析器并将其包装在Java接口后面,因此 ...

  8. java字节码_好的,每个接触Java字节码的人

    java字节码 Oracle诉Google一案认为,复制Java API的结构,序列和组织是侵犯版权的行为. 侵犯版权不仅是复制行为,而且还适用于拥有该作品副本的所有中间方. 那就是编写/编译任何JV ...

  9. 好的,每个接触Java字节码的人

    Oracle诉Google一案认为,复制Java API的结构,序列和组织是侵犯版权的行为. 侵犯版权不仅是复制行为,而且还适用于拥有该作品副本的所有中间方. 那就是编写/编译任何JVM语言的人,以及 ...

最新文章

  1. 【Network Security!】关于DDOS攻击的现状分析与探索
  2. gitlab安装_Gitlab安装和配置教程(包括邮箱配置)
  3. Windows10忘记锁屏密码,如何破解
  4. android 键盘 能复制,android – 从EditText中禁用软键盘,但仍允许复制/粘贴?
  5. python如何读取csv文件列表页_每25行读取一个csv文件,并使用python传递到列表
  6. LeetCode 1922. 统计好数字的数目(快速幂)
  7. python如何更改entry属性_如何在Python3中更改Gtk3 Entry文本颜色?
  8. ROBEL:谷歌推出低成本机器人训练平台
  9. git tag打标签常用命令
  10. 加密货币挖矿太火造成显卡短缺,AMD、英伟达能躺着赚钱嘛?
  11. 入门篇:函数计算中角色和访问策略的讲解
  12. Smart210使用superboot刷机
  13. Golang学习之路(一):Golang安装和配置
  14. 服务器装系统鼠标键盘用不了怎么办,教你重装系统鼠标键盘不能用怎么解决?...
  15. ico付费图标下载器 附带易语言源码
  16. [Irving]Android 常用布局之RelativeLayout
  17. mysql score表_Mysql数据库练习题student,score表
  18. OpenCV开发笔记(四十一):红胖子8分钟带你深入了解scharr滤波器算子边缘检测(图文并茂+浅显易懂+程序源码)
  19. 罗切斯特大学读计算机博士,2020年罗切斯特大学博士申请条件
  20. (一)离散型智能制造

热门文章

  1. 制作ubuntu to go,随身携带的系统(uefi+gpt启动)
  2. 计算机丢失vcomp110.dll,msvcr110.dll丢失怎么办?
  3. 使用MediaMonkey代替Windows版iTunes来管理iPod
  4. Community Day 社区嘉年华 · 深圳站|极客社区与技术大咖的双向奔赴,这一次走在技术迭代之前
  5. CUDA报错:unknown error - this may be due to an incorrectly set up environment, e.g. changing env varia
  6. 张泉灵“生命的后半段”读后感
  7. 如何让电脑的速度快如闪电?
  8. 《动物精神》之启示一
  9. Codeforces D. Cleaning(前缀和、后缀和)
  10. Windows Azure Pack与VMware VRA 对比(二)安装VRA IaaS服务器