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 + -
显示快捷键?