Java编程实现五子棋人人对战代码示例
作者:在成为巨擘的路上 发布时间:2021-12-27 12:58:51
标签:java,五子棋人人对战,游戏
利用Java,在控制台操作下,编写的五子棋,作为复习二维数组,面向对象等基础知识。w表示白棋,b表示黑棋
import java.util.Scanner;
public class MainMethod {
public static char[][] c = new char[10][10];
public static void main(String[] args) {
MainMethod mainMethod = new MainMethod();
mainMethod.init();
int i;
boolean color;
int[] point = new int[2];
Scanner scanner = new Scanner(System.in);
for (i = 1; i < 100; i++) {
mainMethod.draw();// 绘制棋盘
System.out.println("请输入坐标,范围为(0,0)到(9,9)");
int x = scanner.nextInt();
int y = scanner.nextInt();
if (i % 2 == 1)
color = true;
else
color = false;
point[0] = x;
point[1] = y;
if (mainMethod.paint(point, color) == false) {//
System.out.println("下的位置不合理,请重新开始");
break;
}
if (mainMethod.win() == 1) {
mainMethod.draw();
System.out.println("恭喜白棋赢!!");
break;
} else if (mainMethod.win() == -1) {
mainMethod.draw();
System.out.println("恭喜黑棋赢!!");
break;
}
}
if (i == 100)
System.out.println("平局");
}
public char[][] init() {// 初始化棋盘
for (int i = 0; i < c.length; i++) {
for (int j = 0; j < c.length; j++) {
c[i][j] = '+';
}
}
return c;
}
public boolean paint(int[] point, boolean colr) {// 判断下的位置是否正确,若正确改变棋盘
boolean b = true;
int x = point[0];
int y = point[1];
if (inBoard(point) == false || c[x][y] == 'w' || c[x][y] == 'b' || x < 0) {
b = false;
return b;
}
else if (colr == true) {// 白棋下
if (c[x][y] == '+') {
c[x][y] = 'w';
}
}
else if (colr == false) {// 黑棋下
if (c[x][y] == '+') {
c[x][y] = 'b';
}
}
return b;
}
public boolean inBoard(int[] point) {// 判断point是否在棋盘上
int x = point[0];
int y = point[1];
if (x < 0 || y < 0 || x >= c.length || y >= c.length)
return false;
else
return true;
}
public int win() {// 判断输赢,1表示白的赢,-1黑的赢,0暂无输赢
int whoWin = 0;
int[] point = new int[2];
outer: while (true) {
for (int i = 0; i < c.length; i++) {
for (int j = 0; j < c.length; j++) {
if (c[i][j] == 'w') {// 遍历数组,找到的第一个白棋
point[0] = i;
point[1] = j + 4;
if (inBoard(point)) {// 如果存在向右数4个的棋盘
if (c[i][j + 1] == 'w' && c[i][j + 2] == 'w' && c[i][j + 3] == 'w' && c[i][j + 4] == 'w') {
whoWin = 1;
break outer;
}
}
point[0] = i + 4;
point[1] = j + 4;
if (inBoard(point)) {// 如果存在向右,向下数4个的棋盘
if (c[i + 1][j + 1] == 'w' && c[i + 2][j + 2] == 'w' && c[i + 3][j + 3] == 'w'
&& c[i + 4][j + 4] == 'w') {
whoWin = 1;
break outer;
}
}
point[0] = i + 4;
point[1] = j;
if (inBoard(point)) {// 如果存在向下数4个的棋盘
if (c[i + 1][j] == 'w' && c[i + 2][j] == 'w' && c[i + 3][j] == 'w' && c[i + 4][j] == 'w') {
whoWin = 1;
break outer;
}
}
point[0] = i - 4;
point[1] = j + 4;
if (inBoard(point)) {// 如果存在向左,向下数4个的棋盘
if (c[i - 1][j + 1] == 'w' && c[i - 2][j + 2] == 'w' && c[i - 3][j + 3] == 'w'
&& c[i - 4][j + 4] == 'w') {
whoWin = 1;
break outer;
}
}
} else if (c[i][j] == 'b') {
point[0] = i;
point[1] = j + 4;
if (inBoard(point)) {// 如果存在向右数4个的棋盘
if (c[i][j + 1] == 'b' && c[i][j + 2] == 'b' && c[i][j + 3] == 'b' && c[i][j + 4] == 'b') {
whoWin = -1;
break outer;
}
}
point[0] = i + 4;
point[1] = j + 4;
if (inBoard(point)) {// 如果存在向右,向下数4个的棋盘
if (c[i + 1][j + 1] == 'b' && c[i + 2][j + 2] == 'b' && c[i + 3][j + 3] == 'b'
&& c[i + 4][j + 4] == 'b') {
whoWin = -1;
break outer;
}
}
point[0] = i + 4;
point[1] = j;
if (inBoard(point)) {// 如果存在向下数4个的棋盘
if (c[i + 1][j] == 'b' && c[i + 2][j] == 'b' && c[i + 3][j] == 'b' && c[i + 4][j] == 'b') {
whoWin = -1;
break outer;
}
}
point[0] = i - 4;
point[1] = j + 4;
if (inBoard(point)) {// 如果存在向左,向下数4个的棋盘
if (c[i - 1][j + 1] == 'b' && c[i - 2][j + 2] == 'b' && c[i - 3][j + 3] == 'b'
&& c[i - 4][j + 4] == 'b') {
whoWin = -1;
break outer;
}
}
}
}
}
whoWin = 0;
break outer;
}
return whoWin;
}
public void draw() {// 绘制棋盘
for (int i = 0; i < c.length; i++) {
for (int j = 0; j < c.length; j++) {
System.out.print(c[i][j] + "");
}
System.out.println();
}
}
}
运行结果:
++++++++++
++++++++++
++++++++++
++++++++++
++++++++++
++++++++++
++++++++++
++++++++++
++++++++++
++++++++++
请输入坐标,范围为(0,0)到(9,9)
4
6
++++++++++
++++++++++
++++++++++
++++++++++
++++++w+++
++++++++++
++++++++++
++++++++++
++++++++++
++++++++++
请输入坐标,范围为(0,0)到(9,9)
6
5
++++++++++
++++++++++
++++++++++
++++++++++
++++++w+++
++++++++++
+++++b++++
++++++++++
++++++++++
++++++++++
请输入坐标,范围为(0,0)到(9,9)
谁输谁赢我就不弄出来了,太长,占地。。
来源:http://blog.csdn.net/qq_24065713/article/details/71509200


