java connect four_JAVA connectFour

项目要求

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

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

代码如下

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("---------------");

}

}

运行结果

同行四连珠

0818b9ca8b590ca3270a3433284dd417.png

同列四连珠

0818b9ca8b590ca3270a3433284dd417.png

右上到左下四连珠

0818b9ca8b590ca3270a3433284dd417.png

左上到右下四连珠

0818b9ca8b590ca3270a3433284dd417.png

超出棋盘

0818b9ca8b590ca3270a3433284dd417.png

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值