@[TOC]GUI设计之马的遍历(5*5)
象棋中马遍历棋盘
【问题描述】
在N*N棋盘上,任意一个位置放置一个棋子马,要能选择一套合适的移动路线,按象棋中“马走日”的移动规则不重复地遍历棋盘上每一个位置点。
【基本要求】
用图形化的界面显示结果。
样例1:
样例2:
【扩展要求】
有兴趣的同学可在棋盘上设置一个或多个憋马腿的棋子,尝试遍历过程如何完善。
样例1:
样例2:
GameFrame类继承JFrame
import javax.swing.*;
public class GameFrame extends JFrame {
public GameFrame(){
setTitle("象棋中马的遍历"); //标题
setSize(600,400);//窗口大小
setResizable(false);//禁止改变窗口大小
this.setLocationRelativeTo(null);// 居中展示窗口
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口终止程序
}
public static void main(String[] args) {
GameFrame frame=new GameFrame();//窗口对象
GamePanel panel=new GamePanel();//新建一个面板
frame.add(panel);//添加面板到窗口
frame.setVisible(true);//可见性
}
}
GamePanel 继承 JPanel类
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class GamePanel extends JPanel {
boolean one=false;
/* 马走日字,可能到达的8个点相对当前点的偏移坐标 */
static int dx[] = {
1, 2, 2, 1, -1, -2, -2, -1 };
static int dy[] = {
2, 1, -1, -2, -2, -1, 1, 2 };
/* 马走日字,8个蹩脚的点相对当前点的偏移坐标 */
static int dx_obstacle[]={