五子棋游戏控制台实现(Java)
五子棋游戏(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. 需求分析 2. 游戏设计 2.1 游戏功能结构 2.2 游戏业务流程 3. 代码 4. 打包为可执行文件 5. 总结 五子棋是中国古代的传统黑白棋种之一.五子棋不仅能增强思维能力,提高智力 ...
- python五子棋游戏控制台版_python实现五子棋游戏(pygame版)
本文实例为大家分享了python五子棋游戏的具体代码,供大家参考,具体内容如下 目录 简介 实现过程 结语 简介 使用python实现pygame版的五子棋游戏: 环境:Windows系统+pytho ...
- 疯狂Java讲义_Chapter4_编写控制台的五子棋游戏
编写控制台的五子棋游戏 昨天复习了下<疯狂Java讲义>,完成前几章的习题, 现在基本完成了控制台五子棋游戏的编写,能够按照要求 保证用户下和电脑下的棋上不能已经有棋子 判断横.竖.左斜. ...
- java控制台五子棋游戏
首先我们要知道做一个五子棋游戏的流程.①.用户输入坐标,根据坐标下棋.②判断用户是否赢棋.③如果没有,电脑随机产生坐标,下棋.④.判断电脑是否赢棋.然后就根据这个流程一直循环. 下面看代码,主要有三个 ...
- java实现两人对战的五子棋游戏
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 @java实现五子棋游戏 一.要求 编程实现控制台版并支持两人对战的五子棋游戏. (1)绘制棋盘 - 写一个成员方法实现 (2)提示黑 ...
- Java -五子棋游戏
文章目录 前言 一.GUI部分 1.Java.Swing 和 Java.awt 2.创建基本窗体 3.绘制棋盘 4.绘制棋子 二.监听器 1.下棋 2.输赢判断 3.结束重绘 三.面板和特效 1.重开 ...
- 五子棋游戏的java实现
五子棋游戏的java实现方法 目标: 编程实现控制台版并支持两人对战的五子棋游戏 (1)绘制棋盘 (2)提示黑方(用 1 表示)和白方(用 2 表示)分别下棋(X,Y 轴位 置)并重新绘制棋盘. (3 ...
- java二维数组模拟用户登录_Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口)...
这里分享三道编程题, 下面是我个人的视频讲解我的解题思路以及代码运行演示https://www.zhihu.com/video/1253424180936724480 1. 编程实现以下需求: 定义一 ...
- java android 五子棋游戏_基于Android平台五子棋游戏最终版.doc
基于Android平台五子棋游戏最终版 毕业设计(论文)任务书 毕业设计(论文)题目: 基于android平台的五子棋游戏的设计与实现 毕业设计(论文)要求及原始数据(资料): 1.综述国内基于and ...
最新文章
- mysql 去重 根据id_超详细的四类数据库去重实现方案汇总,值得收藏
- 谈谈eclipse使用技巧一
- Android NDK 环境搭建
- 微信小程序识别图片并提取文字_图片转文字识别功能的小程序,超精准识别——闪电识字...
- 海量数据寻找最频繁的数据_寻找数据科学家的“原因”
- gitlab clone需要密码_搭建gitlab服务器最详教程
- java按钮添加事件_java中添加按钮并添加响应事件的方法(推荐)
- 新手上路:盘点「性能测试」必须弄懂的技术点
- Ant Desing Pro2.0(一)项目初始化
- shell 命令set -e的作用
- linux wine qq2017,Linux Mint 18 安装wine 2.0 加qq7.9轻聊版
- Windows conio.h 的源码,实现gotoxy, textcolor,movetext等函数
- html游戏导出存档,switch怎么导出存档-switch导出存档教程
- 解锁JMP 15 DOE新功能--组正交超饱和设计(GO SSD)
- python周环比增长率_Python如何计算环比增长率
- 【2012求职经历】应届生求职经历
- Android系统 —— 各版本代号和对应API等级一览
- 【等保实践】等级保护仅仅是合规吗?
- 一个程序员的奋斗历程
- 孩子想养宠物,该不该同意?