下面是我寫的乙個tic-tac-toe的簡單遊戲。
我主要的思路是使用極大極小的搜尋策略。並且體會到博弈程式的好壞很大程度上取決於局面評估函式的好壞。
評估函式和程式對局面的搜尋速度是成反比的。
我的程式中評估函式比較弱。
主要有二個類:
~~~~~~~~~~~~~~~~~~~~map.h~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
#ifndef map_h
#define map_h
#include
#include
#define max_depth 2
using namespace std;
class map
//the computer try to make best movement
int makebestmove(player& computer)
//umake previous movement
bool unmakemove(const int& x,const int& y)
//print the board
void printboard()
}if( -1 == side ) }}
return best ; //返回走棋方的最優值
}private:
static char board[4][4];
enum ;
typedef struct movemove ;
move bestmove; //最佳的下子位置
int genallmove(move* array)}}
return movenum;
}int evaluatemap()
if( 'h' == board[i][j] )}}
memcpy( board , boardcopy , sizeof(boardcopy)); //還原原來的board
return comp - human ;
}int util(int x,int y,char c)
board[x][y] = '0' ;
if( 0 == score )
return 1 ;
else
return score ;
}const static int dir[8][2];
};#endif
char map::board[4][4]=;
const int map::dir[8][2]=,, ,,,,, };
~~~~~~~~~~~~~~~~~~~~~~~player.h~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#ifndef player_h
#define player_h
class player
public:
int posx; //記錄player當前的位置
int posy;
int type;
};#endif
~~~~~~~~~~~~~~~~~~~~~~~主程式~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#include
#include "player.h"
#include "map.h"
#define not !
using namespace std;
player computer(1),human(-1); // 1對應computer -1對應human
map map;
int main()
else
else}}
}cout<<"a draw ... the game ends!" } 題目說明 需要讀入乙個3x3矩陣,矩陣中1表示x,0表示o,如果有三個連在一起的相同符號,則該方獲勝,如果沒有,則沒有獲勝方。解決方法 為了解決這個問題,需要做的是對整個矩陣進行遍歷,看是否存在上述情況。為了達到目的,需要從行 列和對角線三個維度進行遍歷。程式實現 include include i... 昨天看大白書翻到了組合遊戲這章,看著發覺原來是博弈論的內容,於是便看下去了。真是不看不知道,一看才知道自己的水平有多弱,不過好在還是集中精神地看了大部分。從nim遊戲 n堆石子,每人每次可以從任意一堆中取至少1個 至多整堆的石子,不能取者為輸 開始講起,引入必勝態 必敗態的概念 1.乙個狀態是必敗狀... 在乙個2 n的格仔上,alice和bob又開始了新遊戲之旅。這些格仔中的一些已經被塗過色,alice和bob輪流在這些格仔裡進行塗色操作,使用兩種塗色工具,第一種可以塗色任意乙個格仔,第二種可以塗色任意乙個2 2的格仔。每一輪遊戲裡,他們可以選擇一種工具來塗色尚未被染色的格仔。需要注意,塗色2 2的...tic tac toe遊戲勝方判別(井字棋)(一)
組合遊戲(博弈)
博弈 塗色遊戲