⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myrobot.java

📁 俄罗斯方块,机器人,华容道破解,文件格式(PE,BMP),邮箱硬盘,日历图片
💻 JAVA
字号:
package com.bokee.nicend.boxgame.main;

import com.bokee.nicend.boxgame.game.Box;
import com.bokee.nicend.boxgame.gui.GamePanel;
import com.bokee.nicend.boxgame.robot.AbstractGamePanel;
import com.bokee.nicend.boxgame.robot.Step;

public class MyRobot extends Robot {
	public MyRobot(GamePanel panel) {
		super(panel);
	}

	@Override
	public void doBox(Box box) {
		方案1(getData(), box, true);
	}

	/**
	 * @param data
	 *            环境数据
	 * @param box
	 *            当前要处理的方块
	 * @param canDepth 是否允许递归判断下一个方块信息
	 */
	private Step 方案1(boolean[][] data, Box box, boolean canDepth) {
		Box boxBack = box.copy();// 备份原方块信息
		Box minBox = box.copy();// 最少空格时的方块信息
		/**
		 * 最优化方法
		 */
		Step bestStep = new Step(data.length,data[0].length);
		/**
		 * 综合两次的最优方法
		 */
		Step bestTwoStep = new Step(data.length,data[0].length);

		boolean[][] dataBack = copyData(data);// 备份环境数据

		// 虚拟游戏
		AbstractGamePanel abstractGamePanel = new AbstractGamePanel();

		// 此方块的 每种变形 遍历
		for (int j = 0; j < 4; j++) {
			// 按每个X坐标 遍历
			for (int i = 0; i <= getGamePanelWidth() - box.getBoxWidth(); i++) {
				// 设置方块位置
				box.setPoint(i, /* 0-box.getBoxHeight() */0);
				// 设置虚拟游戏环境
				abstractGamePanel.setData(data);
				abstractGamePanel.setBox(box);

				while (abstractGamePanel.moveDown())
					;

				Step currentStep = new Step(data.length,data[0].length);
				currentStep.setChage(j);
				currentStep.setX(box.getX());

				currentStep.setLine(abstractGamePanel.getDisponseLineNumber());
				currentStep.setRectCount(abstractGamePanel.getSpaceRectInBoxsHeight());
				currentStep.setHeight(data.length - abstractGamePanel.getRectHeight() - currentStep.getLine());
				currentStep.setSpaceCount(abstractGamePanel.getSpaceCountInBoxsHeight());
				currentStep.setSpaceNumber(abstractGamePanel.getLineSpaceNumber());

				if (canDepth) {
					Box nextBox = box.willNext();
					Step currnetNextBestStep = 方案1(copyData(data), nextBox, false);
					// 两步总共消去的行数
					currnetNextBestStep.setLine(currnetNextBestStep.getLine() + currentStep.getLine());
					if (currnetNextBestStep.compareTo(bestTwoStep) > 0) {
						bestTwoStep = currnetNextBestStep;
						bestStep = currentStep;
						minBox = box.copy();
					}
				} else {
					if (currentStep.compareTo(bestStep) > 0) {
						bestStep = currentStep;
						bestTwoStep = currentStep;
						minBox = box.copy();
					}
				}
				data = copyData(dataBack);
			}
			// 方块变形 进入下一个循环
			box.chang();
		}

		if (canDepth) {
			int x = minBox.getX();
			for (int i = 0; i < bestStep.getChage(); i++)
				moveUp();
			for (int i = 0; x < boxBack.getX() - i; i++)
				moveLeft();
			for (int i = 0; boxBack.getX() + i < x; i++)
				moveRight();
		}
		return bestStep;
	}

	private boolean[][] copyData(boolean[][] data) {
		return GamePanel.copyData(data);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -