编写Java程序,实现简单的五子棋博弈游戏(美和易思Java练习习题)

简介: 编写Java程序,实现简单的五子棋博弈游戏(美和易思Java练习习题)

74.png

package com.qq.gb;
import java.util.Scanner;
public class GoBang {
  Scanner sc = new Scanner(System.in);
  String [][] num= new String[15][15];//创建二维数组
  int userId = 0;//判断当前用户 
  int x = 0;//横坐标
  int y = 0;//纵坐标
  static boolean win = false;//用于判断输赢的变量
  //初始化二维数组
  public void board() {
    for (x = 0; x < num.length; x++) {
      for (y = 0; y < num.length; y++) {
        num[x][y]="+";
      }
    }
  }
  //打印棋盘方法
  public void printBoard() {
    for (int x = 0; x < num.length; x++) {
      for (int y = 0; y < num.length; y++) {
        System.out.print(num[x][y]+"  ");
      }
      System.out.println();
    }
  }
  //用户下棋的方法
  public void userXY() {
    System.out.println("请输入所放棋子的横坐标:");
    x = sc.nextInt();
    System.out.println("请输入所放棋子的纵坐标:");
    y = sc.nextInt();
    //判断当前用户如果userId是0则是第一个用户
    if (userId==0) {
      if (!num[x-1][y-1].equals("+")) {
        System.out.println("该棋子已经存在,请重新输入!");
        userXY();
      }else {
        num[x-1][y-1] = "X";
        userId = 1;
        printBoard();
      }
    } else {
      if (!num[x-1][y-1].equals("+")) {
        System.out.println("该棋子已经存在,请重新输入!");
        userXY();
      }else {
        num[x-1][y-1] = "O";
        userId = 0;
        printBoard();
      }
    }
  }
  //判断输赢的方法
  public void winOrLose() {
    //创建Boolean类型的变量判断结果
    boolean a1,a2,a3,a4,b1,b2,b3,b4;//a和b分别代表一个玩家,1,2,3,4分别代表能赢的4种情况
    for (int x = 0; x < num.length-4; x++) {
      for (int y = 4; y < num.length; y++) {
        //当五颗棋子呈右上左下连着的时候游戏结束
        a4 = num[x][y].equals("X")&&num[x+1][y-1].equals("X")&&num[x+2][y-2].equals("X")&&num[x+3][y-3].equals("X")&&num[x+4][y-4].equals("X");
        b4 = num[x][y].equals("X")&&num[x+1][y-1].equals("X")&&num[x+2][y-2].equals("X")&&num[x+3][y-3].equals("X")&&num[x+4][y-4].equals("X");
        if (a4==true){
          win = true;
          System.out.println("游戏结束!");
          System.out.printf("玩家%d赢了",userId);
          break;
        }else if (b4==true){
          win = true;
          System.out.println("游戏结束!");
          System.out.printf("玩家%d赢了",userId);
          break;
        }
      }
    }
    for (int x = 0; x < num.length-4; x++) {
      for (int y = 0; y < num.length-4; y++) {
        //当五个棋子横排或者竖排连着的时候游戏结束
        a1 = num[x][y].equals("X")&&num[x][y+1].equals("X")&&num[x][y+2].equals("X")&&num[x][y+3].equals("X")&&num[x][y+4].equals("X");
        b1 = num[x][y].equals("O")&&num[x][y+1].equals("O")&&num[x][y+2].equals("O")&&num[x][y+3].equals("O")&&num[x][y+4].equals("O");
        a2 = num[x][y].equals("X")&&num[x+1][y].equals("X")&&num[x+2][y].equals("X")&&num[x+3][y].equals("X")&&num[x+4][y].equals("X");
        b2 = num[x][y].equals("O")&&num[x+1][y].equals("O")&&num[x+2][y].equals("O")&&num[x+3][y].equals("O")&&num[x+4][y].equals("O");
        //当五颗棋子呈左上右下连着的时候游戏结束
        a3 = num[x][y].equals("X")&&num[x+1][y+1].equals("X")&&num[x+2][y+2].equals("X")&&num[x+3][y+3].equals("X")&&num[x+4][y+4].equals("X");
        b3 = num[x][y].equals("O")&&num[x+1][y+1].equals("O")&&num[x+2][y+2].equals("O")&&num[x+3][y+3].equals("O")&&num[x+4][y+4].equals("O");
        if ((a1==true)||(a2==true)||(a3==true)){
          win = true;
          System.out.println("游戏结束!");
          System.out.printf("玩家%d赢了",userId);
          break;
        }else if ((b1==true)||(b2==true)||(b3==true)){
          win = true;
          System.out.println("游戏结束!");
          System.out.printf("玩家%d赢了",userId);
          break;
        }
      }
    }
  }
  public static void main(String[] args) {
    GoBang gb = new GoBang();
    gb.board();//初始化二维数组
    gb.printBoard();//打印棋盘
    do {
      gb.userXY();//循环下棋
      gb.winOrLose();//判断输赢
    } while (win==false);//当win变量变为ture时停止循环
  }
}
相关文章
|
1月前
|
Java C语言
课时8:Java程序基本概念(标识符与关键字)
课时8介绍Java程序中的标识符与关键字。标识符由字母、数字、下划线和美元符号组成,不能以数字开头且不能使用Java保留字。建议使用有意义的命名,如student_name、age。关键字是特殊标记,如蓝色字体所示。未使用的关键字有goto、const;特殊单词null、true、false不算关键字。JDK1.4后新增assert,JDK1.5后新增enum。
|
1月前
|
Java 编译器
课时7:Java程序基本概念(注释)
课时7介绍了Java程序中的注释。编程语言有其语法和语义,注释有助于理解代码需求,防止断档。Java支持三类注释:单行(//)、多行(/* */)和文档注释(/** */)。注释不会被编译器编译。范例中展示了如何在代码中使用注释,并强调了注释对项目文档管理的重要性。
|
1月前
|
存储 Java 数据库连接
【YashanDB知识库】Java程序调用存储过程,在提取clob时报YAS-00004
【YashanDB知识库】Java程序调用存储过程,在提取clob时报YAS-00004
|
1月前
|
搜索推荐 Java Android开发
课时146:使用JDT开发Java程序
在 Eclipse 之中提供有 JDT环境可以实现java 程序的开发,下面就通过一些功能进行演示。 项目开发流程
|
1月前
|
Java 开发工具
课时5:第一个Java程序
课时5介绍了编写第一个Java程序的步骤,包括创建Hello.java文件、编写“Hello World”代码、编译和运行程序。主要内容有:1) 新建并编辑Hello.java;2) 编译Java源文件生成.class文件;3) 通过命令行解释执行Java程序;4) 解释主方法的作用及信息输出操作。本课强调了类定义、文件命名规则和基本程序结构的重要性,并建议初学者使用记事本编写代码以熟悉基础语法。
|
2月前
|
存储 监控 Java
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
207 60
【Java并发】【线程池】带你从0-1入门线程池
|
17天前
|
Java 中间件 调度
【源码】【Java并发】从InheritableThreadLocal和TTL源码的角度来看父子线程传递
本文涉及InheritableThreadLocal和TTL,从源码的角度,分别分析它们是怎么实现父子线程传递的。建议先了解ThreadLocal。
53 4
【源码】【Java并发】从InheritableThreadLocal和TTL源码的角度来看父子线程传递
|
1月前
|
存储 网络协议 安全
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
95 23
|
23天前
|
数据采集 存储 网络协议
Java HttpClient 多线程爬虫优化方案
Java HttpClient 多线程爬虫优化方案
|
1月前
|
Java 调度
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
当我们创建一个`ThreadPoolExecutor`的时候,你是否会好奇🤔,它到底发生了什么?比如:我传的拒绝策略、线程工厂是啥时候被使用的? 核心线程数是个啥?最大线程数和它又有什么关系?线程池,它是怎么调度,我们传入的线程?...不要着急,小手手点上关注、点赞、收藏。主播马上从源码的角度带你们探索神秘线程池的世界...
155 0
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
下一篇
oss创建bucket