加入搜索层数,取局面的最小值,最大值构成递归 ,这里回溯的作用就体现出来

Step* SingleGame::getBestMove()
{QVector<Step *> steps;//看看有哪些步骤可以走getAllPossibleMove(steps);int maxScore=-100000;Step* ret;for(QVector<Step*>::iterator it=steps.begin();it!=steps.end();++it){Step* step=*it;//试着走一下fakeMove(step);int score=getMinScore(_level-1);unfakeMove(step);if(score>maxScore){maxScore=score;ret=step;}}return ret;
}

求最小值

int SingleGame::getMinScore(int level)
{if(level==0) return calcScore();QVector<Step*> steps;getAllPossibleMove(steps);int minScore=100000;for(QVector<Step*>::iterator it=steps.begin();it!=steps.end();++it){Step* step=*it;fakeMove(step);int score=getMaxScore(level-1);unfakeMove(step);if(score<minScore){minScore=score;}}return minScore;
}

求最大值

int SingleGame::getMaxScore(int level)
{if(level==0) return calcScore();QVector<Step*> steps;getAllPossibleMove(steps);int maxScore=-100000;for(QVector<Step*>::iterator it=steps.begin();it!=steps.end();++it){Step* step=*it;fakeMove(step);int score=getMinScore(level-1);unfakeMove(step);if(score>maxScore){maxScore=score;}}return maxScore;
}

C++ QT中国象棋项目讲解(六) 人机对战N步搜索相关推荐

  1. C++ QT中国象棋项目讲解(四) 简单的人机对战

    人机对战实战用SingleGame.h #ifndef SINGLEGAME_H #define SINGLEGAME_H#include "Board.h" #include & ...

  2. Qt中国象棋四——显示棋子可移动位置/项目完成

    点击上方蓝字可关注公众号,方便下次阅读~ 先看段视频! 经过上次的介绍,剩下的只是一些逻辑的调整.距离基本版的完成已经比较接近了. 在介绍显示棋子可移动区域前,先介绍下棋子  的可移动位置算法. 1. ...

  3. Qt中国象棋一—— Qt 2D 绘图入门

    最近想用Qt写一个中国象棋的项目,在网上找了几个例子后,发现关于绘图部分基础为0 ,于是根据项目需要学习一下.查了一些网上的资料,在此总结一下:我比较喜欢的方式是用到什么学什么,或者自己想做一个东西, ...

  4. Qt中国象棋之棋子的实现

    一.添加棋子类 添加新文件 -> C++ -> C++ Class,类名ChessPieces 棋子头文件chesspieces.h #ifndef CHESSPIECES_H #defi ...

  5. Qt中国象棋之棋子的移动

    通过鼠标事件实现棋子移动(还没实现每个棋子的移动规则,所以可以随便移动,随便吃棋子,只要轮到走棋的话) 1.判断鼠标左键点击的位置是否为棋盘合法位置 2.只有在棋盘的行.列交叉点为中心的圆圈(刚好是处 ...

  6. C++新手项目实践 — 智能人机对战五子棋

    C-project-practice-intelligent-man-machine-gobang-fight C++新手项目实践 - 智能人机五子棋对战(利用Easyx的基础函数) 项目演示视频 智 ...

  7. Android 蓝牙对战五子棋项目实现(含人机对战功能)

    上周花了一周时间做的课程设计的项目,实现的功能如下: 基本功能: (1) 该APP能够通过蓝牙自动搜索周围其他使用了该APP的手机,用户可选择其中某一个APP发起对战的要求,被发起方可以同意或者拒绝: ...

  8. js+html 象棋游戏 可以简单人机对战

    实现人机对战的象棋游戏需要更多的代码和逻辑.下面是一个简单的示例,展示了如何使用HTML.CSS和JavaScript来实现人机对战的象棋游戏. HTML部分(index.html): <!DO ...

  9. java中国象棋棋盘放置棋子,Qt中国象棋二——棋盘与棋子的绘制

    上次和大家分享了Qt的2D绘图基础知识,这样可以更好地理解象棋中一些关于绘图的程序.这次要和大家分享的则是棋盘与棋子的绘制,也可以说是Qt 2D绘图的一些具体应用. 源程序是我在网上找的,而且是下载了 ...

最新文章

  1. JavaScript 各种遍历方式详解
  2. 【精辟】人工智能先锋人物杰夫·辛顿说:“深度学习将无所不能”
  3. 【opencv】21.图像处理为什么要归一化
  4. Python语言学习之时间那些事:python和时间的使用方法之详细攻略
  5. 日行千里,全凭“车”况,为什么我们要升级平台
  6. 小程序 const moment = require('moment')_小程序依赖分析实践
  7. CloudIDE插件开发实战:教你如何调试代码
  8. 荣耀:目前还在观望鸿蒙,未来的对手是苹果
  9. Java日志设计实践(1) - 常见问题
  10. idea中maven找不到本地仓库jar包_有人说 Maven 很简单,我却被 伤害 过
  11. Redis入门(适合新手)
  12. 顶级域名、一级域名、二级域名、子域名、父域名
  13. “手把手教你设计”—12个最佳手机APP界面设计教程
  14. whisper客服源码_以太坊源码分析—Whisper
  15. python基础—列表解析式简单应用
  16. Redis中的keys和Hkeys的区别
  17. GTD时间管理学习day01---基本原理
  18. 新媒体营销的模式,自媒体营销方式有哪些
  19. HTML5超炫全屏焦点图插件
  20. Jetson-nano:制作TF卡启动

热门文章

  1. 百万美元“未来科技大奖”揭晓:山东大学彭实戈教授荣获数学与计算机科学奖-547。
  2. oracle字符集增加生僻字,Oracle SQL一个“生僻字”的优化
  3. 哟西,张家界三日自助游走起@-@
  4. 喝一碗孟婆汤nbsp;走一遍奈何桥
  5. 基于蓝牙协议的无线网络化传感器设计
  6. PAT A1027 Colors in Mars
  7. 【附源码】计算机毕业设计java智慧灭火器管理系统设计与实现
  8. cl.fe3.xyz index.php,2_FE_Diabetes.ipynb
  9. 什么软件可以剪辑音乐?
  10. 工信部就垃圾短信问题约谈7家虚拟运营商