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对象集合实现多个条件按照优先级的比较,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-07-07基于mybatis-plus QueryWrapper 排序的坑
这篇文章主要介绍了mybatis-plus QueryWrapper 排序的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-01-01Spring Boot中使用Spring-data-jpa实现数据库增删查改
本篇文章主要介绍了Spring Boot中使用Spring-data-jpa实现增删查改,非常具有实用价值,需要的朋友可以参考下。2017-03-03
最新评论