猜你喜欢
- 前言RabbitMQ 是使用 Erlang 语言开发的消息中间件, 其遵循了高级消息队列协议(Advanced Message Queuin
- 实践过程效果代码public partial class Form1 : Form{ private HookEx
- 一、前期工作1.开启邮箱服务开启邮箱的POP3/SMTP服务(这里以qq邮箱为例,网易等都是一样的)2.导入依赖在springboot项目中
- 我们在代码中经常使用using保障非托管资源的释放 static void Main(string[] args){
- MyBatis-PlusMyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改
- class文件中的attributes_count和attributesattributes_count位于class文件中methods的
- 为了解决用一个命令(宏)给方法,类,js方法添加注释,经过几天的研究.终于得到结果了。实现的效果如下:给Java中的method添加方法:/
- 一、使用@CrossOrigin注解在controller类上加上@CrossOrigin注解,就能对这个类下面所有方法进行跨域访问了@Cr
- 一、logback日志技术介绍Spring Boot中使用的日志技术为logback。其与Log4J都出自同一人,性能要优于Log4J,是L
- 概要本节要实现的是多表关联查询的简单demo。场景是根据id查询某商品分类信息,并展示该分类下的商品列表。一、Mysql测试数据新建表Cat
- Android横竖屏要解决的问题应该就两个:一。布局问题;二。重新载入问题。1.布局问题:如果不想让软件在横竖屏之间切换,最简单的办法就是在
- Android 版本更替,新的版本带来新的特性,新的方法。新的方法带来许多便利,但无法在低版本系统上运行,如果兼容性处理不恰当,APP在低版
- 本文实例为大家分享了Unity实现透视滑动列表的具体代码,供大家参考,具体内容如下1、目的有时候,为了实现更好的美术效果,需要实现一些特殊的
- 基于 springboot+vue的测试平台开发一、前端环境搭建在前端框架vue-element-admin这个项目中,有一个简洁轻量型的项
- 本文实例讲述了C#使用StopWatch获取程序毫秒级执行时间的方法。分享给大家供大家参考。具体分析如下:这个比时间通过DateTime在程
- 简介 Spring Cloud Ribbon 是一个基于Http和TCP的客服端负载均衡工具,它是基于Netflix Ribbon实现的。它
- 前言我们在开发Web应用时,肯定要为用户提供上传的功能,比如用户上传一张图像作为头像等。为了能上传文件,我们必须将表单的method设置为P
- 如果要监听电池的状态改变,需要动态注册:android.intent.action.BATTERY_CHANGED,收到Action后可以根
- WPF 窗体设置亚克力效果框架使用大于等于.NET40。Visual Studio 2022。项目使用 MIT 开源许可
- Lambda 表达式最早接触到 Lambda 表达式的时候,是在学习 python 的时候,当时就很好奇。后来,才发现 Java 也有这个方