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

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时停止循环
}
}
编写Java程序,实现简单的五子棋博弈游戏(美和易思Java练习习题)的更多相关文章
- 编写Java程序,遍历所有英雄信息(美和易思JDBC,PreparedStatement执行查询语句练习习题)
返回本章节 返回作业目录 需求说明: 继续完善英雄信息系统.使用JDBC技术,通过PreparedStatement对象的executeQuery()方法获取表示所有英雄数据的ResultSet结果集 ...
- Java初学者作业——编写Java程序,简单判断“王者荣耀”英雄收到攻击后是否死亡
返回本章节 返回作业目录 需求说明: 判断"王者荣耀"中英雄受到攻击后是否死亡? 计算"王者荣耀"中怪物攻击英雄的伤害,做出英雄死亡的判断. 如果英雄受到过量伤 ...
- (转)Ubuntu下用eclipse cdt编写多线程程序的简单设置
在Ubuntu下用eclipse cdt编写了一个多线程程序,但是总是出现pthread_create函数未定义! 查找了下原因,原来是要对eclipse进行一些简单的设置: 右键单击项目->P ...
- 编写一个程序,把指定目录下的所有的带.java文件都拷贝到另一个目录中,拷贝成功后,把后缀名是.java的改成.txt。
package example; import java.io.*; public class Test { public static void main(String[] args) throws ...
- 编写Java程序,利用List实现报数游戏的实现思路
返回本章节 返回作业目录 需求说明: 利用List实现报数游戏 在控制台输入一个大于3的正整数,该整数表示有多少人,如在控制台输入10,表示有10个人,10个人围成一个圆圈,从序号1开始为这些人依次编 ...
- 【Java】Java程序员面试宝典(第三版)第5章----Java程序设计基本概念
1.static静态变量,在次级作用域也可以被修改. 2.k++ + k++.第一个自加实际上只有在与计算+k++时补增.详情P36的题目. 3.Java数据类型从低到高分为(byte short c ...
- 对java程序员来说时间格式永远让人挠头来看Java Date Time 教程-时间测量
在Java中,用System.currentTimeMillis()来测量时间最方便. 你要做的是在某些操作之前获取到时间,然后在这些操作之后你想要测量时间,算出时间差.下面是一个例子: long s ...
- 美和易思 - JAVA开发&移动互联网 阶段性教学效果检测考试机试试题【题目:维护洗衣店消费项数据】
一. 语言和环境 1. 实现语言:Java 语言. 2. 环境要求:Eclipse 或 Myeclipse+MySQL. 二. 功能需求 利用 Java Swing 和 JDBC 技术维护洗衣店消费项 ...
- java基础学习02(简单的java程序)
简单的java程序 一.完成的目标 1. 理解java程序的基本组成 2. 如何对程序代码进行注释 3. java标识符的命名规则 4. 了解java中的关键字 5. 使用java定义变量或声明变量 ...
随机推荐
- 100个Shell脚本——【脚本1】打印形状
[脚本1]打印形状 一.脚本 打印等腰三角形.直角三角形.倒直角三角形.菱形 #!/bin/bash #等腰三角形 read -p "Please input the length:&quo ...
- Java Jar包压缩、解压使用
什么是jar包JAR(Java Archive)是Java的归档文件,它是一种与平台无关的文件格式,它允许将许多文件组合成一个压缩文件. 如何打/解包使用jdk/bin/jar.exe工具,配置完环境 ...
- Java_zip_多源文件压缩到指定目录下
依赖: <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-compress --> <depend ...
- new Date()与setDate()参数
New Date()与setDate()参数 相信网上已经有很多关于日期的文章了,这里只是我自己再工作中遇到的问题然后加以总结: new Date() new Date() 一共有六种形式,五种带参数 ...
- log4j漏洞的产生原因和解决方案,小白都能看懂!!!!
核弹级bug Log4j,相信很多人都有所耳闻了,这两天很多读者都在问我关于这个bug的原理等一些问题,今天咱们就专门写一篇文章,一起聊一聊这个核弹级别的bug的产生原理以及怎么防止 产生原因 其实这 ...
- 11、Redis的配置文件
Redis的配置文件 一.Redis配置文件简介 Redis是通过配置文件启动的 Redis对大小写字母不敏感 Redis基本上环境搭建都在配置文件 关于Redis配置文件位置是安装时放的位置,关于R ...
- Jenkins代码检查
目录 一.静态代码分析 二.规范检查 PMD进行检查 分析器区别 三.持续代码质量检测 Maven与SonarQube集成 Jenkins与SonarQube集成 代码扫描 SonarQube集成p3 ...
- 实现input表单从右向左输入
<input style="text-align:right"></input>
- 粒子群算法-PSO
粒子群优化算法 1. 背景知识 1995年美国社会心理学家Kennedy和电气工程师Eberhart共同提出粒子群优化算法(Particle Swarm Optimization, PSO).PSO算 ...
- Sysenter/Kifastcallentry hook 检测与恢复
关于Sysenter.Kifastcallentry.中断之类的内核入口hook技术早就烂大街了,可是对hook的检测与恢复代码却是寥寥无几,一切抛开代码将原理的行为都是耍流氓. 下面以Sysente ...