Java实现简单 * 面五子棋
作者:北渺 时间:2022-07-10 12:06:02
本文项目为大家分享了Java实现 * 面五子棋的具体代码,供大家参考,具体内容如下
项目介绍:
本次设计是基于知识点Java类和对象以及数组开发的一个小型五子棋游戏程序。游戏开始时,选择黑棋、白棋开局,将一枚棋子落在棋盘一坐标上,然后轮番落子,如此轮流下子,直到某一方首先在棋盘的竖、横或两斜四方向上的五子连成线,则该方该局获胜。
项目实现思路:
1、棋盘设计为10*10格,棋盘类型Chess[][] 二维数组,所含属性String chessType; 棋盘首先chessType值是”➕”。
2、初始化二维数组
3、玩家选择黑白圈后,开始下棋。输入要下棋子的行列坐标,黑白棋子轮流落子,当一方连成五子或下满棋盘时,游戏结束(连成五子的一方获胜,下满棋盘为和棋)。
4、每一次落子成功后,马上判断以该位置为中心的八个方向:上、下、左、右、左上、左下、右上、右下是否有相同颜色的棋子连成五子,如果连成五子,则游戏结束,输出相应的信息。
5、当游戏一方胜利后显示胜利信息。从程序表面看,这是一个二维平面图,所以数据用二维数组来表示,数组两个下标可以表示棋盘上的位置,数组元素的值代表棋格上的状态,共有三种情况,分别是,⭕代表白棋,●代表黑棋,➕代表格子。
源代码
1.棋子
/**
* @author hudongsheng
* @date 2020/10/29 - 9:28
*/
public class ChessType {
private String chessType;
private int x;
private int y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public ChessType() {
}
public String getChessType() {
return chessType;
}
public void setChessType(String chessType) {
this.chessType = chessType;
}
}
2.下棋
/**
* @author hudongsheng
* @date 2020/10/29 - 9:27
*/
public class Gobang {
private int size = 1;
private ChessType[][] chessTypes;
private int row;
private int colum;
private int x;
private int y;
//创建一个棋盘
public Gobang(int row,int colum){
this.row = row;
this.colum = colum;
chessTypes = new ChessType[row][colum];
}
//初始化棋盘
public void initChessType(){
for(int i = 0; i< chessTypes.length; i++){
for (int j = 0; j< chessTypes[i].length; j++){
chessTypes[i][j] = new ChessType();
chessTypes[i][j].setChessType("➕");
}
}
}
//下白棋
public void setWhiteChess(int x,int y){
chessTypes[x][y].setChessType("⭕");
}
//下黑棋
public void setBlackChess(int x,int y){
chessTypes[x][y].setChessType("●");
}
//判断是否胜利
public boolean checkWin(int i,int j) {
// TODO Auto-generated method stub
boolean flag = false;
//判断纵向是否有五个棋子是相同的颜色
int count1 = 1;//相同颜色棋子的个数
String color = chessTypes[i][j].getChessType(); //刚下的棋子的颜色
int a = 1; //棋子索引的增量
while((i+a)<row && color == chessTypes[i+a][j].getChessType()){
count1++;
a++;
}
a = 1;
while((i-a)>=0 && color == chessTypes[i-a][j].getChessType()){
count1++;
a++;
}
if(count1 >= 5){
flag = true;
}
//判断纵向是否有五个棋子是相同的颜色
int count2 = 1;
a = 1;
while((j+a)<colum && color == chessTypes[i][j+a].getChessType()){
count2++;
a++;
}
a = 1;
while((j-a)>=0 && color == chessTypes[i][j-a].getChessType()){
count2++;
a++;
}
if(count2 >= 5){
flag = true;
}
//右上 左下 是否有五个棋子是相同的颜色
int count3 = 1;
a = 1;
while((i+a)<row && (j-a)>=0 && color == chessTypes[i+a][j-a].getChessType()){
count3++;
a++;
}
a = 1;
while((i-a)>=0 && (j+a)<colum && color == chessTypes[i-a][j+a].getChessType()){
count3++;
a++;
}
if(count3 >= 5){
flag = true;
}
//左上 右下 是否有五个棋子是相同的颜色
int count4 = 1;
a = 1;
while((i-a)>0 && (j-a)>=0 && color == chessTypes[i-a][j-a].getChessType()){
count4++;
a++;
}
a = 1;
while((i+a)<row && (j+a)<colum && color == chessTypes[i+a][j+a].getChessType()){
count4++;
a++;
}
if(count4 >= 5){
flag = true;
}
return flag;
}
//落子后打印棋盘
public void print(){
for(int i = 0; i< chessTypes.length; i++){
for (int j = 0; j< chessTypes[i].length; j++){
System.out.print(chessTypes[i][j].getChessType());
}
System.out.println();
}
}
}
3.测试
**
* @author hudongsheng
* @date 2020/10/29 - 9:27
*/
public class Test {
public static void main(String[] args) {
boolean flag = true;
int x;
int y;
Gobang gobang = new Gobang(10,10);
Scanner scanner = new Scanner(System.in);
gobang.initChessType();
//下棋
System.out.println("黑棋执先");
while (true){
gobang.print();
System.out.println("请输入下黑棋的坐标:");
x = scanner.nextInt();
y = scanner.nextInt();
gobang.setBlackChess(x,y);
if(gobang.checkWin(x,y)){
gobang.print();
System.out.println("黑棋胜!");
break;
}
gobang.print();
System.out.println("请输入下白棋的坐标:");
x = scanner.nextInt();
y = scanner.nextInt();
gobang.setWhiteChess(x,y);
if(gobang.checkWin(x,y)){
gobang.print();
System.out.println("白棋胜!");
break;
}
}
}
}
来源:https://blog.csdn.net/qq_43722914/article/details/109574987
标签:java,五子棋
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java 实现模拟用户登录的示例代码
2022-10-16 04:23:06
Android设置全屏代码分享
2022-03-25 10:42:30
Java后台批量生产echarts图表并保存图片
2023-11-25 03:24:39
android 调用系统的照相机和图库实例详解
2022-01-02 11:46:47
一篇文章带你入门Java数据类型
2022-06-10 09:25:44
![](https://img.aspxhome.com/file/2023/8/62338_0s.jpg)
Android自定义View实现带4圆角或者2圆角的效果
2023-04-08 04:32:10
![](https://img.aspxhome.com/file/2023/9/101869_0s.png)
MyBatis的 config.xml标签
2021-07-18 02:01:34
Java源码解析之ClassLoader
2022-06-14 06:07:47
MyBatis通用Mapper和PageHelper的过程详解
2022-09-29 16:17:03
基于springboot+vue实现垃圾分类管理系统
2023-04-17 08:39:11
![](https://img.aspxhome.com/file/2023/2/86862_0s.jpg)
c# rsa加密解密详解
2023-06-11 00:54:17
![](https://img.aspxhome.com/file/2023/4/68094_0s.png)
Android实现QQ图片说说照片选择效果
2022-05-15 12:52:08
![](https://img.aspxhome.com/file/2023/8/138788_0s.jpg)
Java Swing中JDialog实现用户登陆UI示例
2021-10-12 13:58:00
![](https://img.aspxhome.com/file/2023/9/68709_0s.jpg)
java实现轻量型http代理服务器示例
2021-10-05 18:14:20
spring mvc中@PathVariable / 带斜杠方式获取
2022-09-15 04:47:27
C#判断日期是否到期的方法
2021-09-10 14:40:00
SpringCloud Nacos + Ribbon 调用服务的实现方式(两种)
2023-11-18 09:30:38
![](https://img.aspxhome.com/file/2023/5/86035_0s.png)
安卓图片反复压缩后为什么普遍会变绿而不是其它颜色?
2023-04-20 03:08:26
![](https://img.aspxhome.com/file/2023/0/138490_0s.png)
java使用dom4j操作xml示例代码
2022-03-21 18:28:38
全面了解java基本类型和封装类型的区别及应用
2022-10-03 05:39:09
![](https://img.aspxhome.com/file/2023/9/122339_0s.png)