JAVA connectFour

该项目是一个JAVA编写的四连珠游戏,玩家可以交替落子。当某玩家在同一行、列或对角线上形成四连珠时,该玩家获胜。代码已给出,包括同行、同列、右上到左下、左上到右下四种情况的判断,并有超出棋盘的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目要求

四连珠游戏,两个玩家交替落子。

每次输入一个数表示在该列落子,由下往上落子。若同一玩家在同行、同列或对角线出现四连珠则获胜。


代码如下

package curriculum.java;

import java.util.Scanner;

public class connectFour {
	private static int girds[][] = new int[7][7];
	private static int column;
	private static int player1 = 1, player2 = 2;// player1表示为R(red),player2表示为Y(yellow)
	private static int player = player1; // 初始化先落子的玩家为R玩家
	private static int win = 0;// 记录获胜情况

	private static Scanner input = new Scanner(System.in);

	public static void main(String[] args) {

		// 一直循环至有玩家获胜或者平局
		while (judgeDraw() == true && win == 0) {

			// 一直循环至玩家输入正确
			while (true) {
				System.out.print("Drop a " + (player == 1 ? "red" : "yellow")
						+ " disk at column (0-6): ");
				column = input.nextInt();
				if (judgeToken(column, player) == 1) {
					break;
				}
			}

			// 更换落子的玩家
			if (player == player1) {
				player = player2;
			} else {
				player = player1;
			}
		}
	}

	// 判断格子是否可以落子并显示棋盘
	private static int judgeToken(int c, int p) {
		if (c < 0 || c > 6 || girds[0][c] != 0) {
			System.out.println("Input Error! Please re-enter.");
			return 0;
		}
		for (int i = 6; i >= 0; i--) {
			if (girds[i][c] == 0) {
				girds[i][c] = p;
				showGirds();
				judgeWin(i, c, p);
				return 1;
			}
		}
		return 0;
	}

	// 判断是否获胜。r表示行,c表示列,p表示玩家;返回判断情况,若为1则游戏结束
	private static void judgeWin(int r, int c, int p) {
		int count1 = 0, count2 = 0, count3 = 0, count4 = 0;

		// count1:判断同列是否连续4个相同,相同则+1,不同则清零重计
		// count2:判断同行是否连续4个相同,相同则+1,不同则清零重计
		for (int i = 0; i < 7; ++i) {
			if (girds[i][c] == p) {
				count1++;
			} else if (count1 < 4) {
				count1 = 0;
			}
			if (girds[r][i] == p) {
				count2++;
			} else if (count2 < 4) {
				count2 = 0;
			}
		}

		// count3:判断右上到左下对角线是否连续4个相同,相同则+1,不同则清零重计
		if (r < 4 && c > 2) {
			for (int i = r, j = c; i < 7; i++, j--) {
				if (girds[i][j] == p) {
					count3++;
				} else {
					count3 = 0;
				}
			}
		}

		// count4:判断左上到右下对角线是否连续4个相同,相同则+1,不同则清零重计
		if (r < 4 && c < 4) {
			for (int i = r, j = c; i < 7; i++, j++) {
				if (girds[i][j] == p) {
					count4++;
				} else {
					count4 = 0;
				}
			}
		}

		// count1、count2、count3、count4任一成为4则表示四子相连,以此判断获胜情况
		if (count1 >= 4 || count2 >= 4 || count3 >= 4 || count4 >= 4) {
			System.out.println((p == 1 ? "red" : "yellow") + " win.");
			win = 1;
		}
	}

	// 判断是否平局。若有空格则不算平局
	private static boolean judgeDraw() {
		for (int i = 0; i < 7; ++i) {
			for (int j = 0; j < 7; ++j) {
				if (girds[i][j] == 0) {
					return true;
				}
			}
		}
		System.out.println("Y and R draw.");
		return false;
	}

	// 显示棋盘
	private static void showGirds() {
		for (int i = 0; i < 7; ++i) {
			for (int j = 0; j < 7; ++j) {
				System.out.print("|"
						+ (girds[i][j] == 0 ? " " : (girds[i][j] == 1 ? "R"
								: "Y")) + "");
				if (j == 6) {
					System.out.println("|");
				}
			}
		}
		System.out.println("---------------");
	}
}


运行结果

同行四连珠



同列四连珠



右上到左下四连珠



左上到右下四连珠



超出棋盘



题目来自《JAVA语言程序设计》P258-7.20***

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值