基於MFC vs 2003的人人對戰五子核心演算法

2021-06-16 04:33:04 字數 1714 閱讀 8503

自己寫了乙個五子棋的人人對戰贏棋判斷演算法,寫的時候由於比較匆忙,還存在一些bug,測試了幾遍,好像在棋盤邊緣下棋的時候會出錯。

五子棋,棋盤為15x15,黑棋先下。

我的演算法思想是:每走一步棋子,對其進行進行八個方向判斷,然後對水平,垂直,兩條對角線上的連子數進行相加,為五則當前玩家勝利。

下面是我的核心演算法

/** 函式名稱:getwestsouthnum(cchess nch,int i,int j)

* 函式介紹:判斷右下方和左上方同一顏色相連棋子個數

* 輸入引數:nch,i,j(最後輸入的乙個棋子的物件,棋盤座標)

* 輸出引數:int

* 返回值  :t表示連子個數

*/int cmanagers::geteastsouthnum(int state,int i,int j)

else

break;}}

tempx = i-1;

tempy = j-1;

//判斷左上方棋子連續的個數

if(tempx < 15 && tempy<15 && tempx>=0 && tempy>=0)

else

break;}}

t = t1 + t2;

return t;        }/*

* 函式名稱:getwestsouthnum(cchess nch,int i,int j)

* 函式介紹:判斷右上方和左下方同一顏色相連棋子個數

* 輸入引數:nch,i,j(最後輸入的乙個棋子的物件,棋盤座標)

* 輸出引數:int

* 返回值  :t表示連子個數

*/int cmanagers::getwestsouthnum(int state,int i,int j)

else

break;}}

tempx = i-1;

tempy = j+1;

//判斷左下方棋子連續的個數

if(tempx < 15 && tempy<15 && tempx>=0 && tempy>=0)

else

break;}}

t = t1 + t2;

return t;       

}/判斷水平方向連子個數

int cmanagers::gethorizontalnum(int state,int i,int j)

else

break;}}

tempx = i+1;

tempy = j;

//判斷右邊水平方向棋子連續的個數

if(tempx < 15 && tempy<15 && tempx>=0 && tempy>=0)

else

break;}}

t = t1 + t2;

return t;       

}/判斷垂直方向連子個數

int cmanagers::getverticaltalnum(int state,int i,int j)

else

break;}}

tempx = i;

tempy = j+1;

//判斷下面垂直方向棋子連續的個數

if(tempx < 15 && tempy<15 && tempx>=0 && tempy>=0)

else

break;}}

t = t1 + t2;

return t;       

}

人人對戰五子棋

c語言人人對戰五子棋 看起來五子棋很簡單,但是對於其中有許多需要考慮的因素,所以前前後後大概花了有24小時左右的時間,找bug的時間應該花的是最多的,另外主要是自己的思考非常重要,不能忙碌的複製別人的 別人每一行 都需要弄清楚,不是簡單意義上的搬磚,那樣對於自己是沒有一點成長的。以下附上我的 c 中...

Java五子棋 人人對戰

五子棋是國內受到普遍歡迎的一款遊戲,規則簡單,趣味不俗。作為一名程式設計師,自然也希望將它移植到電腦上。這篇我們要講的主要就是實現簡單的人人對戰,ai演算法放到以後單獨說。我們先來整理一下脈絡,看看實現五子棋需要哪些內容 按鈕的監聽我們新增在actionperformed方法 使用這個方法需要新增a...

基於MFC實現的人機對戰五子棋遊戲

1 引言 此報告將詳細介紹本次課程設計的動機 設計思路及編寫技術的詳細過程,展現我所學過的c 知識以及我通過本次課程設計所學到例如mfc等知識。在文件最後我也會記錄我所編寫過程遇到的問題以及解決方案。1.1 背景 五子棋是起源於中國古代的傳統黑白棋種之一,此遊戲不僅能增強思維能力,提高智力,而且變化...