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}, ...

  1. 找到人物位置

在地图中找到人物的位置,可以使用两个变量记录人物所在行和列。例如:

int playerRow = 3; // 人物所在行 int playerCol = 4; // 人物所在列

当然,如果需要动态修改人物位置,可以将这些变量声明为成员变量。

  1. 实现移动

实现移动可以通过监听键盘事件来实现。在map类中添加KeyListener,并重写keyPressed方法:

public class map extends JPanel implements KeyListener {

// 省略其他代码

public map() {
    // 添加键盘事件监听器
    addKeyListener(this);
    setFocusable(true);
}

@Override
public void keyPressed(KeyEvent e) {
    int keyCode = e.getKeyCode();
    switch (keyCode) {
        case KeyEvent.VK_UP:
            moveUp();
            break;
        case KeyEvent.VK_DOWN:
            moveDown();
            break;
        case KeyEvent.VK_LEFT:
            moveLeft();
            break;
        case KeyEvent.VK_RIGHT:
            moveRight();
            break;
        default:
            break;
    }
}

private void moveUp() {
    if (box[playerRow - 1][playerCol] == 0 || box[playerRow - 1][playerCol] == 3) { // 上方为空或终点位置砖块
        box[playerRow][playerCol] -= 5; // 原位置减去5,表示空出来了
        playerRow--;
        box[playerRow][playerCol] += 5; // 新位置加上5,表示有人站着了
    } else if (box[playerRow - 1][playerCol] == 2) { // 上方有箱子
        if (box[playerRow - 2][playerCol] == 0 || box[playerRow - 2][playerCol] == 3) { // 箱子上方为空或终点位置砖块
            box[playerRow][playerCol] -= 5; // 原位置减去5,表示空出来了
            playerRow--;
            box[playerRow][playerCol] += 5; // 新位置加上5,表示有人站着了

            box[playerRow - 1][playerCol] = 0; // 箱子移动到新位置
            box[playerRow - 1][playerCol] += 2;
        }
    }

    repaint(); // 更新地图显示
}

private void moveDown() {
    // 类似moveUp方法的实现,略去不表
}

private void moveLeft() {
    // 类似moveUp方法的实现,略去不表
}

private void moveRight() {
    // 类似moveUp方法的实现,略去不表
}

@Override
public void keyReleased(KeyEvent e) {}

@Override
public void keyTyped(KeyEvent e) {}

}

在移动时需要判断人物所在位置和目标位置是否合法,并进行相应处理。如果目标位置是箱子,则还需要判断箱子能否移动,并进行相应处理。

最后别忘了调用repaint()方法更新地图显示。

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?