编程实现控制台版并支持两人对战的五子棋游戏。

(1)绘制棋盘 - 写一个成员方法实现

(2)提示黑方和白方分别下棋并重新绘制棋盘 - 写一个成员方法实现。

(3)每当一方下棋后判断是否获胜 - 写一个成员方法实现。

(4)提示: 采用二维数组来模拟并描述棋盘,棋盘如下:

Created with Raphaël 2.2.0开始棋手准备每轮更换1.绘制棋盘2.输入下棋坐标3.判断是否合法是否超出棋盘该坐标是否有棋子4.修改棋盘(下棋)5.判断是否获胜结束yesnoyesno

1. 绘制棋盘 - 写一个成员方法实现

    private int[][] gobang = new int[16][16];public void draw(){for (int i = 0; i < gobang.length+1; i++) {if (0 == i ) {System.out.print("   ");} else if (i <= 10 ) {System.out.print((char)(i - 1 + '0')+"  ");} else {System.out.print((char)(i - 11 + 'a')+"  ");}}System.out.println();for (int i = 0; i < gobang.length; i++) {if (i < 10 ) {System.out.print((char)(i  + '0')+"  ");} else {System.out.print((char)(i - 9 + 'a')+"  ");}for (int j = 0; j < gobang[i].length; j++) {if(0 == gobang[i][j]){System.out.print("+  ");} else if(1 == gobang[i][j]){System.out.print("@  ");} else {System.out.print("O  ");}}System.out.println();}}

