消消乐_中级代码(Java)

本文介绍了一个使用Java编写的消消乐游戏,详细阐述了游戏的关卡设计、通关条件、功能实现,包括棋盘操作、特殊元素规则以及道具系统。提供了Level.txt、Level.java、Game.java、ChessBoard.java和Main.java等关键代码文件。
摘要由CSDN通过智能技术生成

本次消消乐会预先提供五个游戏地图,分别表示五个关卡。

关卡如下:

第一关:

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 | 

通关条件分别为:

  1. 消除⾄少6个A

  2. 消除⾄少6个B

  3. 消除⾄少3个B和⾄少3个C

  4. 总共消除9个元素(元素类型可以不同)

  5. 有两次消除操作满⾜:消除掉的元素个数⼤于5个(元素类型可以不同)

实现的功能:

功能1


游戏玩家识别出满⾜消除规则1的⼀组棋⼦,选择其中⼀个完成消除,并填补空缺。
如果选择的棋⼦在⽔平和垂直都有满⾜条件的相邻棋⼦构成直线,需要都消除。只⽤消除选择棋⼦所在的直线,⽆需扩散消除。
注意此处的空缺填补⽅式为:消除棋⼦后,上⽅的棋⼦会下落填补空缺,然后在顶部的空缺随机产⽣新的棋⼦。


功能2


如果两个相邻的棋⼦交换后能满⾜消除规则1,我们称为他们可交换。⽤户可以选择任何⼀颗棋⼦,程序按照上下左右的步骤,找到第⼀个可交换的棋⼦,执⾏交换,应⽤功能1的规则更新棋盘。


功能3  display


显示棋盘当前状态
display命令显示当前关卡的信息,包括当前关卡的通关条件和进度。


功能4  restart


重新开始游戏
程序打印出总共消除的的元素的个数后,使⽤之前初始化的棋盘,重新开始⼀次新的游戏。


功能5  exit


退出游戏。

分别有四类不同的特殊元素:

  1. '|':在这个元素上触发clear时,消除所有纵向的元素;
  2. '+':在这个元素上触发clear时,消除周围距离为⼩于等于1的(包括斜向)的所有元素;
  3. ⼩写的字⺟'a,b,c,d,e':消除所有对应的⼤写字⺟(如触发a则消除所有A)。
  4. 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()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值