控制台五子棋遊戲類記錄

2021-07-10 15:21:14 字數 1803 閱讀 2430

這個文件上面的教程和我所理解的有所不同呢,果然還是需要自己來寫,文件只是提供了乙個大致方向

public class chessgame 

public void newcom()

map.setmap(posx, posy, chessqizi.white.getchessqizi()); }

public boolean inputiegal(int posx,int posy)

public boolean iswin(int posx,int posy){ //判斷是否有勝利

int startx=0;

int starty=0;

int endx=map.map_size-1;

int endy=endx;

int samecount=0;

int temp=0;

boolean t=false;

temp=posx-win_count+1; //計算起點的最小x左邊與y座標

startx=temp<0?0:temp;

temp=posy-win_count+1;

starty=temp<0?0:temp;

temp=posx+win_count-1; //計算終點的最大x座標與y座標

endx=temp>map.map_size-1?map.map_size-1:temp;

temp=posy+win_count-1;

endy=temp>map.map_size-1?map.map_size-1:temp;

string board=map.getmap();

for (int i=starty;i

1.每次下完一顆棋子,就通過程式從橫、豎、斜各個方向掃瞄棋盤,如果在某個方向中,有同種顏色的棋子達到五連子,則此顏色的玩家為贏。如果沒有相同顏色的棋子達到五連子,則繼續遊戲。該判斷方法需要遍歷整個棋盤,也就是意味著每次下棋後(玩家或者「電腦」)都需要對棋盤進行遍歷,這樣對程式的效能會造成一定的影響。

2.每次下完一顆棋子,以該棋子為中心,掃瞄在此棋子所在範圍內的橫、豎、斜方向,驗證加上此棋子有沒有形成五連子,如果形成五連子,則下棋子的玩家為贏。此方法與前面的方法比較,因為不需要掃瞄整個棋盤,所以更加快速,本章程式使用的是此方法。

可以看出,(0,0

),(0,3

),(0,6

),(3,0

),(6,0

),(3,7

),(7,3

),(7,7

)這些座標都是此黑棋能形成五連子的最小或者最大位置的棋子,如果各個方向有足夠的空間,就延伸到第五顆棋子,如果沒有,就只延伸到邊界。所以,只要能計算出任意一顆棋子的這些位置,我們就可以判斷遊戲的輸贏,並且是以該棋子為中心向周圍進行遍歷。

首先是計算出在這顆棋子的直線上(

橫、豎、斜方向

)能達到五連子的最小x、

y座標與最大x、

y座標,然後從最小x、

y座標訪問到最大x、

y座標,如果此顏色棋子的相連累積數目達到五連子,則為贏。以上**只是實現橫向遍歷判斷,豎向遍歷與斜向遍歷的判斷方法與橫向遍歷的實現基本類似。這裡需要注意的是,當遇到乙個可以相邊的棋子,就需要為

samecount值加1

。 然後今天還有乙個問題就是,現在寫的是類,這個類裡面的屬性posx,posy應該如何使用,差點搞不明白,都是在按自己的邏輯思維在寫。現在我可以很清晰的講出我寫的意思,就等最後再看吧,有問題了再解決。

c 控制台五子棋

用控制台來寫五子棋練習。下面是原始碼 首先我寫了個board類,用來處理跟棋盤有關的東西 其成員有 private int checkerboard new int 20,20 public enum checker private void show public void update int ...

控制台版五子棋實現

using system using system.collections.generic using system.linq using system.text using system.threading.tasks namespace 五子棋 操作記錄 public static listcz...

五子棋控制台原始碼分享

今天檢視eclipse上的 偶然發現了之前寫過的一段小 感覺命名 等都不是特別規範,不過還是想拿來和大家分享下。希望感興趣的可以看下,裡面有好多bug沒進行處理,只是當時用來寫著玩的。package com.demo created by tt on 2017 01 12.五子棋 public cl...