五子棋游戏(Java编写)双人对赛

2023-10-27

目录

1.游戏准则:

2.游戏细节:

代码如下:

运行结果:

 bug测试:

        棋子重复:

         棋子越界:


1.游戏准则:

 黑子白子依次下棋,不能重复,也不能越界,若违规,则重新下棋。

判断输赢:
        判断各方向是否五个棋子连在一起,若有则胜,若无,则败。

2.游戏细节:

☆ —— 白棋
★ —— 黑棋

代码如下:

package Day3;
import java.util.Scanner;
public class WZQ {
    static String white = "☆";
    static String black = "★";
    static String[][] qp = new String[15][15];
    static String[] num = {"⒈", "⒉", "⒊", "⒋", "⒌", "⒍", "⒎", "⒏", "⒐", "⒑", "⒒", "⒓", "⒔", "⒕", "⒖"};
    static String line = "十";
    static boolean flag = true;
    static Scanner s = new Scanner(System.in);
    public static void main(String[] args) {
        System.out.println("欢迎玩家来到五子棋小游戏");
        WZQ.intiQP();
        WZQ.outQP();
        WZQ.start();
    }
    public static void start() {     //开始下棋
        while (true) {
            if (flag) {
                System.out.println("请黑子下棋");
                int a = s.nextInt() - 1;
                int b = s.nextInt() - 1;
                boolean res = WZQ.check(a, b);
                if (res) {
                    qp[a][b] = black;     //落子
                    flag = false;
                    WZQ.outQP();        //打印棋盘
                    boolean win = WZQ.isWin(a, b, black);
                    if (win) {
                        System.out.println("黑子获胜!");
                        break;
                    }
                }else
                {
                    System.out.println("坐标有误,请重新输入");
                    continue;
                }
            }
            else{
                System.out.println("请白子下棋");
                int a = s.nextInt() - 1;
                int b = s.nextInt() - 1;
                boolean res = WZQ.check(a, b);
                if(res){
                    qp[a][b] = white;     //落子
                    flag = true;
                    WZQ.outQP();        //打印棋盘
                    boolean win = WZQ.isWin(a, b, white);
                    if (win) {
                        System.out.println("白子获胜!");
                        break;
                    }
                }
                else{
                    System.out.println("坐标有误,请重新输入");
                   continue;
                }
            }

        }
    }
    private static boolean isWin(int a, int b, String qz) {
        int sum = 1;
        //水平计数器
        for (int lb = b - 1; lb >= 0; lb--) {   //向当前棋子的左边查找
            if (qp[a][lb].equals(qz)) {
                sum++;
            } else break;
            if (sum >= 5) {
                return true;
            }
        }
        for (int rb = b + 1; rb < qp.length - 1; rb++) {   //向当前棋子的右边查找
            if (qp[a][rb].equals(qz)) {
                sum++;
            } else {
                sum = 1;
                break;
            }
            if (sum >= 5) {
                return true;
            }
        }
        //竖直计数器
        for (int sa = a - 1; sa >= 0; sa--) {        //向当前棋子的上边查找
            if (qp[sa][b].equals(qz)) {
                sum++;
            } else break;
            if (sum >= 5) {
                return true;
            }
        }
        for (int xa = a + 1; xa <= qp.length - 1; xa++) {    //向当前棋子的下边查找
            if (qp[xa][b].equals(qz)) {
                sum++;
            } else {
                sum = 1;
                break;
            }
            if (sum >= 5) {
                return true;
            }
        }
        //斜向计数器
        for (int ma = a - 1, mb = b + 1; ma >= 0 && mb <= qp.length - 1; ma--, mb++) {      //右上查找

            if (qp[ma][mb].equals(qz)) {
                sum++;
            } else {
                break;
            }
            if (sum >= 5) {
                return true;
            }
        }
        for (int ma = a + 1, mb = b - 1; ma <= qp.length - 1 && mb >= 0; ma++, mb--) {        //左下查找
            if (qp[ma][mb].equals(qz)) {
                sum++;
            } else {
                sum = 1;
                break;
            }
            if (sum >= 5) {
                return true;
            }
        }
        for (int na = a + 1, nb = b + 1; na <= qp.length - 1 && nb <= qp.length - 1; na--, nb--) {     //右下查找
            if (qp[na][nb].equals(qz)) {
                sum++;
            } else break;
            if (sum >= 5) {
                return true;
            }
        }
        for (int na = a - 1, nb = b - 1; na >= 0 && nb >= 0; na--, nb--) {        //左上查找
            if (qp[na][nb].equals(qz)) {
                sum++;
            } else {
                sum=1;
                break;
            }
            if (sum >= 5) {
                return true;
            }
        }
        return false;
    }
    public static boolean check(int a, int b) {       //判断越界、 重复
        if (!qp[a][b].equals(line)) {
            return false;
        } else if (a < 0 || a > qp.length - 1 || b < 0 || b > qp.length - 1) {
            return false;
        } else
            return true;
    }
    public static void intiQP() {    //输入棋盘
        for (int i = 0; i < qp.length; i++) {
            for (int j = 0; j < qp[i].length; j++) {
                qp[i][j] = line;
                /*qp[i][qp.length - 1]= num[i];
                qp[qp.length - 1][j] = num[j];*/
                if (i == qp.length - 1) {
                    qp[i][j] = num[j];
                }
                if (j == qp.length - 1) {
                    qp[i][j] = num[i];
                }
            }
        }
    }
    public static void outQP() {      //输出(打印)棋盘
        for (int i = 0; i < qp.length; i++) {
            for (int j = 0; j < qp[i].length; j++) {
                System.out.print(qp[i][j]);
            }
            System.out.println();
        }
    }
}

