分享用java做一个简易的五子棋

游戏规则:

(1)对局双方各执一色棋子。
(2)空棋盘开局。
(3)白先、黑后,交替下子,每次只能下一子。
(4)棋子下在棋盘的空白点上,棋子下定后,不得向其它点移动,不得从棋盘上拿掉或拿起另落别处。
(5)白方的第一枚棋子可下在棋盘任意交叉点上。
(6)任意一方达成五连子即可获胜

创建一个10*10的二维数组

static String[][] a = new String[10][10];

初始化数据

public static void init() {for (int i = 0; i < a.length; i++) {for (int j = 0; j < a[i].length; j++) {System.out.println(a[i][j]);a[i][j] = "+";}}}

绘制棋盘

public static void paint() {for (int i = 0; i < a.length; i++) {for (int j = 0; j < a[i].length; j++) {System.out.print(a[i][j] + "" + "\t");}System.out.println();}}

双方要开始下棋了

/*

1、两个人

2、如果下的位置有棋子了,就得重新

3、两个人交替

4、你下的坐标不能超出棋牌最大的坐标

*/

public static void XiaZi() {boolean flag = true;Scanner s = new Scanner(System.in);int x = 0;int y = 0;while (true) {if (flag) {System.out.println("A下");System.out.println("请输入x坐标");x = s.nextInt();System.out.println("请输入y坐标");y = s.nextInt();if (x > 10 || y > 10 || x < 1 || y < 1) {System.out.println("请输入正确的xy坐标");continue;}if (isRepeat(x, y)) {a[y - 1][x - 1] = "○";paint();} else {continue;}} else {System.out.println("B下");System.out.println("请输入x坐标");x = s.nextInt();System.out.println("请输入y坐标");y = s.nextInt();if (x > 10 || y > 10 || x < 1 || y < 1) {System.out.println("请输入正确的xy坐标");continue;}if (isRepeat(x, y)) {a[y - 1][x - 1] = "●";paint();} else {continue;}}flag = !flag;boolean l = upDown(x - 1, y - 1, a[y - 1][x - 1]);if (l) {break;}boolean p = leftRight(x - 1, y - 1, a[y - 1][x - 1]);if (p) {break;}boolean o = lurd(x - 1, y - 1, a[y - 1][x - 1]);if (o) {break;}boolean f = ruld(x - 1, y - 1, a[y - 1][x - 1]);if (f){break;}}}

判断X,Y坐标是否有棋子

public static boolean isRepeat(int x, int y) {if (!a[y - 1][x - 1].equals("○") && !a[y - 1][x - 1].equals("●")) {return true;}return false;}

这一步非常关键,每一次下棋都要以一个棋子判断8个方向 上,下,左,右,左上,右下,右上,左下,并且每下一次都要判断

我简单的画了一个图方便大家了解

虽说是八个方向,但我们只需要判断四个,上下,左右,左上右下,右上左下

