黑白棋的设计说明(一)
黑白棋的设计说明
1. 棋盘的表示
黑白棋的棋盘为一个10*10的正方格,如左图所示。最初黑棋和白棋各两颗子占据一个方格的对角线。
在计算机中我用一个10*10的二维数组来表示当前棋局的形势,通过搜索比较,让电脑知道当前的棋局状态,寻找合适的落子点。
棋局数组:int CurChess[10][10];
中间每一层递归产生的新棋局由相应的局部棋局数组来表示。
2. 规则
即:规则,下棋落子的规则。只要任何一条直线的一端为自己的棋子,中间为敌方的棋子,且没有空格,则在直线的另一端可落子。
如图所示,红色棋子表示黑子的可落子点,落子后,中间的白子变为黑方所有。
3. 计算机模拟人下棋(AI)
人下棋时,①纵观棋局,寻找落子点;②比较各落子点给自己带来的收益,选择最大的落子;③在选择落子点时会根据一些自己的经验来进行,比如某一个点十分重要,则下棋时会努力争夺该点,某些点已方占据后非常不利,则会极力避免下在该位置……
或许还有其它一些没有想到。
通过计算机程序来模拟人的思考过程:
A. 纵观棋局,寻找落子点
设定 电脑为:Computer -1 人为: Man 1
我仔细想了下,大概有三种寻找落子点的方法:
a. 通过对当前棋盘进行搜索,找到已方(Computer)的棋子O,然后对O进行八个方向的搜索(因为对于一个点有八个方向的线段通过它,如图) ,找到每个方向上的落子点(如果有),如此循环每个Computer棋子,找到所有的落子点,然后将所有点进行比较,去掉其中重复的,最后对每个落子点进行递归搜索,按照合理的估分原则进行评价,得出每个落子点的价值(即可获得的长期利益),将其进行比较,取最大者落子,并改变棋局……
b. 对当前棋盘进行搜索,找到空白点Ox,然后对Ox进八方向搜索,看是否满足落子条件,即看空白点Ox是否为合乎规则的落子点,如果是,可以进行递归搜索,得到该点的价值,然后将所有合乎规则的Ox进行比较,选择值最大的落子,并改变棋局……
c. 分析可以发现总共有50条直线存在落子的可能性,当然一条线上存在着多个落子的可能性。可能通过对这50条线的固定搜索,找到可落子点,其中也存在着可能重复的现象,所以要像a方法一样对已搜索到的落子点进行比较排除,然后对每个点进行递归深入搜索……此方法我们可以在每个方向上设定一个值表示该方向上是否还存在落子可能,当显示不可能时,我们可以跳过,以节省时间……2.
A.
B. 估值系统
因为此棋最后是比较看谁最后的棋子多谁就赢,所以人在选择落子点的时候主要是判断那个落子点能够吃到的子最多来选择的,每个点代表的棋面实际价值是相同的,所以我们可以设定每个棋子的面值均为1,但棋盘上有一些经验必争点Ax,占据这些点可能带来不是一个或几个子的收益,而是关乎整个棋局的胜负(例如,四个顶点),Ax它具有超过面值1的战略意义;而另外一些与必争点Ax相关的落子点也根据其与战略点Ax位置关系具有不同于面值的战略意义,所以整个估值系统就是要找出各个点的准确战略值x。
经过分析,在不同情况下,相同点可能具有不同的战略意义,所以要列出精确的战略值可能比较难,只能采用统计平均值。
由于分析上的难度+本人懒惰所以此程序仅采用一个大概经验值,没有经过详细的统计分析,相信通过详细的分析后,可以提高AI的思考准确性……
本程序中采用设定A为10分,B为-10分,C为5分。当然棋盘上的每个点都有不能的战略意义,但分析起来有点麻烦,我就……
C. 寻找最佳
我们通过对落子点进行递归搜索,并结合估值系统,得到每个落子点的得分,然后比较选择最大进行落子。
4. Computer学习
我也在学习中……
黑白棋的设计说明(一)相关推荐
- c语言课程设计之黑白棋游戏,c语言课程设计黑白棋游戏.doc
您所在位置:网站首页 > 海量文档  > 学术论文 > 大学论文 c语言课程设计黑白棋游戏.doc26页 本文档一共被 ...
- c语言黑白棋程序设计报告,C语言课程设计报告--黑白棋.doc
C语言程序设计 课程设计 题目: 黑白棋 课程设计(报告)任务及评语 学 号学生姓名专业班级程序设计(报告)题目黑白棋程序设计(报告)任务 程序设计的任务与要求: (1)掌握C语言编程的基础知识. ( ...
- 51nod 1368:黑白棋 二分图最大匹配
1368 黑白棋 题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 收藏 取消关注 有一个N*M的棋盘(1<=N,M< ...
- 《算法竞赛入门经典》习题4-3 黑白棋(Othello, ACM、ICPC World Finals 1992, UVa220)
原题及翻译 Othello is a game played by two people on an 8 x 8 board, using disks that are white on one si ...
- android 双人黑白棋开发博客,黑白棋 - 软件资讯 - 课堂党年级博客
黑白棋叫反棋(Reversi).奥赛罗棋(Othello)苹棋翻转棋黑白棋西本流行游戏通相互翻转棋棋盘谁棋判断胜负 黑白棋棋盘8*8格棋盘棋棋空格间像围棋交叉点始棋盘两白两黑四棋交叉放置黑棋总先 自颜 ...
- 从0开始 Java实习 黑白棋
黑白棋的设计 代码如下: import java.util.*; public class Chess{char[][] chess = new char[16][16];public static ...
- MFC随机博弈黑白棋
随机博弈黑白棋 随机博弈黑白棋 TxyITxs | 随机博弈黑白棋 | 2019.04.21 摘要 通过随机落子,实现黑白棋的博弈.无任何落子规则,棋子死活与围棋中棋子的死活一致,即存在至少一口气.动 ...
- c语言黑白棋程序设计报告,C语言课程设计黑白棋
C语言课程设计--黑白棋 第一章 绪论 1.1 C语言概述 C语言是国际上广泛流行且很有发展前途的计算机高级语言,不仅用来编写应用软件,也用来编写系统软件.C语言功能丰富,使用灵活,可移植性好,深受广 ...
- python黑白棋结课设计报告_黑白棋游戏课程设计
黑白棋程序源代码 : #include "graphics.h" #include "stdio.h" #include "stdlib.h" ...
最新文章
- mysql表分区列_如何基于char列对MySQL表进行分区?
- matlab 日期加小时数_MATLAB时间与日期的基本操作
- Live Source Address 2019最新的电视广播包_Arturia MiniLab MkII迷你MIDI键盘2019年换新装:反色纯黑版...
- JavaFX技巧17:带有AnchorPane的动画工作台布局
- android: a system image must be selected to continmue
- Unity3d之HashSlash学习笔记之(二)--角色基础类的构建
- 详细设计 存储分配_零基础学C语言(7):存储类型
- ruby dbi mysql_Ruby DBI Read 操作 | 菜鸟教程
- 拖动无边框窗体(VB6代码)
- python中for循环格式_如何将python中for循环的输出写入csv格式的文件?
- 左栏固定,右栏自适应
- 实际运用中DataSet、DataTable、DataRow点滴
- Google Cloud Fundamentals简介
- php职业性格测试,三个职业测试方法,助你选择适合你的工作(附测试链接)
- AxureRP初体验
- 易语言html截图,易语言如何指定区域截图;易语言怎么才能全屏截图
- 数学基础知识总结 —— 12. 求极限的重要工具「洛必达法则」
- 失效而后犬儒【2019.05.15报告记录】
- C/C++打印百分号 %
- CSS 权威指南 CSS实战手册 第四版(阅读笔记)