Java五子棋详细步骤及完整代码

2023-11-14

五子棋

1. 定义声明一个二维数组做棋盘

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		//定义声明一个二维数组作为棋盘
		int[][] game = new int[9][9];
		Scanner sc = new Scanner(System.in);
	

2. 定义变量, 代表落子角色

//定义一个变量, 作为当前落子的角色, 1代表黑子,  2代表白子
		int role = 1;

3.开始游戏

1. 用户输入行和列

		//游戏开始
		while(true) {
			//等待获取用户输入的行和列
			if(role == 1) {
				System.out.println("黑棋落子");
			}else {
				System.out.println("白棋落子");
			}
			System.out.println("请输入要落子的行和列(空格或回车隔开)");
			int r = sc.nextInt();
			int c = sc.nextInt();

2. 将输入设为对应棋子

			//将用户输入的行和列, 设置成对应的棋子
			if(game[r][c] != 0) {
				System.out.println("该位置已经有落子");
				//没有continue,下错棋子的一方, 将少一次下棋机会
				continue;
			}else {
				game[r][c] = role;
			}
			System.out.println("棋盘:");
			//后面会经常使用的,打印一下当前棋盘状态的代码块
			for(int[]arr : game) {
				for(int item : arr) {
					System.out.print(item + " ");
				}
				System.out.println();
			}

4. 判断是否结束

1. 横向判断

		 //横向向左判断			
			int offset = 1;
			int count = 1;
			while(c - offset >= 0 && game[r][c - offset] == role) {
				count++;
				offset++;
			}
		//横向向右判断		
			offset = 1;
			while(c + offset < game[r].length && game[r][c + offset] == role) {
				count++;
				offset++;
			}
			if(count >= 5) {
				break;
			}

2. 竖向判断

		//竖向向下判断
			offset = 1;
			count = 1;
			while(r + offset < game.length && game[r + offset][c] == role) {
				count++;
				offset++;
				
			}
		//竖向向上判断
			offset = 1;
			while(r - offset >= 0 && game[r - offset][c] == role) {
				count++;
				offset++;				
			}
			if(count >= 5) {
				break;
			}

3. 左斜判断

//左斜("\")判断当前游戏是否胜利
		//左斜("\")向右下判断
			offset = 1;
			count = 1;
			while(r + offset < game.length && c + offset < game[r].length && game[r + offset][c + offset] == role) {
				count++;
				offset++;				
			}
		//左斜("\")向左上判断
			offset = 1;
			while(r - offset >= 0 && c - offset >= 0 && game[r - offset][c - offset] == role) {
				count++;
				offset++;				
			}
			
			if(count >= 5) {
				break;
			}

4.右斜判断

//右斜("/")判断当前游戏是否胜利
		//右斜("/")向左下判断
			offset = 1;
			count = 1;
			while(r + offset < game.length && c - offset >=0 && game[r + offset][c - offset] == role) {
				count++;
				offset++;				
			}
		//右斜("/")向右上判断
			offset = 1;
			while(r - offset >= 0 && c + offset < game[r].length && game[r - offset][c + offset] == role) {
				count++;
				offset++;				
			}
			
			if(count >= 5) {
				break;
			}
			 
			//棋子角色的变换, 如果是1, 则变成2, 如果是2, 则变成1
			role = 3 - role;
		
		
		}
		
		System.out.println(role + "胜利");
	}

}

5. 运行结果展示

1.横向胜利

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o2B4sRTk-1689915693128)(./img/Pasted%20image%2020221128122820.png)]

2.竖向胜利

在这里插入图片描述

3. 左斜判断

在这里插入图片描述

4. 右斜判断

6. 完整代码

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		//定义声明一个二维数组作为棋盘
		int[][] game = new int[9][9];
		Scanner sc = new Scanner(System.in);
		//定义一个变量, 作为当前落子的角色, 1代表黑子,  2代表白子
		int role = 1;
		//游戏开始
		while(true) {
			//等待获取用户输入的行和列
			if(role == 1) {
				System.out.println("黑棋落子");
			}else {
				System.out.println("白棋落子");
			}
			System.out.println("请输入要落子的行和列(空格或回车隔开)");
			int r = sc.nextInt();
			int c = sc.nextInt();
		
			//将用户输入的行和列, 设置成对应的棋子
			if(game[r][c] != 0) {
				System.out.println("该位置已经有落子");
				//没有该行,下错棋子的一方, 将少一次下棋机会
				continue;
			}else {
				game[r][c] = role;
			}
			System.out.println("棋盘:");
			//后面会经常使用的,打印一下当前棋盘状态的代码块
			for(int[]arr : game) {
				for(int item : arr) {
					System.out.print(item + " ");
				}
				System.out.println();
			}
//横向判断当前游戏是否结束
		//横向向左判断			
			int offset = 1;
			int count = 1;
			while(c - offset >= 0 && game[r][c - offset] == role) {
				count++;
				offset++;
			}
		//横向向右判断		
			offset = 1;
			while(c + offset < game[r].length && game[r][c + offset] == role) {
				count++;
				offset++;
			}
			if(count >= 5) {
				break;
			}
			
//竖向判断当前游戏是否结束
		//竖向向下判断
			offset = 1;
			count = 1;
			while(r + offset < game.length && game[r + offset][c] == role) {
				count++;
				offset++;
				
			}
		//竖向向上判断
			offset = 1;
			while(r - offset >= 0 && game[r - offset][c] == role) {
				count++;
				offset++;				
			}
			if(count >= 5) {
				break;
			}
//左斜("\")判断当前游戏是否胜利
		//左斜("\")向右下判断
			offset = 1;
			count = 1;
			while(r + offset < game.length && c + offset < game[r].length && game[r + offset][c + offset] == role) {
				count++;
				offset++;				
			}
		//左斜("\")向左上判断
			offset = 1;
			while(r - offset >= 0 && c - offset >= 0 && game[r - offset][c - offset] == role) {
				count++;
				offset++;				
			}
			
			if(count >= 5) {
				break;
			}
//右斜("/")判断当前游戏是否胜利
		//右斜("/")向左下判断
			offset = 1;
			count = 1;
			while(r + offset < game.length && c - offset >=0 && game[r + offset][c - offset] == role) {
				count++;
				offset++;				
			}
		//右斜("/")向右上判断
			offset = 1;
			while(r - offset >= 0 && c + offset < game[r].length && game[r - offset][c + offset] == role) {
				count++;
				offset++;				
			}
			
			if(count >= 5) {
				break;
			}
			 
			//棋子角色的变换, 如果是1, 则变成2, 如果是2, 则变成1
			role = 3 - role;
		
		
		}
		
		System.out.println(role + "胜利");
	}

}



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java五子棋详细步骤及完整代码 的相关文章

随机推荐

  • 使用SheetJS读写Excel文件

    文章目录 目的 基础说明 读取 写入 总结 目的 项目中有一个Excel转JSON的工具 之前这个工具一直使用 Python 的 openpyxl 库来编写的 然后使用 pyinstaller 打包成 exe 文件 之前这个工具只是个命令行
  • Invalid bound statement (not found): xxxxx.UserDao.selectUserById 无法注入,无法映射详解

    在使用SSM框架时 遇到 idea报这种错误 Invalid bound statement not found xxxxx UserDao selectUserById 说明你的mybatis的配置文件并没有配好 正确模板如下
  • 最小二乘法与最佳平方逼近(简单版+例子)

    文章内容 本文主要介绍最小二乘法和最佳平方逼近的算法思想 并没有进行严格的数学证明和数学推导 如果仅仅是想要了解该算法的大致思路 那么本文非常适合你 最小二乘法和最佳平方逼近可以说是一回事 最小二乘法主要用于离散型变量 而最佳平方逼近用于的
  • 【漏洞靶场】文件上传后端检测点绕过--upload-labs

    一 漏洞描述 在uploads labs第八关中 服务器采用了黑名单的方式过滤上传文件的后缀 黑名单中包含了所有违法的后缀 包括可以让所有文件都当php脚本执行的 htaccess配置文件 但是在验证函数中缺少deldot 函数 从字符串的
  • goland工具 air 保存自动编译代码 实现热加载

    为什么需要实时加载 之前使用Python编写Web项目的时候 常见的Flask或Django框架都是支持实时加载的 你修改了项目代码之后 程序能够自动的重新加载并执行 live reload 这在日常的开发阶段是很方便的 在使用Go语言的g
  • 以图搜图实现二之Elasticsearch Aknn插件生成

    1 搭建maven 项目 项目pom xml 文件为
  • Android 图片旋转实现的两种方法的比较

    转载请标明出处 http blog csdn net nmyangmo article details 73506752 图片旋转的方法有两种 旋转ImageView所在布局暂不考虑 这两种分别是动画和使用Matrix 齐次变换矩阵 我们想
  • gojs Node 中文文档

    PS 其中大部分API都一个个自己使用测试一遍了解其实现效果 再根据描述编写 如果有不正确的请在评论区指出 Hierarchy GraphObject Panel Part Node Group 节点是可以通过线连接到其他节点的零部件 也可
  • 【数据结构 】八大排序(插入,希尔,选择,堆,归并,快排,冒泡,计数)

    文章目录 一 排序的基本概念 二 常见的基本排序 1 插入排序 插入排序的时间复杂度 2 希尔排序 希尔排序的时间复杂度分析 3 选择排序 选择排序时间复杂度分析 4 堆排序 堆排序的时间复杂度 5 归并排序 6 快速排序 快速排序的时间复
  • LeetCode 1.两数之和

    题目链接 1 两数之和 思路分析 可以暴力枚举时间复杂度为 O n 2 O n 2 O n2 也可以用哈希表
  • RPA机器人来了, 你的饭碗还好吗?

    摘要 RPA正在席卷全球各行各业 从金融到医疗再到零售 多种重复有规律的工作流程正在被代替 从上世纪90年代到现在 RPA经历了怎样的发展历程 目前又是怎么样的现状呢 RPA 正在席卷全球 这是一个平常的星期二 你睁开睡眼惺忪的眼睛 迅速洗
  • 梳理Vue常考面试题型

    完整版在线阅读 http interview poetries top 1 对于MVVM的理解 MVVM是Model View ViewModel缩写 也就是把MVC中的Controller演变成ViewModel Model层代表数据模型
  • Linux03:CentOS7.5安装jdk1.8

    jdk下载地址 链接 https pan baidu com s 1GvcOgsIXn502aZC5yk1aDg 提取码 l16v 1 上传安装包 创建目录 mkdir p data soft 上传安装包 2 解压 tar zxvf jdk
  • Swagger常用注解强调点说明

    Swagger注解 常用注解 Api 用于类 一般用于controller类 表示 标识这个类是swagger的资源 显示在文档中 ApiOperation 用于方法 一般用于controller中的方法上 表示一个http请求的操作 Ap
  • Python爬虫的Selenium(学习于b站尚硅谷)

    目录 一 Selenium 1 为什么要学习Selenium 1 什么是Selenium 2 为什么使用selenium 3 代码演示 2 selenium的基本使用 1 如何安装selenium 2 selenium的使用步骤 3 代码的
  • Linux是什么,能干什么,在哪干?

    Linux就是个操作系统 它和Windows XP Windows 2003 2008什么的一样就是一个操作系统而已 Linux能干什么 它能当服务器 服务器上安装者各种企业应用 服务 比如 Web服务 apache 就是能架设网站的 数据
  • 程序员的自我修养(十二) -- Linux共享库

    共享库 从文件结构上来看 共享库和共享对象没什么区别 Linux下的共享库就是欧通的ELF共享对象 共享库的更新有两类 兼容更新 不兼容更新 版本命名 libname so x y z x 主版本号 库的重大升级 不同主版本号之间是不兼容的
  • 【高危】 Zoom Desktop Client for Windows <5.14.5 权限升级漏洞

    漏洞描述 Zoom 是一种用于视频会议 在线会议和远程协作的软件平台 Zoom Desktop Client for Windows 5 14 5 之前版本由于对数据的真实性验证不足 经过身份验证的攻击者可通过网络访将权限升级为 SYSTE
  • 核医学笔记-标准摄取值SUV计算

    SUV SUV值全称为标准摄取值 standard uptake value SUV 是pet在肿瘤诊断中常用的半定量指标 是指局部组织摄取的显像剂的放射性活度与全身平均注射活度 SUV 病灶的放射性浓度 kBq ml 注射剂量 MBq 体
  • Java五子棋详细步骤及完整代码

    五子棋 1 定义声明一个二维数组做棋盘 import java util Scanner public class Main public static void main String args 定义声明一个二维数组作为棋盘 int ga