本次消消乐会预先提供五个游戏地图,分别表示五个关卡。
关卡如下:
第一关:
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 |
通关条件分别为:
消除⾄少6个A
消除⾄少6个B
消除⾄少3个B和⾄少3个C
总共消除9个元素(元素类型可以不同)
有两次消除操作满⾜:消除掉的元素个数⼤于5个(元素类型可以不同)
实现的功能:
功能1
游戏玩家识别出满⾜消除规则1的⼀组棋⼦,选择其中⼀个完成消除,并填补空缺。
如果选择的棋⼦在⽔平和垂直都有满⾜条件的相邻棋⼦构成直线,需要都消除。只⽤消除选择棋⼦所在的直线,⽆需扩散消除。
注意此处的空缺填补⽅式为:消除棋⼦后,上⽅的棋⼦会下落填补空缺,然后在顶部的空缺随机产⽣新的棋⼦。
功能2
如果两个相邻的棋⼦交换后能满⾜消除规则1,我们称为他们可交换。⽤户可以选择任何⼀颗棋⼦,程序按照上下左右的步骤,找到第⼀个可交换的棋⼦,执⾏交换,应⽤功能1的规则更新棋盘。
功能3 display
显示棋盘当前状态
display命令显示当前关卡的信息,包括当前关卡的通关条件和进度。
功能4 restart
重新开始游戏
程序打印出总共消除的的元素的个数后,使⽤之前初始化的棋盘,重新开始⼀次新的游戏。
功能5 exit
退出游戏。
分别有四类不同的特殊元素:
- '|':在这个元素上触发clear时,消除所有纵向的元素;
- '+':在这个元素上触发clear时,消除周围距离为⼩于等于1的(包括斜向)的所有元素;
- ⼩写的字⺟'a,b,c,d,e':消除所有对应的⼤写字⺟(如触发a则消除所有A)。
- hammer x x: 输入后消除并只消除掉对应位置的任意元素(包括特殊元素)。
注意,此时为简化算法,如果'|'或'+'触发了其它特殊元素,不产⽣连锁反应。元素随机⽣成: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)。
代码如下:
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()