这个程序实现了一个简单的控制角色行动的小游戏。游戏界面由一个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("通过");
}
}
}