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

要找到人物位置,可以在地图数组中设置一个标记来表示人物所在的位置。比如可以用数字5代表人物。移动时,首先需要判断人物能否移动,如果能移动,则更新人物的位置。

具体实现方法如下:

  1. 在地图数组中添加一个标记,用数字5表示人物所在的位置。初始化时将该标记放置于指定的初始位置。

  2. 实现键盘监听事件,通过监听用户按下方向键来控制人物的移动。

  3. 按下方向键后,根据当前人物所在位置和按下的方向键来计算出目标位置。

  4. 判断目标位置是否可达,如果可达,则更新地图数组,并重新绘制地图。

代码示例:

// 初始化地图 int[][] box = {

{0, 0, 1, 1, 1, 0, 0, 0},
{0, 0, 1, 3, 1, 0, 0, 0},
{0, 0, 1, 4, 1, 1, 1, 1},
{1, 1, 5 /* 初始位置 */,2 ,4 ,2 ,3 ,1},
{1 ,3 ,4 ,2 ,5 ,1 ,1 ,1},
{1 ,1 ,1 ,1 ,2 ,1 ,0 ,0},
{0 ,0 ,0 ,1 ,3 ,1 ,0 ,0},
{0 ,0 ,0 ,1 ,1 ,1 ,0 ,-}

};

// 实现键盘监听事件 addKeyListener(new KeyAdapter() {

public void keyPressed(KeyEvent e) {
    int key = e.getKeyCode();
    // 计算出目标位置
    int x = 0, y = 0;
    for (int i = 0; i < box.length; i++) {
        for (int j = 0; j < box[i].length; j++) {
            if (box[i][j] == 5) { // 找到人物所在位置
                x = i;
                y = j;
                break;
            }
        }
    }
    switch (key) {
        case KeyEvent.VK_UP:
            x--;
            break;
        case KeyEvent.VK_DOWN:
            x++;
            break;
        case KeyEvent.VK_LEFT:
            y--;
            break;
        case KeyEvent.VK_RIGHT:
            y++;
            break;
    }
    // 判断目标位置是否可达
    if (box[x][y] == 0 || box[x][y] == 3) { // 可以移动到空地或终点位置
        if (box[x][y] == 3) { // 到达终点位置,需要检查箱子是否已全部推到位
            boolean allDone = true;
            for (int[] row : box) {
                for (int cell : row) {
                    if (cell == 2) { // 还有未推到位的箱子
                        allDone = false;
                        break;
                    }
                }
                if (!allDone) break;
            }
            if (!allDone) return; // 箱子未全部推到位,不能进入终点位置
        }
        // 更新地图数组,并重新绘制地图
        box[x][y] = 5;
        box[i][j] = box[i][j] == 5 ? 0 : (box[i][j] == 2 ? 4 : 3);
        repaint();
    }
}

});

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?