Преглед на файлове

Score Menu anpassen, bug fixing swimmer

Hudriwudri преди 4 години
родител
ревизия
dc50c564c8

+ 20 - 4
src/pathgame/gameplay/Level.java

@@ -12,9 +12,16 @@ import pathgame.tilemap.TileMapGenerator;
  */
 public final class Level
 {
+
+    public final static float ALGORITHM_1 = 1.0f;
+    public final static float ALGORITHM_2 = 1.1f;
+    public final static float ALGORITHM_3 = 1.2f;
+    public final static float ALGORITHM_4 = 1.3f;
+    
     private final Player player = new Player();
     private int level = 1;
     private TileMap map = null;
+    private int algorithm = 0;
     private boolean showScoreMenu = false;
     private boolean showAfterScore = false;
 
@@ -72,9 +79,8 @@ public final class Level
         player.reset(map.getHomeX(), map.getHomeY());
         player.setObjectivesAmount(map.getNumberOfTowns());
 
-        int algoEnergy = TravellingSalesAlg.calcSalesPathLen(map, player);
-
-        player.setEnergySupply(algoEnergy);
+        algorithm = TravellingSalesAlg.calcSalesPathLen(map, player);
+        player.setEnergySupply(Math.round(algorithm * ALGORITHM_4));
 
         Logger.onLevelReset(level, player, map);
     }
@@ -108,7 +114,17 @@ public final class Level
     {
         return level;
     }
-
+    
+    /**
+     * Returns the energy use of the algorithm
+     *
+     * @return the energy use of the algorithm
+     */
+    public int getAlgorithmValue()
+    {
+        return algorithm;
+    }
+    
     /**
      * Returns if the AfterScoreMenu is showed
      *

+ 1 - 1
src/pathgame/gameplay/Player.java

@@ -373,7 +373,7 @@ public class Player
      */
     public boolean hasLost()
     {
-        return energyUsed >= energySupply;
+        return energyUsed > energySupply;
     }
 
     /**

+ 1 - 1
src/pathgame/gameplay/PlayerAbilities.java

@@ -35,7 +35,7 @@ public class PlayerAbilities
      * @param fasterSwamp the energyCostsPoints the player can move faster on
      * swamp tiles
      */
-    public PlayerAbilities(String name, int fasterGrass, int fasterForest, int fasterShallowWater,
+    private PlayerAbilities(String name, int fasterGrass, int fasterForest, int fasterShallowWater,
             int fasterDeepWater, int fasterHill, int fasterMountain, int fasterSwamp)
     {
         this.name = name;

+ 5 - 0
src/pathgame/gameplay/menu/EscMenu.java

@@ -28,6 +28,11 @@ public class EscMenu extends BaseMenu
             {
                 gamestate.setState(Gamestates.GAMEPLAY);
             }),
+            new MenuButton("Retry", (gamestate, level) ->
+            {
+                level.reset();
+                gamestate.setState(Gamestates.GAMEPLAY);                
+            }),
             new MenuButton("Main Menu", (gamestate) ->
             {
                 setReturnId(mainId);

+ 34 - 27
src/pathgame/rendering/ScoreMenuRenderer.java

@@ -2,6 +2,7 @@ package pathgame.rendering;
 
 import me.hammerle.snuviengine.api.Renderer;
 import pathgame.gameplay.Level;
+import pathgame.gameplay.Player;
 
 /**
  * A container for holding everything about the renderer for the score menu
@@ -34,42 +35,19 @@ public class ScoreMenuRenderer
         r.translateTo(0.0f, 0.0f);
         float scale = scale(r, 1);
 
+        Player p = level.getPlayer();
         String message = String.format("&2%d&f of &2%d&f Energy used",
-                level.getPlayer().getEnergyUsed(), level.getPlayer().getEnergySupply());
+                p.getEnergyUsed(), p.getEnergySupply());
 
         r.getFontRenderer().drawString((windowWidth * scale - getWidth(r, message)) / 2, (windowHeight * scale - getHeight(r, message)) / 2 - windowHeight * scale * 0.5f * 0.15f, message);
 
-        if((float) level.getPlayer().getEnergyUsed() / level.getPlayer().getEnergySupply() < 0.5f)
-        {
-            message = "You were better than the algorithm!";
-        }
-        else if((float) level.getPlayer().getEnergyUsed() / level.getPlayer().getEnergySupply() < 0.6f)
-        {
-            message = "Only 20% more energy use than the algorithm!";
-        }
-        else if((float) level.getPlayer().getEnergyUsed() / level.getPlayer().getEnergySupply() < 0.75f)
-        {
-            message = "Only 50% more energy use than the algorithm!";
-        }
-        else if((float) level.getPlayer().getEnergyUsed() / level.getPlayer().getEnergySupply() < 1)
-        {
-            message = "Only twice the energy use of the algorithm!";
-        }
-        else if((float) level.getPlayer().getEnergyUsed() / level.getPlayer().getEnergySupply() == 1)
-        {
-            message = "As good as the algorithm!";
-        }
-        else if((float) level.getPlayer().getEnergyUsed() / level.getPlayer().getEnergySupply() > 1)
-        {
-            message = "More than twice the energy use of the algorithm!";
-        }
+        message = getMessage(p.getEnergyUsed(), level.getAlgorithmValue(), p.getEnergySupply());
 
         r.getFontRenderer().drawString((windowWidth * scale - getWidth(r, message)) / 2, (windowHeight * scale - getHeight(r, message)) / 2 - windowHeight * scale * 0.5f * (-0.15f), message);
 
         scale = scale(r, 2);
-        if((float) level.getPlayer().getEnergyUsed() / level.getPlayer().getEnergySupply() <= 1)
+        if(p.getEnergyUsed() <= p.getEnergySupply())
         {
-
             message = "Congratulations!";
         }
         else
@@ -99,4 +77,33 @@ public class ScoreMenuRenderer
         r.updateMatrix();
         return 1.0f / scale;
     }
+    
+    private String getMessage(int playerEnergy, int algorithmEnergy, int maxEnergy)
+    {
+        if(playerEnergy == algorithmEnergy)
+        {
+            return "As good as the algorithm!";
+        }
+        float energyPercent = ((float) playerEnergy / maxEnergy) * Level.ALGORITHM_4;
+        if(energyPercent < Level.ALGORITHM_1)
+        {
+            return "Better than the algorithm!";
+        }
+        else if(energyPercent < Level.ALGORITHM_2)
+        {
+            return "0-10% over the algorithm!";
+        }
+        else if(energyPercent < Level.ALGORITHM_3)
+        {
+            return "10-20% over the algorithm!";
+        }
+        else if(energyPercent < Level.ALGORITHM_4)
+        {
+            return "20-30% over the algorithm!";
+        }
+        else
+        {
+            return "30% over the algorithm!";
+        }
+    }
 }

+ 3 - 4
src/pathgame/tilemap/Tiles.java

@@ -42,16 +42,15 @@ public class Tiles
             .setForestReplaceChance(0.0f)
             .setSpeedUp((p) ->
             {
-                int speedUp = p.getAbilities().getFasterShallowWater();
                 if(p.isSailing())
                 {
-                    speedUp += 4;
                     if(p.getAbilities() == PlayerAbilities.SAILOR)
                     {
-                        speedUp++;
+                        return 5;
                     }
+                    return 4;
                 }
-                return speedUp;
+                return p.getAbilities().getFasterShallowWater();
             })
             .noTown()
             .setRenderType(TileRenderType.WATER)