五子棋 c 實現和html5實現

2021-08-18 02:48:43 字數 1840 閱讀 5701

臨近畢業,著手整理本科四年的**。本篇整理的是於去年大三完成的五子棋**。

課程需求完成基於c++對戰平台的pbrain.exe 的ai開發。詳細的課程要求和完成情況可以見這裡

主要實現的啟發式搜尋函式:

//alphabeta搜尋負極大值形式

int alphabeta(int depth,int alpha,int beta,int player,int maxdepth)

int bestmoveindex = -1;

int movelistlen = 0;

//可能下子的位置

mov* movelist = generatemoves(movelistlen, player);

//無棋時下中間

if (movelistlen == 1)

for (int i = 0; i < movelistlen; i++)

movelist = mergesort(movelist, movelistlen); //歷史啟發排序,alpha-beta時可用

//向下搜尋

for (int i = 0; iif (terminate || gettickcount() >= stoptime())

makemove(movelist[i], player);

//兒子結點為勝負已分狀態(真正的葉子結點),表明player方走這一步走法後會獲勝

if (isgameover(movelist[i]))

unmakemove(movelist[i]);

delete movelist;

movelist = null;

//負極大值是否要考慮是誰贏 從而返回+- :不用 一定是當前下子方連5子。否則就結束了

return

9999;

}movelist[i].val = -alphabeta(depth - 1, -beta, -alpha, 1 - player, maxdepth);

if (depth == maxdepth)

}/* if (note) */

unmakemove(movelist[i]);

if (alpha < movelist[i].val)

alpha = movelist[i].val;

bestmoveindex = i;

if (depth == maxdepth)

}if (alpha >= beta)

}if (bestmoveindex != -1)

if (depth == maxdepth && bestmoveindex!=-1)

delete movelist;

movelist = null;

return alpha;

}

接下來把c++版本的五子棋重構成基於html5的五子棋**。

首先在const.js 定義了所有要用的常量,比如棋盤距離,大小,各類棋形的評分。

chessboard.js 負責繪製棋盤,儲存棋盤等一切和棋盤相關的操作。

interact.js描述整個下棋的互動過程,相當於c++中的main函式。為了解決在啟發式搜尋時出現的頁面卡頓,引入了htm5的特性web worker。在執行時要注意使用支援該特性的瀏覽器。而該項目的使用方式呼叫了本地的檔案,由於安全原因在chrome上會出現cannot be accessed from origin 『null』的問題,可以搭建本地伺服器,然後通過本地伺服器訪問;或者使用firefox解決。

核心的**函式放在evaluate.js中實現。包括統計棋形,計算得分,alphabeta搜尋。基本思路和c++ version相似,可以說是將c++翻譯成js罷了。

C 實現五子棋

自己寫了一下午,但是還是除錯的時候存在很多問題 繼續改善繼續調整 game.h define game h define row 5 define col 5 void displayboard char board row col int row,int col void gameplayer c...

C 類實現五子棋

用乙個gobang類來實現五子棋功能。include include include using namespace std enum role 控制紅藍方 class gobang 建構函式 設定棋子初始位置為 7,7 紅色先下 遊戲開始 void start void change role 切...

c 實現五子棋遊戲

設計思路 先用二維陣列定義乙個棋盤,0代表沒有玩家下過,1代表玩家一的棋子,2代表玩家二的棋子,將棋盤輸出,然後讓玩家依次輸入所要下的位置的行數和列數,並賦值給陣列,之後進行判斷 判斷棋盤上所有棋子是否有連續5個,如果是,則返回獲勝玩家,如果否,則繼續輸入下一步要下的棋子座標 實現 1 includ...