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

📄 qipan.java

📁 java开发的华容道游戏的源码
💻 JAVA
字号:
package com.abc.hrd;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Qipan {

	public Qizi[] qzs = new Qizi[10];

	public Blank[] blks = new Blank[2];

	// 初始化棋盘布局
	public void init() {
		qzs[0] = new Dajiang(this, 0, 0);
		qzs[1] = new Dajiang(this, 0, 2);
		qzs[2] = new Dajiang(this, 3, 0);
		qzs[3] = new Dajiang(this, 3, 2);

		qzs[4] = new Xiaobing(this, 0, 4);
		qzs[5] = new Xiaobing(this, 1, 4);
		qzs[6] = new Xiaobing(this, 2, 4);
		qzs[7] = new Xiaobing(this, 3, 4);

		qzs[8] = new Guanyu(this, 1, 2);
		qzs[9] = new Caocao(this, 1, 0);

		blks[0] = new Blank(1, 3);
		blks[1] = new Blank(2, 3);

	}

	// 判断某个位置是否有棋子
	public boolean exists(int x, int y) {
		if (blks[0].x == x && blks[0].y == y) {
			return false;
		}
		if (blks[1].x == x && blks[1].y == y) {
			return false;
		}
		return true;
	}

	// 得到某个位置的棋子信息
	public Qizi getQizi(int x, int y) {
		Qizi qz = null;
		for (int i = 0; i < qzs.length; i++) {
			if (qzs[i].inside(x, y)) {
				qz = qzs[i];
				break;
			}
		}
		return qz;
	}

	public void locateBlank() {
		int blkCount = 0;
		boolean found = false;
		for (int i = 0; i < 4; i++) {
			for (int j = 0; j < 5; j++) {
				found = false;
				for (int k = 0; k < qzs.length; k++) {
					if (qzs[k].inside(i, j)) {
						found = true;
						break;
					}
				}
				if (!found) {
					blks[blkCount++] = new Blank(i, j);
				}
			}
		}
	}

	public void show() {
		final JFrame frame = new JFrame("华容道");
		// frame.setSize(326,414);

		frame.setSize(330, 432);

		final Container container = frame.getContentPane();
		container.setLayout(new GraphPaperLayout(new Dimension(4, 5)));

		final JButton[] btns = new JButton[10];
		ClassLoader cl = getClass().getClassLoader();
		for (int i = 0; i < btns.length; i++) {
			Icon icon = new ImageIcon(cl.getResource("q" + i + ".jpg"));
			//Icon icon = new ImageIcon("q" + i + ".jpg");
			btns[i] = new JButton(icon);
			container.add(btns[i], new Rectangle(qzs[i].x, qzs[i].y, qzs[i].w,
					qzs[i].h));
			btns[i].addMouseListener(new MouseAdapter() {
				public void mouseReleased(MouseEvent me) {
					JButton btn = (JButton) me.getSource();
					int i = 0;
					for (i = 0; i < btns.length; i++) {
						if (btn == btns[i]) {
							break;
						}
					}

					double gridx = frame.getSize().getWidth() / 4;
					double gridy = (frame.getSize().getHeight() - 20) / 5;

					int x = (int) (me.getX() / gridx + qzs[i].x);
					int y = (int) (me.getY() / gridy + qzs[i].y);
					
					if (!exists(x, y) && qzs[i].move(x, y)) {
						locateBlank();
						container.removeAll();
						for (i = 0; i < btns.length; i++) {
							container.add(btns[i], new Rectangle(qzs[i].x, qzs[i].y, qzs[i].w,qzs[i].h));
						}
						container.validate();
						
					}
				}
			});
		}

		frame.setVisible(true);

		frame.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent we) {
				System.exit(0);
			}
		});
	}

	public static void main(String[] args) {
		Qipan qipan = new Qipan();
		qipan.init();

		qipan.show();

	}

}

⌨️ 快捷键说明

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