基于控制台的五子棋小游戏(简易)

  • 展示
  • 源码:
    • 使用:
    • GoBang类:

展示

话不多说上代码
Don’t talk much, say the code!

源码:

使用:

new完直接运行

    public static void main(String[] args) {new GoBang();}

GoBang类:

import java.util.Arrays;
import java.util.Scanner;/*** @Author Ma Shuai* @Date 2020-11-23 18:44* @Version 1.0*/
public class GoBang {//输入的x和y坐标char inX;char inY;//数组坐标位置int x;int y;//xy轴数组final static char[] indexArr = {' ','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};//棋盘总棋子数量int chessNum=0;//棋盘初始化标识  true为初始化boolean flag = true;//判断当前是执黑还是执白  false为黑boolean blackWhiteFlag = false;//当前局是否退出  true为持续运行不退出boolean thisChess = true;//判断当前坐标可落子boolean checkPointFlag = true;char[][] goBang = null;  //棋盘数组Scanner sc = new Scanner(System.in); //获取键盘输入的对象/*** 构造函数作为主入口 new出来对象直接执行*/GoBang(){while (true){init(); //为了可以重复开始游戏 每次开始前初始化需要的变量System.out.println("======================●○欢迎来到澳门皇家五子棋游戏世界○●=========================");System.out.println("1.开始    2.重开    3.退出");String in = sc.next();if ( "1".equals( in ) ){start();}else if( "2".equals( in ) ){flag = true;start();}else {break;}}}/*** 初始化棋盘和重复黑白下棋*/public void start(){System.out.println("请落子 例如:11 1f ab 回车结束。  输入 q 结束本局。");if (flag){//棋盘初始化goBang = new char[16][16];for (int i = 0; i < indexArr.length; i++) {for (int j = 0; j < indexArr.length; j++) {if ( i==0 ){goBang[i][j] = indexArr[j];}else if( j==0 ){goBang[i][j] = indexArr[i];}else {goBang[i][j]= '+';}}}flag = false;}//黑白重复下棋while (thisChess){show();playChess();}}/*** 判断当前是白棋执子还是黑棋执子*/public void playChess(){if (blackWhiteFlag){System.out.print("白方○:");getChange();blackWhiteFlag = false;}else {System.out.print("黑方●:");getChange();blackWhiteFlag = true;}}/*** 获取是落子的坐标xy 并判断当前坐标未落子*/public void getChange(){//getxy()返回1为结束本局循环if( getxy() == 1 ) return;//判断当前坐标可落子if(  checkPoint() == 1 ) return;change();//判断是否获胜if( checkWin() == 1 ) return;}/*** 获取是落子的坐标xy* @return 0为成功 1为退出结束本局循环*/public int getxy(){//将玩家输入坐标转换为数组char[] inArr = sc.next().toCharArray();if ('q'==inArr[0]) {thisChess = false; //结束本局循环flag = true;//本局结束 之后棋盘需要初始化return 1;}inX = inArr[0];inY = inArr[1];//获取输入坐标对应的数组indexx = Arrays.binarySearch(indexArr,inX);y = Arrays.binarySearch(indexArr,inY);return 0;}/*** 判断当前坐标是否可落子* @return 返回1表示中途结束本局游戏*/public int checkPoint(){//保证棋子只能下在空位置即'+'位置while (checkPointFlag){if (goBang[x][y]=='+'){checkPointFlag = false;}else {System.out.println("此处不可落子,请重新落子!");System.out.println("请输入:");//返回1表示玩家输入了q (q为退出)if ( getxy() == 1 ){checkPointFlag = true;return 1;}}}checkPointFlag = true;return 0;}/*** 将棋盘+改为对应棋子 判断棋盘是否已满*/public void change(){//落子操作 将当前坐标的'+' 改为blackWhiteFlag对应的玩家的棋子○●if (blackWhiteFlag) {goBang[x][y] = '○';}else {goBang[x][y] = '●';}//棋盘总棋子数加一chessNum++;}/*** 判断当前落子后是否胜利(八个方向对应四条线任意一条线五子连珠即为胜利)* @return 返回1表示胜利 结束本局*/public int checkWin(){int re = 0;//方便玩家的可读性 从棋盘来看我们将纵向作为x 横向作为y//判断横向if(checkLine(0,-1) + checkLine(0,1)>=4) re = 1;//判断纵向else if(checkLine(-1,0) + checkLine(1,0)>=4) re = 1;//判断左下右上else if(checkLine(1,-1) + checkLine(-1,1)>=4) re = 1;//判断左上右下else if(checkLine(-1,-1) + checkLine(1,1)>=4) re = 1;//判断棋盘满了平局else if( chessNum==(goBang.length-1)*(goBang[0].length-1) ) re = 2;//有re不为0结束游戏if (re == 1){if (blackWhiteFlag){System.out.println("白棋获胜!!!!!!!");}else {System.out.println("黑棋获胜!!!!!!!");}}else if (re == 2){System.out.println("旗鼓相当!!!!!!");}if(re != 0){thisChess = false; //结束本局循环flag = true;//本局结束 之后棋盘需要初始化System.out.println("战况如下:");show();}return re;}public  int checkLine(int addX, int addY){int checkNum = 0;//记录连续子数不算当前xy子int checkX = x + addX;int checkY = y + addY;char blackWhite;if (blackWhiteFlag){blackWhite = '○';}else {blackWhite = '●';}//轮询查找记录连续棋子数 同时保证数组不越界while (checkX<goBang[0].length && checkX>0 && checkY<goBang.length && checkY>0 && goBang[checkX][checkY]==blackWhite){checkNum++;checkX = checkX + addX;checkY = checkY + addY;}return checkNum;}/*** 展示当前棋盘*/public void show(){for (int i = 0; i < 16; i++) {for (int j = 0; j < 16; j++) {System.out.print(goBang[i][j] + " ");}System.out.println();}}/*** 初始化变量*/public void init(){int chessNum=0;//棋盘总棋子数量flag = true;//棋盘初始化标识  true为初始化blackWhiteFlag = false;//判断当前是执黑还是执白  false为黑thisChess = true; //当前局是否退出  true为持续运行不退出checkPointFlag = true;//判断当前坐标可落子goBang = null;  //棋盘数组}
}

