五子棋游戏(Java)

本篇文章参考了一下两篇文章:
1.控制台五子棋java_java实现简单控制台五子棋游戏
2.Java实现五子棋小游戏(对新手极为友好的版本)
在本章中,主要是参考了第一篇文章!五子棋判断输赢的核心算法是参考的第二篇!

文章目录

  • 五子棋游戏(Java)
    • 五子棋项目大概构成
    • 三个类(Coordinate、GameMain、Gobang)
      • Coordinate类
      • Gobang类-游戏主体
      • GameMain类
    • 参考坐标系
    • 玩法

五子棋项目大概构成

在本项目中主要含有3个类。参考如下图:

三个类(Coordinate、GameMain、Gobang)

Coordinate类

package gobang;/** 棋子坐标*/
public class Coordinate {private int x;private int y;public Coordinate(int x, int y) {super();this.x = x;this.y = y;}public int getX() {return x;}public void setX(int x) {this.x = x;}public int getY() {return y;}public void setY(int y) {this.y = y;}}

Gobang类-游戏主体

package gobang;/** 游戏地图设计,规则设计*/
public class Gobang {public int scale = 20;//规模public String color;//当局颜色是白?还是黑public String mark = "╋";public String white = "○";public String black = "●";public String[][] map = new String[scale][scale];public String[] border = {"⒈", "⒉", "⒊", "⒋", "⒌", "⒍", "⒎", "⒏", "⒐", "⒑","⒒", "⒓", "⒔", "⒕", "⒖", "⒗", "⒘","⒙", "⒚", "⒛" };public Gobang() {initMap();//初始化地图}/*** 初始化地图*/public void initMap() {for(int i = 0;i < scale;i++) {for(int j = 0;j < scale;j++) {if(i == scale - 1) {                       //棋盘下边界处map[i][j] = border[j];}else if(j == scale - 1) {              //棋盘左边界处map[i][j] = border[i];}else {map[i][j] = mark;}} }//打印地图printMap();}/*** 打印地图*/public void printMap() {for(int i = 0;i < scale;i++) {for(int j = 0;j < scale;j++) {System.out.print(map[i][j]);}System.out.println();}}/*** 解析坐标:在输入的坐标值处下子* @param coordinate 用户输入的落子坐标的字符串* @return 返回落子的坐标类*/public Coordinate analyCoordinate(String coordinate) {String[] coordinates = coordinate.split(",");//分离出逗号,并赋值给coordinates字符串数组int x = Integer.parseInt(coordinates[0]) - 1;int y = Integer.parseInt(coordinates[1]) - 1;return new Coordinate(x,y);//创建坐标对象,将x,y值传入Coordinate类}/*** 落子* @param coordinate  落子坐标* @param color 当局落子颜色*/public boolean putDownPieces(Coordinate coordinate,Boolean color) {//判断是否出界if(coordinate.getX() < 0 || coordinate.getX() > 18 ||coordinate.getY() < 0 || coordinate.getY() > 18) {return false;//坐标出界,落子失败}//判断落子的地方是否被占用if(map[coordinate.getX()][coordinate.getY()] != mark) {return false;//该地方已经被下子,落子失败}//将坐标的位置上的mark改成white或者black,完成落子!map[coordinate.getX()][coordinate.getY()] = color ? white : black;return true;//落子成功}/*** 判断输赢* @param coordinate  棋子坐标* @param color  当局下棋的颜色* @return*/public boolean isWin(Coordinate coordinate,boolean color) {//垂直方向if((extend(coordinate,0,color)+extend(coordinate,4,color)) >= 4) {return true;//游戏结束,本局中在垂直方向上有5个相同色的棋子已成功连接}//副对角线if((extend(coordinate,1,color)+extend(coordinate,5,color)) >= 4) {return true;//游戏结束}//水平方向if((extend(coordinate,2,color)+extend(coordinate,6,color)) >= 4) {return true;//游戏结束}//主对角线if((extend(coordinate,3,color)+extend(coordinate,7,color)) >= 4) {return true;//游戏结束}return false;//游戏尚未结束,在本局中没有5个相同棋子连接起来}/*** 判断延展方向上是否有4个相同的颜色的棋子* @param coordinate 坐标* @param direction 0向上 1右上 2右 3右下 4下 5左下 6左 7左上 * @param color 当局颜色* @return 相同颜色个数在同一方向上*/public int extend(Coordinate coordinate,int direction,boolean color) {int count = 0;//记录相同颜色在同一方向上的个数int x = coordinate.getX();int y = coordinate.getY();//在延展方向上(不包括刚落下的棋子)判断4个即可for(int i = 0;i < 4;i++) {switch(direction) {case 0: x--;break;case 1: x--;y++;break;case 2: y++;break;case 3: x++;y++;break;case 4: x++;break;case 5: x++;y--;break;case 6: y--;break;case 7: x--;y--;break;}//判断坐标递减后是否出界if(x < 0 || x > 18 || y < 0 || y > 18) {break;}//判断颜色是否为当局颜色if(map[x][y].equals(color?white:black)) {count++;}else {break;//不相等,跳出循环}}return count;}
}

GameMain类

