本文实例为大家分享了Java实现五子棋的具体代码,供大家参考,具体内容如下

任务概述:

五子棋是全国智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏。通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连线者获胜。

任务过程:

1.绘制棋盘

2.提示黑方(用 1 表示)和白方(用 2 表示)分别下棋(X,Y 轴位置)并重新绘制棋盘

3.每当一方下棋后判断是否获胜

重点讲解:

1.关于胜利的判断:

根据用户所下棋子的位置对其周围进行检测,分为以下情况:

横向:当前下棋位置左右各4颗棋子连续相同5颗

竖向:当前下棋位置上下各4颗棋子连续相同5颗

斜向:当前下棋位置左上右下各4颗棋子连续相同5颗、当前下棋位置左下右上各4颗棋子连续相同5颗

在检测时要注意数组的下标,若用户下棋位置处于棋盘边缘,则周围坐标很可能已经在棋盘之外,要注意加上相应的判断避免下标越界!

2.关于棋盘下满:

我的思路是,先认为棋盘已经下满,然后在打印棋盘的同时,若当前打印值为0,则认为棋盘未满,可继续下棋操作,若棋盘已经打印完毕,仍然没有打印值为0的情况,则认为棋盘下满,双方平局,游戏结束。

其余内容在代码上有详细的注释,以下为代码:

import java.util.Scanner;