2.输入下棋坐标

    public void play(){Scanner sc = new Scanner(System.in);while(true){draw();if (flag) {System.out.println("------------------------黑子------------------------");} else {System.out.println("------------------------白子------------------------");}System.out.println("请输入您要落子的行位置和列位置(如: 0 4):");int x = sc.nextInt();int y = sc.nextInt();if (islegitimate(x,y)){//判断是否合法,合法继续操作,不合法结束playChess(x, y);//修改棋盘数据,达到下棋效果if(isWin(x,y)){//判断是否输赢break;}flag = !flag;}}}
3.判断是否合法
    /*** 判断是否合法,合法继续操作,不合法结束* @param x 横坐标* @param y 纵坐标* @return*/public boolean islegitimate(int x,int y){if(x < 0 || x > 16 || y < 0 || y > 16){System.err.println("您落子落到棋盘外面去了,请重新落子!!");return false;}else {if(gobang[x][y] != 0){System.err.println("您落子的位置已有棋子,请重新落子!!");return false;} else {return true;}}}
4.修改棋盘(下棋)
    /*** 修改棋盘数据,达到下棋效果* @param x 横坐标* @param y 纵坐标*/public void playChess(int x,int y){if (flag) {gobang[x][y] = 1;} else {gobang[x][y] = 2;}}

5.判断是否获胜

    /*** 判断是否获胜* @param x 横坐标* @param y 纵坐标* @return true表示获胜,false继续下棋*/public boolean  isWin(int x, int y){int highBound = gobang.length;int lowBound = 0;int[] line = new int[9];int[] column = new int[9];int[] leftDiagonal = new int[9];int[] rightDiagonal  = new int[9];column[4] = line[4] = leftDiagonal[4] = rightDiagonal[4] = gobang[x][y];for (int i = 1; i <= 4; i++) {// 生成横方向的成线情况if (y - i >= lowBound) {line[4 - i] = gobang[x][y - i];}if (y + i <= highBound) {line[4 + i] = gobang[x][y + i];}// 生成纵方向的成线情况if (x - i >= lowBound) {column[4 - i] = gobang[x - i][y];}if (x + i <= highBound) {column[4 + i] = gobang[x + i][y];}// 生成左斜方向上的成线情况if (x - i >= lowBound && y - i >= lowBound) {leftDiagonal[4 + i] = gobang[x - i][y - i];}if (x + i <= highBound && y + i <= highBound) {leftDiagonal[4 - i] = gobang[x + i][y + i];}// 生成右斜方向上的成线情况if (x - i >= lowBound && y + i <= highBound) {rightDiagonal[4 + i] = gobang[x - i][y + i];}if (y - i >= lowBound && x + i <= highBound) {rightDiagonal[4 - i] = gobang[x + i][y - i];}}// 判断4个方向是否存在五子连珠的情况boolean resline = fiveSons(line, x, y);boolean rescolumn = fiveSons(column, x, y);boolean resLeftDiagonal = fiveSons(leftDiagonal, x, y);boolean resRightDiagonal = fiveSons(rightDiagonal, x, y);// 若有一个方向上的存在五子连珠的情况,则胜利if(resline || rescolumn || resLeftDiagonal || resRightDiagonal) {if(flag){System.out.println("黑子获胜");}else {System.out.println("白子获胜");}draw();return true;}else {return false;}}

下面是完整代码

Gobang类

package cn.cyh.test;import java.util.Scanner;/*** @author cyh* @create 2020/12/21 10:20*/
public class Gobang {//private int[][] gobang = new int[16][16];private boolean flag = true;private static Gobang gob = new Gobang();//单例private Gobang() { }public static Gobang getGobang(){return gob;}/*** 绘画棋盘*/public void draw(){for (int i = 0; i < gobang.length+1; i++) {if (0 == i ) {System.out.print("   ");} else if (i <= 10 ) {System.out.print((char)(i - 1 + '0')+"  ");} else {System.out.print((char)(i - 11 + 'a')+"  ");}}System.out.println();for (int i = 0; i < gobang.length; i++) {if (i < 10 ) {System.out.print((char)(i  + '0')+"  ");} else {System.out.print((char)(i - 9 + 'a')+"  ");}for (int j = 0; j < gobang[i].length; j++) {if(0 == gobang[i][j]){System.out.print("+  ");} else if(1 == gobang[i][j]){System.out.print("@  ");} else {System.out.print("O  ");}}System.out.println();}}/*** 下棋* @param x 横坐标* @param y 纵坐标*/public void playChess(int x,int y){if (flag) {gobang[x][y] = 1;} else {gobang[x][y] = 2;}}/*** 判断是否获胜* @param x 横坐标* @param y 纵坐标* @return true表示获胜,false继续下棋*/public boolean  isWin(int x, int y){int highBound = gobang.length;int lowBound = 0;int[] line = new int[9];int[] column = new int[9];int[] leftDiagonal = new int[9];int[] rightDiagonal  = new int[9];column[4] = line[4] = leftDiagonal[4] = rightDiagonal[4] = gobang[x][y];for (int i = 1; i <= 4; i++) {// 生成横方向的成线情况if (y - i >= lowBound) {line[4 - i] = gobang[x][y - i];}if (y + i <= highBound) {line[4 + i] = gobang[x][y + i];}// 生成纵方向的成线情况if (x - i >= lowBound) {column[4 - i] = gobang[x - i][y];}if (x + i <= highBound) {column[4 + i] = gobang[x + i][y];}// 生成左斜方向上的成线情况if (x - i >= lowBound && y - i >= lowBound) {leftDiagonal[4 + i] = gobang[x - i][y - i];}if (x + i <= highBound && y + i <= highBound) {leftDiagonal[4 - i] = gobang[x + i][y + i];}// 生成右斜方向上的成线情况if (x - i >= lowBound && y + i <= highBound) {rightDiagonal[4 + i] = gobang[x - i][y + i];}if (y - i >= lowBound && x + i <= highBound) {rightDiagonal[4 - i] = gobang[x + i][y - i];}}// 判断4个方向是否存在五子连珠的情况boolean resline = fiveSons(line, x, y);boolean rescolumn = fiveSons(column, x, y);boolean resLeftDiagonal = fiveSons(leftDiagonal, x, y);boolean resRightDiagonal = fiveSons(rightDiagonal, x, y);// 若有一个方向上的存在五子连珠的情况,则胜利if(resline || rescolumn || resLeftDiagonal || resRightDiagonal) {if(flag){System.out.println("黑子获胜");}else {System.out.println("白子获胜");}draw();return true;}else {return false;}}/*** 以x和y为中心,判断多少个相同的棋子* @param arr 获取到长度为9,中心是xy的数组* @param x 横坐标* @param y 纵坐标* @return true表示以x为中心的数组有5个,游戏结束*/private boolean fiveSons(int[] arr, int x, int y) {int count = 1; // 统计连续子的个数for(int i = 0; i < 5;) {if (arr[i] == gobang[x][y]) {for (int j = i + 1; j < 9; j++) {if(arr[j] == arr[j - 1]) {count += 1;if(5 == count) {return true; // 若找到五子连珠的情况,则返回胜利标示符true}}else {count = 1;i = j;break;}}}i++;}return false;}public boolean islegitimate(int x,int y){if(x < 0 || x > 16 || y < 0 || y > 16){System.err.println("您落子落到棋盘外面去了,请重新落子!!");return false;}else {if(gobang[x][y] != 0){System.err.println("您落子的位置已有棋子,请重新落子!!");return false;} else {return true;}}}public void play(){Scanner sc = new Scanner(System.in);while(true){draw();if (flag) {System.out.println("------------------------黑子------------------------");} else {System.out.println("------------------------白子------------------------");}System.out.println("请输入您要落子的行位置和列位置(如: 0 4):");int x = sc.nextInt();int y = sc.nextInt();if (islegitimate(x,y)){playChess(x, y);if(isWin(x,y)){break;}flag = !flag;}}}
}

GobangTest 测试类

package cn.cyh.test;
/*** 五子棋测试类* @author cyh* @create 2020/12/21 14:42*/
public class GobangTest {public static void main(String[] args) {Gobang gobang = new Gobang();gobang.play();}
}

五子棋游戏代码(完整版)相关推荐

  1. 2021电工杯B题建模思路代码完整版

    2021电工杯B题思路和代码完整版 2021"中国电机工程学会杯"全国大学生电工数学建模竞赛B题思路代码完整版+参考文献,内容如下,可分享-

  2. C语言2进制除法口诀表代码完整版正确版本

    2进制转换运算输出所有结果代码完整版正确版本 2进制除法口诀表代码完整版正确版本 #include<stdio.h> #define N 2 int trans(int j) { if ( ...

  3. 用python编写五子棋游戏代码

    好的,我可以帮助你写五子棋游戏代码.首先,你需要准备一个二维列表来存储棋盘信息,并为每个玩家准备一个变量来存储他们的棋子颜色.然后,你可以使用一个循环来让玩家交替落子.在每次落子之后,你需要检查该玩家 ...

  4. C语言3进制加法口诀表代码完整版正确版本

    3进制加法口诀表代码完整版正确版本 #include<stdio.h> #define N 3 int trans(int j) { if (j < N) { return j; } ...

  5. 操作系统课设附代码完整版(出自19级jhy课设)

    操作系统课设附代码完整版 出自19级jhy课设 摘要 为了检验自己的操作系统课程的学习情况与掌握程度,以及将该课程知识用编程语言描述的技能,本次选择"并发环境下作业管理与连续动态内存管理的模 ...

  6. HTML五子棋游戏代码介绍,五子棋html游戏代码与算法介绍

    五子棋html游戏代码与算法介绍 我会把html文件.css文件提供下载地址,文件夹路径也展示给大家.但是图片就没法一一放在博客里面了. 大家有需要的话,加博主QQ:2864144286,全天在线. ...

  7. 五子棋游戏代码html,HTML5网页版黑白子五子棋游戏代码

    特效描述:HTML5 网页版黑白子五子棋 五子棋游戏. 通过原生js和canvas实现五子棋,可以试下左右手互搏 代码结构 1. HTML代码 PK 您的浏览器不支持canvas var text = ...

  8. Java面试题库,java五子棋游戏代码

    前言 最其实不管什么时候,找工作都跑不了面试.目前很多小编都做了面试手册了,那就是别人家的孩子都有糖了,作为一个自觉的小编,必须搞. 容我先絮叨一下,制作这个面试手册差不多花了3个多星期时间,过程还是 ...

  9. python外星人入侵游戏代码大全-Python外星人入侵游戏编程完整版

    PYTHON游戏编程外星人入侵的完整实现思路,具体内容如下 准备工作:下载python,比如Anaconda3(64 bit),导入pygame游戏包 1.外星人设置,alien.py,代码: imp ...

  10. python外星人入侵游戏代码大全-Python游戏:外星人入侵游戏编程完整版!内附代码...

    importsysimportpygamefrom bullet importBulletfrom alien importAlienfrom time importsleepdefcheck_eve ...

最新文章

  1. 必须掌握的前端模板引擎之art-template
  2. java list map 去重和排序方法
  3. 内存cgroup---CGroup中参数由来篇
  4. 简单复制粘贴个linux红帽6
  5. treeview子节点文本过长超过DIV自动换行CSS解决
  6. Redis-配置文件
  7. 计算机专业参考文献 文库,计算机类专业毕业论文参考文献大全.docx
  8. 超简单的倒计时代码编写
  9. html 嵌入页面,html5页面嵌入
  10. 【网易云信】从0到1构建实时音视频引擎
  11. nlp自然语言处理_nlp满足可持续投资
  12. swr_get_out_samples和swr_convert,比特率重采样
  13. pd.melt() vs reshape2::melt()
  14. 200套工作室设计行业响应式Html5模板HTML5+CSS3设计网站模板简洁设计师作品展示响应式模板整洁扁平宽屏CSS3网站模板html5网页静态模板Bootstrap扁平化网站源码css3手机se
  15. 怎样快速提取视频中的音频文件?
  16. MySQL字符串处理函数的用法及使用举例
  17. 想成为管理者必须会讲的68个超级经典小故事
  18. 【计算机名称不能更改解决方法】
  19. 《统计学基于R》:第八章 方差分析
  20. 为什么使用指针变量时一定要申请空间?

热门文章

  1. core dump 简介
  2. Dreamweaver中出现 以下翻译器没有被装载,由于错误:xxxx.htm:有不正确的设置信息 问题的解决方案(8,cs3,cs4似乎都会出现改问题)...
  3. 学习asp.net比较完整的流程 (对初学者有很好的帮助)
  4. tomcat7不支持html5吗,HTTP状态404说明请求的资源()不可用。的Apache Tomcat/7.0.27
  5. 在c语言中怎么实现循环结构,浅议C语言中循环结构的教学方法.pdf
  6. vue笔记 keyboard+隐藏input光标+自动跳转到下一个input
  7. Taobao 的 Linux 内核开源贡献
  8. kosbie的python课程视频_Python视频教程
  9. php意外进程退出,php FastCGI 进程意外退出 错误解决方法
  10. 实现一个文本文件的解析类(vector,字符串解析的应用)