您的位置:首页 > 编程语言 > Java开发

java实现简单控制台五子棋游戏

2020-04-15 12:03 731 查看

本文实例为大家分享了java实现简单控制台五子棋的具体代码,供大家参考,具体内容如下

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助

您可能感兴趣的文章:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 控制台 五子棋