编写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
Java异常处理:程序世界的“交通规则
Java异常处理:程序世界的“交通规则
298 98
|
2月前
|
存储 Java 编译器
对比Java学习Go——程序结构与变量
本节对比了Java与Go语言的基础结构,包括“Hello, World!”程序、代码组织方式、入口函数定义、基本数据类型及变量声明方式。Java强调严格的面向对象结构,所有代码需置于类中,入口方法需严格符合`public static void main(String[] args)`格式;而Go语言结构更简洁,使用包和函数组织代码,入口函数为`func main()`。两种语言在变量声明、常量定义、类型系统等方面也存在显著差异,体现了各自的设计哲学。
|
3月前
|
人工智能 监控 安全
智慧工地解决方案,java智慧工地程序代码
智慧工地系统融合物联网、AI、大数据等技术,实现对施工现场“人、机、料、法、环”的全面智能监控与管理,提升安全、效率与决策水平。
120 2
|
3月前
|
设计模式 人工智能 前端开发
现代 Java 实现数字华容道与石头迷阵游戏的项目实战及项目开发指南
本项目基于Java 17+,采用JavaFX与MVC架构,实战开发数字华容道/石头迷阵游戏。内容涵盖技术选型、核心逻辑、现代GUI设计、动画实现及项目打包发布,结合sealed class、record等新特性,打造简洁可维护的游戏代码结构。
146 0
|
4月前
|
机器学习/深度学习 存储 Java
Java 大视界 -- Java 大数据机器学习模型在游戏用户行为分析与游戏平衡优化中的应用(190)
本文探讨了Java大数据与机器学习模型在游戏用户行为分析及游戏平衡优化中的应用。通过数据采集、预处理与聚类分析,开发者可深入洞察玩家行为特征,构建个性化运营策略。同时,利用回归模型优化游戏数值与付费机制,提升游戏公平性与用户体验。
|
Java
编写Java程序,模拟五子棋博弈过程中的异常声明和异常抛出
编写Java程序,模拟五子棋博弈过程中的异常声明和异常抛出
275 0
编写Java程序,模拟五子棋博弈过程中的异常声明和异常抛出
|
1月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
121 1
|
1月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
137 1
|
2月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案