Я работаю над этим проектом
MOOC Java Week 10 Упражнение 33
Я хочу, чтобы String .
был заменен символом игрока / вампира (String @
и v
), когда позиции игрока / вампира X и Y равны X и Y таблицы. (Высота и ширина сетки печатаются строкой .
). Проблема в классе Dungeon
, метод printMap()
.
Класс игрока
public class Player {
private final String symbol;
private int posX, posY, width, height;
public Player(String symbol, int width, int height) {
this.symbol = symbol;
this.posX = 0;
this.posY = 0;
this.width = width - 1;
this.height = height - 1;
}
public String getSymbol() {
return symbol;
}
public int getPosX() {
return posX;
}
public int getPosY() {
return posY;
}
public void setPosX(int x) {
posY = x;
}
public void setPosY(int y) {
posY = y;
}
public String getPos() {
return posX + " " + posY;
}
public void keyMap(String keyPressed) {
boolean y = posY > 0;
boolean h = posY < height;
boolean x = posX > 0;
boolean w = posX < width;
if (keyPressed.equalsIgnoreCase("w")) {
if (y) {
posY--;
}
} else if (keyPressed.equalsIgnoreCase("s")) {
if (h) {
posY++;
}
} else if (keyPressed.equalsIgnoreCase("a")) {
if (x) {
posX--;
}
} else if (keyPressed.equalsIgnoreCase("d")) {
if (w) {
posX++;
}
}
}
@Override
public String toString() {
return symbol + " " + posX + " " + posY;
}
}
Класс Вампир
package dungeon;
import java.util.Random;
public class Vampire {
private String symbol;
private int posX, posY, width, height;
private final Random rand = new Random();
public Vampire(String symbol, int width, int height) {
this.symbol = symbol;
this.posX = rand.nextInt(width);
this.posY = rand.nextInt(height);
this.width = width - 1;
this.height = height - 1;
}
public String getSymbol() {
return symbol;
}
public int getPosX() {
return posX;
}
public int getPosY() {
return posY;
}
public String getPos() {
return posX + " " + posY;
}
public void setPosX(int x) {
posX = x;
}
public void setPosY(int y) {
posY = y;
}
public void resetPos() {
posX = rand.nextInt(width);
posY = rand.nextInt(height);
checkStartPos();
}
public void checkStartPos() {
while (posX == 0 || posY == 0) {
if (posX == 0) {
posX = rand.nextInt(width);
} else if (posY == 0) {
posY = rand.nextInt(height);
}
}
}
public void move() {
boolean y = posY > 0;
boolean h = posY < height;
boolean x = posX > 0;
boolean w = posX < width;
int direction = rand.nextInt(4);
switch (direction) {
case 0:
if (y) {
posY--;
break;
}
case 1:
if (h) {
posY++;
break;
}
case 2:
if (x) {
posX--;
break;
}
case 3:
if (w) {
posX++;
break;
}
}
}
@Override
public String toString() {
return symbol + " " + posX + " " + posY;
}
}
Класс Dungeon
package dungeon;
import java.util.ArrayList;
import java.util.List;
public class Dungeon {
private Player player;
private List<Vampire> vampires = new ArrayList<Vampire>();
private int width;
private int height;
private int BP; // lamp battery point
private boolean canVampireMove;
public Dungeon(int width, int height, int vampires, int moves, boolean vampiresMove) {
this.player = new Player("@", width, height);
this.width = width;
this.height = height;
this.BP = moves;
this.canVampireMove = vampiresMove;
for (int i = 0; i < vampires; i++) {
this.vampires.add(new Vampire("v", width, height));
}
}
public void printCoordinate() {
System.out.println(BP);
System.out.println("\n" + player);
for (Vampire each : vampires) {
System.out.println(each);
}
}
public void printMap() {
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
if (player.getPos().equals(x + " " + y)) {
System.out.print(player.getSymbol()); // print "@"
}
for (int v = 0; v < vampires.size(); v++) {
if (vampires.get(v).getPos().equals(x + " " + y)) {
System.out.print(vampires.get(v).getSymbol()); // print "v"
}
}
System.out.print(".");
}
System.out.println();
}
}
}
Класс Main
package dungeon;
public class Main {
public static void main(String[] args) {
Dungeon d = new Dungeon(5, 5, 1, 14, true); // width of grid, height of grid (grid printed by string "."), vampires, moveRemaining, canVampireMove
d.printCoordinate();
d.printMap();
}
}
Выход был
@ 0 0 (игрок x, y)
v 3 0 (вампир х, у)
@ ... v ..
.....
.....
.....
.....
Строка @
должна была заменить первую .
, а v
должна заменить третью .
.
Ожидаемый результат
@ 0 0 (игрок x, y)
v 3 0 (вампир х, у)
@. V ..
.....
.....
.....
.....