推箱子游戏

这个程序实现了一个简单的控制角色行动的小游戏。游戏界面由一个8行10列的二维字符数组map构成,其中,H表示墙壁,o表示玩家,&表示箱子,*表示终点。游戏的目标是将箱子推到*的位置,即地图上的星号处。

游戏的主体部分在exercise4类中实现。在main方法中,首先创建exercise4对象e4,然后进入一个while循环。在每次循环开始时,调用initMap方法初始化游戏地图,并输出游戏地图。接着,通过调用control方法获得玩家输入的操作指令,并根据指令调用move方法移动玩家。最后,调用judge方法判断游戏是否结束。

initMap方法中,首先将地图的外围设置为墙壁,然后根据要求在地图中添加若干个墙壁、玩家、终点和箱子。其中,箱子初始位置为(2,2),玩家初始位置为(1,1),目标位置为(6,5)

printMap方法用于输出游戏地图。在方法中,使用增强型for循环遍历二维数组map,输出每个元素。

control方法用于获取玩家输入的操作指令。在方法中,使用Scanner类的next方法读取一个字符串,并通过charAt方法获取该字符串的第一个字符。

move方法用于根据操作指令移动玩家或箱子。方法中使用switch语句根据操作指令判断需要进行的移动方向,并根据当前位置和下一位置的情况进行相应的移动。

judge方法用于判断游戏是否结束。在方法中,如果箱子已经被推到目标位置,则将finish变量设为false,结束当前游戏循环。

因此,这个程序实现了一个简单的控制角色行动的小游戏,玩家需要通过移动角色来推动箱子,最终将箱子推到目标位置。

package array;

import java.util.Scanner;

public class exercise4 {
    private int x = 1, y = 1;
    private int x1 = 2, y1 = 2;
    private char[][] map = new char[8][10];
    private boolean finish = true;
    private Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {
        exercise4 e4 = new exercise4();
        while (e4.finish) {
            e4.initMap();
            e4.printMap();
            System.out.println("请输入wasd操控方向");
            e4.control();
            e4.judge();
        }
        e4.sc.close();
    }

    public void initMap() {
        for (int i = 0; i < map.length; i++) {
            if (i == 0 || i == 7) {
                for (int j = 0; j < map[i].length; j++) {
                    map[i][j] = 'H';
                }
            } else {
                map[i][0] = 'H';
                map[i][9] = 'H';
            }
        }
        for (int i = 0; i < map.length; i++) {
            for (int j = 0; j < map[i].length; j++) {
                if (map[i][j] == 0) {
                    map[i][j] = ' ';
                }
            }
        }

        map[1][3] = 'H';
        map[2][3] = 'H';
        map[3][3] = 'H';
        map[2][5] = 'H';
        map[3][5] = 'H';
        map[3][6] = 'H';
        map[3][8] = 'H';
        map[4][8] = 'H';
        map[6][4] = 'H';
        map[5][4] = 'H';
        map[5][5] = 'H';
        map[5][6] = 'H';
        map[x1][y1] = '&';
        map[x][y] = 'o';
        map[6][5] = '*';
    }

    public void printMap() {
        System.out.println("--------------------");
        for (char[] row : map) {
            for (char column : row) {
                System.out.print(column + " ");
            }
            System.out.println();
        }
        System.out.println("--------------------");
    }

    public void control() {
        char c = sc.next().charAt(0);
        move(c);
    }

    public void move(char direction) {
        switch (direction) {
            case 'd':
                if (map[x][y + 1] != 'H') {
                    if (map[x][y + 1] == '&' && map[x][y + 2] != 'H') {
                        map[x][y] = ' ';
                        y++;
                        y1++;
                    } else if (map[x][y + 1] != '&') {
                        map[x][y] = ' ';
                        y++;
                    }
                }
                break;
            case 'a':
                if (map[x][y - 1] != 'H') {
                    if (map[x][y - 1] == '&' && map[x][y - 2] != 'H') {
                        map[x][y] = ' ';
                        y--;
                        y1--;
                    } else if (map[x][y - 1] != '&') {
                        map[x][y] = ' ';
                        y--;
                    }
                }
                break;
            case 'w':
                if (map[x - 1][y] != 'H') {
                    if (map[x - 1][y] == '&' && map[x - 2][y] != 'H') {
                        map[x][y] = ' ';
                        x--;
                        x1--;
                    } else if (map[x - 1][y] != '&') {
                        map[x][y] = ' ';
                        x--;
                    }
                }
                break;
            case 's':
                if (map[x + 1][y] != 'H') {
                    if (map[x + 1][y] == '&' && map[x + 2][y] != 'H') {
                        map[x][y] = ' ';
                        x++;
                        x1++;
                    } else if (map[x + 1][y] != '&') {
                        map[x][y] = ' ';
                        x++;
                    }
                }
                break;
            default:
                break;
        }
    }

    public void judge() {
        if (x1 == 6 && y1 == 5) {
            finish = false;
            System.out.println("通过");
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值