package gobang;import java.util.Scanner;/** 游戏主体,程序的入口*/public class GameMain {public static String white = "白方";public static String black = "黑方";public static boolean color = false;//白色:TRUE            黑色:FALSEpublic static String storagePoint;//存储坐标public static void main(String[] args) {Gobang gobang = new Gobang();Scanner scanner = new Scanner(System.in);while(true) {System.out.print("请"+(color?white:black)+"落子:(格式:竖,横)");storagePoint = scanner.next();//格式:x,y  如3,4Coordinate coordinate = gobang.analyCoordinate(storagePoint);//输入的落子坐标//落子(putDownPieces)并打印更新棋盘(printMap)if(gobang.putDownPieces(coordinate, color)) {//开局默认为黑色gobang.printMap();//落子后,判断输赢if(gobang.isWin(coordinate, color)) {System.out.println("恭喜"+(color?white:black)+"赢了!!");scanner.close();//游戏结束,关闭scannerbreak;//一方胜利,结束游戏并退出程序}//交换下棋color = !color;}}    }
}

参考坐标系


在游戏中x指的是行,y指的是列,如上图所示!

玩法

在开始时,要求你输入棋子的落下坐标(黑子开局):

3,4

输入后,棋子会在第3行第4列,落下棋子。之后白子落棋,直至有一方五子连起来结束游戏!

完结

五子棋游戏控制台实现(Java)相关推荐

  1. 简易五子棋游戏(控制台版)

    目录 1. 需求分析 2. 游戏设计 2.1 游戏功能结构 2.2 游戏业务流程 3. 代码 4. 打包为可执行文件 5. 总结 五子棋是中国古代的传统黑白棋种之一.五子棋不仅能增强思维能力,提高智力 ...

  2. python五子棋游戏控制台版_python实现五子棋游戏(pygame版)

    本文实例为大家分享了python五子棋游戏的具体代码,供大家参考,具体内容如下 目录 简介 实现过程 结语 简介 使用python实现pygame版的五子棋游戏: 环境:Windows系统+pytho ...

  3. 疯狂Java讲义_Chapter4_编写控制台的五子棋游戏

    编写控制台的五子棋游戏 昨天复习了下<疯狂Java讲义>,完成前几章的习题, 现在基本完成了控制台五子棋游戏的编写,能够按照要求 保证用户下和电脑下的棋上不能已经有棋子 判断横.竖.左斜. ...

  4. java控制台五子棋游戏

    首先我们要知道做一个五子棋游戏的流程.①.用户输入坐标,根据坐标下棋.②判断用户是否赢棋.③如果没有,电脑随机产生坐标,下棋.④.判断电脑是否赢棋.然后就根据这个流程一直循环. 下面看代码,主要有三个 ...

  5. java实现两人对战的五子棋游戏

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 @java实现五子棋游戏 一.要求 编程实现控制台版并支持两人对战的五子棋游戏. (1)绘制棋盘 - 写一个成员方法实现 (2)提示黑 ...

  6. Java -五子棋游戏

    文章目录 前言 一.GUI部分 1.Java.Swing 和 Java.awt 2.创建基本窗体 3.绘制棋盘 4.绘制棋子 二.监听器 1.下棋 2.输赢判断 3.结束重绘 三.面板和特效 1.重开 ...

  7. 五子棋游戏的java实现

    五子棋游戏的java实现方法 目标: 编程实现控制台版并支持两人对战的五子棋游戏 (1)绘制棋盘 (2)提示黑方(用 1 表示)和白方(用 2 表示)分别下棋(X,Y 轴位 置)并重新绘制棋盘. (3 ...

  8. java二维数组模拟用户登录_Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口)...

    这里分享三道编程题, 下面是我个人的视频讲解我的解题思路以及代码运行演示https://www.zhihu.com/video/1253424180936724480 1. 编程实现以下需求: 定义一 ...

  9. java android 五子棋游戏_基于Android平台五子棋游戏最终版.doc

    基于Android平台五子棋游戏最终版 毕业设计(论文)任务书 毕业设计(论文)题目: 基于android平台的五子棋游戏的设计与实现 毕业设计(论文)要求及原始数据(资料): 1.综述国内基于and ...

最新文章

  1. mysql 去重 根据id_超详细的四类数据库去重实现方案汇总,值得收藏
  2. 谈谈eclipse使用技巧一
  3. Android NDK 环境搭建
  4. 微信小程序识别图片并提取文字_图片转文字识别功能的小程序,超精准识别——闪电识字...
  5. 海量数据寻找最频繁的数据_寻找数据科学家的“原因”
  6. gitlab clone需要密码_搭建gitlab服务器最详教程
  7. java按钮添加事件_java中添加按钮并添加响应事件的方法(推荐)
  8. 新手上路:盘点「性能测试」必须弄懂的技术点
  9. Ant Desing Pro2.0(一)项目初始化
  10. shell 命令set -e的作用
  11. linux wine qq2017,Linux Mint 18 安装wine 2.0 加qq7.9轻聊版
  12. Windows conio.h 的源码,实现gotoxy, textcolor,movetext等函数
  13. html游戏导出存档,switch怎么导出存档-switch导出存档教程
  14. 解锁JMP 15 DOE新功能--组正交超饱和设计(GO SSD)
  15. python周环比增长率_Python如何计算环比增长率
  16. 【2012求职经历】应届生求职经历
  17. Android系统 —— 各版本代号和对应API等级一览
  18. 【等保实践】等级保护仅仅是合规吗?
  19. 一个程序员的奋斗历程
  20. 孩子想养宠物,该不该同意?

热门文章

  1. Chrome浏览器与元素定位
  2. Bootstrap(前端开发框架)
  3. 前后端分离 Spring Boot + Vue 开发网易云amp;QQ音乐(附源码)!
  4. 原码、反码、补码的转换
  5. 质因数是什么意思?快速分解的渠道讲解
  6. 后缀数组的基数排序实现
  7. BUAA 强化学习DQN代码及实验报告参考
  8. 程序的日子里还有笑话
  9. 工资没涨,为什么突然税越扣越多了
  10. 程序八卦:胡子决定编程语言运势