控制台版五子棋實現

2021-10-19 18:21:48 字數 4163 閱讀 2523

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace 五子棋

;

/// /// 操作記錄

///

public static listczjl = new list();

/// /// 棋子集合.

///

public static listqzlist = new list();

/// /// 棋盤大小

///

public static int size = 16;

/// /// 當前回合數

///

public static int huihe = 1;

/// /// 當前落子方,0白棋1黑棋

///

public static int type = 0;

/// /// 游標輸入位置x

///

public static int index_x = 0;

/// /// 游標輸入位置y

///

public static int index_y = 0;

/// /// 程式入口

///

///

static void main(string args)

else

// 設定游標輸入點位置

console.setcursorposition(index_x, index_y);

// 定義落子狀態

bool is_lz = true;

// 檢測落子狀態

while (is_lz)

else

}//獲取白棋集合

listbqlist = qzlist.where(r => r.type == 0).tolist();

//獲取黑棋集合

listhqlist = qzlist.where(r => r.type == 1).tolist();

//落子後進行勝負檢測

if (iswin(bqlist))

if (iswin(hqlist))

}console.read();

}/// /// 繪製棋盤

///

/// 棋盤大小

public static void draw_qp(int size)

else

continue;

}//沒有棋子時繪製棋盤

console.write("■");

}//列印遊戲規則

if (gz.length > i)

//換行

console.writeline();}}

/// /// 列印落子記錄

///

/// 操作內容

/// 操作人

public static void draw_czjl(string type)

else

}else

else

}console.writeline();

console.writeline();

//列印落子記錄

foreach (var i in czjl_sort)

}/// /// 勝負校驗

///

/// 棋子集合

public static bool iswin(listqzlist)

qzmodel qzmodel = qzlist.last();// 獲取最新落子點

// 過濾無效棋子

var qzlist_jc = qzlist.where(r =>

(r.x + 8 <= qzmodel.x || r.x - 8 <= qzmodel.x)

&&(r.y - 5 <= qzmodel.y || r.y + 5 <= qzmodel.y)).tolist();

//當有效棋子數不夠時不進行檢測

if (qzlist_jc.count() <= 0)

// 豎向檢測

// 按x座標進行分組獲取和落子點x座標相同的棋子,進行豎向檢測

var qzlist_jc = qzlist_jc.where(r => r.x == qzmodel.x).orderbydescending(s => s.y).tolist();

for (int i = 0; i < qzlist_jc.count; i++)

//檢查棋子是否相連

if (qzlist_jc[i].y == qzlist_jc[i + 1].y)

else

//相連棋子超過5或者等於5時判勝

if (lx_number >= 5)

}// 橫向檢測

// 按y座標進行分組獲取和落子點y座標相同的棋子,進行橫向檢測

var qzlist_jc_x = qzlist_jc.where(r => r.y == qzmodel.y).orderbydescending(s => s.x).tolist();

for (int i = 0; i < qzlist_jc_x.count; i++)

if (qzlist_jc[i].x == qzlist_jc_x[i + 1].x + 2)

else

if (lx_number >= 5)

}// 左斜向檢測\

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

else if (i == 4)

else

if (qzlist_jc.where(r => r.x == x * 2 && r.y == y).count() == 1)

else

if (lx_number >= 5)

}// 右斜向檢測/

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

else if (i == 4)

else

if (qzlist_jc.where(r => r.x == x * 2 && r.y == y).count() == 1)

else

if (lx_number >= 5)

}return is_win;

}/// /// 按鍵檢測游標移動

///

/// 按鍵值

public static bool downkey(consolekey key)

;czjl.add(czjlmodel);

console.setcursorposition(0, 16);

if (type == 0)

else

// 落子失敗返回false,提示玩家重新落子

return false;

}//生成對應棋子,新增到棋子集合

if (type == 0)

;qzlist.add(qzmodel);

}else

;qzlist.add(qzmodel);

}console.setcursorposition(0, 16);

// 生成落子記錄,新增到記錄集合

if (type == 0)

;czjl.add(czjlmodel);

draw_czjl("黑子");

type = 1;

}else

;czjl.add(czjlmodel);

draw_czjl("白子");

huihe++;

type = 0;

}return true;

}return false;

}}/// /// 操作記錄model

///

public class czjlmodel

/// /// 序號

///

public int sort

}/// /// 棋子model

///

public class qzmodel

/// /// 棋子x座標

///

public int x

/// /// 棋子y座標

///

public int y

}

c 控制台五子棋

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

五子棋控制台原始碼分享

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

控制台五子棋遊戲類記錄

這個文件上面的教程和我所理解的有所不同呢,果然還是需要自己來寫,文件只是提供了乙個大致方向 public class chessgame public void newcom map.setmap posx,posy,chessqizi.white.getchessqizi public boole...