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
0
投稿
猜你喜欢
- C++11 引入一个全新的线程库,包含启动和管理线程的工具,提供了同步(互斥、锁和原子变量)的方法,我将试图为你介绍这个全新的线
- 生成指定范围内的随机数这个是最常用的技术之一,程序员希望通过随机数的方式来处理众多的业务逻辑,测试过程中也希望通过随机数的方式生成包含大量数
- 二叉树的深度题目:输入一颗二叉树的根节点,求该树的的深度。输入一颗二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点
- 在一个完整的项目中,如果每一个控制器的方法都返回不同的结果,那么对项目的维护和扩展都会很麻烦;并且现在主流的开发模式时前后端分离的模式,如果
- 本文实例讲述了java在网页上面抓取邮件地址的方法。分享给大家供大家参考。具体实现方法如下:import java.io.BufferedR
- java 计算同比增长工具类为了数据的严谨性,统一装换为BigDecimal,话不多说,看代码。package com.pig4cloud.
- 前言上一篇文章已经介绍了fluent-mybatis项目的构建,文章地址:Java Fluent Mybatis实战之构建项目与代码生成篇上
- 问题:在web里面用iframe连接一个html文件 - html文件里面是超链接 -&nb
- 配置多个别名 typeAliasesPackage<property name="typeAliasesPackage&qu
- java遍历json字符串,取得相应KV值时,各种麻烦,比如将json中的list取出来转为JSONArray,再将list中的object
- 本文实例为大家分享了javaOpenCV-4.0.0 实时人脸识别,供大家参考,具体内容如下package com.xu.opencv;im
- 1. 为什么写这篇文章?事情是这样的,在 2021年6月10日早上我在CSDN上发布了文章《你真的懂Java怎么输出Hello World吗
- Java语言的垃圾回收1.垃圾回收机制的基本概念问:1.什么是Java垃圾回收?答:在Java语言的生命周期中,Java运行环境提供了一个系
- 假如是在同一台机器上开发,前后端分离的工程中出现跨域问题的原因是,前端工程和后端工程运行在不同的端口上。只要协议、域名、端口有一个不同就会产
- ThymeleafThymeleaf是最近SpringBoot推荐支持的模板框架,官网在thymeleaf.org这里。我们为什么要用Thy
- java中的LIST在删除时,一般会用list.remove(o); 但这样往往会出现问题,先来看下面的这段代码:package com.d
- 一、背景Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE
- Spring * 监测每个Controller或方法的执行时长首先写一个类(TestInterceptor)让他继承HandlerInter
- 下面是一个邮件接收的工具类,有点长!!!public class ReciveMail { private MimeMessage msg
- 功能:解决web站点的登录,权限验证,授权等功能优点:在不影响站点业务代码,可以权限的授权与验证横切到业务中1、要添加的依赖<!--t