基于控制台的五子棋小游戏(简易)相关推荐

  1. 基于 Blazor 开发五子棋小游戏

    今天是农历五月初五,端午节.在此,祝大家端午安康! 端午节是中华民族古老的传统节日之一.端午也称端五,端阳.此外,端午节还有许多别称,如:午日节.重五节.五月节.浴兰节.女儿节.天中节.地腊.诗人节. ...

  2. c语言五子棋学年论文,基于c语言五子棋小游戏生本科论文.doc

    基于c语言五子棋小游戏生本科论文 五子棋小游戏 需求分析 现在有越来越多的人使用电脑,而且五子棋的受众广泛但实体棋操作较为繁琐且平时较难实现,所以电脑版的五子棋游戏应运而生.大家对于这个小游戏的需求如 ...

  3. 基于flask的五子棋小游戏

    基于flask的五子棋小游戏 前言 ​ 首先说明一下,本人方向是java后端,只因老师布置了一个作业,要用flask来做一个五子棋,没办法被逼上梁山,程序不太美观,但是应付作业还是够了的. ​ 废话不 ...

  4. 【Verilog】基于FPGA的五子棋小游戏(VGA显示、双人对战、胜负判别、附完整代码)

    基于FPGA的五子棋小游戏 有一些说明: 1.本文是基于VGA的显示小游戏,主要为VGA显示的拓展应用: 2.为适应不同显示屏的分辨率,棋盘确定为10X10的黑线白底的方格: 3.下棋主要用棋格颜色变 ...

  5. c语言五子棋对局结果存储,基于C语言五子棋小游戏总结.doc

    五子棋小游戏 需求分析 现在有越来越多的人使用电脑,而且五子棋的受众广泛但实体棋操作较为繁琐且平时较难实现,所以电脑版的五子棋游戏应运而生.大家对于这个小游戏的需求如下:首先,设计这个游戏最基本的就是 ...

  6. c语言五子棋毕业设计,基于c语言五子棋小游戏--本科生毕业设计.doc

    五子棋小游戏 需求分析 现在有越来越多的人使用电脑,而且五子棋的受众广泛但实体棋操作较为繁琐且平时较难实现,所以电脑版的五子棋游戏应运而生.大家对于这个小游戏的需求如下:首先,设计这个游戏最基本的就是 ...

  7. 基于EasyX 的五子棋小游戏。

    EasyX下载地址 EasyX下载地址 // 五子棋.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h" #include <graphic ...

  8. 基于c++EGE图形库编写的五子棋小游戏

    基于c++EGE图形库编写的五子棋小游戏 EGE图形库 新手推荐使用 EGE(Easy Graphics Engine),是windows下的简易绘图库,是一个类似BGI(graphics.h)的面向 ...

  9. 基于深度学习的一款五子棋小游戏

    今天分享一个基于深度学习而开发的AI小游戏 简单介绍 这一款基于深度学习的五子棋小游戏的界面是使用Unity开发的,而网络结构是使用keras搭建的. 环境 笔者的环境如下 操作系统 windows ...

最新文章

  1. 《代码大全2》读后感czz
  2. out.print 嵌套html代码_Shiny与HTML
  3. 哪吒之魔童降世视听语言影评_国漫神作 再造辉煌——《哪吒之魔童降世》影评...
  4. GDCM:ReadCanRead的测试程序
  5. 12伏的蓄电池有几个单格组成_蓄电池的结构和识别
  6. 树莓派装系统,配置,换源,远程操控
  7. c语言上机指导答案清华,第一章自测练习答案清华大学c语言习题实验指导及课程设计...
  8. 女程序员在GitHub提交PR更易被拒?开源世界“她”力量
  9. Jquery第二章常用方法,一二级菜单淡入淡出,event事件,复选框的全选反选第一节
  10. Hibernate之HQL查询
  11. 在线教育源码 知识付费平台源码 PC+H5+后台管理端 教育课程源码
  12. 跳舞的小人 和 盲文
  13. 新年来到,特此制作一款烟花特效,预祝大家 虎虎生威,虎年大吉,生龙活虎
  14. 安装mysql数据库和mysql客户端
  15. 微信公众号及小程序开发入门(二)
  16. 测试用例设计 通用原则
  17. Android基础入门教程——1.7 界面原型设计
  18. 疫情下的口罩生活,演绎出了哪些心理剧场?
  19. iOS 判断设备是否越狱(两种方式结合判断)
  20. 百度 android tts sdk,百度Android语音合成(TTS)SDK使用方法

热门文章

  1. Java实现会员和非会员,如何选择会员和非会员功能?
  2. 上面两点下面一个三角形_初中数学:相似三角形判定定理证明浅见,来说说你的方法吧...
  3. 常州大学向艳c语言答案,C程序设计(2)
  4. 圆周率不用计算机怎么算,为何圆周率算了这么多年还没算完?就连超级计算机都“无可奈何”...
  5. 一个大一计算机学生的学期总结(2022年)
  6. 两招让你成为牛X的T型人才
  7. MFC几种给对话框添加背景图的方法
  8. PostgreSQL不等于判断
  9. 2379. 得到 K 个黑块的最少涂色次数
  10. 前端实现“查看更多”效果