二維數(shù)組做五子棋(代碼)

package com.test;

import java.util.Scanner;

public class? TestMain{

public static void main(String[] args) {

Scanner console = new Scanner(System.in);

char[] name = { '空', '黑', '白' };

int count = 0;// 計(jì)數(shù)器,用來(lái)計(jì)算該誰(shuí)下棋了

char[][] qi = new char[16][16];// 把棋盤(pán)情況放進(jìn)二維數(shù)組中

while (true) {

int row = 0;// 初始化從控制臺(tái)接收到的row和col 的index為0

int col = 0;

if (count == 0) {

print(qi, name[count], row, col);

count++;

}

if (count == 1) {

System.out.println("請(qǐng)黑(@)下棋(i j):");

row = console.nextInt(16)%16;// 從控制臺(tái)接收到的row的index

col = console.nextInt(16)%16;// 從控制臺(tái)接收到的col的index

String condition = print(qi, name[count], row, col);

if (condition.length() == 1) {// 下棋正確

count++;

}

if (condition.length() == 2) {// 下棋出現(xiàn)錯(cuò)誤,要下的位置已經(jīng)下過(guò)棋子

System.out.println("此位置已經(jīng)有棋子,黑棋重新再下");

}

if (condition.length() == 3) {// 黑棋子贏

System.out.println("黑棋很給力,白棋是浮云,黑棋贏了");

break;

}

if (condition.length() == 4) {

System.out.println("白棋子贏");

break;

}

}

if (count == 2) {

System.out.println("請(qǐng)白(*)下棋(i j):");

row = console.nextInt(16);

col = console.nextInt(16);

String condition = print(qi, name[count], row, col);

if (condition.length() == 1) {// 打印棋盤(pán)

count--;

}

if (condition.length() == 2) {// 下棋出現(xiàn)錯(cuò)誤,要下的位置已經(jīng)下過(guò)棋子

System.out.println("此位置已經(jīng)有棋子,白棋重新再下");

}

if (condition.length() == 3) {

System.out.println("黑棋子贏");

break;

}

if (condition.length() == 4) {

System.out.println("白棋很給力,黑棋是浮云,白棋贏了");

break;

}

}

}

}

/**

* @param qi是裝棋盤(pán)情況

* @param name輪到誰(shuí)下棋了

*? ? ? ? ? ? row 行號(hào) col 列號(hào) return true-下棋正確,false-下棋錯(cuò)誤,重新下

*/

public static String print(char[][] qi, char name, int row, int col) {

String b = "無(wú)";// 初始化下棋是正確的

String str = "0123456789111111";

// 打印下第一行

System.out.print(" ");

for (int i = 0; i < str.length(); i++) {

System.out.print(str.charAt(i));

}

System.out.println();

for (int i = 0; i < qi.length; i++) {

System.out.print(str.charAt(i));

for (int j = 0; j < qi[i].length; j++) {

if (name == '空') { // 還沒(méi)開(kāi)始下棋時(shí),棋盤(pán)默認(rèn)顯示是'.'

qi[i][j] = '.';

}

if ((name == '黑') && (i == row) && (j == col)) {

if (qi[i][j] != '.') {// 下的位置已經(jīng)有棋子了,返回false

b = "有棋";

} else {

qi[i][j] = '@';// 黑方下棋后的位置顯示是'@'

if (win(qi, '@', row, col)) {

b = "黑棋子";

}

}

}

if ((name == '白') && (i == row) && (j == col)) {

if (qi[i][j] != '.') {

b = "有棋";

} else {

qi[i][j] = '*';// 黑方下棋后的位置顯示是'*'

if (win(qi, '*', row, col)) {

b = "白棋子贏";

}

}

}

System.out.print(qi[i][j]);

}

System.out.println();

}

return b;

}

public static boolean win(char[][] qi, char ch, int row, int col) {

boolean b = false;

boolean ns = n2s(qi, ch, row, col);

boolean we = w2e(qi, ch, row, col);

boolean wnes = wn2es(qi, ch, row, col);

boolean enws = en2ws(qi, ch, row, col);

b = ns || we || wnes || enws;

return b;

}

/* 從北到南方向 */

public static boolean n2s(char[][] qi, char ch, int row, int col) {

boolean win = false;

int north = 0;// begin

int south = 0;// end

while (qi[row][col] == ch) {

row--;

if (row < 0) {

break;

}

}

row++;// row此時(shí)要++,不然等到下面的while(..)中的qi[row][col]永不會(huì)==ch

north = row;

while (qi[row][col] == ch) {

row++;

if (row > 15) {

break;

}

}

south = row;

if ((south - north) >= 5) {

win = true;

}

return win;

}

/* 從西到東方向 */

public static boolean w2e(char[][] qi, char ch, int row, int col) {

boolean win = false;

int west = 0;// begin

int east = 0;// end

while (qi[row][col] == ch) {

col--;

if (col < 0) {

break;

}

}

col++;// col此時(shí)要++,不然等到下面的while(..)中的qi[row][col]永不會(huì)==ch

west = col;

while (qi[row][col] == ch) {

col++;

if (col > 15) {

break;

}

}

east = col;

if ((east - west) >= 5) {

win = true;

}

return win;

}

/* 從西北到東南方向 */

public static boolean wn2es(char[][] qi, char ch, int row, int col) {

boolean win = false;

int wn = 0;// begin

int es = 0;// end

while (qi[row][col] == ch) {

row--;

col--;

if (row < 0 || col < 0) {

break;

}

}

row++;// row和col此時(shí)要++,不然等到下面的while(..)中的qi[row][col]永不會(huì)==ch

col++;

wn = row;

while (qi[row][col] == ch) {

row++;

col++;

if (row > 15 || col > 15) {

break;

}

}

es = row;

if ((es - wn) >= 5) {

win = true;

}

return win;

}

/* 從東北到西南方向 */

public static boolean en2ws(char[][] qi, char ch, int row, int col) {

boolean win = false;

int en = 0;// begin

int ws = 0;// end

while (qi[row][col] == ch) {

row--;

col--;

if (row < 0 || col < 0) {

break;

}

}

row++;// row和col此時(shí)要++,不然等到下面的while(..)中的qi[row][col]永不會(huì)==ch

col++;

en = row;

while (qi[row][col] == ch) {

row++;

col++;

if (row > 15 || col > 15) {

break;

}

}

ws = row;

if ((ws - en) >= 5) {

win = true;

}

return win;

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 回溯算法 回溯法:也稱(chēng)為試探法,它并不考慮問(wèn)題規(guī)模的大小,而是從問(wèn)題的最明顯的最小規(guī)模開(kāi)始逐步求解出可能的答案,并...
    fredal閱讀 13,988評(píng)論 0 89
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問(wèn)題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,890評(píng)論 0 33
  • 【程序1】 題目:古典問(wèn)題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子長(zhǎng)到第三個(gè)月后每個(gè)月又生一對(duì)兔...
    葉總韓閱讀 5,223評(píng)論 0 41
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,626評(píng)論 18 399
  • Java經(jīng)典問(wèn)題算法大全 /*【程序1】 題目:古典問(wèn)題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子...
    趙宇_阿特奇閱讀 2,069評(píng)論 0 2

友情鏈接更多精彩內(nèi)容