第一个判断上下的

 public static boolean upDown(int x, int y, String s) {//上下int count = 1;int i = x;int k = y - 1;for (; k >= 0; k--) {if (a[k][i].equals(s)) {count++;}else{break;}}int j = y + 1;for (; j <= 9; j++) {if (a[j][i].equals(s)) {count++;}else{break;}}if (count >= 5) {System.out.println(s + "Win");return true;}return false;}

第二个判断左右的

public static boolean leftRight(int x, int y, String s) {//左右int count = 1;int i = x - 1;int k = y;for (; i >= 0; i--) {if (a[k][i].equals(s)) {count++;}else{break;}}int j = x + 1;for (; j <= 9; j++) {if (a[k][j].equals(s)) {count++;}else{break;}}if (count >= 5) {System.out.println(s + "Win");return true;}return false;}

第三个判断左上右下

public static boolean lurd(int x, int y, String s) {//左上右下int count = 1;int i = x - 1;int k = y - 1;for (; i >= 0 & k >= 0; i--, k--) {if (a[k][i].equals(s)) {count++;}else{break;}}int n = x + 1;int m = y + 1;for (; n <= 9 & m <= 9; n++, m++) {if (a[m][n].equals(s)) {count++;}else{break;}}if (count >= 5) {System.out.println(s + "Win");return true;}return false;}

第四个判断右上左下

public  static boolean ruld(int x, int y,String s){//右上左下int count = 1;int q = x + 1;int e = y - 1;for (;q<=9&e>=0;q++,e--){if (a[e][q].equals(s)){count++;}else{break;}}int r = x - 1;int t = y + 1;for (;r>=0&t<=9;r--,t++){if (a[t][r].equals(s)){count++;}else{break;}}if (count>=5) {System.out.println(s+"Win");return true;}return  false;}

写到这里,还差关键的一步,那就是main方法,把所有的方法合并就好了

 public static void main(String[] args) {init();paint();XiaZi();}

这个是棋盘的打印效果

+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +

A下
请输入x坐标
1
请输入y坐标
2
+    +    +    +    +    +    +    +    +    +    
○    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    + 

   
B下
请输入x坐标
2
请输入y坐标
3
+    +    +    +    +    +    +    +    +    +    
○    +    +    +    +    +    +    +    +    +    
+    ●    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +

打印效果如上,可以跟小伙伴一起玩咯

用java做一个简易的五子棋相关推荐

  1. 实现用java做一个简易版《羊了个羊》小游戏(附源代码)

    该项目是跟着这个b站视频一步一步写出来的,初学java有些地方我看不是很明白,但是讲解很仔细,大家可以看原视频,我没有添加背景音乐和背景图片,做出来的效果也勉勉强强. 代码已经上传到github上了, ...

  2. 简易计算器 java_用Java做一个简易计算器,要用到哪些知识?

    分析问题关键词:Java.计算器 深夜无聊,暂且一答. 计算器分两个步骤:计算 + 器 篇一 ·「器」 在编程中,我们可以把「器」理解为「GUI(图形界面)」,Java 语言描绘的图形界面有很多种类, ...

  3. 用JAVA 做一个简易版的坦克大战(只实现基本功能)

    不太会写文章,只是为了记录自己做过的东西 文章目录 前言 一.大概思路 二.主要代码 1.Tank.java 2.Shot.java 3. Mypanel.java 4.Hero.java 5.Ene ...

  4. 用Java写一个简易五子棋游戏

    一. 程序基本思路: 1.写窗口.棋盘面板.控制面板: 2.绘制棋盘: 3.绘制棋子: 4.添加组件功能: 5.判断输赢: 6.悔棋: 7.复盘. 二.实际操作 1.创建窗口.添加面板 package ...

  5. 用java实现一个简易自动提款机

    用java实现一个简易自动提款机,且有以下要求 如何实现呢?首先,我们定义一个用户类User,同时根据要求设计好属性(本人部分命名没有使用驼峰命名法,不够规范).因为一个人可能有多个卡,卡号又不能重复 ...

  6. 如何用idea做一个简易的网页登录界面

    在上一节课的内容基础上做一个简易的网页登录界面--18级软工1班03 打开idea后打开上一节课的工程文件(一般在打开idea软件的同时,idea会默认打开上一次的文件)并在左边列表的main文件夹下 ...

  7. js 月份间隔计算器_15分钟用JS做一个简易计算器

    原标题:15分钟用JS做一个简易计算器 前言 这个小练手旨在帮助刚上手学习Java的同学练习最基本的Js知识,大神勿喷哈,由于这个是非常简易的计算器,可以完成的功能有加减乘除和AC(清屏),DEL(退 ...

  8. 安卓初体验一:做一个简易计分器

    安卓初体验一:做一个简易计分器 1.成品图 2.准备:确定开发环境.明确应用功能 2.1开发环境 2.2应用功能 3.界面制作 3.1选择布局 3.2代码编写 4.功能编写 4.1提示信息功能编写 4 ...

  9. 怎么用线程刷新 tkinter 进度条_tkinter做一个简易提词板(2)

    书接上文 花果山美男子:tkinter做一个简易提词板​zhuanlan.zhihu.com 上回说到,文字的动态效果还可以用after方法和StringVar来实现,今天我们就用它们来重新制作提词板 ...

  10. 使用vue-cli+element-ui+expsess+mysql做一个简易的登录功能

    使用vue-cli+element-ui+expsess+mysql做一个简易的登录功能 1使用webpack下载vue模板 vue init webpack aaa(aaa为项目名称) cd到aaa ...

最新文章

  1. arch更新失败的办法
  2. 第九课.Python文件操作
  3. vs下载python最后一点很慢-python读取大文件越来越慢的原因与解决
  4. 简单搜索(多位自幂数)+数列网站
  5. 收藏!细胞增殖实验要点详解
  6. Stack Overflow 2016 最新架构探秘
  7. 洛谷 - P1036 选数(递归)
  8. 转: RSA原理 阮一峰的博客
  9. js能否打印服务器端文档,js打印远程服务器文件
  10. sparkstreaming 读取mysql_SparkStreaming读取Kafka的两种方式
  11. SpringBoot2.0 基础案例(08):集成Redis数据库,实现缓存管理
  12. 一个关于 TensorFlow 的悲剧故事
  13. Android系统Audio框架介绍(一)
  14. linux并发控制方法,linux系统并发控制
  15. Tomcat加载类机制 - 我们到底能走多远系列(14)
  16. 百款 TWS蓝牙耳机 蓝牙天线拆机分析与仿真
  17. Java 多线程编程
  18. Radius认证协议(六)报文属性
  19. python爬虫数据(中国人口信息)存入MYSQL数据库
  20. 预约小程序开发:小程序开发的费用都包含了哪些?

热门文章

  1. 无法卸载mysql server 2008 r2,卸载安装失败的sqlserver2008R2
  2. 2012考研英语--前辈的高分复习经验
  3. 税控盘查看服务器设置的网站,税控盘服务器地址
  4. greensock下载_使用GreenSock完成我们的可拖动的画布外菜单
  5. 马克笔字体软件测试,广东文艺职业学院2017年公开招聘专业技能测试试题
  6. 2016 计算机控制技术试题,计算机控制技术试题
  7. 和秋叶一起学PPT之四步走(课时二)
  8. 计算机操作系统(第四版)课后习题答案西电版V2.0校对版
  9. Android Studio 下载ndk
  10. .NET反编译工具:de4dot