用java做一个简易的五子棋
分享用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做一个简易的五子棋相关推荐
- 实现用java做一个简易版《羊了个羊》小游戏(附源代码)
该项目是跟着这个b站视频一步一步写出来的,初学java有些地方我看不是很明白,但是讲解很仔细,大家可以看原视频,我没有添加背景音乐和背景图片,做出来的效果也勉勉强强. 代码已经上传到github上了, ...
- 简易计算器 java_用Java做一个简易计算器,要用到哪些知识?
分析问题关键词:Java.计算器 深夜无聊,暂且一答. 计算器分两个步骤:计算 + 器 篇一 ·「器」 在编程中,我们可以把「器」理解为「GUI(图形界面)」,Java 语言描绘的图形界面有很多种类, ...
- 用JAVA 做一个简易版的坦克大战(只实现基本功能)
不太会写文章,只是为了记录自己做过的东西 文章目录 前言 一.大概思路 二.主要代码 1.Tank.java 2.Shot.java 3. Mypanel.java 4.Hero.java 5.Ene ...
- 用Java写一个简易五子棋游戏
一. 程序基本思路: 1.写窗口.棋盘面板.控制面板: 2.绘制棋盘: 3.绘制棋子: 4.添加组件功能: 5.判断输赢: 6.悔棋: 7.复盘. 二.实际操作 1.创建窗口.添加面板 package ...
- 用java实现一个简易自动提款机
用java实现一个简易自动提款机,且有以下要求 如何实现呢?首先,我们定义一个用户类User,同时根据要求设计好属性(本人部分命名没有使用驼峰命名法,不够规范).因为一个人可能有多个卡,卡号又不能重复 ...
- 如何用idea做一个简易的网页登录界面
在上一节课的内容基础上做一个简易的网页登录界面--18级软工1班03 打开idea后打开上一节课的工程文件(一般在打开idea软件的同时,idea会默认打开上一次的文件)并在左边列表的main文件夹下 ...
- js 月份间隔计算器_15分钟用JS做一个简易计算器
原标题:15分钟用JS做一个简易计算器 前言 这个小练手旨在帮助刚上手学习Java的同学练习最基本的Js知识,大神勿喷哈,由于这个是非常简易的计算器,可以完成的功能有加减乘除和AC(清屏),DEL(退 ...
- 安卓初体验一:做一个简易计分器
安卓初体验一:做一个简易计分器 1.成品图 2.准备:确定开发环境.明确应用功能 2.1开发环境 2.2应用功能 3.界面制作 3.1选择布局 3.2代码编写 4.功能编写 4.1提示信息功能编写 4 ...
- 怎么用线程刷新 tkinter 进度条_tkinter做一个简易提词板(2)
书接上文 花果山美男子:tkinter做一个简易提词板zhuanlan.zhihu.com 上回说到,文字的动态效果还可以用after方法和StringVar来实现,今天我们就用它们来重新制作提词板 ...
- 使用vue-cli+element-ui+expsess+mysql做一个简易的登录功能
使用vue-cli+element-ui+expsess+mysql做一个简易的登录功能 1使用webpack下载vue模板 vue init webpack aaa(aaa为项目名称) cd到aaa ...
最新文章
- arch更新失败的办法
- 第九课.Python文件操作
- vs下载python最后一点很慢-python读取大文件越来越慢的原因与解决
- 简单搜索(多位自幂数)+数列网站
- 收藏!细胞增殖实验要点详解
- Stack Overflow 2016 最新架构探秘
- 洛谷 - P1036 选数(递归)
- 转: RSA原理 阮一峰的博客
- js能否打印服务器端文档,js打印远程服务器文件
- sparkstreaming 读取mysql_SparkStreaming读取Kafka的两种方式
- SpringBoot2.0 基础案例(08):集成Redis数据库,实现缓存管理
- 一个关于 TensorFlow 的悲剧故事
- Android系统Audio框架介绍(一)
- linux并发控制方法,linux系统并发控制
- Tomcat加载类机制 - 我们到底能走多远系列(14)
- 百款 TWS蓝牙耳机 蓝牙天线拆机分析与仿真
- Java 多线程编程
- Radius认证协议(六)报文属性
- python爬虫数据(中国人口信息)存入MYSQL数据库
- 预约小程序开发:小程序开发的费用都包含了哪些?
热门文章
- 无法卸载mysql server 2008 r2,卸载安装失败的sqlserver2008R2
- 2012考研英语--前辈的高分复习经验
- 税控盘查看服务器设置的网站,税控盘服务器地址
- greensock下载_使用GreenSock完成我们的可拖动的画布外菜单
- 马克笔字体软件测试,广东文艺职业学院2017年公开招聘专业技能测试试题
- 2016 计算机控制技术试题,计算机控制技术试题
- 和秋叶一起学PPT之四步走(课时二)
- 计算机操作系统(第四版)课后习题答案西电版V2.0校对版
- Android Studio 下载ndk
- .NET反编译工具:de4dot