Java语言实现五子棋

目录

内容

题目

解题

代码

实现


内容

题目

五子棋

使用二维数组,实现五子棋功能.

1.使用二维数组存储五子棋棋盘

如下图

2.在控制台通过Scanner输入黑白棋坐标(例如:1,2  2,1格式 表示二维数组坐标),使用实心五角星和空心五角星表示黑白棋子.

如下图:

输入后重新输出棋盘如下图:

白棋输入后如下图

黑白棋依次重复输入下棋

3.判断棋子是否越界,棋子是否重复,判断输赢

java语言实现思路有

解题

图解:

文字描述:
  五子棋
  1、创建一个棋盘
  提供一个启动五子棋游戏的方法
       初始化棋盘方法
       打印棋盘方法

  2、开始下棋,黑白棋交替
     请黑子下棋
     请白子下棋

  3、判断坐标是否合法,是否重复

  4、判断输赢

代码

代码实现使用的是思路二,思路一只提供思想,不进行代码实现。

提供部分

    String white = "☆";
    String black = "★";
    String[][] qp = new String[15][15];
    String[] num = {"⒈","⒉","⒊","⒋","⒌","⒍","⒎","⒏","⒐","⒑","⒒","⒓","⒔","⒕","⒖"};
    String line = "十";
package day1;

import java.util.Scanner;
 
public class wuziqi {

    static String white = "☆";
    static String black = "★";
    static String[][] qp = new String[15][15];
    static String[] num = {"⒈","⒉","⒊","⒋","⒌","⒍","⒎","⒏","⒐","⒑","⒒","⒓","⒔","⒕","⒖"};
    static String line = "十";
    static boolean flag = true;//true--表示黑子下棋;false--表示白子下棋。
    static Scanner scanner = new Scanner(System.in);

    //启动五子棋游戏
    public static void startGame(){
        wuziqi.init();
        wuziqi.print();
        wuziqi.play();
    }

    //初始化棋盘
    public static void init(){
        for(int i=0;i< qp.length;i++){//行输入
            for(int j=0;j< qp.length;j++) {//列输入
                qp[i][j]=line;
                if(j==14){
                    qp[i][j]=num[i];
                }
                if(i==14){
                    qp[i][j]=num[j];
                }
            }
        }
    }

    //打印棋盘
    public static void print(){
        for(int i=0;i< qp.length;i++){//行打印
            for(int j=0;j< qp.length;j++){//列打印
                System.out.print(qp[i][j]+"\t");
            }
            System.out.println();//换行
        }
    }

    //开始下棋
    public static void play(){
        System.out.println("快来一把紧张刺激的五子棋");
        while(true){
            if(flag) {
                System.out.println("请黑子下棋");
                System.out.println("输入行:");
                int row = scanner.nextInt() - 1;//行 二维数组索引
                System.out.println("输入列:");
                int column = scanner.nextInt() - 1;//列 一维数组索引
                //判断是否越界(合法),判断是否重复
                boolean res = wuziqi.judgment(row,column);
                if(res) {
                    qp[row][column]=black;//真正的落子
                    wuziqi.print();//打印
                    //判断输赢 赢了终止循环
                    boolean winer = wuziqi.winer(row,column,black);
                    if(winer){
                        System.out.println("黑棋胜利");
                        break;
                    }
                    flag = false;
                }else{
                    System.out.println("坐标越界或重复,请重新输入:");
                }
            }else{
                System.out.println("请白子下棋");
                System.out.println("行:");
                int row = scanner.nextInt() - 1;//行 二维数组索引
                System.out.println("列:");
                int column = scanner.nextInt() - 1;//列 一维数组索引
                //判断是否越界(合法),判断是否重复
                boolean res = wuziqi.judgment(row,column);
                if(res) {
                    qp[row][column]=white;//真正的落子
                    wuziqi.print();//打印
                    //判断输赢 赢了终止循环
                    boolean winer = wuziqi.winer(row,column,white);
                    if(winer){
                        System.out.println("白棋胜利");
                        break;
                    }
                    flag = true;
                }else{
                    System.out.println("坐标越界或重复,请重新输入:");
                }
            }
        }
    }

    //判断是否重复,是否越界(合法)
    public static boolean judgment(int row,int column){
        //判断是否越界
        if(row<0 || row>15 || column<0 || column>15){//满足条件,返回false,提醒用户输入错误,请重新输入
            return false;
        }
        //判断是否重复
        if(qp[row][column]!=line){//满足条件,返回false,提醒用户输入错误,请重新输入
            return false;
        }
        return true;//不满足判断重复和越界的条件,返回true,请下一位选手下棋
    }

    //判断输赢
    public static boolean winer(int row,int column,String qz){
        //思路一:每下一个棋子,就从二维数组的第一个位置开始向向下,协向开始查找,直到有满足5个相连的终止
        //思路二:以落下棋子为中心进行检索   水平,垂直,斜向(2种)
        //水平判断输赢
        int spsum = 1;
        //水平向左找
        for(int leftColumn = column-1;leftColumn>=0;leftColumn--){
            if(qp[row][leftColumn]==qz){
                spsum++;
            }else{
                break;
            }
        }
        if(spsum==5){
            return true;
        }
        //水平向右找
        for(int rightColumn = column+1;rightColumn< qp.length;rightColumn++){
            if(qp[row][rightColumn]==qz){
                spsum++;
            }else{
                break;
            }
        }
        if(spsum==5){
            return true;
        }


        //垂直判断输赢
        //垂直向上找
        for(int upRow = row-1;upRow>=0;upRow--){
            if(qp[upRow][column]==qz){
                spsum++;
            }else{
                break;
            }
        }
        if(spsum==5){
            return true;
        }
        //垂直向下找
        for(int downRow = row+1;downRow<qp.length;downRow++){
            if(qp[downRow][column]==qz){
                spsum++;
            }else{
                break;
            }
        }
        if(spsum==5){
            return true;
        }


        //斜向判断输赢
        //左上至右下斜向
        //斜向左上找
        for(int leftupRow = row-1,leftupColumn = column-1;leftupRow>=0 && leftupColumn>=0;leftupRow--,leftupColumn--){
            if (qp[leftupRow][leftupColumn]==qz) {
                spsum++;
            }
            else{
                break;
            }
        }
        if(spsum==5){
            return true;
        }
        //斜向右下找
        for(int rightdownRow = row+1,rightdownColumn = column+1;rightdownRow< qp.length && rightdownColumn< qp[0].length;rightdownRow++,rightdownColumn++){
            if (qp[rightdownRow][rightdownColumn]==qz) {
                spsum++;
            }
            else{
                break;
            }
        }
        if(spsum==5){
            return true;
        }

        //右上至左下斜向
        //斜向右上找
        for(int rightupRow = row-1,rightupColumn = column+1;rightupRow>=0 && rightupColumn< qp[0].length;rightupRow--,rightupColumn++){
            if (qp[rightupRow][rightupColumn]==qz) {
                spsum++;
            }
            else{
                break;
            }
        }
        if(spsum==5){
            return true;
        }
        //斜向左下找
        for(int leftdownRow = row+1,leftdowmColumn = column-1;leftdownRow< qp.length && leftdowmColumn>=0;leftdownRow++,leftdowmColumn--){
            if (qp[leftdownRow][leftdowmColumn]==qz) {
                spsum++;
            }
            else{
                break;
            }
        }
        if(spsum==5){
            return true;
        }
        return false;//true-胜利  false-没有胜利
    }
}
package day1;

public class startWuziqi {

    public static void main(String[] args) {
        wuziqi.startGame();
    }

}

实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/400502.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决方案——文本生成图像DF-GAN配置Oxford-102 Flower 花数据集全流程

目录 一、Oxford-102 Flower简介二、DF-GAN配置Oxford-102 Flower 数据集2.1、下载数据集2.2、配置数据集 三、修改代码四、资源下载 一、Oxford-102 Flower简介 Oxford-102 Flower是牛津工程大学于2008年发布的用于图像分类的花卉数据集&#xff0c;原论文链接&#xff1a;Au…

适配器模式:转换接口,无缝对接不同系统

文章目录 **一、技术背景与应用场景****为什么使用适配器模式&#xff1f;****典型应用场景包括但不限于&#xff1a;** **二、适配器模式定义与结构****三、使用步骤举例****四、优缺点分析****总结** 一、技术背景与应用场景 适配器模式在软件设计中扮演着桥梁角色&#xff…

.zip文件如何在centos7解压

在CentOS 7中解压.zip文件&#xff0c;您可以使用unzip命令。如果您的系统上没有安装unzip工具&#xff0c;您首先需要安装它。以下是步骤指南&#xff1a; 安装unzip工具 打开终端并运行以下命令来安装unzip&#xff1a; sudo yum install unzip解压.zip文件 安装unzip之后&am…

2023年12月 Python(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,共50分) 第1题 运行以下程序,输出的结果是?( ) class A():def __init__(self,x):self.x=x

leetcode hot100组合综合四

本题中&#xff0c;是要求nums中求的总和为target的排列数&#xff0c;因为题中说了&#xff0c;元素顺序不同&#xff0c;则可以视为不同的结果之一。 所以&#xff0c;根据对背包问题的总结&#xff0c;本题中元素可以重复使用&#xff0c;是完全背包并且需要求排列数&#…

多线程——threading和queue模块的理解。加实例+详解+思路

并发&#xff1a;假的多任务 并行&#xff1a;真的多任务 实现多线程用——threading模块 import threading import timedef shuru():for i in range(1,4):print("正在输入")time.sleep(1) def shuchu():for i in range(1,4):print("正在输出")time.sle…

