Komischer Fehler in meinem kleinen Spiel

  • Komischer Fehler in meinem kleinen Spiel

    Hi!

    Hab mich mal an ein kleines Spiel gesetzt... man ist ein @ ,muss sich rumbewegen, und As die einen verfolgen abschütteln indem man sie in "Minen" jagt.
    Ich hab das so gelöst: Klasse Player, Klasse Enemy, ein Array für die Karte (1 = Mine, 0 = frei), und dann ein Array in dem die Feinde untergebracht sind.
    Nun hab ich aber einen komischen Bug dadrin, und kann mir nicht erklären warum; wenn mehrere As gleichzeitig sterben, wird von der verbleibenden Gegneranzahl nur 1 abgezogen.
    Code:

    Quellcode

    1. public void checkEvents()
    2. {
    3. for(int i = 0; i < noe; i++)
    4. {
    5. if(enemies[i] != null)
    6. {
    7. if(enemies[i].getXPos() == player.getXPos() && enemies[i].getYPos() == player.getYPos())
    8. {
    9. done = true;
    10. playerHasWon = false;
    11. }
    12. if(playfield[enemies[i].getXPos()][enemies[i].getYPos()] == 1)
    13. {
    14. enemies[i]= null;
    15. noe--;
    16. }
    17. }
    18. }
    19. if(playfield[player.getXPos()][player.getYPos()] == 1)
    20. {
    21. done = true;
    22. playerHasWon = false;
    23. }
    24. if(noe <= 0)
    25. {
    26. done = true;
    27. playerHasWon = true;
    28. }
    29. }
    Alles anzeigen


    Danke,
    -Josh
  • Ich weiß nicht ob das der Grund für den Fehler ist, aber du solltest die for-Schleife immer über das gesamte Gegner-Array laufen lassen:

    Quellcode

    1. for(int i = 0; i < enemies.length; i++)

    Denn ob ein Gegner noch lebt prüfst du ja sowieso, aber wenn du nur bis noe durchläufst, kann es passieren, dass du noch lebende Gegner verpasst. Die Gegner müssen ja nicht in der umgekehrten Reihenfolge sterben wie sie im Array stehen. Irgendwann könnte das Array so aussehen:

    [Gegner1, null, null, Gegner2]

    Du hast also 2 lebende Gegner, aber wenn du das Array nur bis noe (das 2 ist) durchläufst erwischt du Gegner2 nicht.