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} /* ...
随机推荐
- 3、Python的应用
Python的应用 Google 实现Web爬虫和搜索引擎中的很多组件. Yahoo Yahoo使用它(包括其他技术)管理讨论组. NASA NASA在它的几个系统中既用了Python开发,又将其作为 ...
- 动态规划之 <筷子>
描述 A 先生有很多双筷子.确切的说应该是很多根,因为筷子的长度不一,很难判断出哪两根是一双的.这天,A 先生家里来了K 个客人,A 先生留下他们吃晚饭.加上A 先生,A夫人和他们的孩子小A,共K+3 ...
- web打印控件Lodop轻松输出清晰的图表和条码
一.仅用两行语句实现极其复杂的图表打印.类似如下两句: LODOP.ADD_PRINT_CHART(0,0,400,400,5,document.getElementByI d('table001') ...
- 阿里云Logtail 快速诊断工具
当日志采集发生异常时,您可以通过Logtail自助检测工具查看客户端是否存在异常情况,根据工具提示快速定位并解决问题. 说明 本工具目前仅支持Linux系统的服务器. 准备工作 下载检测工具脚本. ...
- Delphi读取不Word中不规则表格数据并转换成标准表格
程序需要,需要将word中不规则的表格数据转换为标准的表格,即合并的单元格按正常格式解析,word中的表格格式如下: 解析后数据如下: 借鉴了网上代码,如下处理: procedure TfrmMain ...
- 2017 33 款iOS开源库
IGListKit https://github.com/Instagram/IGListKit 由 Instagram 开发人员制作,IGListKit 是用于构建快速灵活列表的数据驱动型的 UIC ...
- 12.翻译系列:EF 6 中配置一对多的关系【EF 6 Code-First系列】
原文链接:https://www.entityframeworktutorial.net/code-first/configure-one-to-many-relationship-in-code-f ...
- kubernetes中port、target port、node port的对比分析,以及kube-proxy代理
转:http://blog.csdn.net/xinghun_4/article/details/50492041 容器网络实例 服务中的3个端口设置 这几个port的概念很容易混淆,比如创建如下se ...
- 用VS2012建立core2.1网站项目后引用Microsoft.AspNetCore.Session不了
做个.NET CORE的新项目,和往常一样,VS2017新建CORE项目(CORE2.1),NUGET引入session,结果引入不了,说什么版本不对应的,把SESSION降了一个版本,可以安装上了, ...
- install ceph by ceph-deploy
使用阿里云源安装ceph Luminous https://liuxu.co/2017/09/19/install-ceph-Luminous-on-centos7-with-ceph-deploy/ ...