能够画出9*9格,有两个棋手A,B,交替输入列数0-9,由于重力原理,输入这个列下几行没有棋子,则自动下落;A显示棋子是X,B显示棋子O,要求当出现四连胜利!A和B交替进行:
import java.util.Scanner;
public class practice7Arrays{
//悬挂的四子棋
public static void main(String[]args){
Scanner input = new Scanner(System.in);
String[][] qi = new String[6][7];
String yuanShiYuanSu = "| ";
String yellow = "| Y ";
String red = "| R ";
int count = 0;//谁下子及下了多少子的判断计数器
//初始化棋子数组
for(int i = 0;i < qi.length;i++)
for(int j = 0;j < qi[0].length;j++)
qi[i][j] = yuanShiYuanSu;
//画出原始棋盘
System.out.println("-----------------------------");
for(int i = qi.length - 1;i >= 0;i--){
for(int j = 0;j < qi[0].length;j++)
System.out.print(qi[i][j]);
System.out.println("|");
System.out.println("-----------------------------");
}
for(int i = 0;i < qi[0].length;i++)
System.out.print("* "+(i+1)+" ");
System.out.println("*");
int row = 0,column = 0;//行列下标初始化
//下棋循环开始
while (true) {
row = 0;
column = 0;
if (count % 2 == 0) {//黄方下子
System.out.print("\n\nY player please drop a yellow disk at column(1~7):");
while (true) {//黄方下子循环开始
column = input.nextInt() - 1;
if (column >= 0 && column <= 6) {// 输入合法进行下子
for (row = 0; row < qi.length; row++) {
if (qi[row][column] == yuanShiYuanSu) {
qi[row][column] = yellow;
break;
}
}
if (row == qi.length)//该列棋子满,重新输入
System.out.print("The column of you enter is full,"
+ "please reEnter! : ");
else//棋子没满,下子结束
break;
}
else// 输入不合法,重新下子
System.out.print("You enter the wrong column,"
+ "please reEnter! : ");
}//黄方下子循环结束
}//if(count % 2 == 0)
else{//红方下子
System.out.print("\n\nR player please drop a yellow disk at column(1~7):");
while (true) {//红方下子循环开始
column = input.nextInt() - 1;
if (column >= 0 && column <= 6) {// 输入合法进行下子
for (row = 0; row < qi.length; row++) {
if (qi[row][column] == yuanShiYuanSu) {
qi[row][column] = red;
break;
}
}
if (row == qi.length)//该列棋子满,重新输入
System.out.print("The column of you enter is full,"
+ "please reEnter! : ");
else//棋子没满,下子结束
break;
}
else// 输入不合法,重新下子
System.out.print("You enter the wrong column,"
+ "please reEnter! : ");
}//红方下子循环结束
}//if(count % 2 != 0)
//画出棋盘
System.out.println("-----------------------------");
for(int i = qi.length - 1;i >= 0;i--){
for(int j = 0;j < qi[0].length;j++)
System.out.print(qi[i][j]);
System.out.println("|");
System.out.println("-----------------------------");
}
for(int i = 0;i < qi[0].length;i++)
System.out.print("* "+(i+1)+" ");
System.out.println("*");
//输赢标志位
boolean flagForYWin = false;
boolean flagForRWin = false;
//只需对当前下子的周围情况进行判断来决定棋局结果
if (count % 2 == 0) {//yellow player is win?
//行检测开始
if (column <= 3) {
for (int jj = 0; jj <= column; jj++)
if (qi[row][jj] == yellow
&& qi[row][jj + 1] == yellow
&& qi[row][jj + 2] == yellow
&& qi[row][jj + 3] == yellow) {
flagForYWin = true;
break;
}
}
else {
for (int jj = column - 3; jj <= 3; jj++)
if (qi[row][jj] == yellow
&& qi[row][jj + 1] == yellow
&& qi[row][jj + 2] == yellow
&& qi[row][jj + 3] == yellow) {
flagForYWin = true;
break;
}
}
if (flagForYWin) {
System.out.println("The yellow player win the game!");
break;
}
//列检测开始
if (row >= 3) {
if (qi[row][column] == yellow
&& qi[row - 1][column] == yellow
&& qi[row - 2][column] == yellow
&& qi[row - 3][column] == yellow)
flagForYWin = true;
}
if (flagForYWin) {
System.out.println("The yellow player win the game!");
break;
}
//正反对角检测
if(row >= 3){
if(column < 3){
if (qi[row][column] == yellow
&& qi[row - 1][column + 1] == yellow
&& qi[row - 2][column + 2] == yellow
&& qi[row - 3][column + 3] == yellow)
flagForYWin = true;
}
else if(column > 3){
if (qi[row][column] == yellow
&& qi[row - 1][column - 1] == yellow
&& qi[row - 2][column - 2] == yellow
&& qi[row - 3][column - 3] == yellow)
flagForYWin = true;
}
else{
if ((qi[row][column] == yellow
&& qi[row - 1][column + 1] == yellow
&& qi[row - 2][column + 2] == yellow
&& qi[row - 3][column + 3] == yellow)
|| (qi[row][column] == yellow
&& qi[row - 1][column - 1] == yellow
&& qi[row - 2][column - 2] == yellow
&& qi[row - 3][column - 3] == yellow))
flagForYWin = true;
}
}
if (flagForYWin) {
System.out.println("The yellow player win the game!");
break;
}
}//yellow player is win?
else{//red player is win?
//行检测开始
if (column <= 3) {
for (int jj = 0; jj <= column; jj++)
if (qi[row][jj] == red
&& qi[row][jj + 1] == red
&& qi[row][jj + 2] == red
&& qi[row][jj + 3] == red) {
flagForRWin = true;
break;
}
}
else {
for (int jj = column - 3; jj <= 3; jj++)
if (qi[row][jj] == red
&& qi[row][jj + 1] == red
&& qi[row][jj + 2] == red
&& qi[row][jj + 3] == red) {
flagForRWin = true;
break;
}
}
if (flagForRWin) {
System.out.println("The red player win the game!");
break;
}
//列检测开始
if (row >= 3) {
if (qi[row][column] == red
&& qi[row - 1][column] == red
&& qi[row - 2][column] == red
&& qi[row - 3][column] == red)
flagForRWin = true;
}
if (flagForRWin) {
System.out.println("The red player win the game!");
break;
}
//正反对角检测
if(row >= 3){
if(column < 3){
if (qi[row][column] == red
&& qi[row - 1][column + 1] == red
&& qi[row - 2][column + 2] == red
&& qi[row - 3][column + 3] == red)
flagForRWin = true;
}
else if(column > 3){
if (qi[row][column] == red
&& qi[row - 1][column - 1] == red
&& qi[row - 2][column - 2] == red
&& qi[row - 3][column - 3] == red)
flagForRWin = true;
}
else{
if ((qi[row][column] == red
&& qi[row - 1][column + 1] == red
&& qi[row - 2][column + 2] == red
&& qi[row - 3][column + 3] == red)
|| (qi[row][column] == red
&& qi[row - 1][column - 1] == red
&& qi[row - 2][column - 2] == red
&& qi[row - 3][column - 3] == red))
flagForRWin = true;
}
}
if (flagForRWin) {
System.out.println("The red player win the game!");
break;
}
}
count++;//棋子数加1,并用于谁下棋子的判断
//棋盘下满棋子,是平局
if(count == 6*7){
System.out.println("棋盘棋子已经下满,是平局!");
break;
}
}//下棋循环结束
}//方法块
}//类块