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

📄 gamepanel.java

📁 用eclipse编的游戏___连连看,是参加大学生编程竞赛的作品.
💻 JAVA
字号:
package view;

import java.awt.BasicStroke;//BasicStroke 类定义针对图形图元轮廓呈现属性的一个基本集合
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;//Rectangle 指定坐标空间中的一个区域,通过坐标空间中 Rectangle 对象左上方的点 (x,y)、宽度和高度可以定义这个区域。 


import java.awt.Shape;
import java.awt.geom.Line2D;
import java.util.ArrayList;

import javax.swing.JPanel;
import javax.swing.border.BevelBorder;

import model.Model;

public class GamePanel extends JPanel {
	private static final long serialVersionUID = 1L;

	private final int borderValue = 3;

	private Model model;

	public GamePanel(Model model) {
		this.model = model;
		setBackground(Color.GRAY);
		setBorder(new BevelBorder(BevelBorder.LOWERED));
	}

	private Point getCenter(Rectangle rect) {
		return new Point(rect.x + rect.width / 2, rect.y + rect.height / 2);
	}

	public Rectangle matrixToRect(int row, int col) {
		int cellWidth = (getWidth() - 2 * borderValue) / model.getCols();
		int cellHeight = (getHeight() - 2 * borderValue) / model.getRows();
		int x = col * cellWidth + borderValue;
		int y = row * cellHeight + borderValue;
		return new Rectangle(x, y, cellWidth, cellHeight);
	}

	public Rectangle matrixToRect(Point p) {
		return matrixToRect(p.x, p.y);
	}

	@Override
	public void paint(Graphics g) {
		super.paint(g);
		int map[][] = model.getMaps();
		for (int i = 0; i < map.length; i++)
			for (int j = 0; j < map[0].length; j++) {
				Rectangle rect = matrixToRect(i, j);
				if (map[i][j] == 0)
					continue;
				g.drawImage(ImageLoader.getImageOf(map[i][j]), rect.x, rect.y,
						null);
			}
		if (model.getSltMatrix() != null) {
			Rectangle rect = matrixToRect(model.getSltMatrix());
			Graphics2D g2 = (Graphics2D) g;
			g2.setColor(Color.WHITE);
			float dash[] = { (float) 5 };
			g2.setStroke(new BasicStroke(2f, BasicStroke.CAP_BUTT,
					BasicStroke.JOIN_MITER, 10.0f, dash, 0.0f));
			g2.drawRect(rect.x, rect.y, rect.width, rect.height);
		}
	}

	public Point PointToMetrix(Point p) {
		int cellWidth = (getWidth() - 2 * borderValue) / model.getCols();
		int cellHeight = (getHeight() - 2 * borderValue) / model.getRows();
		int row = (p.y - borderValue) / cellHeight;
		int col = (p.x - borderValue) / cellWidth;
		return new Point(row, col);
	}

	/**
	 * 显示路径
	 */
	public void showPath(final Object obj) {
		new Thread(new Runnable() {

			ArrayList<Point> points = (ArrayList<Point>) obj;

			ArrayList<Shape> shapes = new ArrayList<Shape>();

			int step = 30;

			public void run() {
				// 添加起点矩形
				shapes.add(matrixToRect(points.get(0)));
				// 添加终点矩形
				shapes.add(matrixToRect(points.get(points.size() - 1)));
				// 添加直线
				for (int i = 1; i < points.size(); i++) {
					Point p1 = getCenter(matrixToRect(points.get(i - 1)));
					Point p2 = getCenter(matrixToRect(points.get(i)));
					if (p1.x == p2.x) {
						int distance = p2.y - p1.y;
						for (int j = 0; j <= Math.abs(distance); j += step)
							shapes.add(new Line2D.Double(p1, new Point(p1.x,
									p1.y + distance / Math.abs(distance) * j)));
					} else if (p1.y == p2.y) {
						int distance = p2.x - p1.x;
						for (int j = 0; j <= Math.abs(distance); j += step)
							shapes
							.add(new Line2D.Double(p1, new Point(
									p1.x + distance
									/ Math.abs(distance) * j,
									p1.y)));
					}
					shapes.add(new Line2D.Double(p1, p2));
				}
				Graphics2D g2 = (Graphics2D) getGraphics();
				float dash[] = { 4F };
				g2.setStroke(new BasicStroke(2.0F, BasicStroke.CAP_BUTT,
						BasicStroke.JOIN_MITER, 11.0F, dash, 1.0F));
				for (int index = 0; index < shapes.size(); index++) {
					try {
						Thread.sleep(10);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					for (int pre = 0; pre <= index; pre++) {
						if (pre < 2)
							g2.setColor(Color.BLUE);
						else
							g2.setColor(Color.RED);
						g2.draw(shapes.get(pre));
					}
				}
			}

		}).start();
	}
}

⌨️ 快捷键说明

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