java實(shí)現(xiàn)簡單控制臺五子棋游戲
本文實(shí)例為大家分享了java實(shí)現(xiàn)簡單控制臺五子棋的具體代碼,供大家參考,具體內(nèi)容如下
GobangMain這個類是游戲的主方法,主要用于控制游戲的執(zhí)行,值得注意的是輸入的坐標(biāo)的格式是3,4的樣式,不能是其他的格式,也不能出現(xiàn)空格。
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;//存儲坐標(biāo)
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();//獲得坐標(biāo)
Point point=gobang.analysisPoint(spoint);//解析坐標(biāo),并返回坐標(biāo)對象
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 類是游戲類,主要包含游戲的判斷游戲的結(jié)束等等。
package com.qf.Gobang;
import java.awt.Event;
import java.util.Scanner;
public class Gobang {
public int n = 20;// 地圖的規(guī)模
public String color;// 確認(rèn)是白方,還是黑方
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();
}
}
// 解析坐標(biāo)
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;
}
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
StackTraceElement獲取方法調(diào)用棧信息實(shí)例詳解
這篇文章主要介紹了StackTraceElement獲取方法調(diào)用棧信息實(shí)例詳解,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-02-02
java 算法之歸并排序詳解及實(shí)現(xiàn)代碼
這篇文章主要介紹了java 算法之歸并排序詳解及實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-03-03
Maven繼承父工程時的relativePath標(biāo)簽解析用法小結(jié)
relativePath 的作用是為了找到父級工程的pom.xml,本文主要介紹了Maven繼承父工程時的relativePath標(biāo)簽解析用法小結(jié),具有一定的參考價值,感興趣的可以了解一下2024-03-03
SpringBoot可視化監(jiān)控的具體應(yīng)用
最近越發(fā)覺得,任何一個系統(tǒng)上線,運(yùn)維監(jiān)控都太重要了,本文介紹了SpringBoot可視化監(jiān)控的具體應(yīng)用,分享給大家,有興趣的同學(xué)可以參考一下2021-06-06
Java數(shù)據(jù)導(dǎo)入功能之讀取Excel文件實(shí)例
這篇文章主要介紹了Java數(shù)據(jù)導(dǎo)入功能之讀取Excel文件實(shí)例,本文給出了jar包的下載地址以及讀取Excel文件的代碼實(shí)例,需要的朋友可以參考下2015-06-06
詳解Spring的兩種代理方式:JDK動態(tài)代理和CGLIB動態(tài)代理
這篇文章主要介紹了詳解Spring的兩種代理方式:JDK動態(tài)代理和CGLIB動態(tài)代理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04
Java中CyclicBarrier和CountDownLatch的用法與區(qū)別
CyclicBarrier和CountDownLatch這兩個工具都是在java.util.concurrent包下,并且平時很多場景都會使用到。本文將會對兩者進(jìn)行分析,記錄他們的用法和區(qū)別,感興趣的可以了解一下2021-08-08

