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;
}
}