运行结果:

 

 直至最后某一方获胜

 bug测试:

        棋子重复:

 

         棋子越界:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

五子棋游戏(Java编写)双人对赛 的相关文章

随机推荐

  • Python Unittest简明教程

    1 概述 单元测试是一种软件测试方法 通过来测试源代码中的各个单元 例如类 方法等 以确定它们是否符合要求 直观上来说 可以将单元视为最小的可测试部分 单元测试是程序员在开发过程中创建的短代码片段 它构成了组件测试的基础 2 unittes
  • IC项目小任务(ncsim/tcl脚本实现)。提取SRAM实例层次结构、对应module名称、对应位宽深度

    层次结构对应的例化名和spec sram里面的模块名一一对应 ncsim终端命令里 可以使用脚本实现 set scope list find scope tbench U top recursive all internals wires
  • 回形数的思路,规律及输出代码(数组章节即学即练)

    整体思路图 规律解释及代码 package shuzu import java util Scanner public class shuzu public static void main String args 回形数整体思路 步骤 1
  • 如何修改容docker容器的shmsize共享内存大小

    很多同学在docker里面运行程序时会得到这样的错误 RuntimeError DataLoader worker pid 6209 is killed by signal Bus error It is possible that dat
  • uniapp引入uview组件库

    uniapp引入uview组件库 引言 引入方法 引言 新学期又双叒开始了 一看学校的教程要求少不了得做个小的demo为最后的课程设计做准备的 通常这个课程设计是比较花时间的 所以这次决定提前准备 毕竟都大三了 估计下学期就得去图书馆 坐牢
  • QT中的文件操作

    QT中的文件操作基于QFile类 1 打开文件 open bool open File fh QIODevice OpenMode mode QFileDevice FileHandleFlags handleflags DontClose
  • PCB相关知识-焊盘Pad

    文章目录 焊盘Pad 常规焊盘Reguar Pad 热焊盘Thermal Pad 隔离焊盘Anti Pad 总结 焊盘Pad 焊盘就是元器件封装中的引脚 在实际应用中使用焊锡将电阻 电容 电感 芯片等元器件的引脚和焊盘Pad连接在一起 电气
  • DeepSort算法简介

    SORT算法 SORT Simple Online and Realtime Tracking 算法是一种目标追踪算法 其简单有效 基于IOU来匹配 并且融入了卡尔曼滤波和匈牙利算法来降低ID Switch 可以说 追踪算法的目标只有两个
  • 内核态do_gettimeofday()、用户态gettimeofday()获取指令执行时间

    背景 芯片开发阶段 有个硬件有个配置一直无法生效 后面发现是软件写入使能还未能生效 硬件就开始配置了 导致不成功 加个延时就可解决 只是知道应该在纳秒级别 但具体十位还是百位级别 不太清楚了 所以就让我搞个代码测试下 写入一次寄存器需要的时
  • 瞎写

    1 小时候爱情就是一切 长大了 爱情变成可有可无的东西 就如同饭菜 有它 饭更香 没有它 饭还是饭 饿了也得吃下去 2 我想滚蛋 在这儿真的是学无所学 我都想自己开始创业 真的对不起老板给的这份工资 整天无所事事 3 不是合适不合适的问题
  • C语言图书馆管理系统

    C语言图书馆管理系统 全部代码如下 include
  • 异步Windows Socket包装,包括TCP与UDP,可处理粘包

    头文件 struct IPAddress union struct IPV4Address ULONG host USHORT port address UINT64 64 static IPAddress Zero ULONG GetHo
  • SteamVr、VRTK配置

    版本 SteamVr 1 2 3 VRTK 3 3 0 Unity 2019 4 28f1c1 VRTK配置 新建空对象 命名为SDKManager 添加VRTK SDK Manager 脚本 作用 管理各种VRSDk 在SDKManage
  • Android高德地图marker自定义弹框窗口

    最终效果 1 gradle里添加高德地图依赖 implementation com amap api map2d latest integration 2d地图功能 implementation com amap api location
  • 前端基础篇之 CSS 世界

    前端基础篇之 CSS 世界 基本概念 这些基本概念有些可能不易理解但却都很重要 如果看完还是很不理解的话需要自己谷歌或百度 网上关于这些概念的文章不少 流 流 又叫文档流 是 css 的一种基本定位和布局机制 流是 html 的一种抽象概念
  • 【pandas】to_datetime函数简单使用

    该函数将给定参数args转换为日期格式 需要传入参数format指定args的格式 注意format中年用Y表示 月和天用小写的m和d表示 pd to datetime 20220517 format Y m d gt gt gt Time
  • sweetalert2中ajax用法,SweetAlert2 使用教程

    SweetAlert2是一款功能强大的纯Js模态消息对话框插件 SweetAlert2用于替代浏览器默认的弹出对话框 它提供各种参数和方法 支持嵌入图片 背景 HTML标签等 并提供5种内置的情景类 功能非常强大 SweetAlert2是S
  • ChatGPT 全面解析

    ChatGPT问世 12月1日 美国人工智能公司OpenAI在网页上推出自然语言处理领域 NLP 的模型ChatGPT 它能够通过对话方式进行交互 并根据用户输入的自然语言文本内容 自动生成新的文本内容 一周内 ChatGPT的用户已突破1
  • 写每个程序员的第一个代码--Hello World程序

    1 首先创建一个文本文档 并输入以下代码 public class HelloWorld public static void main String args System out println Hello World 2 然后对程序重
  • 五子棋游戏(Java编写)双人对赛

    目录 1 游戏准则 2 游戏细节 代码如下 运行结果 bug测试 棋子重复 棋子越界 1 游戏准则 黑子白子依次下棋 不能重复 也不能越界 若违规 则重新下棋 判断输赢 判断各方向是否五个棋子连在一起 若有则胜 若无 则败 2 游戏细节 白