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类中添加一个变量来记录人物的位置,然后在paintComponent方法中绘制出人物。

首先,在map类中添加一个变量来记录人物的行和列:

int playerRow = 3;
int playerCol = 4;

这里假设初始时人物位于第4行第5列(数组下标从0开始)。

然后在paintComponent方法中绘制出人物。可以使用另外一张图片来表示人物。例如:

Image playerImage = new ImageIcon("D:\\推箱子1\\imge\\player.png").getImage();
g.drawImage(playerImage, playerCol*size, playerRow*size, size, size, this);

这段代码将playerImage图片绘制在当前人物所处的格子上。

接下来就是如何实现人物移动了。可以通过监听键盘事件来控制人物的移动。

首先,在map类中添加一个方法用于更新地图数据和重绘界面:

public void movePlayer(int rowOffset, int colOffset) {
    // 计算新的行列值
    int newRow = playerRow + rowOffset;
    int newCol = playerCol + colOffset;
    
    // 判断新位置是否可达
    if (box[newRow][newCol] == 0 || box[newRow][newCol] == 3) {
        // 更新地图数据
        box[playerRow][playerCol] = box[playerRow][playerCol] == 2 ? 0 : 3;
        playerRow = newRow;
        playerCol = newCol;
        box[playerRow][playerCol] = 2;

        // 重绘界面
        repaint();
    }
}

这个方法接受两个参数,分别表示行和列的偏移量。例如,如果要向上移动,则传入(-1, 0);如果要向右移动,则传入(0, 1)。

在这个方法中,首先计算出新的行列值。然后判断新位置是否可达。如果是空白格子或者终点位置砖块,则更新地图数据,将人物从原来位置删除并添加到新位置,并且重新绘制界面。

最后,在map类中添加一个KeyListener监听器来响应键盘事件:

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

这段代码使用了Java8的Lambda表达式语法来创建一个匿名内部类,并且覆写了其中的keyPressed方法。根据按下的键不同,调用movePlayer方法来控制人物移动。

注意:由于KeyListener需要监听键盘事件,因此必须将焦点设置在当前组件上。可以在map类的构造方法中添加一行代码来设置焦点:

setFocusable(true);
requestFocusInWindow();

这样就可以实现在Java中找到人物位置并且实现移动了。

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?