可联机的五子棋游戏(实现两人对战的五子棋游戏)

编程实现控制台版并支持两人对战的五子棋游戏(1)绘制棋盘 - 写一个成员方法实现(2)提示黑方和白方分别下棋并重新绘制棋盘 - 写一个成员方法实现(3)每当一方下棋后判断是否获胜 - 写一个成员方法实现(4)提示: 采用二维数组来模拟并描述棋盘,我来为大家科普一下关于可联机的五子棋游戏?下面希望有你要的答案,我们一起来看看吧!

可联机的五子棋游戏(实现两人对战的五子棋游戏)

可联机的五子棋游戏

一、要求

编程实现控制台版并支持两人对战的五子棋游戏。(1)绘制棋盘 - 写一个成员方法实现(2)提示黑方和白方分别下棋并重新绘制棋盘 - 写一个成员方法实现。(3)每当一方下棋后判断是否获胜 - 写一个成员方法实现。(4)提示: 采用二维数组来模拟并描述棋盘。

二、代码实现

代码如下(示例):

package com.lagu.homwork2; import java.util.Scanner; /** *2. 编程实现控制台版并支持两人对战的五子棋游戏。 * (1)绘制棋盘 - 写一个成员方法实现 * (2)提示黑方和白方分别下棋并重新绘制棋盘 - 写一个成员方法实现。 * (3)每当一方下棋后判断是否获胜 - 写一个成员方法实现。 * 核心思想二维数组 */ public class GobangGame { //1.自定义一个[16][16]的二维数组的成员变量 private static String[][] arr = new String[17][17]; //自定义一个成员变量来记录是否游戏结束 private static boolean end; //自定义成员变量x来记录当前棋子横坐标(行下标) private static int x; //自定义成员变量y来记录当前棋子横坐标(列下标) private static int y; //2.自定义无参构造方法 初始化数组的默认值 public GobangGame(){ for(int i = 0;i < arr.length; i ){ for(int j = 0;j<arr[i].length;j ) { if (0 != i || 0 != j) { arr[i][j] = " "; //录入二维数组元素a[1][1]~a[16][16]的默认值为*(没有落子的地方) } } } } //3.自定义成员方法绘制棋盘 public static void draw(){ //static 是为了方便类名.的方式访问,不需要再创建对象 //绘制思路:把棋盘看成是一个二维数组 外层循环控制行,内层循环控制列,找规律 for(int i = 0;i < arr.length; i ){ for(int j = 0;j<arr[i].length;j ){ if(0 == i && 0 ==j){ System.out.print(" "); //打印信息:a[0][0]是空格 }else if(0 == i){ System.out.format("%x ",j-1); //a[0][j]是16进制数 }else if(0 ==j){ System.out.format("%x ",i-1); //a[i][0]是16进制数 }else{ System.out.print(arr[i][j] " ");//其它的都是 } } System.out.println(); //每打印完一行需要换行 } System.out.println("白棋:O 黑棋:@"); System.out.println("注:a-10 b-11 c-12 d-13 e-14 f-15,如:若想下在(a行,1列),则对应的坐标位置为: 10 1"); } //5.自定义成员方法实现提示黑方和白方分别下棋并重新绘制棋盘 //5.3 定义一个扫描器Scanner sc 来接收用户输入的坐标位置 static Scanner sc = new Scanner(System.in); public void xiaQi(){ //5.1 自定义一个boolean类型的成员变量来区分白方和黑方 boolean flag = false; while (true){ //5.2 提示双方输入黑棋和白棋 System.out.println("请" (flag ? "白方" : "黑方") "输入棋盘的坐标位置:"); x = sc.nextInt() 1; //获取横坐标 y = sc.nextInt() 1; //获取纵坐标 //5.4 判断输入的坐标是否合法,不合法需要重新输入 if( x<=0 || x>16 || y<=0 || y>16){ //判断是否在棋盘范围内 System.out.println("输入有误,请重新输入"); continue; //提前结束本次循环继续下次循环 }else if("O".equals(arr[x][y]) || "@".equals(arr[x][y])){ //判断输入的位置是否有棋子 System.out.println("输入的位置已有棋子,请重新输入"); continue; //提前结束本次循环继续下次循环 } //5.5将输入的信息存放到二维 if(flag){ arr[x][y] = "O"; }else { arr[x][y] = "@"; } //5.6 打印棋谱 GobangGame.draw(); //5.7 判断是否有一方胜出 GobangGame.JudgeWinOrLose(); if(end){ System.out.println("游戏结束!"); System.out.println((flag ? "白方" : "黑方") "胜!"); break; //如果有一方胜出结束循环 }else{ flag = !flag;//否则换对方下棋 } } } //4.自定义成员方法判断是否连成五颗棋 private static void JudgeWinOrLose() { String what = arr[x][y];//记录当前棋子形状 int a = 0;//记录当前棋子一个方向的棋子数 int b = 0;//记录当前棋子相反反向的棋子数 int sum;//记录一台线上总棋子数 //水平方向棋子数判断 for(int i = x, j = y-1; arr[i][j].equals(what) && i < 16 && j > 0 && j < 16; j--) { //左侧棋子数 a ; } for (int i = x, j = y 1; arr[i][j].equals(what) && i < 16 && j > 0 && j < 16; j ) { //右侧棋子数 b ; } sum = a b; //左侧和右侧的棋子加起来共4颗,加上刚刚下的一颗共5颗 if(sum >= 4) { end = true; //如果有5颗棋则 } else { a=0; b = 0; sum = 0; // 清零 } //竖直方向 for(int i = x - 1, j = y; arr[i][j].equals(what) && i < 16 && j < 16; i--) { a ; } for (int i = x 1, j = y; arr[i][j].equals(what) && i < 16 && j < 16; i ) { b ; } sum = a b; if(sum >= 4) { end = true; } else { a=0; b = 0; sum = 0; } //右斜方向 for(int i = x 1, j = y-1; arr[i][j].equals(what) && i < 17 && j < 16; i ,j--) { a ; } for (int i = x-1, j = y 1; arr[i][j].equals(what) && i < 16 && j < 16; i--, j ) { b ; } sum = a b; if(sum >= 4) { end = true; } else { a=0; b = 0; sum = 0; } //左斜方向 for(int i = x-1, j = y-1; arr[i][j].equals(what) && i < 16 && j < 16; i--,j--) { a ; } for (int i = x 1, j = y 1; arr[i][j].equals(what) && i < 16 && j < 16; i , j ) { b ; } sum = a b; if(sum >= 4) { end = true; } else { a=0; b = 0; sum = 0; } } public static void main(String[] args) { GobangGame gg = new GobangGame(); //调用构造函数成员初始化 GobangGame.draw(); //绘制棋盘 gg.xiaQi();//实现下棋 } }

2.运行代码测试

测试结果如下(示例):

"C:\Program Files\Java\jdk-11.0.8\bin\java.exe" "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=64691:D:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\dlz\Desktop\java\out\production\javase com.lagu.homwork2.GobangGame 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 5 6 7 8 9 a b c d e f 白棋:O 黑棋:@ 注:a-10 b-11 c-12 d-13 e-14 f-15,如:若想下在(a行,1列),则对应的坐标位置为: 10 1 请黑方输入棋盘的坐标位置: 8 8 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 5 6 7 8 @ 9 a b c d e f 白棋:O 黑棋:@ 注:a-10 b-11 c-12 d-13 e-14 f-15,如:若想下在(a行,1列),则对应的坐标位置为: 10 1 请白方输入棋盘的坐标位置: 8 16 输入有误,请重新输入 请白方输入棋盘的坐标位置: 8 8 输入的位置已有棋子,请重新输入 请白方输入棋盘的坐标位置: 7 7 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 5 6 7 O 8 @ 9 a b c d e f 白棋:O 黑棋:@ 注:a-10 b-11 c-12 d-13 e-14 f-15,如:若想下在(a行,1列),则对应的坐标位置为: 10 1 请黑方输入棋盘的坐标位置: 8 7 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 5 6 7 O 8 @ @ 9 a b c d e f 白棋:O 黑棋:@ 注:a-10 b-11 c-12 d-13 e-14 f-15,如:若想下在(a行,1列),则对应的坐标位置为: 10 1 请白方输入棋盘的坐标位置: 8 6 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 5 6 7 O 8 O @ @ 9 a b c d e f 白棋:O 黑棋:@ 注:a-10 b-11 c-12 d-13 e-14 f-15,如:若想下在(a行,1列),则对应的坐标位置为: 10 1 请黑方输入棋盘的坐标位置: 6 8 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 5 6 @ 7 O 8 O @ @ 9 a b c d e f 白棋:O 黑棋:@ 注:a-10 b-11 c-12 d-13 e-14 f-15,如:若想下在(a行,1列),则对应的坐标位置为: 10 1 请白方输入棋盘的坐标位置: 7 6 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 5 6 @ 7 O O 8 O @ @ 9 a b c d e f 白棋:O 黑棋:@ 注:a-10 b-11 c-12 d-13 e-14 f-15,如:若想下在(a行,1列),则对应的坐标位置为: 10 1 请黑方输入棋盘的坐标位置: 7 8 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 5 6 @ 7 O O @ 8 O @ @ 9 a b c d e f 白棋:O 黑棋:@ 注:a-10 b-11 c-12 d-13 e-14 f-15,如:若想下在(a行,1列),则对应的坐标位置为: 10 1 请白方输入棋盘的坐标位置: 5 8 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 5 O 6 @ 7 O O @ 8 O @ @ 9 a b c d e f 白棋:O 黑棋:@ 注:a-10 b-11 c-12 d-13 e-14 f-15,如:若想下在(a行,1列),则对应的坐标位置为: 10 1 请黑方输入棋盘的坐标位置: 9 8 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 5 O 6 @ 7 O O @ 8 O @ @ 9 @ a b c d e f 白棋:O 黑棋:@ 注:a-10 b-11 c-12 d-13 e-14 f-15,如:若想下在(a行,1列),则对应的坐标位置为: 10 1 请白方输入棋盘的坐标位置: 10 8 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 5 O 6 @ 7 O O @ 8 O @ @ 9 @ a O b c d e f 白棋:O 黑棋:@ 注:a-10 b-11 c-12 d-13 e-14 f-15,如:若想下在(a行,1列),则对应的坐标位置为: 10 1 请黑方输入棋盘的坐标位置: 6 9 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 5 O 6 @ @ 7 O O @ 8 O @ @ 9 @ a O b c d e f 白棋:O 黑棋:@ 注:a-10 b-11 c-12 d-13 e-14 f-15,如:若想下在(a行,1列),则对应的坐标位置为: 10 1 请白方输入棋盘的坐标位置: 9 6 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 5 O 6 @ @ 7 O O @ 8 O @ @ 9 O @ a O b c d e f 白棋:O 黑棋:@ 注:a-10 b-11 c-12 d-13 e-14 f-15,如:若想下在(a行,1列),则对应的坐标位置为: 10 1 请黑方输入棋盘的坐标位置: 5 10 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 5 O @ 6 @ @ 7 O O @ 8 O @ @ 9 O @ a O b c d e f 白棋:O 黑棋:@ 注:a-10 b-11 c-12 d-13 e-14 f-15,如:若想下在(a行,1列),则对应的坐标位置为: 10 1 请白方输入棋盘的坐标位置: 4 11 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 O 5 O @ 6 @ @ 7 O O @ 8 O @ @ 9 O @ a O b c d e f 白棋:O 黑棋:@ 注:a-10 b-11 c-12 d-13 e-14 f-15,如:若想下在(a行,1列),则对应的坐标位置为: 10 1 请黑方输入棋盘的坐标位置: 6 11 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 O 5 O @ 6 @ @ @ 7 O O @ 8 O @ @ 9 O @ a O b c d e f 白棋:O 黑棋:@ 注:a-10 b-11 c-12 d-13 e-14 f-15,如:若想下在(a行,1列),则对应的坐标位置为: 10 1 请白方输入棋盘的坐标位置: 6 7 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 O 5 O @ 6 O @ @ @ 7 O O @ 8 O @ @ 9 O @ a O b c d e f 白棋:O 黑棋:@ 注:a-10 b-11 c-12 d-13 e-14 f-15,如:若想下在(a行,1列),则对应的坐标位置为: 10 1 请黑方输入棋盘的坐标位置: 4 9 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 @ O 5 O @ 6 O @ @ @ 7 O O @ 8 O @ @ 9 O @ a O b c d e f 白棋:O 黑棋:@ 注:a-10 b-11 c-12 d-13 e-14 f-15,如:若想下在(a行,1列),则对应的坐标位置为: 10 1 请白方输入棋盘的坐标位置: 8 5 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 @ O 5 O @ 6 O @ @ @ 7 O O @ 8 O O @ @ 9 O @ a O b c d e f 白棋:O 黑棋:@ 注:a-10 b-11 c-12 d-13 e-14 f-15,如:若想下在(a行,1列),则对应的坐标位置为: 10 1 请黑方输入棋盘的坐标位置: 9 4 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 @ O 5 O @ 6 O @ @ @ 7 O O @ 8 O O @ @ 9 @ O @ a O b c d e f 白棋:O 黑棋:@ 注:a-10 b-11 c-12 d-13 e-14 f-15,如:若想下在(a行,1列),则对应的坐标位置为: 10 1 请白方输入棋盘的坐标位置: 6 6 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 @ O 5 O @ 6 O O @ @ @ 7 O O @ 8 O O @ @ 9 @ O @ a O b c d e f 白棋:O 黑棋:@ 注:a-10 b-11 c-12 d-13 e-14 f-15,如:若想下在(a行,1列),则对应的坐标位置为: 10 1 请黑方输入棋盘的坐标位置: 5 6 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 @ O 5 @ O @ 6 O O @ @ @ 7 O O @ 8 O O @ @ 9 @ O @ a O b c d e f 白棋:O 黑棋:@ 注:a-10 b-11 c-12 d-13 e-14 f-15,如:若想下在(a行,1列),则对应的坐标位置为: 10 1 请白方输入棋盘的坐标位置: 10 6 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 @ O 5 @ O @ 6 O O @ @ @ 7 O O @ 8 O O @ @ 9 @ O @ a O O b c d e f 白棋:O 黑棋:@ 注:a-10 b-11 c-12 d-13 e-14 f-15,如:若想下在(a行,1列),则对应的坐标位置为: 10 1 游戏结束! 白方胜! Process finished with exit code 0

总结

提示:这里对文章进行总结:这盘棋首先黑棋占据上风然后翻盘,哈哈随便下下。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页