public class Chess {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

int order = 1;//储存顺序,当order为1时轮到黑方下棋,当order为2时轮到白方下棋

int row = 0;//用来储存要下棋的行数

int column = 0;//用来储存要下棋的列数

int win = 0;//用来储存获胜者编号,为0则双方均未获胜,为1则白方获胜,为2则黑方获胜

int count1 = 0;//用来储存当前下棋位置左右各4颗棋子的相同数量

int count2 = 0;//用来储存当前下棋位置上下各4颗棋子的相同数量

int count3 = 0;//用来储存当前下棋位置左上右下各4颗棋子的相同数量

int count4 = 0;//用来储存当前下棋位置左下右上各4颗棋子的相同数量

int full = 1;//用来判断棋盘是否下满,默认值1认为已满,只要有1处空则置0

int board[][] = new int[16][16];//用来记录棋盘

//为棋盘的坐标赋值

for(int i = 0;i<16;i++) {

board[i][0] = i;//为棋盘的Y轴赋值

}

for(int j = 0;j<16;j++) {

board[0][j] = j;//为棋盘的X轴赋值

}

//开始下棋,无限循环直到有一方胜利或棋盘下满

while(true) {

//首先输出棋盘

for(int i = 0;i<16;i++) {

for(int j = 0;j<16;j++) {

if(board[i][j] == 0)//若棋盘有1处空则认为棋盘未满

full = 0;

System.out.print(board[i][j]+"\t");

}

System.out.println();

}

//然后判断棋盘是否下满

if(full == 1) {//棋盘自始至终未有空值,则认为棋盘已经下满

System.out.print("棋盘已下满,双方平局,游戏结束!");

break;//跳出循环

}

//棋盘未满,进入下棋过程

if(order == 1) {//order为1黑方下棋

order = 2;//切换order,下一次则白方下棋

//无限循环直到下棋点可以正常下棋

while(true) {

System.out.println("请黑方下棋,请先输入X轴位置(列数,1-15):");

column = scanner.nextInt();//储存要下棋的列数

System.out.println("请黑方下棋,请输入Y轴位置(行数,1-15):");

row = scanner.nextInt();//储存要下棋的行数

if(board[row][column] != 0)//下棋点已有棋子,需重新下棋

System.out.println("此次下棋无效,请重新下棋!");

else {

board[row][column] = 1;//放置黑棋

break;//跳出循环

}

}

}

else {//order为2白方下棋

order = 1;//切换order,下一次则黑方下棋

//无限循环直到下棋点可以正常下棋

while(true) {

System.out.println("请白方下棋,请先输入X轴位置(列数,1-15):");

column = scanner.nextInt();//储存要下棋的列数

System.out.println("请白方下棋,请输入Y轴位置(行数,1-15):");

row = scanner.nextInt();//储存要下棋的行数

if(board[row][column] != 0)//下棋点已有棋子,需重新下棋

System.out.println("此次下棋无效,请重新下棋!");

else {

board[row][column] = 2;//放置白棋

break;//跳出循环

}

}

}

//本次下棋完毕,判断是否有人获胜

for(int i = -4;i < 4;i++) {

//判断当前下棋位置左右各4颗棋子的相同数量,连续4组相同则获胜

if(column+i>0 && column+i+1<16) {//防止下标越界

if(board[row][column+i] == board[row][column+i+1] && board[row][column+i] != 0) {

count1++;

if(count1 == 4) {//连续4组相同,获胜

win = order;

break;

}

}

else

count1 = 0;//未连续相同,清除相同计数

}

//判断当前下棋位置上下各4颗棋子的相同数量,连续4组相同则获胜

if(row+i>0 && row+i+1<16) {//防止下标越界

if(board[row+i][column] == board[row+i+1][column] && board[row+i][column] != 0) {

count2++;

if(count2 == 4) {//连续4组相同,获胜

win = order;

break;

}

}

else

count2 = 0;//未连续相同,清除相同计数

}

//判断当前下棋位置左上右下各4颗棋子的相同数量,连续4组相同则获胜

if(column+i>0 && column+i+1<16 && row+i>0 && row+i+1<16) {//防止下标越界

if(board[row+i][column+i] == board[row+i+1][column+i+1] && board[row+i][column+i] != 0) {

count3++;

if(count3 == 4) {//连续4组相同,获胜

win = order;

break;

}

}

else

count3 = 0;//未连续相同,清除相同计数

}

//判断当前下棋位置左下右上各4颗棋子的相同数量,连续4组相同则获胜

if(column+i>0 && column+i+1<16 && row-i-1>0 && row-i<16) {//防止下标越界

if(board[row-i][column+i] == board[row-i-1][column+i+1] && board[row-i][column+i] != 0) {

count4++;

if(count4 == 4) {//连续4组相同,获胜

win = order;

break;

}

}

else

count4 = 0;//未连续相同,清除相同计数

}

}

//有人获胜,输出棋盘及获胜者,跳出循环

if(win == 2) {//由于win是order的值,order轮到白方,说明黑方获胜

//输出棋盘

for(int i = 0;i<16;i++) {

for(int j = 0;j<16;j++) {

System.out.print(board[i][j]+"\t");

}

System.out.println();

}

System.out.println("恭喜黑方获胜,游戏结束!");

break;//跳出循环

}

else if(win == 1) {//由于win是order的值,order轮到黑方,说明白方获胜

//输出棋盘

for(int i = 0;i<16;i++) {

for(int j = 0;j<16;j++) {

System.out.print(board[i][j]+"\t");

}

System.out.println();

}

System.out.println("恭喜白方获胜,游戏结束!");

break;//跳出循环

}

//无人获胜,清除相同棋子计数,开始新循环

count1 = 0;

count2 = 0;

count3 = 0;

count4 = 0;

full = 1;//再次认为棋盘已满

}

}

}

更多有趣的经典小游戏实现专题,分享给大家:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

