void initScreen() {
canvas = new Canvas() {
public void paint(Graphics g) { //覆写canvas的paint 方法
gs = getGraphics(); //得到Canvas的Graphics
if (isRunning) {
drawScreen();
} else {
g.drawImage(image, 0, 0, this);
g.setColor(Color.gray);
}
}
};
canvas.addMouseListener(new MouseAdapter() {
//覆写mousePressed 方法,实现鼠标点击时,图片移动
public void mousePressed(MouseEvent me) {
if (!isRunning) return; // 如果未运行,说明图片未分割,直接返回
int x = me.getX() / sx, y = me.getY() / sy;//判断鼠标点击的图片在map中的编号
int fx = (int) point.getX(), fy = (int) point.getY();//记录第九块图片(未显示图片)的位置
int canMove = Math.abs(fx - x) + Math.abs(fy - y); // 如鼠标点击位置与第九块图片(可移动的位置)相邻,则canMove 必为 1
if (canMove != 1 ) return; // canMove 不为1,不能移动图片
map[fx][fy] = map[x][y]; //点击图片坐标 赋给第九块图片
map[x][y] = 8; //第九块图片给掉 点击图片
point.setLocation(x, y); //point 坐标改变
drawScreen(); //重绘屏幕,实现图片移动
showStep.setText("移动步骤:" + ++steps); //步骤加一
}
});
//为Start按钮添加事件
start.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
initMap();
drawScreen();
isRunning = true;
steps = 0;
showStep.setText("移动步骤:" + steps);
show.setLabel("显示正确图片");
}
});
//为show按钮添加事件
show.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if (show.getLabel().equals("继续游戏")) {
drawScreen();
isRunning = true;
show.setLabel("显示正确图片");
} else {
gs.drawImage(image, 0, 0, canvas);
isRunning = false;
show.setLabel("继续游戏");
}
}
});
}