当前位置 主页 > 网站技术 > 代码类 >

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

    栏目:代码类 时间:2019-11-30 18:09

    本文实例为大家分享了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;
      }
    }