

带备注和解释哦。谢谢
package com.neu.test;
import java.util.Scanner;
public class ConnectFour {
private static String[][] qipan = new String[6][7];//棋盘
public static String NULL_DISK = " ";//未下子的状态
public static String RED_DISK = " R ";//未下子的状态
public static String YELLOW_DISK = " Y ";//未下子的状态
private static boolean finished=false;//是否结束
private static Disk disk;
public static void main(String[] args) {
initGrid();
Scanner scan = new Scanner(System.in);
while (true){
System.out.print("请"+disk.remark+"子落子:");
String line = scan.nextLine();
DropDisk(line);
if(finished){
break;
}
}
}
/**
* 落子
* @param loc
*/
private static void DropDisk(String loc){
//TODO 严格点应该再判断输入的数据格式是否符合标准,还有是否超出棋盘区域
String[] locArr = loc.split(" ");
int locX = Integer.valueOf(locArr[0]);
int locY = Integer.valueOf(locArr[1]);
if(qipan[locX][locY].equals(NULL_DISK)){
qipan[locX][locY] = disk.val;
checkWin();
disk = disk.next();
drawGrid();
}else{
System.out.println("该位置已经有棋子!!!!");
}
}
/**
* 检查游戏是否结束
*/
public static void checkWin(){
boolean keep = true;
boolean hasBlank = false;
for(int i=0;i<6;i++){
if(!keep){
break;
}
for(int j=0;j<7;j++){
//向右4个子
try{
String q1 = qipan[i][j];
String q2 = qipan[i][j+1];
String q3 = qipan[i][j+2];
String q4 = qipan[i][j+3];
if(disk.val.equals(q1)&&disk.val.equals(q2)&&disk.val.equals(q3)&&disk.val.equals(q4)){
keep=false;
break;
}
}catch (Exception e){
//数组下标越界,不做处理
}
//向下4个子
try{
String q1 = qipan[i][j];
String q2 = qipan[i+1][j];
String q3 = qipan[i+2][j];
String q4 = qipan[i+3][j];
if(disk.val.equals(q1)&&disk.val.equals(q2)&&disk.val.equals(q3)&&disk.val.equals(q4)){
keep=false;
break;
}
}catch (Exception e){
//数组下标越界,不做处理
}
//右下
try{
String q1 = qipan[i][j];
String q2 = qipan[i+1][j+1];
String q3 = qipan[i+2][j+2];
String q4 = qipan[i+3][j+3];
if(disk.val.equals(q1)&&disk.val.equals(q2)&&disk.val.equals(q3)&&disk.val.equals(q4)){
keep=false;
break;
}
}catch (Exception e){
//数组下标越界,不做处理
}
//右上
try{
String q1 = qipan[i][j];
String q2 = qipan[i+1][j-1];
String q3 = qipan[i+2][j-2];
String q4 = qipan[i+3][j-3];
if(disk.val.equals(q1)&&disk.val.equals(q2)&&disk.val.equals(q3)&&disk.val.equals(q4)){
keep=false;
break;
}
}catch (Exception e){
//数组下标越界,不做处理
}
if(NULL_DISK.equals(qipan[i][j])){
//判断是否还有空位,有就可以继续下
hasBlank = true;
}
}
}
if(!keep){
System.out.println(disk.remark+"子获胜,游戏结束!");
finished = true;
}else{
if(!hasBlank){
System.out.println("棋盘已满,平局,游戏结束!");
finished = true;
}
}
}
/**
* 将下好子的棋盘打印出来
*/
public static void drawGrid(){
for(int i=0;i<6;i++){
System.out.print("|");
for(int j=0;j<7;j++){
System.out.print(qipan[i][j]+"|");
}
System.out.println();
}
}
/**
* 棋盘初始化
*/
private static void initGrid(){
System.out.println("初始化棋盘,请稍后...");
for(int i=0;i<6;i++){
for(int j=0;j<7;j++){
qipan[i][j] = NULL_DISK;
}
}
disk = new Disk();
drawGrid();
System.out.println("棋盘准备完毕!!!");
System.out.println("规则:");
System.out.println("在控制台输入要落子的坐标,两个坐标中间用一个空格隔开,如 2 3 输入完毕后回车键进入下一方落子 ");
System.out.println("--------------------------------------");
}
}
/**
* 棋子
*/
class Disk{
public String val;
public String remark;
public Disk(){
this.remark = "红";
this.val = ConnectFour.RED_DISK;
}
public Disk next(){
Disk nextDisk = new Disk();
if(this.val.equals(ConnectFour.RED_DISK)){
nextDisk.remark = "黄";
nextDisk.val = ConnectFour.YELLOW_DISK;
}
return nextDisk;
};
}