package ext01;
import java.util.Scanner;
public class Wuziqi {
public static void main(String[] args) {
int space = 0; //棋盘默认值
String[] chessName = {"空","黑","白"};
int[] board = new int[16*16]; //定义一个棋盘,数组中每个元素的默认值为0
Scanner console = new Scanner(System.in);
int idx = 0;
while(true){
print(board); //调用打印棋盘的方法
int color = idx++%2+1;//执黑先行(1,2,1,2,1,2)
int i,j; //棋子的行和列
do{
System.out.print("请 "+chessName[color]+" 方下子(i j):");
i = console.nextInt(16); //i等于从控制台输入的一个16进制的数
j = console.nextInt(16);
}while(board[i*16+j]!=space);
board[i*16+j]=color; //当行和列的数字不为
if(isWin(board, color, i, j)){
print(board);
System.out.println("恭喜"+ chessName[color]);
break;
}
}
}
public static boolean isWin(int[] board, int color, int i, int j) {
return n2sWin(board, color, i, j) ||
w2eWin(board, color, i, j) ||
wn2esWin(board, color, i, j) ||
en2esWin(board, color, i, j) ;
}
/** 东北到西南 */
private static boolean en2esWin(int[] board, int color, int i, int j) {
while( board[i * 16 +j] == color ){
j++;
i--;
if(j==16 || i==-1)
break;
}
//i,j 是第一个空白子
j--;i++;
int c = 0;//计数变量
while(board[i * 16 +j] == color){
c++;
j--;
i++;
if(j==-1 || i==16)
break;
}
return c>=5;
}
/** 西到东 */
private static boolean w2eWin(int[] board, int color, int i, int j) {
while( board[i * 16 +j] == color ){
j--;
if(j==-1)
break;
}
//i,j 是第一个空白子
j++;
int c = 0;//计数变量
while(board[i * 16 +j] == color){
c++;
j++;
if(j==16)
break;
}
return c>=5;
}
/** 西北到东南 */
private static boolean wn2esWin(int[] board, int color, int i, int j) {
while( board[i * 16 +j] == color ){
j--;
i--;
if(j==-1 || i==-1)
break;
}
//i,j 是第一个空白子
j++;i++;
int c = 0;//计数变量
while(board[i * 16 +j] == color){
c++;
j++;
i++;
if(j==16 || i==16)
break;
}
return c>=5;
}
/** 北到南方向 */
private static boolean n2sWin(int[] board, int color, int i, int j) {
while( board[i * 16 +j] == color ){
i--;
if(i==-1)
break;
}
//i,j 是第一个空白子
i++;
int c = 0;//计数变量
while(board[i * 16 +j] == color){
c++;
i++;
if(i==16)
break;
}
return c>=5;
}
//打印棋盘的方法
public static void print(int[] board){
char[] ico = {'+','@','O'};
char[] hex = "0123456789abcdef".toCharArray();
System.out.print(" ");//表示输出一个空格不换行,注意和System.out.println()的区别
//输出列号0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
for(int i=0; i<16; i++){
System.out.print(hex[i]);
}
//换行
System.out.println();
//输出行号及棋盘
for(int i = 0; i < 16; i++){
System.out.print(hex[i]);
for (int j = 0; j < 16; j++) {
System.out.print(ico[board[i*16+j]]); //注意理解这里
}
System.out.println();
}
}
}
评论0