当前位置: 首页 » 综合知识 » it知识 » 正文

Java实现简单连连看游戏

发布时间:2023-08-10 以下文章来源于网友投稿,内容仅供参考!

下面是一个简单的Java实现连连看游戏的例子:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class LianLianKan {
private static final int ROWS = 5;
private static final int COLS = 6;
private static final int EMPTY = 0;
private static final int WALL = -1;
private static int[][] board = new int[ROWS][COLS];
public static void main(String[] args) {
initializeBoard();
printBoard();
while (true) {
System.out.println("请输入两个相同的数字坐标,以空格分隔(例如:1 2 3 4):");
Scanner scanner = new Scanner(System.in);
int x1 = scanner.nextInt();
int y1 = scanner.nextInt();
int x2 = scanner.nextInt();
int y2 = scanner.nextInt();
if (isValidMove(x1, y1, x2, y2)) {
if (isConnectable(x1, y1, x2, y2)) {
board[x1][y1] = EMPTY;
board[x2][y2] = EMPTY;
printBoard();
} else {
System.out.println("两个坐标不能连通,请重新输入!");
}
} else {
System.out.println("输入的坐标不合法,请重新输入!");
}
}
}
private static void initializeBoard() {
// 初始化边界为墙
for (int i = 0; i < ROWS; i++) {
board[i][0] = WALL;
board[i][COLS - 1] = WALL;
}
for (int j = 0; j < COLS; j++) {
board[0][j] = WALL;
board[ROWS - 1][j] = WALL;
}
// 随机生成数字
for (int i = 1; i < ROWS - 1; i++) {
for (int j = 1; j < COLS - 1; j++) {
board[i][j] = (int) (Math.random() * 10);
}
}
}
private static void printBoard() {
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
if (board[i][j] == WALL) {
System.out.print("# ");
} else if (board[i][j] == EMPTY) {
System.out.print(" ");
} else {
System.out.print(board[i][j] + " ");
}
}
System.out.println();
}
}
private static boolean isValidMove(int x1, int y1, int x2, int y2) {
return x1 > 0 && x1 < ROWS - 1 && y1 > 0 && y1 < COLS - 1 &&
x2 > 0 && x2 < ROWS - 1 && y2 > 0 && y2 < COLS - 1 &&
board[x1][y1] != WALL && board[x2][y2] != WALL &&
board[x1][y1] != EMPTY && board[x2][y2] != EMPTY;
}
private static boolean isConnectable(int x1, int y1, int x2, int y2) {
if (board[x1][y1] != board[x2][y2]) {
return false;
}
List path = new ArrayList<>();
if (findPath(x1, y1, x2, y2, path)) {
return true;
}
return false;
}
private static boolean findPath(int x1, int y1, int x2, int y2, List path) {
if (x1 == x2 && y1 == y2) {
return true;
}
if (board[x1][y1] == EMPTY || board[x2][y2] == EMPTY) {
return false;
}
Point point1 = new Point(x1, y1);
Point point2 = new Point(x2, y2);
// 横向直连
if (isHorizontalConnectable(point1, point2)) {
path.add(point1);
path.add(point2);
return true;
}
// 纵向直连
if (isVerticalConnectable(point1, point2)) {
path.add(point1);
path.add(point2);
return true;
}
// 单转折连接
if (isSingleTurn

  • • Linux Ecdsa密钥长度选择有何依据

    在Linux

  • • Linux Khook在内核监控中的应用如何

    Linux

  • • Linux Gsoap是否支持异步通信

    GSOAP是

  • • Linux Coremail如何提升用户体验

    提升Linu

  • • Linux Ecdsa算法有哪些局限性

    ECDSA

  • 哎呀音乐钢琴键盘学习《 钢琴主人训练营》 西瓜学琴
    郭蝈 陪练钢琴 30节课时 考级刚需 让孩子每一次练琴都是高质量的
    30天轻松学会五线谱 流行钢琴自学初级教程 牙牙学琴
    流行爵士钢琴实战技巧VIP课 - 继伟 哎呀音乐
    【海上钢琴师】原版 MT1990钢琴谱
    百首经典流行钢琴实战曲集 - 继伟
    雷费尔德电钢琴重锤88键专业考级儿童初学者数码电子钢琴家用
    小练咖 真人钢琴陪练 1v1服务 2999随时退 1课时50分钟 考级刚需
    雅马哈电钢琴88键重锤CLP735智能数码电子钢琴家用专业初学者考级
    【原装进口】Yamaha/雅马哈钢琴 b121 SC2原声静音钢琴
  • 珠海专业调钢琴
  • 天津宝坻区调钢琴
  • 天津静海区钢琴调音
  • 成都简阳市钢琴调律
  • 大连瓦房店市钢琴调音
  • 眉山调钢琴联系方式
  • 惠州大亚湾钢琴调琴师
  • 长治调琴师
  • 厦门湖里区钢琴调音师
  • 上海普陀区钢琴调音师