本次消消乐会预先提供五个游戏地图,分别表示五关。五关的通关条件分别为:
-
消除⾄少6个A
-
消除⾄少6个B
-
消除⾄少3个B和⾄少3个C
-
总共消除9个元素(元素类型可以不同)
-
有两次消除操作满⾜:消除掉的元素个数⼤于5个(元素类型可以不同)
实现的功能:
功能1
游戏玩家识别出满⾜消除规则1的⼀组棋⼦,选择其中⼀个完成消除,并填补空缺。
如果选择的棋⼦在⽔平和垂直都有满⾜条件的相邻棋⼦构成直线,需要都消除。只⽤消除选择棋⼦所在的直
线,⽆需扩散消除。
注意此处的空缺填补⽅式为:消除棋⼦后,上⽅的棋⼦会下落填补空缺,然后在顶部的空缺随机产⽣新的棋
⼦。
功能2
如果两个相邻的棋⼦交换后能满⾜消除规则1,我们称为他们可交换。⽤户可以选择任何⼀颗棋⼦,程序按照
上下左右的步骤,找到第⼀个可交换的棋⼦,执⾏交换,应⽤功能1的规则更新棋盘。
功能3
显示棋盘当前状态
display命令显示当前关卡的信息,包括当前关卡的通关条件和进度。
功能4
重新开始游戏
restart
程序打印出总共消除的的元素的个数后,使⽤之前初始化的棋盘,重新开始⼀次新的游戏。注意:请考虑合
理使⽤构造函数,合理使⽤/避免使⽤ static。
功能5
退出游戏。
exit
分别有四类不同的特殊元素:
'|':在这个元素上触发clear时,消除所有纵向的元素;
'+':在这个元素上触发clear时,消除周围距离为⼩于等于1的(包括斜向)的所有元素;
⼩写的字⺟'a,b,c,d,e':消除所有对应的⼤写字⺟(如触发a则消除所有A)。
注意,此时为简化算法,如果'|'或'+'触发了其它特殊元素,不产⽣连锁反应。
元素随机⽣成:0.9的概率⽣成正常元素(P(A)=P(B)=P(C)=P(D)=P(E)=9/50);0.1的概率⽣成特殊元素
(P(|)=P(+)=P(a)=……=1/70)。
游戏开始时有2个锤子道具(注意是整个游戏开始时,而不是单个关卡开始时),可以击碎任意的元素,击碎后还是进行下移和随机生成元素的操作。道具使用后会消 耗掉。如果一次消除了5个或5个以上的元素可以获得一个锤子道具。tool: 输入后,print 出现有的道具名称及其道具数量(现道具只有hammer)
hammer x x: 输入后消除并只消除掉对应位置的任意元素(包括特殊元素)
直接代码展示:
Level.txt
C E B A C
B A C C E
A B A E A
D A D A D
E A D C B
C E B A C
B A C C E
A B A E D
D B D B D
E A B A B
C E B A C
B A C C E
A B A E D
D B D C D
E A D C B
B E B A C
B A C c E
A + A E D
D C D A D
E C D E B
C E B A C
B a C C E
A B A + D
D B D C D
E A D C |
Level.java
package Matching;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Level {
//读取level信息
static int swapNumber = 0;//判断交换条件
protected static int countA = 0;//A消除的个数
protected static int countB2 = 0;//第二关B消除的个数
protected static int countC = 0;//第三关C消除的个数
protected static int countB3 = 0;//第三关B消除的个数
protected static int count4 = 0;//第四关总消除数
protected static int operation = 0;//第五关
char[][] Board;
public static int level = 1;//关卡
static String[] L = new String[5];
static {
L[0] = "Level 1: " + countA + "/6 of A has been eliminated.";
L[1] = "Level 2: " + countB2 + "/6 of B has been eliminated.";
L[2] = "Level 3: " + countB3 + "/3 of B and " + countC + "/3 of C have been eliminated.";
L[3] = "Level 4: " + count4 + "/9 of elements has been eliminated.";
L[4] = "Level 5: " + operation + "/2 of clear operation meets the requirement.";
}
public Level(char[][] Board) {
this.Board = Board;
}
public Level() {
}
public static Level[] LevelGame = new Level[5];
public static char[][][] readFile(String path) {
char[][][] boards = new char[5][5][5];
File file = new File(path);
if (file.exists()) {
try {
Scanner input = new Scanner(file);
for (int h = 0; h < 5; h++) {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (input.hasNext()) {
boards[h][i][j] = input.next().charAt(0);
}
}
input.nextLine(); // 读取行尾
}
}
input.close();
} catch (FileNotFoundException ex) {
System.out.println("File not found");
System.exit(0);
}
} else {
System.out.println("File does not exist");
System.exit(0);
}
return boards;
}
public static void InitializeGame() {
// 初始化关卡
char[][][] boards = readFile("level.txt");
for (int i = 0; i < boards.length; i++) {
LevelGame[i] = new Level(boards[i]);
}
}
}
Game.java
package Matching;
import java.util.Random;
public class Game extends ChessBoard {
static int count = 0;//指定消除的的元素的个数
static int count1 = 1;//水平计数
static int count2 = 1;//竖直计数
static int hammer = 2;//初始锤子数量为2
void special1(int x, int y) {
//对|的操作
for (int j = 0; j <= 4; j++) {
if (Level.level == 1) {
if
标签:中级,Level,int,代码,元素,消消,static,public,消除
From: https://blog.csdn.net/2401_84974736/article/details/139380144