当前位置: 首页 > 知识库问答 >
问题:

玩家在阵列中的位置

盖辉
2023-03-14

为什么我的保安(S)和唐纳德(D)处于相同的位置。

地图应该是这样打印出来的

[D----]

[- - - - -]

[- - - - -]

[--S-]

[--P--]

但它却像这样出现

[S----]

[- - - - -]

[- - - - -]

[- - - - -]

[--P--]

public class Main {

    public static void main(String[] args) {

        Map m = new Map();
        Player p = new Player();
        Donald d = new Donald();
        Security s = new Security();

while(true) {

            m.updateMap(p.row, p.col, p.character);
            m.printMap();
            m.updateMap(p.row, p.col, '-');
            m.updateMap(d.row, d.col, d.character);
            m.updateMap(s.row, s.col, s.character);
            p.move();

        }

    }

}
public class Map {

    char map[][];

    Map() {
        map = new char[5][5];


        for(int i = 0; i<5; i++) {

            for(int j = 0; j<5; j++) {
                map[i][j] = '-';
            }
        }
    }


    void updateMap(int row, int col, char data) {

        map[row][col] = data;
    }


    //prints map on the screen. 
    void printMap() {
        for(int i = 0; i<5; i++) {
            for (int j = 0; j<5; j++) {
                System.out.print(map[i][j] + " ");
            }

            System.out.println();
        }
    }

}
public abstract class Position {

    int row;
    int col;
    char character;
    abstract void move();

}
public class Donald extends Position {

    //Doanld Trump's Position on the Array is [0,0]
    Donald() {
        int row = 0;
        int col = 0;
        character = 'D';
    }

    void move() {

    }

}

所以正如你在这里看到的,我把安全位置设为[3,2],但出于某种原因,它没有将其识别为[3,2],并将安全位置设为[0,0],唐纳德就坐在这里。

public class Security extends Position {

    Security() {
        int row = 3;
        int col = 2;
        character = 'S';
    }

    void move() {

    }

}
import java.util.Scanner;

public class Player extends Position{

    //players position starts at [4,2] on the array
    Player() {
        row = 4;
        col = 2;
        character = 'P';
    }

    void move() {

        Scanner scanner = new Scanner(System.in);
        boolean move = false;
        while(!move) {
            System.out.println("up: w | down: s | left: a | right: d | quit: q");

            char userInput = scanner.next().toLowerCase().charAt(0);


            //moving forward
            if(userInput == 'w') {
                if(row>0) {
                    row--;
                    move = true;
                }
            }

            //moving left
            if(userInput == 'a') {
                if(col>0) {
                    col--;
                    move=true;
                }
            }

            //moving right
            if(userInput == 'd') {
                if(col<4) {
                    col++;
                    move=true;
                }
            }

            //moving down
            if(userInput == 's') {
                if(row<8) {
                    row++;
                    move=true;
                }
            }


            if(move == false) {
                System.out.println("You can't move here");
            }
        }



    }

}

共有1个答案

郭乐湛
2023-03-14

类安全性从位置继承属性行和列,但在构造函数中,您要执行以下操作:

Security() {
    int row = 3;          //you are basically creating a new variable called row
    int col = 2;          //which is NOT the attribute (that is this.row)
    character = 'S';
}

在构造函数之后,Security对象保留在s.rows.col等于0。

你应该这么做

Security() {
    this.row = 3;          //you can also do        row = 3;
    this.col = 2;          //and the compiler will understand
    this.character = 'S';
}

你在Donald中犯了同样的错误:你告诉Donald就位(0,0),但然后你告诉Security就位(0,0),这就是为什么Security出现但Donald没有出现,他被Security覆盖。

Player位于第4行和第2列,与您设置的一样。

 类似资料:
  • 问题内容: 我正在制作一个2D游戏,其中包括一架与飞船通过槽式导弹作战的飞机,我希望飞船根据玩家的位置旋转,以便它们始终以“头部”面对玩家。播放器可以在y和x方向上自由移动。玩家和太空飞船具有一个Vector2 pos变量,该变量对应于它们的实际位置。任何帮助,将不胜感激。 这是我(现在正在工作)的代码: 敌方飞船旋转,但它们并不总是面对玩家: 问题答案: @dwn的答案在数学上是正确的,但是当您

  • https://drive . Google . com/file/d/1 UC 2s ys 7 zfd 686 ukqlyamedzkefehzcar/view?usp =共享 正如你在视频中看到的那样,当我试图从山上跳下来时,玩家只是穿过地形,好像没有地形一样,但我仍然可以正常移动。我注意到,每当我离开地面时快速移动时,问题就出现了,就像我第一次开始这个关卡时,我跳得很慢,然后返回地面,每当我

  • 我正在尝试为我为MC 1.10创建的mod更改播放器的模型。我已经尝试了几件事,但都没有成功。我已经制作了一个模型和渲染器,但无法让它替换播放器。这是我尝试的(自定义模型称为悬停爪(长故事)): 也: 我浏览了整个网站,以及minecraft和forge论坛。 请帮忙! 编辑:我已经查看了IChun的变形模型的源代码,但我找不到它是如何改变玩家模型的。如果你回答这个问题,说我应该看看这个mod,那

  • 我试图确定数组中的位置。我真的不确定如何处理这种情况

  • 我知道你可以得到损坏的原因 在实体损坏事件中,但是我还没有找到返回造成损坏的实体的方法。我需要找出这一点,这样我就可以检查玩家的库存中是否有某个物品。

  • 所以现在当玩家进入一个位置(pos),比如A5,如果船不在那里,它会用空字符串替换板数组索引。但是如果船在那里,我希望它用hitShip字符串替换它。 开关盒在所有坐标(A1-J10)上继续 ship1的值为“A6” 我有这个代码来打印命中/未命中消息,这取决于玩家是否命中了一艘船,但我不确定如何使用它来用hitShip变量替换棋盘数组的索引。