cocos2d-x 3.3 之黑白棋设计 NO.5 AI

前端之家收集整理的这篇文章主要介绍了cocos2d-x 3.3 之黑白棋设计 NO.5 AI前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

第一次写AI,从最开始随便就能赢到最后仔细下都不一定能赢,这中间花费了很长一段时间,代码量也超过了之前很多。每次改进和修复BUG都是对自己的一个提升。


我的AI是基于优先级设计的,另外加了一些其他判断,现在先看看棋盘:


红色:这四个点不需要特别说明,占的越多胜利的几率越大

蓝色:这些点是略低于角点的最优点

黄色:这几个点无关优先级,但是需要特别注意,棋盘的博弈就是让自己占到角和不让对方占到角,下这个点容易让出角点,或者让自己有机会占角,所以需要特别注意


以上是棋盘上3种需要注意的区域,其中角和边的点都有自己的优先分数,比如角是50,边是10,另外下一个点能占的棋子数累加也有个分数,还有夹子数......


  1. if(AI_flag==1)
  2. {
  3. //step.1 //寻找角
  4. if(AI_is_horn(turn,i,j))
  5. {
  6. choos_score_2+=(HORN*2);
  7. }
  8. else
  9. {
  10. //step.2 //不下此点就会让出角
  11. if(AI_not_do_no_horn(turn,j))
  12. {
  13. choos_score_2+=HORN;
  14. }
  15. //step.3 //下此点就会让出角
  16. if(AI_no_horn(turn,j))
  17. {
  18. choos_score_2-=HORN;
  19. }
  20. //step.4 //若下此点下一步是否可下角
  21. else if(AI_is_next_horn(turn,j))
  22. {
  23. choos_score_2+=(HORN/2);
  24. }
  25. }
  26. //step.5 //寻找边
  27. if(AI_is_line(turn,j))
  28. {
  29. //step.6 //不下无效边
  30. if(AI_no_line(turn,j))
  31. {
  32. choos_score_2-=LINE;
  33. }
  34. choos_score_2+=LINE;
  35. }
  36. //step.7 //返回夹子分数
  37. int cought=0;
  38. if((cought=AI_is_cought(turn,j))>1)
  39. {
  40. choos_score_2+=cought*CAUGHT;
  41. }
  42. //转换分数
  43. choos_score_2+=AI_getscore(turn,j);
  44. //如果分数比缓存高
  45. rand=CCRANDOM_0_1();
  46. if(rand>=0)
  47. {
  48. if(choos_score_2>=choos_score)
  49. {
  50. choos_x=i;
  51. choos_y=j;
  52. choos_score=choos_score_2;
  53. }
  54. }
  55. else
  56. {
  57. if(choos_score_2>choos_score)
  58. {
  59. choos_x=i;
  60. choos_y=j;
  61. choos_score=choos_score_2;
  62. }
  63. }
  64. }


以上代码是AI的serch函数,其中有7个步骤,代码中有注释比较容易理解,这样电脑就变得比较智能,当然我的代码是单步搜索,还可以做成多步搜索,那么就更加智能了。


以下说说AI如何实现以上的serch函数,我的设计比较简单,就是在类里定义一个跟棋盘一样大的二维数组的模拟棋盘,用一个init函数将棋盘上的棋子数据存入数组里

  1. void Game::AI_chess_init()
  2. {
  3. //初始化储存棋盘
  4. for(int a=0;a<10;a++)
  5. {
  6. for(int b=0;b<10;b++)
  7. {
  8. AI_chess[a][b]=chess[a][b]->qi_type;
  9. }
  10. }
  11. }
非常简单,这样就能直接在模拟棋盘上模拟下棋,每次serch就重新init一下。


AI的设计暂时就是这样,之后如果突然有灵感还会继续修改代码

猜你在找的Cocos2d-x相关文章