117.info
人生若只如初见

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

未经允许不得转载 » 本文链接:https://www.117.info/ask/fe5deAzsLBg9TAFM.html

推荐文章

  • java内部类的使用场景有哪些

    Java内部类的使用场景有以下几种: 封装性:内部类可以访问外部类的私有成员,可以用于实现一些封装的功能。 实现多继承:内部类可以继承一个类并实现一个接口,...

  • java字符串去掉空格的方法有哪些

    Java 字符串去掉空格的方法有以下几种: 使用 String 类的 trim() 方法,该方法会去掉字符串两端的空格。 String str = " Hello World ";
    String trimmedSt...

  • java调用父类的方法有哪些

    在Java中,调用父类的方法有以下几种方式: 使用super关键字:使用super关键字可以调用父类的方法。可以通过super.method()的方式调用父类的非私有方法,也可以通...

  • java怎么判断字符串是否为纯数字

    可以使用正则表达式来判断一个字符串是否为纯数字。下面是一个示例代码:
    public class Main {
    public static void main(String[] args) {
    Strin...

  • jQuery中delegate()方法的用法详解

    在jQuery中,delegate()方法用于为动态添加或移除的元素绑定事件处理程序。它允许您为父级元素指定一个选择器,然后当匹配该选择器的子元素触发事件时,执行相应...

  • jQuery trigger()方法用法介绍

    jQuery的trigger()方法用于触发指定元素上的特定事件。它模拟了用户对元素的交互操作,例如点击、鼠标悬停等,从而触发相应的事件处理程序。
    使用trigger()...

  • 深入剖析ArrayList的remove方法

    ArrayList的remove方法用于删除ArrayList中的元素。该方法有两个重载版本: remove(int index):根据索引删除指定位置的元素,并返回被删除的元素。删除后,被删...

  • git和SVN的区别小结

    Git和SVN都是版本控制系统,用于管理和跟踪软件开发过程中的更改。然而,它们之间存在一些重要的区别: 分布式vs集中式:Git是一种分布式版本控制系统,每个开发...