计算机项目:国际象棋
国际象棋的算法描述
我大概想了一下,国际象棋的整个程序里面,一共有这几套算法:
1:基础规则
2:特殊规则和特殊情况
3:计分和胜负的判断
4:AI对棋局的判断和对自己棋子的保护
5:AI的进攻
6:人人对战
7:基础规则的说明
8:投降、悔棋等其他功能
9:基础界面的显示
10:AI 对棋局的扫描
基本上就是上述的9套算法,其中第四套和第五套算法合并为AI 的棋子移动算法,也是这个程序里面最难的部分。
先来解决一些可以解决的问题,我在这描述一下整个棋盘的构筑和棋子的数据库:
首先是棋盘,国际象棋的棋盘一共有8X8=64个方格,我们采用二维字符数组的方法来进行构筑和显示。
其次是棋子的数据库,为了可以计算和判断棋局的情况,每一方的棋子数据库采用结构体数组来构筑(两个结构图数组,一个给玩家,一个给AI ;把数组的内容放入棋盘的数组中,返回每个棋子的下标作为坐标,根据坐标的位置确定相应的数据进行计算),结构体数组内部包括的数据类型为两种:int 和 char 这两种类型。
Char 类型的数据用来存放每种棋子的图标;int 类型的数据用来存放每种棋子的权重。
关于棋子的权重问题,这个是和程序的计分算法有关:假设由棋子A可以吃掉棋子B,在给每种棋子赋予权重数值的情况下,做如下运算:X=A-B,结果X作为两种棋子的权重差值(由于象棋的胜负判断方法是国王是否被吃掉,所以当X的值在一个区间内的时候,判断被减数的一方输,也就是B的那一方输,区间的下限是士兵的权重和国王权重的差值;区间的上限是王后的权重和国王权重的差值)。
这是每个棋子的权重值:
士兵:1
战车:2
马:3
象:4
王后:5
国王:10
这种情况下的X的区间范围为(-9,-5)
这个区间满足所有棋子吃掉王的情况,而且和其他棋子权重的差值区域没有交集。
下面是重点:第四套算法、AI 对棋局的判断和对自己棋子的保护
我现在的想法是设置一个变量:dangerous (危险系数变量),AI 可以通过检测这个变量的大小来判断棋局对自己的危险程度,从而做出相应的措施(有时候会出现有好几种可以实行的走法,但是你只有一步,这时把所有的操作的权重差值从高到低,如果自己被将军则把保护国王的操作放在第一位,危险系数变量的值越高,就执行权重差值越高的操作,保护国王的操作作为特殊情况来执行,单独建立函数),危险系数变量的确定算法我有个想法(不是最好的,需要优化),把排列棋子的方向作为棋盘的行(X轴),另一个方向作为棋盘的列(Y轴),以玩家的那一方为首,确定一个基准线,超过这个基准线则給棋子的权重值乘上相应的数值,计入危险系数变量,通过这个方法来确定危险系数(目前我的想法是把第三行确定为基准线,因为第一步只有马可以越子,且最远走到第三行,超过第三行,就可以布局,所以从第三行到第八行分别给每一行赋值,把走过基准线的棋子的权重值乘以当前到达的那一行,计入危险系数,每次AI的回合开始的时候,危险系数的数值重置,重新计算【这里想到一个新想法:每当玩家的同一种一种棋子吃掉AI的棋子三次或两次以上的时候,在危险系数计算的过程中给玩家使用的棋子的权重加上一个数字之后再进行乘法运算,然后标记这种棋子,在,以更加有效的保护自己的棋子或者发起更有效的进攻,操作顺序放在保护国王之后,也作为特殊操作】)。
重点2:AI的进攻:当出现可以消灭的棋子时,进行操作比对,如果AI 的棋子造成的危险系数(使用相同的危险系数算法进行计算,情况以玩家为准,【dangerous-player】两个变量进行大小对比)大于玩家的棋子给AI 造成的危险系数就进行进攻;如果出现多种进攻的选择时,选择给玩家造成危险系数最大的操作执行。
扫描算法:从AI的那一方开始,从最后一行扫描到玩家的最后一行,如果有棋子满足进攻,保护,和危险系数变量计算的条件,返回它们的数组下标和其他相应需要的数值,进行计算。
还需要确定每个棋子的势力范围,作为基础数据,以那个棋子的权重值标号它们自己的势力范围,在扫描的过程中,扫描那个棋子的权重来使用相应的基础数据。
计算机项目:国际象棋相关推荐
- 计算机项目教学法探讨,【计算机教学论文】项目教学法在计算机教学中的应用(共3594字)...
摘要:计算机教学质量的高低决定着技工院校学生计算机专业水平和实践能力的高低,将项目教学法应用于技工院校计算机教学中,能够弥补现有教学模式和教学方法的不足,对提高计算机教学质量有着积极促进作用.因此,笔 ...
- 计算机项目教学法探讨,项目教学法在计算机教学中应用计算机教学论文计算机论文...
<项目教学法在计算机教学中应用计算机教学论文计算机论文>由会员分享,可在线阅读,更多相关<项目教学法在计算机教学中应用计算机教学论文计算机论文(7页珍藏版)>请在人人文库网上搜 ...
- 积分学在计算机行业的应用,浅谈积分激励在计算机项目教学中的应用.doc
PAGE PAGE 1 浅谈积分激励在计算机项目教学中的应用 摘要:爱因斯坦曾说过:"兴趣是最好的老师".如何提高学生的学习兴趣?调动学生的学习积极性,进而提高学生的专业技能水平, ...
- 计算机运维相关专业知识考试,计算机项目运维人员考什么证书
计算机项目是一种属于典型项目的科技工程.在计算机项目有许多的分支,包括软件.系统集成.计算机系统等.在一个计算机项目中,项目运维人员是一个项目的末端,承担着项目的最终测试工作,对于一个项目也是有一定的 ...
- 计算机公司招聘应该考什么证书,计算机项目经理可以考哪些证
计算机项目经理可以考哪些证 项目经理是各行各业中比较重要的一个岗位,项目经理是为企业提供产品的人员.项目有工程项目与商业活动之分.无论是工程项目经理,还是商业活动项目经理,都是为企业提供产品或提供服务 ...
- 计算机word实训项目任务说明,计算机项目实训报告怎么写啊
我用的2000 Win2000中关于页面文件的管理项目在控制面板中,进入"控制面板"后选"系统",然后在"高级/性能选项"中选择" ...
- 计算机项目教学法探讨,基于项目教学法的非计算机专业计算机教学的设计和探讨...
摘 要:非计算机专业计算机教学课程的开设,主要是为了培养学生的计算机应用能力,使学生通过学习计算机解决生活和工作中的实际问题.计算机教学中运用项目教学法,不仅提高了学生在学习过程中的学习热情和积极性, ...
- 李三立院士逝世:中国计算机体系结构先驱,曾为国防计算机项目总负责人
鱼羊 发自 凹非寺 量子位 | 公众号 QbitAI 据清华大学消息,著名计算机专家李三立院士因病医治无效,于4月23日在京去世,享年87岁. 李三立是中国工程院院士.清华大学计算机科学与技术系教授, ...
- python资源管理器 计算机项目下的_高级语言程序设计(Python)_中国大学MOOC(慕课)_题库及答案...
高级语言程序设计(Python)_中国大学MOOC(慕课)_题库及答案 来源:未知 编辑:admin 时间:2020-06-30 更多相关问题 以下选项中能正确调用fun函数的语句是charfun(c ...
最新文章
- python中递归函数的实例_Python 递归函数详解及实例
- 深度学习: mAP (Mean Average Precision)
- python可变参数_Python 的四种共享传参详解
- Office365 Manager Plus之报表
- PHP的Excel操作
- how2java_HOW-TO:在Spring 4和Java 7中使用@PropertySource批注
- shiro学习(20): 自定义过滤规则
- 三维卷积神经网络预测MNIST数字详解
- 软件测试中开发团队和测试团队的职责
- 创建mysql windows服务_MySQL的安装及创建(windows下操作)
- 从Oracle到PostgreSQL:Storage Index 特性 vs BRIN 索引
- jmeter之使用代理录制脚本
- UNIX操作系统发展史简介
- php新手自学手册,PHP完全自学手册(文档教程)
- 关于java的http请求的工具类
- 华为鸿蒙系统支持什么手机_华为鸿蒙系统支持的手机型号_鸿蒙系统支持华为哪几款手机...
- 微信公众号迁移及公证书快速办理流程
- matlab rand 2 3 4,matlab随机函数rand的使用
- SpringBoot强制下载文件
- 次元服务器的位置,暮色次元服务器介绍