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练习习题)的更多相关文章

  1. 编写Java程序,遍历所有英雄信息(美和易思JDBC,PreparedStatement执行查询语句练习习题)

    返回本章节 返回作业目录 需求说明: 继续完善英雄信息系统.使用JDBC技术,通过PreparedStatement对象的executeQuery()方法获取表示所有英雄数据的ResultSet结果集 ...

  2. Java初学者作业——编写Java程序,简单判断“王者荣耀”英雄收到攻击后是否死亡

    返回本章节 返回作业目录 需求说明: 判断"王者荣耀"中英雄受到攻击后是否死亡? 计算"王者荣耀"中怪物攻击英雄的伤害,做出英雄死亡的判断. 如果英雄受到过量伤 ...

  3. (转)Ubuntu下用eclipse cdt编写多线程程序的简单设置

    在Ubuntu下用eclipse cdt编写了一个多线程程序,但是总是出现pthread_create函数未定义! 查找了下原因,原来是要对eclipse进行一些简单的设置: 右键单击项目->P ...

  4. 编写一个程序,把指定目录下的所有的带.java文件都拷贝到另一个目录中,拷贝成功后,把后缀名是.java的改成.txt。

    package example; import java.io.*; public class Test { public static void main(String[] args) throws ...

  5. 编写Java程序,利用List实现报数游戏的实现思路

    返回本章节 返回作业目录 需求说明: 利用List实现报数游戏 在控制台输入一个大于3的正整数,该整数表示有多少人,如在控制台输入10,表示有10个人,10个人围成一个圆圈,从序号1开始为这些人依次编 ...

  6. 【Java】Java程序员面试宝典(第三版)第5章----Java程序设计基本概念

    1.static静态变量,在次级作用域也可以被修改. 2.k++ + k++.第一个自加实际上只有在与计算+k++时补增.详情P36的题目. 3.Java数据类型从低到高分为(byte short c ...

  7. 对java程序员来说时间格式永远让人挠头来看Java Date Time 教程-时间测量

    在Java中,用System.currentTimeMillis()来测量时间最方便. 你要做的是在某些操作之前获取到时间,然后在这些操作之后你想要测量时间,算出时间差.下面是一个例子: long s ...

  8. 美和易思 - JAVA开发&移动互联网 阶段性教学效果检测考试机试试题【题目:维护洗衣店消费项数据】

    一. 语言和环境 1. 实现语言:Java 语言. 2. 环境要求:Eclipse 或 Myeclipse+MySQL. 二. 功能需求 利用 Java Swing 和 JDBC 技术维护洗衣店消费项 ...

  9. java基础学习02(简单的java程序)

    简单的java程序 一.完成的目标 1. 理解java程序的基本组成 2. 如何对程序代码进行注释 3. java标识符的命名规则 4. 了解java中的关键字 5. 使用java定义变量或声明变量 ...

随机推荐

  1. Android 开源框架Universal-Image-Loader加载https图片

    解决方案就是 需要 android https HttpsURLConnection 这个类忽略证书 1,找到 Universal-Image-Loader的library依赖包下面com.nostr ...

  2. Python @函数装饰器及用法(超级详细)

    函数装饰器的工作原理是怎样的呢?假设用 funA() 函数装饰器去装饰 funB() 函数,如下所示: #funA 作为装饰器函数 def funA(fn): #... fn() # 执行传入的fn参 ...

  3. 【Linux】【Services】【Web】Nginx基础

    1. 概念 1.1. 消息通知机制:同步synchronous,异步asynchronous 同步:等待对方返回信息 异步:被调用者通过状态.通知或回调通知调用者 状态:调用者每隔一段时间就需要检查一 ...

  4. js 长按鼠标左键实现溢出内容左右滚动滚动

    var nextPress, prevPress; // 鼠标按下执行定时器,每0.1秒向左移一个li内容的宽度 function nextDown() { nextPress = setInterv ...

  5. 联盛德 HLK-W806 (七): 兼容开发板 LuatOS Air103

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

  6. input type="file"多图片上传

    单个的input type="file"表单也是可以实现多图片上传的 代码如下: <form action="manypic.php" method=&q ...

  7. Android App加固原理与技术历程

    App为什么会被破解入侵 随着黑客技术的普及化平民化,App,这个承载我们移动数字工作和生活的重要工具,不仅是黑客眼中的肥肉,也获得更多网友的关注.百度一下"App破解"就有529 ...

  8. 什么是甘特图(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 名词解释:"甘特图(Gantt Chart)是一种图形化的项目活动及其他相关系统进度情况的水平方向的条状图.&q ...

  9. WebRTC本地插入多个转发节点

    网络延迟是一种比较常见的情况.在本地网页上,我们可以建立多个RTCPeerConnection,增加转发次数,来模拟出网络延迟的效果. 建立通话后,再往后面增加本地转发节点. 准备 页面准备,方便我们 ...

  10. tomcat startup.bat 启动中文显示乱码

    打开tomcat文件夹到conf目录下 修改logging.properties 找到 java.util.logging.ConsoleHandler.encoding = utf-8这行 更改为 ...