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. spring注解-扩展原理

    AnnotationConfigApplicationContext(IOC容器)的有参构造方法中,在refresh()里对这些组件进行初始化 BeanPostProcessor bean后置处理器, ...

  2. ssm+mysql+jsp打造在线考试系统WeKnow-学生端

    一.登陆模块 前台提交账号和密码传到后台处理控制层 1.1 首先是控制器 @RequestMapping(value="/studentLogin", method=Request ...

  3. gitlab 集成openldap

    Setting up LDAP sign-in If you have an LDAP directory service such as Active Directory, you can conf ...

  4. Jenkins分布式与并行

    目录 一.简介 二.agent 通过JNLP协议增加agent 通过Swarm插件增加agent agent部分详解 三.agent放入Docker 使用Docker 配置Docker私有仓库 四.并 ...

  5. shell脚本 阿里云基线检查一键配置

    一.简介 源码地址 日期:2017/9/1 介绍:安全加固脚本,会符合阿里云基线检查.有幂等性,可重复执行 效果图: 二.使用 适用:centos6/7 语言:中文 注意:脚本是符合阿里云基线检查的配 ...

  6. 转:addChildViewController实现网易新闻首页切换

    本来只是打算介绍一下addChildViewController这个方法的,正好今天朋友去换工作面试问到网易新闻标签栏效果的实现,就结合它,用个小Demo实例介绍一下:(具体解释都写在了Demo里面的 ...

  7. 转:Android JNI

    http://blog.csdn.net/zeng622peng/article/details/6675230 Java Native Interface (JNI)标准是java平台的一部分,它允 ...

  8. ViewModel的创建

    ViewModel的创建 ViewModel本身只是ViewModel这个类的子类: class MainViewModel: ViewModel() { } 在屏幕旋转UI重建的时候, 它是如何拥有 ...

  9. java 网络编程基础 UDP协议DatagramSocket,MulticastSocket 实现局域网聊天软件(Server + Client模式)

      开发思路: 服务端两个Socket: UDP的DatagramSocket接收客户端消息. 广播multicastSocket 发送广播消息 客户端一个Socket: multicastSocke ...

  10. JS自动播放音频 无效chrome设置 (Uncaught (in promise) DOMException: play() failed because the user didn't interact)

    Chrome的autoplay政策在2018年4月做了更改.新的行为:浏览器为了提高用户体验,减少数据消耗,现在都在遵循autoplay政策,Chrome的autoplay 政策非常简单 muted ...