gpt4 book ai didi

java - 在嵌套的 for 循环中,打印字符串 "."并在满足条件时将其替换为其他字符。 MOOC Java 周 10 'Dungeon'

转载 作者:行者123 更新时间:2023-11-30 01:54:15 24 4
gpt4 key购买 nike

我正在做这个项目 MOOC Java Week 10 Exercise 33

当玩家/吸血鬼位置 X 和 Y 时,我希望将字符串 . 替换为玩家/吸血鬼符号(字符串 @v)等于网格的 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;
}

}

等级地下城

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();
}

}
}

主类

    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(吸血鬼x,y)

@...v..
......
......
......
......

字符串@应该替换第一个.v应该替换第三个.

预期输出

@ 0 0(玩家 x,y)
v 3 0(吸血鬼x,y)

@.v..
......
......
......
......

最佳答案

问题是您正在为 playervampire 占据的位置打印多个字符。您的代码检查给定位置是否被 player 占据,如果是,则打印 @ 但无论如何都会打印点。

您应该限制这一点,以便每个位置仅打印一个字符。例如这样的事情。

if (positions is occupied by player) {
print player
} else if (position is occupied by a vampire) {
print vampire
} else {
else print dot
}

关于java - 在嵌套的 for 循环中,打印字符串 "."并在满足条件时将其替换为其他字符。 MOOC Java 周 10 'Dungeon',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55041616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com