Java编程实现五子棋人人对战代码示例

 更新时间:2017年11月28日 16:18:25   作者:在成为巨擘的路上  
这篇文章主要介绍了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)

谁输谁赢我就不弄出来了,太长,占地。。

总结

以上就是本文关于Java编程实现五子棋人人对战代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

相关文章

  • java服务自动停止原因查找方式

    java服务自动停止原因查找方式

    这篇文章主要介绍了java服务自动停止原因查找方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Java实现Kruskal算法的示例代码

    Java实现Kruskal算法的示例代码

    Kruskal算法是一种用来寻找最小生成树的算法,由Joseph Kruskal在1956年发表。用来解决同样问题的还有Prim算法和Boruvka算法等。本文将介绍用Java语言实现Kruskal算法的示例代码,需要的可以参考一下
    2022-07-07
  • SpringBoot统计、监控SQL运行情况的方法详解

    SpringBoot统计、监控SQL运行情况的方法详解

    这篇文章主要给大家介绍了关于SpringBoot统计、监控SQL运行情况的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-02-02
  • AJAX省市区三级联动下拉菜单(java版)

    AJAX省市区三级联动下拉菜单(java版)

    这篇文章主要介绍了AJAX省市区三级联动下拉菜单(java版)的相关资料,需要的朋友可以参考下
    2016-01-01
  • 关于Java双大括号{{}}的具体使用

    关于Java双大括号{{}}的具体使用

    本文主要介绍了关于Java双大括号{{}}的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Thymeleaf渲染网页时中文乱码的问题及解决

    Thymeleaf渲染网页时中文乱码的问题及解决

    这篇文章主要介绍了Thymeleaf渲染网页时中文乱码的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Java对象布局(JOL)实现过程解析

    Java对象布局(JOL)实现过程解析

    这篇文章主要介绍了Java对象布局(JOL)实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • SpringBoot整合Mongodb实现增删查改的方法

    SpringBoot整合Mongodb实现增删查改的方法

    这篇文章主要介绍了SpringBoot整合Mongodb实现简单的增删查改,MongoDB是一个以分布式数据库为核心的数据库,因此高可用性、横向扩展和地理分布是内置的,并且易于使用。况且,MongoDB是免费的,开源的,感兴趣的朋友跟随小编一起看看吧
    2022-05-05
  • Java 服务端消息推送的实现小结

    Java 服务端消息推送的实现小结

    本文主要介绍了Java 服务端消息推送的实现小结,主要包括四种常见的消息实时推送方案:短轮询、长轮询、SSE 和 WebSocket,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • Java聊天室之实现客户端群聊功能

    Java聊天室之实现客户端群聊功能

    这篇文章主要为大家详细介绍了Java简易聊天室之实现客户端群聊功能,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以了解一下
    2022-10-10

最新评论