diff options
| author | Starla Insigna <hatkirby@fourisland.com> | 2012-06-04 17:42:39 -0400 |
|---|---|---|
| committer | Starla Insigna <hatkirby@fourisland.com> | 2012-06-04 17:42:39 -0400 |
| commit | 70282b22d8452f72d7daa14ec62267b37a01f482 (patch) | |
| tree | 7e9213ba063be87a119979989a6becd012419e15 /src/com/fourisland | |
| parent | ccf37b30ce63acfd96d5e4eb47cfe5b67bde0383 (diff) | |
| download | frigidearth-70282b22d8452f72d7daa14ec62267b37a01f482.tar.gz frigidearth-70282b22d8452f72d7daa14ec62267b37a01f482.tar.bz2 frigidearth-70282b22d8452f72d7daa14ec62267b37a01f482.zip | |
Started to add items
Items now exist and can be spawned randomly (though it's weighted so that items of a rarer type such as rings which spawn less frequently than swords let's say). There's currently only one item defined: a scroll of healing. Items can be seen and picked up but there is no inventory interface and no way to use items yet.
Diffstat (limited to 'src/com/fourisland')
| -rw-r--r-- | src/com/fourisland/frigidearth/Game.java | 4 | ||||
| -rw-r--r-- | src/com/fourisland/frigidearth/Item.java | 97 | ||||
| -rw-r--r-- | src/com/fourisland/frigidearth/ItemInstance.java | 16 | ||||
| -rw-r--r-- | src/com/fourisland/frigidearth/ItemType.java | 27 | ||||
| -rw-r--r-- | src/com/fourisland/frigidearth/MapViewGameState.java | 39 |
5 files changed, 183 insertions, 0 deletions
| diff --git a/src/com/fourisland/frigidearth/Game.java b/src/com/fourisland/frigidearth/Game.java index 5d669de..3487729 100644 --- a/src/com/fourisland/frigidearth/Game.java +++ b/src/com/fourisland/frigidearth/Game.java | |||
| @@ -4,6 +4,9 @@ | |||
| 4 | */ | 4 | */ |
| 5 | package com.fourisland.frigidearth; | 5 | package com.fourisland.frigidearth; |
| 6 | 6 | ||
| 7 | import java.util.ArrayList; | ||
| 8 | import java.util.List; | ||
| 9 | |||
| 7 | /** | 10 | /** |
| 8 | * | 11 | * |
| 9 | * @author hatkirby | 12 | * @author hatkirby |
| @@ -15,4 +18,5 @@ public class Game | |||
| 15 | public int defense = 0; | 18 | public int defense = 0; |
| 16 | public int level = 1; | 19 | public int level = 1; |
| 17 | public int experience = 0; | 20 | public int experience = 0; |
| 21 | public List<Item> inventory = new ArrayList<Item>(); | ||
| 18 | } | 22 | } |
| diff --git a/src/com/fourisland/frigidearth/Item.java b/src/com/fourisland/frigidearth/Item.java new file mode 100644 index 0000000..689d991 --- /dev/null +++ b/src/com/fourisland/frigidearth/Item.java | |||
| @@ -0,0 +1,97 @@ | |||
| 1 | /* | ||
| 2 | * To change this template, choose Tools | Templates | ||
| 3 | * and open the template in the editor. | ||
| 4 | */ | ||
| 5 | package com.fourisland.frigidearth; | ||
| 6 | |||
| 7 | import java.awt.Color; | ||
| 8 | import java.util.ArrayList; | ||
| 9 | import java.util.EnumMap; | ||
| 10 | import java.util.List; | ||
| 11 | import java.util.Map; | ||
| 12 | import java.util.Random; | ||
| 13 | |||
| 14 | /** | ||
| 15 | * | ||
| 16 | * @author hatkirby | ||
| 17 | */ | ||
| 18 | public enum Item | ||
| 19 | { | ||
| 20 | ScrollOfHealing { | ||
| 21 | public String getItemName() | ||
| 22 | { | ||
| 23 | return "Scroll of Healing"; | ||
| 24 | } | ||
| 25 | |||
| 26 | public char getDisplayCharacter() | ||
| 27 | { | ||
| 28 | return '~'; | ||
| 29 | } | ||
| 30 | |||
| 31 | public Color getDisplayColor() | ||
| 32 | { | ||
| 33 | return Color.YELLOW; | ||
| 34 | } | ||
| 35 | |||
| 36 | public ItemType getItemType() | ||
| 37 | { | ||
| 38 | return ItemType.Scroll; | ||
| 39 | } | ||
| 40 | |||
| 41 | public void useItem() | ||
| 42 | { | ||
| 43 | Main.currentGame.health += 20; | ||
| 44 | |||
| 45 | if (Main.currentGame.health > Main.currentGame.maxHealth) | ||
| 46 | { | ||
| 47 | Main.currentGame.health = Main.currentGame.maxHealth; | ||
| 48 | } | ||
| 49 | } | ||
| 50 | }; | ||
| 51 | |||
| 52 | public abstract String getItemName(); | ||
| 53 | public abstract char getDisplayCharacter(); | ||
| 54 | public abstract Color getDisplayColor(); | ||
| 55 | public abstract ItemType getItemType(); | ||
| 56 | public abstract void useItem(); | ||
| 57 | |||
| 58 | public static Item getWeightedRandomItem() | ||
| 59 | { | ||
| 60 | Map<ItemType,Integer> typeCounts = new EnumMap<ItemType,Integer>(ItemType.class); | ||
| 61 | for (Item item : Item.values()) | ||
| 62 | { | ||
| 63 | if (typeCounts.containsKey(item.getItemType())) | ||
| 64 | { | ||
| 65 | typeCounts.put(item.getItemType(), typeCounts.get(item.getItemType())+1); | ||
| 66 | } else { | ||
| 67 | typeCounts.put(item.getItemType(), 1); | ||
| 68 | } | ||
| 69 | } | ||
| 70 | |||
| 71 | List<Double> probabilities = new ArrayList<Double>(); | ||
| 72 | for (Item item : Item.values()) | ||
| 73 | { | ||
| 74 | if (probabilities.isEmpty()) | ||
| 75 | { | ||
| 76 | probabilities.add(item.getItemType().getRarity() / typeCounts.get(item.getItemType())); | ||
| 77 | } else { | ||
| 78 | probabilities.add(item.getItemType().getRarity() / typeCounts.get(item.getItemType()) + probabilities.get(probabilities.size()-1)); | ||
| 79 | } | ||
| 80 | } | ||
| 81 | |||
| 82 | Random r = new Random(); | ||
| 83 | double num = r.nextDouble(); | ||
| 84 | int i=0; | ||
| 85 | for (Item item : Item.values()) | ||
| 86 | { | ||
| 87 | if (num < probabilities.get(i)) | ||
| 88 | { | ||
| 89 | return item; | ||
| 90 | } | ||
| 91 | |||
| 92 | i++; | ||
| 93 | } | ||
| 94 | |||
| 95 | return null; | ||
| 96 | } | ||
| 97 | } | ||
| diff --git a/src/com/fourisland/frigidearth/ItemInstance.java b/src/com/fourisland/frigidearth/ItemInstance.java new file mode 100644 index 0000000..e60da0d --- /dev/null +++ b/src/com/fourisland/frigidearth/ItemInstance.java | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | /* | ||
| 2 | * To change this template, choose Tools | Templates | ||
| 3 | * and open the template in the editor. | ||
| 4 | */ | ||
| 5 | package com.fourisland.frigidearth; | ||
| 6 | |||
| 7 | /** | ||
| 8 | * | ||
| 9 | * @author hatkirby | ||
| 10 | */ | ||
| 11 | public class ItemInstance | ||
| 12 | { | ||
| 13 | public Item item; | ||
| 14 | public int x; | ||
| 15 | public int y; | ||
| 16 | } | ||
| diff --git a/src/com/fourisland/frigidearth/ItemType.java b/src/com/fourisland/frigidearth/ItemType.java new file mode 100644 index 0000000..d9bf9c5 --- /dev/null +++ b/src/com/fourisland/frigidearth/ItemType.java | |||
| @@ -0,0 +1,27 @@ | |||
| 1 | /* | ||
| 2 | * To change this template, choose Tools | Templates | ||
| 3 | * and open the template in the editor. | ||
| 4 | */ | ||
| 5 | package com.fourisland.frigidearth; | ||
| 6 | |||
| 7 | /** | ||
| 8 | * | ||
| 9 | * @author hatkirby | ||
| 10 | */ | ||
| 11 | public enum ItemType | ||
| 12 | { | ||
| 13 | Scroll { | ||
| 14 | public double getRarity() | ||
| 15 | { | ||
| 16 | return 1; | ||
| 17 | } | ||
| 18 | }, | ||
| 19 | Special { | ||
| 20 | public double getRarity() | ||
| 21 | { | ||
| 22 | return 0; | ||
| 23 | } | ||
| 24 | }; | ||
| 25 | |||
| 26 | public abstract double getRarity(); | ||
| 27 | } | ||
| diff --git a/src/com/fourisland/frigidearth/MapViewGameState.java b/src/com/fourisland/frigidearth/MapViewGameState.java index 8419244..cfb7690 100644 --- a/src/com/fourisland/frigidearth/MapViewGameState.java +++ b/src/com/fourisland/frigidearth/MapViewGameState.java | |||
| @@ -41,6 +41,7 @@ public class MapViewGameState implements GameState | |||
| 41 | private String[] messages = new String[MESSAGE_HEIGHT]; | 41 | private String[] messages = new String[MESSAGE_HEIGHT]; |
| 42 | private List<Room> rooms = new ArrayList<Room>(); | 42 | private List<Room> rooms = new ArrayList<Room>(); |
| 43 | private List<Mob> mobs = new ArrayList<Mob>(); | 43 | private List<Mob> mobs = new ArrayList<Mob>(); |
| 44 | private List<ItemInstance> items = new ArrayList<ItemInstance>(); | ||
| 44 | private int playerx = 4; | 45 | private int playerx = 4; |
| 45 | private int playery = 4; | 46 | private int playery = 4; |
| 46 | private int viewportx = 0; | 47 | private int viewportx = 0; |
| @@ -448,6 +449,24 @@ public class MapViewGameState implements GameState | |||
| 448 | } | 449 | } |
| 449 | } | 450 | } |
| 450 | 451 | ||
| 452 | // and some random items | ||
| 453 | perf = 30; | ||
| 454 | for (;;) | ||
| 455 | { | ||
| 456 | if (Functions.random(0, 100) < perf) | ||
| 457 | { | ||
| 458 | perf /= 2; | ||
| 459 | |||
| 460 | ItemInstance ii = new ItemInstance(); | ||
| 461 | ii.item = Item.getWeightedRandomItem(); | ||
| 462 | ii.x = Functions.random(room.getX()+1, room.getX()+room.getWidth()-2); | ||
| 463 | ii.y = Functions.random(room.getY()+1, room.getY()+room.getHeight()-2); | ||
| 464 | items.add(ii); | ||
| 465 | } else { | ||
| 466 | break; | ||
| 467 | } | ||
| 468 | } | ||
| 469 | |||
| 451 | return true; | 470 | return true; |
| 452 | } | 471 | } |
| 453 | 472 | ||
| @@ -697,6 +716,15 @@ public class MapViewGameState implements GameState | |||
| 697 | g.drawImage(SystemFont.getCharacter('k', Color.YELLOW), (keyx-viewportx)*TILE_WIDTH, (keyy-viewporty)*TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT, null); | 716 | g.drawImage(SystemFont.getCharacter('k', Color.YELLOW), (keyx-viewportx)*TILE_WIDTH, (keyy-viewporty)*TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT, null); |
| 698 | } | 717 | } |
| 699 | 718 | ||
| 719 | // Render items | ||
| 720 | for (ItemInstance ii : items) | ||
| 721 | { | ||
| 722 | if (gridLighting[ii.x][ii.y]) | ||
| 723 | { | ||
| 724 | g.drawImage(SystemFont.getCharacter(ii.item.getDisplayCharacter(), ii.item.getDisplayColor()), (ii.x-viewportx)*TILE_WIDTH, (ii.y-viewporty)*TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT, null); | ||
| 725 | } | ||
| 726 | } | ||
| 727 | |||
| 700 | // Render player | 728 | // Render player |
| 701 | g.drawImage(SystemFont.getCharacter('@', Color.WHITE), (playerx-viewportx)*TILE_WIDTH, (playery-viewporty)*TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT, null); | 729 | g.drawImage(SystemFont.getCharacter('@', Color.WHITE), (playerx-viewportx)*TILE_WIDTH, (playery-viewporty)*TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT, null); |
| 702 | 730 | ||
| @@ -841,6 +869,17 @@ public class MapViewGameState implements GameState | |||
| 841 | } | 869 | } |
| 842 | } | 870 | } |
| 843 | } | 871 | } |
| 872 | } else { | ||
| 873 | for (ItemInstance ii : items) | ||
| 874 | { | ||
| 875 | if ((ii.x == playerx) && (ii.y == playery)) | ||
| 876 | { | ||
| 877 | printMessage("You get a " + ii.item.getItemName().toLowerCase()); | ||
| 878 | Main.currentGame.inventory.add(ii.item); | ||
| 879 | items.remove(ii); | ||
| 880 | break; | ||
| 881 | } | ||
| 882 | } | ||
| 844 | } | 883 | } |
| 845 | 884 | ||
| 846 | break; | 885 | break; |
