canvas.java

来自「java Labyrinth game;Provides two kinds t」· Java 代码 · 共 173 行

JAVA
173
字号
/*
 * User: Administrator
 * Describe: 迷宫..画布类
 */
package src;

import javax.swing.*;
import javax.swing.border.EtchedBorder;
import java.awt.*;

/*
 * 画布类,内有<行数> * <列数>个方格类实例。 继承自JPanel类。
 */
public class Canvas extends JPanel {
	/*
	 * 各种方格的颜色 wayColor用于在帮助时显示路径
	 */
	private Color backColor = Color.gray, stockColor = Color.red,
		wayColor = Color.green,//显示帮助路径
			nowColor = Color.blue, endColor = Color.orange;

	// 当前颜色
	private Color stateColor;

	private int rows, cols;

	private MazeBox[][] boxes;

	private int boxWidth, boxHeight;

	/*
	 * 画布类的构造函数
	 * 
	 * rows int, 画布的行数 cols int, 画布的列数
	 */
	public Canvas(int rows, int cols) {
		this.rows = rows;
		this.cols = cols;
		this.setBackground(backColor);

		boxes = new MazeBox[rows][cols];
		for (int i = 0; i < boxes.length; i++) {
			for (int j = 0; j < boxes[i].length; j++) {
				boxes[i][j] = new MazeBox(Enums.colors.BACK);// 初始为背景
				boxes[i][j].setsysState(Enums.colors.STOCK);//初始系统不可过
				boxes[i][j].setboxX(i);
				boxes[i][j].setboxY(j);
			}
		}

		setBorder(new EtchedBorder(EtchedBorder.RAISED, Color.white, new Color(
				50, 137, 200)));
	}

	/*
	 * 画布类的构造函数
	 */
	public Canvas(int rows, int cols, Color backColor) {
		this(rows, cols);
		this.stateColor = backColor;
	}

	/*
	 * 设置游戏方块色彩
	 */
	public void setBlockColor(Enums.colors state) {
		switch (state) {
		case BACK:
			stateColor = backColor;
			break;
		case STOCK:
			stateColor = stockColor;
			break;
		case NOW:
			stateColor = nowColor;
			break;
		case END:
			stateColor = endColor;
			break;
		case WAY :
			stateColor = wayColor;
		}
	}
	/*
	 * 更换着色
	 */
	public void setstockColor(Color newcolor){
		this.stockColor=newcolor;
	}
	public void setbackColor(Color newcolor){
		backColor=newcolor;
	}
	/*
	 * 取得游戏方块色彩
	 */
	public Color getBlockColor() {
		return stateColor;
	}

	/*
	 * 取得画布中方格的行数
	 */
	public int getRows() {
		return rows;
	}
	public void setRows(int rows){
		this.rows=rows;
	}

	/*
	 * 取得画布中方格的列数
	 */
	public int getCols() {
		return cols;
	}
	public void setCols(int cols){
		this.cols=cols;
	}

	/*
	 * 得到某一行某一列的方格引用。
	 * 
	 * row int, 要引用的方格所在的行 col int, 要引用的方格所在的列 在row行col列的方格的引用
	 */
	public MazeBox getBox(int row, int col) {
		if (row < 0 || row > boxes.length - 1 || col < 0
				|| col > boxes[0].length - 1)
			return null;
		return (boxes[row][col]);
	}

	/*
	 * 返回方格所在行
	 */
	public int getRow(MazeBox box) {
		return box.getboxX();
	}

	/*
	 * 返回方格所在列
	 */
	public int getCol(MazeBox box) {
		return box.getboxY();
	}

	/*
	 * 覆盖JComponent类的函数,画组件。
	 * 
	 * g 为图形设备环境
	 */
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		g.setColor(stateColor);
		for (int i = 0; i < boxes.length; i++) {
			for (int j = 0; j < boxes[i].length; j++) {
				setBlockColor(getBox(i, j).getState());
				g.setColor(stateColor);
				g.fill3DRect(j * boxWidth, i * boxHeight, boxWidth, boxHeight,
						true);
			}
		}
	}

	/*
	 * 自动调整方格的尺寸
	 */
	public void fanning() {
		boxWidth = getSize().width / cols;
		boxHeight = getSize().height / rows;
	}

}

⌨️ 快捷键说明

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