通俗易懂的双亲委派机制

当你超过别人一点点&#xff0c;别人会嫉妒你&#xff1b;当你超过别人一大截&#xff0c;别人就会羡慕你 据说给我点关注的都成了大佬&#xff0c;点关注的我都会私发一份好东西 ​​​​你得先知道 在介绍双亲委派机制的时候&#xff0c;不得不提ClassLoader&#xff08;类…

Windows / Linux dir 命令

Windows / Linux dir 命令 1. dir2. dir *.* > data.txt3. dir - list directory contentsReferences 1. dir 显示目录的文件和子目录的列表。 Microsoft Windows [版本 10.0.18363.900] (c) 2019 Microsoft Corporation。保留所有权利。C:\Users\cheng>dir驱动器 C 中…

xxl-job架构原理讲解

1、调度中心 调度中心是一个单独的Web服务&#xff0c;主要是用来触发定时任务的执行 它提供了一些页面操作&#xff0c;我们可以很方便地去管理这些定时任务的触发逻辑 调度中心依赖数据库&#xff0c;所以数据都是存在数据库中的 调度中心也支持集群模式&#xff0c;但是…

mybatis数据操作语句

//基于注解 Mapper public interface reboudapt {Select("select * from dept")List<dept> huoqudept();//删除语句Delete("delete from dept where id #{id}")void deletesc(Integer id);//增加语句Insert("insert into dept(name, create_t…

【flutter】第一个flutter项目

前言 我们通过Android Studio来创建flutter项目。 安装dart和flutter插件 新版编译器需要先安装flutter插件才能构建flutter项目。 项目目录 我们基本就在lib中写代码 项目启动

PiflowX-组件UnionAll

UnionAll组件 组件说明 Union多个输入源。输入源必须具有相同的字段类型。 计算引擎 flink 组件分组 common 端口 Inport&#xff1a;Any outport&#xff1a;默认端口 组件属性 名称展示名称默认值允许值是否必填描述例子inportsInports“”无否Inports string are…

C# 使用onnxruntime部署夜间雾霾图像的可见度增强

目录 介绍 模型信息 效果 项目 代码 下载 C# Onnx 使用onnxruntime部署夜间雾霾图像的可见度增强 介绍 github地址&#xff1a;GitHub - jinyeying/nighttime_dehaze: [ACMMM2023] "Enhancing Visibility in Nighttime Haze Images Using Guided APSF and Gradien…

机器视觉系统选型-为什么还要选用工业光源控制器

工业光源控制器最主要的用途是给光源供电&#xff0c;实现光源的正常工作。 1.开关电源启动时&#xff0c;电压是具有波浪的不稳定电压&#xff0c;其瞬间峰值电压超过了LED灯的耐压值&#xff0c;灯珠在多次高压冲击下严重降低了使用寿命&#xff1b; 2.使用专用的光源控制器&…

day2:信号与槽

思维导图 使用手动连接&#xff0c;将登录框中的取消按钮使用t4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断u界面上输入的账号是否为"123",密码是否为"…

【Java系列】JDK

目录 JDK介绍JDK版本系列文章版本记录JDK介绍 JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。 JDK版本 SE(JavaSE),standard edition,标准版,是我们通…

【MySQL】报错 Incorrect string value: ‘\xE5\xA4\xA9\xE5\x96\x9C‘ for column的解决方法

目录 解决方法如下&#xff1a;例如&#xff1a; 在向数据库中插入中文时遇到报错Incorrect string value: \xE5\xA4\xA9\xE5\x96\x9C for column &#xff0c;此时为数据库的编码格式有问题&#xff0c;可以按照如下方法修改 解决方法如下&#xff1a; 使用show create table…

C++学习Day07之动态联编和静态联编

目录 一、程序及输出1.1 静态联编&#xff08;Static Binding&#xff09;1.2 动态联编&#xff08;Dynamic Binding&#xff09; 二、分析与总结 一、程序及输出 C 中的联编&#xff08;Binding&#xff09;分为动态联编&#xff08;Dynamic Binding&#xff09;和静态联编&a…

关于本地docker启动xxl-job

之前通过github拉取xxl-job到本地启动&#xff0c;已经验证完了&#xff0c;主要要记住以下几个步骤: 1.拉取代码 GitHub地址&#xff1a;https://github.com/xuxueli/xxl-job Gitee地址&#xff1a;https://gitee.com/xuxueli0323/xxl-job 2.idea打开&#xff0c;找到tabl…

理解了镜像和容器,你就掌握了Docker的80%!

01、Docker的架构和底层技术 Docker Platform&#xff08;平台&#xff09; Docker提供了一个开发、打包、运行app(应用application)的平台 把app和底层infrastructure(基础设备)隔离开来 Docker Engine 组成 后台进程&#xff08;dockerd&#xff09; 用于一些后台的操作…