Java实现五子棋
代码:
package com.hotusm.datastructure.list; import com.hotusm.datastructure.Log; /**
* @author luqibao
* @date 2017/3/17
*/
public class Chess { public static final int WHITE = ; //白棋
public static final int BLACK = ; //黑棋 private int[][] chessboard;
private int xSize;
private int ySize; public Chess(int size) {
chessboard = new int[size][size];
xSize = size;
ySize = size;
} public Chess() {
chessboard = new int[][];
xSize = ;
ySize = ;
} public void play(int x, int y, int who) { if (x > xSize || y > ySize) {
Log.warn("超出范围!");
return;
}
if (chessboard[x][y] != ) {
Log.warn("该位置不能下");
return;
}
chessboard[x][y] = who;
if (isSuccess()) {
Log.info("who:" + who + "已经获胜");
}
} public boolean isSuccess() {
//x轴
for (int i = ; i < ySize; i++) {
for (int j = ; j < xSize; j++) {
if (xSize - j < ) {
break;
}
if (arriSSame(chessboard[i], j, j + )) {
return true;
}
}
}
//y轴
for (int i = ; i < xSize; i++) {
for (int j = ; j < ySize; j++) {
if (ySize - j < ) {
break;
}
if (arriSSame(copyY2X(chessboard, i), j, j + )) {
return true;
}
}
}
//交叉
if (isCrossSame()) {
return true;
}
return false;
} /**
* 将数组的Y列数据拷贝到一维数组中去
*
* @param arr
* @param y
* @return
*/
private int[] copyY2X(int[][] arr, int y) {
int[] nArr = new int[ySize];
for (int i = ; i < ySize; i++) {
nArr[i] = arr[i][y];
}
return nArr;
} /**
* 是否有5个相同
*
* @param arr
* @param x1
* @param x2
* @return
*/
private boolean arriSSame(int[] arr, int x1, int x2) {
int sameNum = ;
for (int i = x1; i < x2 - ; i++) {
if (arr[i] == arr[i + ] && arr[i] != ) {
sameNum++;
if (sameNum == ) {
return true;
}
} else {
sameNum = ;
}
}
return false;
} /**
* 交叉情况下是否有5个相同
*
* @return
*/
private boolean isCrossSame() {
if (cross(ySize, "Y")) {
return true;
}
if (cross(xSize, "X")) {
return true;
}
for (int x = ; x < xSize; x++) {
int sameNum = ;
for (int i = x - , j = ; i > ; i--, j++) {
if (chessboard[j][i] == chessboard[j + ][i - ] && chessboard[j][i] != ) {
sameNum++;
if (sameNum == ) {
return true;
}
} else {
sameNum = ;
}
}
}
for (int y = ySize - ; y > ; y++) {
int sameNum = ;
for (int i = y - , j = xSize - ; i < ySize - ; i++, j--) {
if (chessboard[i][j] == chessboard[i + ][j - ] && chessboard[i][j] != ) {
sameNum++;
if (sameNum == ) {
return true;
}
} else {
sameNum = ;
}
}
} return false;
} /**
* @param xSize
* @param flag X 或者Y 表示X轴或者是Y轴
* @return
*/
private boolean cross(int xSize, String flag) {
for (int y = xSize - ; y > ; y--) {
int sameNum = ;
//y-1 为坐标
for (int i = y - , j = ; i < xSize - ; i++, j++) {
if (flag.equals("X")) {
if (chessboard[j][i] == chessboard[j + ][i + ] && chessboard[j][i] != ) {
sameNum++;
if (sameNum == ) {
return true;
}
} else {
sameNum = ;
}
} else {
if (chessboard[i][j] == chessboard[i + ][j + ] && chessboard[i][j] != ) {
sameNum++;
if (sameNum == ) {
return true;
}
} else {
sameNum = ;
}
}
}
} return false;
}
}
Java实现五子棋的更多相关文章
- [Java]局域网五子棋
提示: 下面给的代码有问题哦,可以自己去调试 可用版下载 请点击这里 密码:x6ve(退出程序,端口并没有被关闭,可自行修改代码实现) img
- Java的五子棋实现
Java 五子棋 注:除机器人算法外其余借鉴于MLDN. package MyFiveChess; import robot.*; import java.awt.*; import javax.sw ...
- Java控制台五子棋(纯算法)
Java五子棋小游戏 本方案是基于控制台写的一个代码 没有花里胡哨的界面,只为研究算法 仅仅用了200行代码 下面是的是运行结果 游戏运行结果 这里我就很简单的复制了一个结果 第9回合,下子方:玩家2 ...
- Java 判断五子棋五子相连
#开始 最近在忙着做一个基于酷Q的QQ机器人,想到了做游戏,第一个想到的霸气点的游戏就是五子棋啊 ` _>` 因为没有图形界面的原因 所有核心就是判断是否在棋盘上出现了五个棋子连在一起的情况 ...
- JAVA上百实例源码以及开源项目
简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级.中级.高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情.执着,对IT的憧憬. ...
- 158个JAVA免豆精品资料汇总
附件完整版下载地址: http://down.51cto.com/data/431561 附件部分预览~ java中国移动收费系统[源代码] http://down.51cto.com/data/70 ...
- 【转】【JAVA资料免费下载】158个JAVA免豆精品资料汇总——下载目录
附件完整版下载地址: http://down.51cto.com/data/431561 附件部分预览~ java中国移动收费系统[源代码] http://down.51cto.com/data/70 ...
- JAVA上百实例源码网站
JAVA源码包1JAVA源码包2JAVA源码包3JAVA源码包4 JAVA开源包1 JAVA开源包2 JAVA开源包3 JAVA开源包4 JAVA开源包5 JAVA开源包6 JAVA开源包7 JAVA ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
随机推荐
- MySQL报1130错误解决办法
update user set password_expired='N' where host = '127.0.0.1'; update user set password=password('ro ...
- Spring AOP获取拦截方法的参数名称跟参数值
注意:这种方式需要JDK1.8版本支持 开始:http://www.cnblogs.com/wing7319/p/9592184.html 1.aop配置: <aop:aspectj-autop ...
- SpringBoot集成Redis分布式锁以及Redis缓存
https://blog.csdn.net/qq_26525215/article/details/79182687 集成Redis 首先在pom.xml中加入需要的redis依赖和缓存依赖 < ...
- 鼠标滑过table时修改表格行的背景颜色
方法一: #customers tr:hover { background-color: #f00; } 方法二: <tr onmouseover="style.backgroundC ...
- html元素不可见的三种方式
html中使元素不可见有三种方法: 使用hidden属性 使用style中的display=none 使用style中的visibility=false 显然,使元素不可见有两类方式: 元素彻底不可见 ...
- MySQL binlog_format (Mixed,Statement,Row)[转]
MySQL 5.5 中对于二进制日志 (binlog) 有 3 种不同的格式可选:Mixed,Statement,Row,默认格式是 Statement.总结一下这三种格式日志的优缺点. MySQL ...
- NeoFinder for Mac(增强型文件管理工具)破解版安装
1.软件简介 NeoFinder 是 macOS 系统上一款帮助用户管理磁盘的 Mac 工具,NeoFinder for mac 能迅速组织您的数据,无论是在外部或内部磁盘,或任何其他卷.它能记 ...
- System Monitor for Mac(系统监控工具)破解版安装
1.软件简介 System Monitor 是 macOS 系统上的一款非常实用的 Mac 系统工具,System Monitor for mac 是一款六合一应用,您可以同时获得 CPU.RA ...
- Java 8 – MinguoDate examples
1. LocalDate -> MinguoDate Review a full example to convert a LocalDate to MinguoDate TestMinguoD ...
- 项目通过tomcat部署到服务器,请求数据中文乱码问题
问题: 本地项目请求访问,浏览器中文输出没问题.部署到服务器上面之后,返回到浏览器的中文就乱码了. 尝试办法: 1.修改tomcat下的conf中的service.xml中的配置信息: 重新启动后,没 ...