diff options
| author | Starla Insigna <hatkirby@fourisland.com> | 2012-06-04 11:25:17 -0400 |
|---|---|---|
| committer | Starla Insigna <hatkirby@fourisland.com> | 2012-06-04 11:25:17 -0400 |
| commit | a9d7a2e1960f9d7404d28feec6669d3b247098a4 (patch) | |
| tree | 4f150212fc43c83a6ad0585ad10d98e8b6eeaa4f /src/com | |
| parent | 0f3fe4dc8aa12ee50f7a325d6c02b33197ba6c9f (diff) | |
| download | frigidearth-a9d7a2e1960f9d7404d28feec6669d3b247098a4.tar.gz frigidearth-a9d7a2e1960f9d7404d28feec6669d3b247098a4.tar.bz2 frigidearth-a9d7a2e1960f9d7404d28feec6669d3b247098a4.zip | |
Added experience/levelling
You get less experience for fighting the same mob when you increase a level. Also, your attack power is equal to your level.
Diffstat (limited to 'src/com')
| -rw-r--r-- | src/com/fourisland/frigidearth/Functions.java | 18 | ||||
| -rw-r--r-- | src/com/fourisland/frigidearth/MapViewGameState.java | 50 | ||||
| -rw-r--r-- | src/com/fourisland/frigidearth/Mob.java | 3 | ||||
| -rw-r--r-- | src/com/fourisland/frigidearth/mobs/Mouse.java | 10 | ||||
| -rw-r--r-- | src/com/fourisland/frigidearth/mobs/Rat.java | 10 | ||||
| -rw-r--r-- | src/com/fourisland/frigidearth/mobs/Spider.java | 54 |
6 files changed, 134 insertions, 11 deletions
| diff --git a/src/com/fourisland/frigidearth/Functions.java b/src/com/fourisland/frigidearth/Functions.java index 32943ce..f01f3a0 100644 --- a/src/com/fourisland/frigidearth/Functions.java +++ b/src/com/fourisland/frigidearth/Functions.java | |||
| @@ -30,4 +30,22 @@ public class Functions | |||
| 30 | 30 | ||
| 31 | return result; | 31 | return result; |
| 32 | } | 32 | } |
| 33 | |||
| 34 | public static String padLeft(String str, int length, char pad) | ||
| 35 | { | ||
| 36 | int padding = length - str.length(); | ||
| 37 | if (str.length() > length) | ||
| 38 | { | ||
| 39 | return str; | ||
| 40 | } | ||
| 41 | |||
| 42 | StringBuilder sb = new StringBuilder(); | ||
| 43 | for (int i=0; i<padding; i++) | ||
| 44 | { | ||
| 45 | sb.append(pad); | ||
| 46 | } | ||
| 47 | |||
| 48 | sb.append(str); | ||
| 49 | return sb.toString(); | ||
| 50 | } | ||
| 33 | } | 51 | } |
| diff --git a/src/com/fourisland/frigidearth/MapViewGameState.java b/src/com/fourisland/frigidearth/MapViewGameState.java index 9bee398..b77803b 100644 --- a/src/com/fourisland/frigidearth/MapViewGameState.java +++ b/src/com/fourisland/frigidearth/MapViewGameState.java | |||
| @@ -6,6 +6,7 @@ package com.fourisland.frigidearth; | |||
| 6 | 6 | ||
| 7 | import com.fourisland.frigidearth.mobs.Mouse; | 7 | import com.fourisland.frigidearth.mobs.Mouse; |
| 8 | import com.fourisland.frigidearth.mobs.Rat; | 8 | import com.fourisland.frigidearth.mobs.Rat; |
| 9 | import com.fourisland.frigidearth.mobs.Spider; | ||
| 9 | import java.awt.Color; | 10 | import java.awt.Color; |
| 10 | import java.awt.Graphics2D; | 11 | import java.awt.Graphics2D; |
| 11 | import java.awt.Point; | 12 | import java.awt.Point; |
| @@ -54,6 +55,8 @@ public class MapViewGameState implements GameState | |||
| 54 | private int heartbeat = 0; | 55 | private int heartbeat = 0; |
| 55 | private int floor; | 56 | private int floor; |
| 56 | private int spawnTimer = 0; | 57 | private int spawnTimer = 0; |
| 58 | private int level = 1; | ||
| 59 | private int experience = 0; | ||
| 57 | 60 | ||
| 58 | public MapViewGameState(int floor) | 61 | public MapViewGameState(int floor) |
| 59 | { | 62 | { |
| @@ -737,11 +740,30 @@ public class MapViewGameState implements GameState | |||
| 737 | 740 | ||
| 738 | g.drawImage(SystemFont.getCharacter((char) 5, Color.GRAY), (healthText.length()+3)*TILE_WIDTH, 0, TILE_WIDTH, TILE_HEIGHT, null); | 741 | g.drawImage(SystemFont.getCharacter((char) 5, Color.GRAY), (healthText.length()+3)*TILE_WIDTH, 0, TILE_WIDTH, TILE_HEIGHT, null); |
| 739 | int b = healthText.length()+4; | 742 | int b = healthText.length()+4; |
| 740 | String defenseText = Integer.toBinaryString(defense); | 743 | String defenseText = Integer.toString(defense); |
| 741 | for (int i=0; i<defenseText.length(); i++) | 744 | for (int i=0; i<defenseText.length(); i++) |
| 742 | { | 745 | { |
| 743 | g.drawImage(SystemFont.getCharacter(defenseText.charAt(i), Color.WHITE), (i+b)*TILE_WIDTH, 0, TILE_WIDTH, TILE_HEIGHT, null); | 746 | g.drawImage(SystemFont.getCharacter(defenseText.charAt(i), Color.WHITE), (i+b)*TILE_WIDTH, 0, TILE_WIDTH, TILE_HEIGHT, null); |
| 744 | } | 747 | } |
| 748 | |||
| 749 | b+=defenseText.length()+1; | ||
| 750 | g.drawImage(SystemFont.getCharacter('E', Color.WHITE), (b)*TILE_WIDTH, 0, TILE_WIDTH, TILE_HEIGHT, null); | ||
| 751 | g.drawImage(SystemFont.getCharacter('X', Color.WHITE), (b+1)*TILE_WIDTH, 0, TILE_WIDTH, TILE_HEIGHT, null); | ||
| 752 | g.drawImage(SystemFont.getCharacter('P', Color.WHITE), (b+2)*TILE_WIDTH, 0, TILE_WIDTH, TILE_HEIGHT, null); | ||
| 753 | b+=3; | ||
| 754 | String expText = Functions.padLeft(Integer.toString(experience), 3, '0'); | ||
| 755 | for (int i=0; i<expText.length(); i++) | ||
| 756 | { | ||
| 757 | g.drawImage(SystemFont.getCharacter(expText.charAt(i), Color.WHITE), (i+b)*TILE_WIDTH, 0, TILE_WIDTH, TILE_HEIGHT, null); | ||
| 758 | } | ||
| 759 | b+=expText.length(); | ||
| 760 | g.drawImage(SystemFont.getCharacter(':', Color.WHITE), (b)*TILE_WIDTH, 0, TILE_WIDTH, TILE_HEIGHT, null); | ||
| 761 | b++; | ||
| 762 | String levelText = Integer.toString(level); | ||
| 763 | for (int i=0; i<levelText.length(); i++) | ||
| 764 | { | ||
| 765 | g.drawImage(SystemFont.getCharacter(levelText.charAt(i), Color.WHITE), (i+b)*TILE_WIDTH, 0, TILE_WIDTH, TILE_HEIGHT, null); | ||
| 766 | } | ||
| 745 | } | 767 | } |
| 746 | 768 | ||
| 747 | public void processInput(KeyEvent e) | 769 | public void processInput(KeyEvent e) |
| @@ -765,12 +787,21 @@ public class MapViewGameState implements GameState | |||
| 765 | if (mob.getPosition().equals(to)) | 787 | if (mob.getPosition().equals(to)) |
| 766 | { | 788 | { |
| 767 | printMessage("You hit the " + mob.getName().toLowerCase()); | 789 | printMessage("You hit the " + mob.getName().toLowerCase()); |
| 768 | mob.health--; | 790 | mob.health -= level; |
| 769 | 791 | ||
| 770 | if (mob.health <= 0) | 792 | if (mob.health <= 0) |
| 771 | { | 793 | { |
| 772 | printMessage("You killed the " + mob.getName().toLowerCase() + "!"); | 794 | printMessage("You killed the " + mob.getName().toLowerCase() + "!"); |
| 795 | experience += (mob.getBaseExperience()/level); | ||
| 773 | mobs.remove(mob); | 796 | mobs.remove(mob); |
| 797 | |||
| 798 | if (experience > 1000) | ||
| 799 | { | ||
| 800 | level++; | ||
| 801 | experience -= 1000; | ||
| 802 | |||
| 803 | printMessage("You grow to level " + level + "!"); | ||
| 804 | } | ||
| 774 | } | 805 | } |
| 775 | 806 | ||
| 776 | foundMob = true; | 807 | foundMob = true; |
| @@ -827,10 +858,10 @@ public class MapViewGameState implements GameState | |||
| 827 | // Also, if it is adjacent to the player, it should attack | 858 | // Also, if it is adjacent to the player, it should attack |
| 828 | if ((mob.hostile) && (canSeePlayer(mob.x, mob.y))) | 859 | if ((mob.hostile) && (canSeePlayer(mob.x, mob.y))) |
| 829 | { | 860 | { |
| 830 | if (arePointsAdjacent(playerx, playery, mob.x, mob.y)) | 861 | if (arePointsAdjacent(playerx, playery, mob.x, mob.y, false)) |
| 831 | { | 862 | { |
| 832 | // Attack! | 863 | // Attack! |
| 833 | health -= (mob.power - defense); | 864 | health -= (mob.getAttackPower() - defense); |
| 834 | printMessage(mob.getBattleMessage()); | 865 | printMessage(mob.getBattleMessage()); |
| 835 | } else { | 866 | } else { |
| 836 | List<Direction> path = findPath(mob.getPosition(), new Point(playerx, playery)); | 867 | List<Direction> path = findPath(mob.getPosition(), new Point(playerx, playery)); |
| @@ -1095,22 +1126,22 @@ public class MapViewGameState implements GameState | |||
| 1095 | } | 1126 | } |
| 1096 | } | 1127 | } |
| 1097 | 1128 | ||
| 1098 | private boolean arePointsAdjacent(int px, int py, int mx, int my) | 1129 | private boolean arePointsAdjacent(int px, int py, int mx, int my, boolean includeDiagonals) |
| 1099 | { | 1130 | { |
| 1100 | if (mx == (px-1)) | 1131 | if (mx == (px-1)) |
| 1101 | { | 1132 | { |
| 1102 | if (my == (py-1)) return true; | 1133 | if ((my == (py-1)) && (includeDiagonals)) return true; |
| 1103 | if (my == py) return true; | 1134 | if (my == py) return true; |
| 1104 | if (my == (py+1)) return true; | 1135 | if ((my == (py+1)) && (includeDiagonals)) return true; |
| 1105 | } else if (mx == px) | 1136 | } else if (mx == px) |
| 1106 | { | 1137 | { |
| 1107 | if (my == (py-1)) return true; | 1138 | if (my == (py-1)) return true; |
| 1108 | if (my == (py+1)) return true; | 1139 | if (my == (py+1)) return true; |
| 1109 | } else if (mx == (px+1)) | 1140 | } else if (mx == (px+1)) |
| 1110 | { | 1141 | { |
| 1111 | if (my == (py-1)) return true; | 1142 | if ((my == (py-1)) && (includeDiagonals)) return true; |
| 1112 | if (my == py) return true; | 1143 | if (my == py) return true; |
| 1113 | if (my == (py+1)) return true; | 1144 | if ((my == (py+1)) && (includeDiagonals)) return true; |
| 1114 | } | 1145 | } |
| 1115 | 1146 | ||
| 1116 | return false; | 1147 | return false; |
| @@ -1228,6 +1259,7 @@ public class MapViewGameState implements GameState | |||
| 1228 | case 1: | 1259 | case 1: |
| 1229 | mobTypes.add(Mouse.class); | 1260 | mobTypes.add(Mouse.class); |
| 1230 | mobTypes.add(Rat.class); | 1261 | mobTypes.add(Rat.class); |
| 1262 | mobTypes.add(Spider.class); | ||
| 1231 | } | 1263 | } |
| 1232 | 1264 | ||
| 1233 | try | 1265 | try |
| diff --git a/src/com/fourisland/frigidearth/Mob.java b/src/com/fourisland/frigidearth/Mob.java index c35b276..f3bfe6a 100644 --- a/src/com/fourisland/frigidearth/Mob.java +++ b/src/com/fourisland/frigidearth/Mob.java | |||
| @@ -17,7 +17,6 @@ public abstract class Mob | |||
| 17 | public int y; | 17 | public int y; |
| 18 | public int health; | 18 | public int health; |
| 19 | public boolean hostile; | 19 | public boolean hostile; |
| 20 | public int power; | ||
| 21 | 20 | ||
| 22 | public Mob(int x, int y) | 21 | public Mob(int x, int y) |
| 23 | { | 22 | { |
| @@ -41,4 +40,6 @@ public abstract class Mob | |||
| 41 | public abstract Color getDisplayColor(); | 40 | public abstract Color getDisplayColor(); |
| 42 | public abstract String getName(); | 41 | public abstract String getName(); |
| 43 | public abstract String getBattleMessage(); | 42 | public abstract String getBattleMessage(); |
| 43 | public abstract int getAttackPower(); | ||
| 44 | public abstract int getBaseExperience(); | ||
| 44 | } | 45 | } |
| diff --git a/src/com/fourisland/frigidearth/mobs/Mouse.java b/src/com/fourisland/frigidearth/mobs/Mouse.java index 17f5f94..6966764 100644 --- a/src/com/fourisland/frigidearth/mobs/Mouse.java +++ b/src/com/fourisland/frigidearth/mobs/Mouse.java | |||
| @@ -40,4 +40,14 @@ public class Mouse extends Mob | |||
| 40 | { | 40 | { |
| 41 | return "The mouse bites you"; | 41 | return "The mouse bites you"; |
| 42 | } | 42 | } |
| 43 | |||
| 44 | public int getAttackPower() | ||
| 45 | { | ||
| 46 | return 0; | ||
| 47 | } | ||
| 48 | |||
| 49 | public int getBaseExperience() | ||
| 50 | { | ||
| 51 | return 50; | ||
| 52 | } | ||
| 43 | } | 53 | } |
| diff --git a/src/com/fourisland/frigidearth/mobs/Rat.java b/src/com/fourisland/frigidearth/mobs/Rat.java index 0603bb1..f7277c6 100644 --- a/src/com/fourisland/frigidearth/mobs/Rat.java +++ b/src/com/fourisland/frigidearth/mobs/Rat.java | |||
| @@ -20,7 +20,6 @@ public class Rat extends Mob | |||
| 20 | 20 | ||
| 21 | health = Functions.rollDice(1, 4); | 21 | health = Functions.rollDice(1, 4); |
| 22 | hostile = true; | 22 | hostile = true; |
| 23 | power = 1; | ||
| 24 | } | 23 | } |
| 25 | 24 | ||
| 26 | public char getDisplayCharacter() | 25 | public char getDisplayCharacter() |
| @@ -43,4 +42,13 @@ public class Rat extends Mob | |||
| 43 | return "The rat bites you"; | 42 | return "The rat bites you"; |
| 44 | } | 43 | } |
| 45 | 44 | ||
| 45 | public int getAttackPower() | ||
| 46 | { | ||
| 47 | return 1; | ||
| 48 | } | ||
| 49 | |||
| 50 | public int getBaseExperience() | ||
| 51 | { | ||
| 52 | return 100; | ||
| 53 | } | ||
| 46 | } | 54 | } |
| diff --git a/src/com/fourisland/frigidearth/mobs/Spider.java b/src/com/fourisland/frigidearth/mobs/Spider.java new file mode 100644 index 0000000..58a554b --- /dev/null +++ b/src/com/fourisland/frigidearth/mobs/Spider.java | |||
| @@ -0,0 +1,54 @@ | |||
| 1 | /* | ||
| 2 | * To change this template, choose Tools | Templates | ||
| 3 | * and open the template in the editor. | ||
| 4 | */ | ||
| 5 | package com.fourisland.frigidearth.mobs; | ||
| 6 | |||
| 7 | import com.fourisland.frigidearth.Functions; | ||
| 8 | import com.fourisland.frigidearth.Mob; | ||
| 9 | import java.awt.Color; | ||
| 10 | |||
| 11 | /** | ||
| 12 | * | ||
| 13 | * @author hatkirby | ||
| 14 | */ | ||
| 15 | public class Spider extends Mob | ||
| 16 | { | ||
| 17 | public Spider(int x, int y) | ||
| 18 | { | ||
| 19 | super(x, y); | ||
| 20 | |||
| 21 | health = Functions.rollDice(2, 5); | ||
| 22 | hostile = true; | ||
| 23 | } | ||
| 24 | |||
| 25 | public char getDisplayCharacter() | ||
| 26 | { | ||
| 27 | return 's'; | ||
| 28 | } | ||
| 29 | |||
| 30 | public Color getDisplayColor() | ||
| 31 | { | ||
| 32 | return Color.BLACK; | ||
| 33 | } | ||
| 34 | |||
| 35 | public String getName() | ||
| 36 | { | ||
| 37 | return "Spider"; | ||
| 38 | } | ||
| 39 | |||
| 40 | public String getBattleMessage() | ||
| 41 | { | ||
| 42 | return "The spider bites you"; | ||
| 43 | } | ||
| 44 | |||
| 45 | public int getAttackPower() | ||
| 46 | { | ||
| 47 | return 2; | ||
| 48 | } | ||
| 49 | |||
| 50 | public int getBaseExperience() | ||
| 51 | { | ||
| 52 | return 200; | ||
| 53 | } | ||
| 54 | } | ||