用java编写五子棋制作流程_Java实现五子棋的基础方法相关推荐

  1. java五子棋游戏源代码_Java实现五子棋游戏的完整代码

    用Java编写简单的五子棋,供大家参考,具体内容如下 前言 这两天在空闲时间做了个五子棋项目,分享给大家看一下,界面是这样的: 界面很丑我知道,本人虽有几年PS基础,但知识浅薄,审美观不尽人意,做到如 ...

  2. java五子棋小游戏_java实现五子棋小游戏

    java实现五子棋小游戏 package Gomoku; import java.awt.Toolkit; import javax.swing.JFrame; public class Gomoku ...

  3. 用java编写战舰 游戏吗_java – 战舰游戏 – 船舶重叠

    我正在使用ACM库在 Java中编写一个简单的战舰游戏. 游戏开始后,应该将船只放在画布上的随机位置,但问题是船只可能会互相覆盖,这在游戏中是不允许的.如何避免将船放在彼此之上? 我的代码是: pri ...

  4. java编写教师类输出_Java类和对象的区别和联系,超简单易懂!

    在面向对象的编程语言中,类和对象必然是最核心的特性之一.本文主要介绍Java中的类和对象. 示例 以班级成员为例,班上有小红.小明.小李,还有王老师.张老师和魏老师,我们认为他们都属于"人类 ...

  5. java编写通信录管理系统_Java 实现通讯录管理系统教程

    本文实例为大家分享了java实现通讯录管理系统的具体代码,供大家参考,具体内容如下 完成项目的流程: 1.根据需求,确定大体方向 2.功能模块分析 3.界面实现 4.功能模块设计 5.coding 6 ...

  6. java蓝牙对战游戏_Java 蓝牙五子棋对战

    鉴于j2me的手机版蓝牙对战五子棋,包括完整源代码,资源资料齐全,特别希望入门者或高手参照,它导出的Jar资料也在压缩包内,如果你有模拟机的话,能够直接运行.效果如上. Java 蓝牙五子棋对战源代码 ...

  7. java贪吃蛇设计流程_JAVA版贪食蛇(贪吃蛇)游戏的设计与实现(含录像)

    JAVA版贪食蛇(贪吃蛇)游戏的设计与实现(含录像)(任务书,开题报告,外文翻译,毕业论文12000字,程序代码,MySQL数据库,答辩PPT,答辩视频录像) 摘要 "贪食蛇"游戏 ...

  8. java编写类骑士游历_java课程设计骑士游历程序的开发

    java课程设计骑士游历程序的开发 JAVA程序设计 课程设计报告 课 题: 骑士游历程序的开发 姓 名: 学 号: 同组姓名: 专业班级: 指导教师: 设计时间: 2013.06.10 评阅意见: ...

  9. java编写螺旋矩阵讲解_Java如何实现螺旋矩阵 Java实现螺旋矩阵代码实例

    本篇文章小编给大家分享一下Java实现螺旋矩阵代码实例,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时 ...

最新文章

  1. vivado调用modelsim
  2. express路由管理的几种自动化方法分享-js教程-PHP中文网
  3. 除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。...
  4. Julia: find 和其它
  5. 【ECSHOP插件】ECSHOP会员头像,上传头像评论显示头像
  6. 关于util.Date,sql.Date,sql.Time,sql.Timestamp以及他们和Clendar类的区别和联系
  7. Jmeter HTTP Proxy Server 代理录制 IE无法录制到请求的问题解决
  8. 二叉搜索树,就这,就这啊。
  9. 支付宝,微信付款码正则表达式
  10. 不重启Windows使环境变量快速生效
  11. 微信小程序被投诉怎么办?小妙招教给你
  12. 筑梦数字时代,城链科技战略峰会西安站顺利落幕
  13. 前端对接微信公众号网页开发流程,授权对接
  14. springboot在Gradle7以上版本不识别compile解决方案
  15. 现代物流仓储自动化实验系统
  16. ARMv7 与 ARMv8的区别
  17. 好文分享 努力从何时开始都不晚 跟自己比 不断进步
  18. 浅谈企业转型过程中的问题与对策
  19. 学习笔记:Unity CustomSRP-5-Baked Light
  20. 已知测量精度,计算工业相机分辨率

热门文章

  1. vue基础之异步请求
  2. 求分数和的最简形式(c++)
  3. windows.h详解
  4. 图片怎么添加边框?分享几个添加边框的方法
  5. RSA,AES算法加解密
  6. matlab画图 设置按钮,Matlab绘图操作(1)
  7. echarts使用ajax接收数据并展示
  8. Ajax使用笔记 - - - 传递input框参数
  9. python 获取屏幕快照_如何获取Windows登录屏幕的屏幕快照:2个怪异技巧
  10. 突破网络封锁访问Nifty Gateway