ZBLOG

package tuixiangzi;import javax.swing.*;import java.awt.*;import java.util.*;import java.io.*;public class map extends JPanel { //0代表为空,1代表围墙 2代表箱子 3代表终点位置砖块 4代表普通砖块 int[][]box={ {0,0,1,1,1,0,0,0}, {0,0,1,3,1,0,0,0}, ...

你可以在map类中添加一个变量来记录人物的位置,例如:

int playerX = 3; // 初始化人物横坐标为3
int playerY = 4; // 初始化人物纵坐标为4

然后在paintComponent方法中绘制人物,例如:

Image player = new ImageIcon("D:\\推箱子1\\imge\\player.jpg").getImage();
g.drawImage(player, playerX * size, playerY * size, size, size, this);

接下来实现移动,你可以在map类中添加一个movePlayer方法,用于处理移动逻辑。这个方法可以接受两个参数:横向偏移量dx和纵向偏移量dy。例如:

public void movePlayer(int dx, int dy) {
    int newX = playerX + dx;
    int newY = playerY + dy;
    if (box[newY][newX] == 0 || box[newY][newX] == 3) { // 判断目标位置是否为空或终点位置砖块
        playerX = newX;
        playerY = newY;
        repaint(); // 更新视图
    } else if (box[newY][newX] == 2) { // 如果目标位置是箱子
        int nextBoxX = newX + dx;
        int nextBoxY = newY + dy;
        if (box[nextBoxY][nextBoxX] == 0 || box[nextBoxY][nextBoxX] == 3) { // 判断箱子下一步是否为空或终点位置砖块
            box[nextBoxY][nextBoxX] = 2;
            box[newY][newX] = 0;
            playerX = newX;
            playerY = newY;
            repaint(); // 更新视图
        }
    }
}

在movePlayer方法中,首先计算出目标位置的坐标newX和newY。然后判断目标位置是否为空或终点位置砖块,如果是,则更新人物的位置,并调用repaint()方法更新视图。如果目标位置是箱子,则需要再次计算出箱子下一步的坐标nextBoxX和nextBoxY,判断下一步是否为空或终点位置砖块。如果是,则更新箱子和人物的位置,并调用repaint()方法更新视图。

最后,在你的界面类中添加KeyListener监听器来监听键盘事件,例如:

addKeyListener(new KeyAdapter() {
    @Override
    public void keyPressed(KeyEvent e) {
        int keyCode = e.getKeyCode();
        switch (keyCode) {
            case KeyEvent.VK_UP:
                map.movePlayer(0, -1);
                break;
            case KeyEvent.VK_DOWN:
                map.movePlayer(0, 1);
                break;
            case KeyEvent.VK_LEFT:
                map.movePlayer(-1, 0);
                break;
            case KeyEvent.VK_RIGHT:
                map.movePlayer(1, 0);
                break;
        }
    }
});

在这个监听器中,根据按下的键码调用movePlayer方法来移动人物。注意要为map组件设置焦点才能接收键盘事件:

map.setFocusable(true); // 设置map组件可获得焦点
map.requestFocusInWindow(); // 让map组件获取焦点

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=5304

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?