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

 更新时间:2019年11月30日 14:36:41   作者:donggedeboke  
这篇文章主要为大家详细介绍了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;
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 基于Comparator对象集合实现多个条件按照优先级的比较

    基于Comparator对象集合实现多个条件按照优先级的比较

    这篇文章主要介绍了基于Comparator对象集合实现多个条件按照优先级的比较,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 基于mybatis-plus QueryWrapper 排序的坑

    基于mybatis-plus QueryWrapper 排序的坑

    这篇文章主要介绍了mybatis-plus QueryWrapper 排序的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 你还在用Synchronized?Atomic你了解不?

    你还在用Synchronized?Atomic你了解不?

    这篇文章主要介绍了你还在用Synchronized?Atomic你了解不? 文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • 在springboot中使用AOP进行全局日志记录

    在springboot中使用AOP进行全局日志记录

    这篇文章主要介绍就在springboot中使用AOP进行全局日志记录,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • SpringBoot JPA 表关联查询实例

    SpringBoot JPA 表关联查询实例

    本篇文章主要介绍了SpringBoot JPA 表关联查询实例,使用JPA原生的findBy语句实现,具有一定的参考价值,有兴趣的可以了解一下。
    2017-04-04
  • 简单理解java泛型的本质(非类型擦除)

    简单理解java泛型的本质(非类型擦除)

    泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。泛型是参数化类型的应用,操作的数据类型不限定于特定类型,可以根据实际需要设置不同的数据类型,以实现代码复用。下面小编来简单讲一讲泛型
    2019-05-05
  • 聊聊Redis二进制数组Bitmap

    聊聊Redis二进制数组Bitmap

    这篇文章主要介绍了Redis二进制数组Bitmap,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Spring Boot中使用Spring-data-jpa实现数据库增删查改

    Spring Boot中使用Spring-data-jpa实现数据库增删查改

    本篇文章主要介绍了Spring Boot中使用Spring-data-jpa实现增删查改,非常具有实用价值,需要的朋友可以参考下。
    2017-03-03
  • Java类的访问权限关键字用法说明

    Java类的访问权限关键字用法说明

    这篇文章主要介绍了Java类的访问权限关键字用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • 微服务之间如何通过feign调用接口上传文件

    微服务之间如何通过feign调用接口上传文件

    这篇文章主要介绍了微服务之间如何通过feign调用接口上传文件的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06

最新评论