编写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时停止循环
  }
}
相关文章
|
2月前
|
Java 流计算
利用java8 的 CompletableFuture 优化 Flink 程序
本文探讨了Flink使用avatorscript脚本语言时遇到的性能瓶颈,并通过CompletableFuture优化代码,显著提升了Flink的QPS。文中详细介绍了avatorscript的使用方法,包括自定义函数、从Map中取值、使用Java工具类及AviatorScript函数等,帮助读者更好地理解和应用avatorscript。
利用java8 的 CompletableFuture 优化 Flink 程序
|
2月前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
57 2
|
2月前
|
安全 Java Linux
java程序设置开机自启
java程序设置开机自启
105 1
|
2月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
42 1
|
2月前
|
Java Python
如何通过Java程序调用python脚本
如何通过Java程序调用python脚本
32 0
|
7月前
|
算法 Java 数据处理
Java程序性能优化研究
Java程序性能优化研究
60 0
|
7月前
|
缓存 监控 算法
Java程序性能优化策略与实践
在当今软件开发领域,Java作为一种广泛应用的编程语言,其程序性能优化显得尤为重要。本文将介绍一些Java程序性能优化的策略和实践,帮助开发者提高代码执行效率、减少资源消耗,并优化用户体验。通过深入探讨各种优化技术和工具,读者将能够更好地理解和运用这些策略,有效提升Java应用程序的性能。
46 1
|
监控 算法 Java
限时!字节Java程序性能优化宝典开源,原来这才叫性能优化
让你的Java程序更快、更稳定 程序的性能受代码质量的直接影响。那么该如何让代码在级别上提升系统性能呢? 其实性能提升永远没有捷径,需要 分析、优化、实验、监控 ,需要一点点积累和深入。随着你对项目和性能优化理解不断深入,会发现提升性能的手段变得越来越丰富,性能数据自然也会跟着上去。 一个优秀的程序员,不仅要会编写程序,更要会编写高质量的程序感受Java开发中的大智慧,让你的Java程序更优美。那么今天LZ挖出一份有关Java程序性能优化的文档,可以让你的Java程序更快、更稳定,主要是涵盖了一些Java程序的优化方法和技巧:
65 1
竟有阿里大牛用678页PDF只讲Java程序性能优化,除了干货就是干货
Java程序性能优化虽然是一个老生常谈的话题,但想要把这个话题真正讲解清楚却并不容易。目前,市面上为数不多的讲解Java程序性能优化的图书内容不够深入,讲解也不够浅显易懂,有的甚至晦涩难懂。
|
监控 算法 Java
限时!字节Java程序性能优化宝典开源,原来这才叫性能优化
让你的Java程序更快、更稳定 程序的性能受代码质量的直接影响。那么该如何让代码在级别上提升系统性能呢?
下一篇
无影云桌面