1. 程式人生 > >JAVA實現簡單控制檯五子棋遊戲

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

這裡寫圖片描述