Java语言实现五子棋

news2024/7/4 2:19:50

目录

内容

题目

解题

代码

实现


内容

题目

五子棋

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

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();
    }

}

实现

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis信创平替之TongRDS(东方通),麒麟系统安装步骤

我的系统: 银河麒麟桌面系统V10(SP1)兆芯版 1.先进入东方通申请使用 2.客服会发送一个TongRDS包与center.lic给你(我这里只拿到.tar.gz文件,没有网上的什么安装版) 3.上传全部文件到目录中 4.服务节点安装,并启动 tar -zxvf TongRDS-2.2.1.2_P3.Node.tar.gz cd pmemdb/bin/…

chatGPT 使用随想

一年前 chatGPT 刚出的时候&#xff0c;我就火速注册试用了。 因为自己就是 AI 行业的&#xff0c;所以想看看国际上最牛的 AI 到底发展到什么程度了. 自从一年前 chatGPT 火出圈之后&#xff0c;国际上的 AI 就一直被 OpenAI 这家公司引领潮流&#xff0c;一直到现在&#x…

探讨javascript中运算符优先级

如果阅读有疑问的话&#xff0c;欢迎评论或私信&#xff01;&#xff01; 本人会很热心的阐述自己的想法&#xff01;谢谢&#xff01;&#xff01;&#xff01; 文章目录 深入理解JavaScript运算符优先级运算符优先级概述示例演示示例1&#xff1a;加法和乘法运算符的优先级示…

VBA即用型代码手册:立即保护所有工作表Code及插入多工作表Code

我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。可以大大提高自己的劳动效率&#xff0c;而且可以提高数据的准确性。我这里专注VBA,将我多年的经验汇集在VBA系列九套教程中。 作为我的学员要利用我的积木编程思想&#xff0c;积木编程最重要的是积木如何搭建…

【Java程序设计】【C00277】基于Springboot的招生管理系统(有论文)

基于Springboot的招生管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的招生管理系统 本系统分为系统功能模块、管理员功能模块以及学生功能模块。 系统功能模块&#xff1a;在系统首页可以查看首页、专业…

UE蓝图 函数调用(CallFunction)节点和源码

系列文章目录 UE蓝图 Get节点和源码 UE蓝图 Set节点和源码 UE蓝图 Cast节点和源码 UE蓝图 分支(Branch)节点和源码 UE蓝图 入口(FunctionEntry)节点和源码 UE蓝图 返回结果(FunctionResult)节点和源码 UE蓝图 函数调用(CallFunction)节点和源码 文章目录 系列文章目录一、Call…

[LWC] Components Communication

目录 Overview ​Summary Sample Code 1. Parent -> Child - Public Setter / Property / Function a. Public Property b. Public getters and setters c. Public Methods 2. Child -> Parent - Custom Event 3. Unrelated Components - LMS (Lightning Message…

LeetCode206: 反转链表.

题目描述 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 解题方法 假设链表为 1→2→3→∅&#xff0c;我们想要把它改成∅←1←2←3。在遍历链表时&#xff0c;将当前节点的 next指针改为指向前一个节点。由于节点没有引用其前一…

websocket了解下

websocket请求长啥样 GET /chat HTTP/1.1 Host: example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ Sec-WebSocket-Version: 13 啥是websocket websocket是http的一种&#xff0c;服务器可以主动向客户端推送信息&#xff0c;…

板块一 Servlet编程:第五节 Cookie对象全解 来自【汤米尼克的JAVAEE全套教程专栏】

板块一 Servlet编程&#xff1a;第五节 Cookie对象全解 一、什么是CookieCookie的源码 二、Cookie的具体操作&#xff08;1&#xff09;创建Cookie&#xff08;2&#xff09;获取Cookie&#xff08;3&#xff09;设置Cookie的到期时间&#xff08;4&#xff09;设置Cookie的路径…

lxml库和Xpath提取网页数据的基础与实战:完整指南与实战【第92篇—提取网页】

使用lxml库和Xpath提取网页数据的基础与实战 在网络爬虫和数据抓取中&#xff0c;从网页中提取所需信息是一项常见的任务。lxml库和Xpath是Python中用于解析和提取HTML/XML数据的强大工具。本文将介绍lxml库的基础知识&#xff0c;以及如何使用Xpath表达式来准确地提取网页数据…

Java----认识异常

目录 一、异常的概念与体系结构 1.异常的概念 2.异常的体系结构 3.异常的分类 1. 编译时异常 2. 运行时异常 二、异常的处理 1.认识防御式编程 2.异常的抛出 3.异常的捕获 3.1 异常声明throws throws与throw的区别&#xff1a; 3.2 try-catch捕获并处理 3.3 finally …

unity学习(38)——创建(create)角色脚本(panel)--EventSystem

1.在scripts文件夹下创建一个脚本CreatePlayerPanel.cs&#xff0c;脚本挂到panel上&#xff01;给panel加个tag&#xff0c;叫createPanel&#xff0c;脚本内容如下&#xff1a; using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngin…

华为配置WLAN AC和AP之间VPN穿越示例

配置WLAN AC和AP之间VPN穿越示例 组网图形 图1 配置WLAN AC和AP之间VPN穿越示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 企业用户接入WLAN网络&#xff0c;以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时&#xff0c;不影响…

redis的搭建 RabbitMq搭建 Elasticsearch 搭建

官网 Download | Redis wget https://github.com/redis/redis/archive/7.2.4.tar.gz 编译安装 yum install gcc g tar -zxvf redis-7.2.4.tar.gz -C /usr/localcd /usr/local/redis make && make install 常见报错 zmalloc.h:50:10: fatal error: jemalloc/jemal…

2024年最值得尝试的创业项目,利用信息差,普通人下班也能做

大家好&#xff0c;我是电商花花。 到了2024年&#xff0c;人们依然在寻找长期可靠的副业项目&#xff0c;但我建议暂时停一下&#xff0c;因为抖音小店这个轻松暴利的副业项目还在等着我们呢。 抖音小店无货源创业项目作为一个轻资产创业项目&#xff0c;操作简单&#xff0…

pi(2)

上一次我们说到了这个程序 #include <iostream> #include <cmath> #include <limits> int continuedFractionTerm(int n) { if (n 0) return 1; if (n % 2 0) { return 2 * n 1; } else { return 2 * n; } } std::pair<int, int> be…

大模型参数高效微调

参数高效微调目的 PEFT技术旨在通过最小化微调参数的数量和计算复杂度&#xff0c;来提高预训练模型在新任务上的性能&#xff0c;从而缓解大型预训练模型的训练成本。这样一来&#xff0c;即使计算资源受限&#xff0c;也可以利用预训练模型的知识来迅速适应新任务&#xff0…

bat脚本检测进程程序的方法

一、脚本检测进程 使用批处理脚本检测程序是否在运行&#xff0c;可以使用tasklist命令来列出当前运行的所有进程&#xff0c;并通过findstr命令来搜索特定的进程名。下面是一个简单的批处理脚本示例&#xff0c;它会检测指定的程序是否在运行&#xff0c;并给出相应的信息&…

python 基础知识点(蓝桥杯python科目个人复习计划49)

今日复习内容&#xff1a;做复习题 例题1&#xff1a;希尔排序 题目描述&#xff1a; 希尔排序是直接插入排序算法的一种更高效的改进版本&#xff0c;但它是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出的改进方法之一&#xff1a; 1.插入排序在对几乎已经…