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

📄 gameframe.java

📁 经典8数码问题扩展为N数码问题
💻 JAVA
字号:
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class GameFrame {
	class conformA implements ActionListener {

		public void actionPerformed(ActionEvent arg0) {
			String nn = T1.getText();
			int nnn = 3;
			try {
				nnn = Integer.parseInt(nn);
			} catch (Exception e) {
				nnn = 3;
				T1.setText("3");
			}
			n = nnn;			
			setP(n);
			L2.setText("0");
			game = new NGridGame(n);
			setPP(game);
			setE(true);
			B2.setEnabled(true);
			B3.setEnabled(false);
			j.pack();
		}
	}

	class move implements ActionListener {

		public void actionPerformed(ActionEvent arg0) {
			String s = ((JButton) arg0.getSource()).getText();
			if (s.equals("*"))
				return;
			int pn = Integer.parseInt(s);
			if (game.moveNod(pn)) {
				setN(1);
				setPP(game);
			}
		}

	}

	class okA implements ActionListener {

		public void actionPerformed(ActionEvent arg0) {
			setE(false);
			B2.setEnabled(false);
			path = new NGridGame(game).moveBack();
			pn = 0;
			B3.setEnabled(true);
		}
	}

	class backA implements ActionListener {

		public void actionPerformed(ActionEvent arg0) {
			if (pn >= path.length) {
				setE(true);
				pn=0;
				B2.setEnabled(true);				
				L2.setText("0");
				B3.setEnabled(false);
			} else {				
				game.move(path[pn]);
				pn++;
				setN(-1);
				setPP(game);
			}
		}
	}

	private void setN(int i) {
		L2.setText(String.valueOf(Integer.parseInt(L2.getText()) + i));
	}

	private void setE(boolean b) {
		for (int i = 0; i < n; i++)
			for (int j = 0; j < n; j++)
				grids[i][j].setEnabled(b);
	}

	private void setP(int n) {
		P2.removeAll();
		P2.setLayout(new GridLayout(n, n));
		grids = new JButton[n][n];
		for (int i = 0; i < n; i++)
			for (int j = 0; j < n; j++) {
				grids[i][j] = new JButton();
				grids[i][j].addActionListener(new move());
				P2.add(grids[i][j]);
			}
	}

	public JFrame j;

	private int n;

	public JLabel L1 = new JLabel("Input your game's N:"),
			L2 = new JLabel("0");

	public JTextField T1 = new JTextField();

	public JButton B1 = new JButton("conform"), B2 = new JButton("ok"),
			B3 = new JButton("goback");

	public JPanel P1 = new JPanel(), P2 = new JPanel(), P3 = new JPanel();

	public JButton[][] grids;

	private NGridGame game;

	private int[] path;

	private int pn = 0;

	private void setPP(NGridGame game) {
		int pn;
		String s;
		for (int i = 0; i < game.N; i++)
			for (int j = 0; j < game.N; j++) {
				pn = game.getNod(i, j);
				if (pn == 0) {
					if (game.blank.x == i && game.blank.y == j)
						s = "*";
					else
						return;

				} else
					s = String.valueOf(pn);
				grids[i][j].setText(s);
			}
	}

	public GameFrame(int N) {
		this.n = N;
		j = new JFrame();
		P1.setLayout(new FlowLayout());
		B1.addActionListener(new conformA());
		B2.addActionListener(new okA());
		B3.addActionListener(new backA());
		T1.setText(String.valueOf(N));
		P1.add(L1);
		P1.add(T1);
		P1.add(B1);
		setP(n);
		P3.setLayout(new FlowLayout());
		P3.add(B2);
		B3.setEnabled(false);
		P3.add(B3);
		P3.add(L2);
		j.setLayout(new BorderLayout());
		j.add(P1, BorderLayout.NORTH);
		j.add(P2, BorderLayout.CENTER);
		j.add(P3, BorderLayout.SOUTH);
		B1.addActionListener(new conformA());
		game = new NGridGame(n);
		setPP(game);
		j.pack();
		j.setVisible(true);
	}

	public GameFrame() {
		this(3);
	}

	public static void main(String[] f) {
		GameFrame g = new GameFrame();
	}

}

⌨️ 快捷键说明

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