GobangMain这个类是游戏的主方法,主要用于控制游戏的执行,值得注意的是输入的坐标的格式是3,4的样式,不能是其他的格式,也不能出现空格。
package com.qf.Gobang;
import java.util.Scanner;
import org.omg.CORBA.PUBLIC_MEMBER;
public class GobangMain {
public static String white = "白色";
public static String black = "黑色";
public static boolean color=true;
public static String spoint;//存储坐标
public static void main(String[] args) {
Gobang gobang = new Gobang();
Scanner scanner=new Scanner(System.in);
while(true){
System.out.println("请"+(color?white:black)+"落子:");
spoint=scanner.next();//获得坐标
Point point=gobang.analysisPoint(spoint);//解析坐标,并返回坐标对象
if(gobang.luoZi(point,color)){
gobang.printMap();
if(gobang.isWin(point,color)){
System.out.println(""+(color?white:black)+"赢了!");
break;
}
color=!color;
}
}
}
}
Point类
public class Point {
public Point(int x, int y) {
super();
this.x = x;
this.y = y;
}
int x;
int y;
}
Gobang 类是游戏类,主要包含游戏的判断游戏的结束等等。
package com.qf.Gobang;
import java.awt.Event;
import java.util.Scanner;
public class Gobang {
public int n = 20;// 地图的规模
public String color;// 确认是白方,还是黑方
public String mark = "╋";
public String white = "○";
public String black = "●";
public String[][] map = new String[n][n];;
public String[] coordinate = { "⒈", "⒉", "⒊", "⒋", "⒌", "⒍", "⒎", "⒏", "⒐", "⒑", "⒒", "⒓", "⒔", "⒕", "⒖", "⒗", "⒘",
"⒙", "⒚", "⒛" };
public Gobang() {
// 初始化地图
init();
}
// 初始化地图
public void init() {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i == n - 1) {
map[i][j] = coordinate[j];
} else if (j == n - 1) {
map[i][j] = coordinate[i];
} else {
map[i][j] = mark;
}
}
}
printMap();
}
// 打印地图
public void printMap() {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
System.out.print(map[i][j]);
}
System.out.println();
}
}
// 解析坐标
public Point analysisPoint(String point) {
String[] points = point.split(",");
int x = Integer.parseInt(points[0]) - 1;
int y = Integer.parseInt(points[1]) - 1;
return new Point(x, y);
}
// 落子
public boolean luoZi(Point point, Boolean color) {
// 判断是否越界
if (point.x < 0 || point.y > 18 || point.y < 0 || point.y > 18) {
return false;
}
// 判断落子的地方有没有其他的子
if (map[point.x][point.y] != mark) {
return false;
}
map[point.x][point.y] = color ? white : black;
return true;
}
// 判断是否输赢
public boolean isWin(Point point, boolean color) {
// 纵向
int zxS = 0;// 纵向上
for (int i = 0; i < 5; i++) {
if (point.x - i < 0) {
break;
}
if (map[point.x - i][point.y].equals(color ? white : black)) {
zxS++;
} else {
break;
}
}
int zxX = 0;// 纵向下
for (int i = 1; i < 5; i++) {
if (point.x + i > 18) {
break;
}
if (map[point.x + i][point.y].equals(color ? white : black)) {
zxX++;
} else {
break;
}
}
// 横向
int hxZ = 0;// 横向左
for (int i = 0; i < 5; i++) {
if (point.y - i < 0) {
break;
}
if (map[point.x][point.y - i].equals(color ? white : black)) {
hxZ++;
} else {
break;
}
}
int hxY = 0;// 横向右
for (int i = 1; i < 5; i++) {
if (point.y + i > 18) {
break;
}
if (map[point.x][point.y + i].equals(color ? white : black)) {
hxY++;
} else {
break;
}
}
// 正斜
int zxxS = 0;// 正斜上
for (int i = 0; i < 5; i++) {
if (point.y + i > 18 || point.x - i < 0) {
break;
}
if (map[point.x - i][point.y + i].equals(color ? white : black)) {
zxxS++;
} else {
break;
}
}
int zxxX = 0;// 正斜下
for (int i = 1; i < 5; i++) {
if (point.y - i < 0 || point.x + i > 18) {
break;
}
if (map[point.x + i][point.y - i].equals(color ? white : black)) {
zxxX++;
} else {
break;
}
}
// 反斜
int fxxS = 0;// 反斜上
for (int i = 0; i < 5; i++) {
if (point.y - i < 0 || point.x - i < 0) {
break;
}
if (map[point.x - i][point.y - i].equals(color ? white : black)) {
fxxS++;
} else {
break;
}
}
int fxxX = 0;// 反斜下
for (int i = 1; i < 5; i++) {
if (point.y + i > 18 || point.x + i >18) {
break;
}
if (map[point.x + i][point.y + i].equals(color ? white : black)) {
fxxX++;
} else {
break;
}
}
System.out.println();
System.out.print("反斜上↖:" + fxxS+"\t");
System.out.print("纵向上↑:" + zxS+"\t");
System.out.print("正斜上↗:" + zxxS);
System.out.println();
System.out.print("横向左←:" + hxZ+"\t\t\t");
System.out.print("横向右→:" + hxY);
System.out.println();
System.out.print("正斜下↙:" + zxxX+"\t");
System.out.print("纵向下↓:" + zxX+"\t");
System.out.print("反斜下↘:" + fxxX);
System.out.println();
if (zxS + zxX > 4 || hxY + hxZ > 4 || zxxS + zxxX > 4 || fxxS + fxxX > 4) {
return true;
}
return false;
}
}