吕梁建设机械网站,怎么让网站排名上去,php建设图书网站代码,做网站的体会为了实现人机对战功能#xff0c;必须实现象棋的人工智能#xff0c;将象棋的每个棋子都赋予一定的权重#xff0c;每走一步都计算分值#xff0c;选择得分最高的一步#xff0c;这是象棋人工智能的基本思想。 #ifndef AI_H#define AI_H#include cocos2d.hUSI…为了实现人机对战功能必须实现象棋的人工智能将象棋的每个棋子都赋予一定的权重每走一步都计算分值选择得分最高的一步这是象棋人工智能的基本思想。 #ifndef AI_H#define AI_H#include cocos2d.hUSING_NS_CC;class SceneGame;class Step : public CCObject{public:int _moveid;int _killid;int _xFrom;int _yFrom;int _xTo;int _yTo;static Step* create(int moveid, int killid, int xFrom, int yFrom, int xTo, int yTo){Step* step new Step;step-_killid killid;step-_moveid moveid;step-_xFrom xFrom;step-_xTo xTo;step-_yFrom yFrom;step-_yTo yTo;step-autorelease();return step;}};class AI{public:AI(SceneGame *game);SceneGame *_game;Step *GenOneMove(int level2);int getScore();static int _score[7];CCArray *getAllPossibleMove();void getAllPossibleMove(int idx,CCArray *arr);int getMinValue(int level,int maxScore);int getMaxValue(int level,int minScore);Step *_step;};#endif // AI_H得分表
int AI::_score[7]
{1000,10,10,100,50,50,20
};
创建一步
Step *AI::GenOneMove(int level)
{int maxScore-10000;Step *ret;//find all possible access an calcute the hights scoreCCArray *possibleMOvegetAllPossibleMove();CCObject *obj;CCARRAY_FOREACH(possibleMOve,obj){Step *step(Step*)obj;_game-fakeMove(step);int scoregetMinValue(level-1,maxScore);//int scoregetScore();_game-unfakeMove(step);if(scoremaxScore){maxScorescore;retstep;}}return ret;}
最大值最小值算法
int AI::getMinValue(int level,int maxScore)
{if(level 0){return getScore();}int minScore10000;CCArray *possibleMOvegetAllPossibleMove();CCObject *obj;CCARRAY_FOREACH(possibleMOve,obj){Step *step(Step*)obj;_game-fakeMove(step);int scoregetMaxValue(level-1,minScore);_game-unfakeMove(step);if(scoremaxScore){minScorescore;return minScore;}if(scoreminScore){minScorescore;}}return minScore;
}
int AI::getMaxValue(int level,int minScore)
{if(level 0){return getScore();}int maxScore-10000;CCArray *possibleMOvegetAllPossibleMove();CCObject *obj;CCARRAY_FOREACH(possibleMOve,obj){Step *step(Step*)obj;_game-fakeMove(step);int scoregetMinValue(level-1,maxScore);_game-unfakeMove(step);if(scoreminScore){maxScorescore;break;}if(scoremaxScore){maxScorescore;}}return maxScore;
}值得注意的是象棋预先考虑的步骤越多象棋越智能但是当象棋考虑到第4步的时候ubuntu就崩溃了可以采用智能减枝算法有效减少计算量。注意当使用智能减枝时一定要将假动作回移不然会引起递归混乱。