C++五子棋(五)——实现AI落子
AI思考落子点
在之前我们已经实现计算权值了,现在要想让AI落子,应根据之前的计算结果使棋子落在分值最大点上。当然可能会出现多个分值相同的最大点,这时在其中随机取一个点落下即可。
- chessData.h
typedef struct point{
  int row;
  int col;
} point_t;
//机器下棋
point_t actionAI(ChessData* data);
- chessData.cpp
#include <time.h>
#include <stdlib.h>
#include <vector>
point_t actionAI(ChessData* data){
  //计算评分
  calcScore(data);
  //找出最大分数位置
  int maxScore = 0;
  std::vector<std::pair<int, int>> maxPoints;
  int k = 0;
  for(int row = 0; row < BOARD_GRAD_SIZE; row++){
    for(int col = 0; col < BOARD_GRAD_SIZE; col++){
      //若该坐标为空
      if(data->chessMap[row][col] == 0){
        //找出最大数和坐标
        if(data->scoreMap[row][col] > maxScore){
          maxScore.clear();
          k = 0;
          maxScore.push_back(std::make_pair(row, col));
          k++;
        }else if(data->scoreMap[row][col] == maxScore){
          maxPoints.push_back(std::make_pair(row, col));
          k++;
        }
      }
    }
  }
  //如果有多个点随机落子
  srand((unsigned)time(0));
  int index = rend() % k;
  return maxPoints[index];
}
实现AI落子
- main.cpp
void AI_GO(){
  point_t point = actionAI(&game);
  clickPosRow = point.row;
  clickPosCol = point.col;
  Sleep(1000);
  chessDown(clickPosRow, clickPosCol, CHESS_WHITE);
  updateGameMap(&game, clickPosRow, clickPosCol);
}
C++五子棋(五)——实现AI落子的更多相关文章
- 五子棋(无AI winform gdi+)
		之前无意间在博客园看到一篇用深度学习玩马里奥的文章,于是就想做这个小东西来测试人工智能算法(准备用PYTHON的库,对神经网络的梦已经做了好多年了,但是太难了,一直懒得动它),本来是想用WPF做UI, ... 
- Java 判断五子棋五子相连
		#开始 最近在忙着做一个基于酷Q的QQ机器人,想到了做游戏,第一个想到的霸气点的游戏就是五子棋啊 ` _>` 因为没有图形界面的原因 所有核心就是判断是否在棋盘上出现了五个棋子连在一起的情况 ... 
- js+canvas五子棋人机大战ai算法
		<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ... 
- 五子棋 AI(AIpha-beta算法)
		博弈树 下过五子棋的人都应该知道,越厉害的人,对棋面的预测程度越深.换句话讲,就是当你下完一步棋,我就能在我的脑海里假设把我所有可能下的地方都下一遍,然后考虑我下完之后你又会下在哪里,最后我根据每次预 ... 
- 五子棋C++版
		当前只完成了单机人人对战 后续会完成联机和AI的实现 定义棋盘 typedef struct { int kind; }Map; //棋盘 0为无子 1为黑子 2为白子 Map maps[line_ ... 
- 原生 Javascript 编写五子棋
		原文地址:原生 Javascript 编写五子棋 博客地址:http://www.extlight.com 一.背景 近一个月没写 Javascript 代码,有点生疏.正好浏览网页时弹出五子棋的游戏 ... 
- 【总结整理】AI产品经理大会2017(转载)
		从企业大数据到企业 AI | 易观智慧院院长 李智 1.AI 不是目的,而是要了解 AI 是什么,真正意义上的强人工智能在前沿领域尚未取得突破,暂时只能在影视文学作品中去思考人机关系.机器人三定律在未 ... 
- 【转载】程序猿转型AI必须知道的几件事!
		历史上AI火过两次,但是最终都已销声匿迹作为结束.这次AI大火的原因:AlphaGo 4比1战胜李世石,相对于一些外行人的恐慌和恐惧,其实很多业内人员在这场世纪之战结束后,都为人类点上了一个大大的赞. ... 
- 【中国象棋人机对战】引入了AI算法,学习低代码和高代码如何混编并互相调用
		以低代码和高代码(原生JS代码)混编的方式引入了AI算法,学习如何使用表达式调用原生代码的.整个过程在众触低代码应用平台进行,适合高阶学员. AI智能级别演示 AI算法分三个等级,体现出来的智能水平不 ... 
随机推荐
- ArcMap操作随记(6)
			1.上流汇流区 [填洼]→[流向]→[分水岭] 2.输入坐标进行移动,也就是精确移动 [移动]工具(在自定义中,其中的[旋转]工具也有类似效果) 3.找最近的要素(矢量) [近邻分析]→[汇总] 4. ... 
- 面试官:Redis中的缓冲区了解吗
			hello 大家好,我是七淅(xī). Redis 大家肯定不陌生,但在使用层面看不到的地方,就容易被忽略.今天想和大家分享的内容是 Redis 各个缓冲区的作用.溢出的后果及优化方向. 在开始正文前 ... 
- Linux kernel serial_ir_init_module()释放后重利用漏洞
			受影响系统:Linux kernel < 5.1.6描述:-------------------------------------------------------------------- ... 
- ASP.NET Core 6 Minimal API的模拟实现
			Minimal API仅仅是在基于IHost/IHostBuilder的服务承载系统上作了小小的封装而已,它利用WebApplication和WebApplicationBuilder这两个类型提供了 ... 
- Arcgis Server发布的带有透明度的地图服务,调用时不显示透明度问题
			问题: 在发布道路地图时候设置地图透明度为50% 使用arcgis API for js 中 ArcGISDynamicMapServiceLayer 调用该地图时,发现透明效果不实现 如下图: 解决 ... 
- 论文解读(GRACE)《Deep Graph Contrastive Representation Learning》
			Paper Information 论文标题:Deep Graph Contrastive Representation Learning论文作者:Yanqiao Zhu, Yichen Xu, Fe ... 
- Git常见错误整理
			参考文章 git 排错 fatal: 'git status --porcelain' failed in submodule abi/cpp 1 fatal: 'git status --porce ... 
- Ubuntu16.04 搭建samba服务器
			1昨天花了一天时间弄了NFS服务器,结果搭建完之后出现各种问题,要么挂载不上,要么就是字符乱码.今天在看到一个关于树莓派的介绍的时候,提到Samba服务器的搭建,我尝试了一下,结果发现很顺利地就能够正 ... 
- 为什么操作 DOM 慢?
			DOM本身是一个js对象, 操作这个对象本身不慢, 但是操作后触发了浏览器的行为, 如repaint和reflow等浏览器行为, 使其变慢 
- linux发布常用命令
			一.linux发布常用命令 //启动Tomcat sh /opt/apache-tomcat-8.5.29/bin/startup.sh //停止tomcat sh /opt/apache-tomca ... 
