From 394b8475bbbb85716835ef4075f96e3f627d4945 Mon Sep 17 00:00:00 2001 From: lul11003 Date: Sat, 4 Apr 2015 12:55:00 -0400 Subject: [PATCH 1/5] wip animation --- MerchantRPGCSE2102/.classpath | 3 +- .../.settings/org.eclipse.jdt.core.prefs | 6 +- MerchantRPGCSE2102/src/images/testsprite.png | Bin 0 -> 8443 bytes MerchantRPGCSE2102/src/sprites/Animation.java | 102 ++++++++++++++++++ MerchantRPGCSE2102/src/sprites/Frame.java | 29 +++++ .../src/sprites/PlayerSprite.java | 28 +++++ MerchantRPGCSE2102/src/sprites/Sprite.java | 36 +++++++ 7 files changed, 200 insertions(+), 4 deletions(-) create mode 100644 MerchantRPGCSE2102/src/images/testsprite.png create mode 100644 MerchantRPGCSE2102/src/sprites/Animation.java create mode 100644 MerchantRPGCSE2102/src/sprites/Frame.java create mode 100644 MerchantRPGCSE2102/src/sprites/Sprite.java diff --git a/MerchantRPGCSE2102/.classpath b/MerchantRPGCSE2102/.classpath index e1badea..964c4ef 100644 --- a/MerchantRPGCSE2102/.classpath +++ b/MerchantRPGCSE2102/.classpath @@ -1,8 +1,9 @@ - + + diff --git a/MerchantRPGCSE2102/.settings/org.eclipse.jdt.core.prefs b/MerchantRPGCSE2102/.settings/org.eclipse.jdt.core.prefs index 838bd9d..54e493c 100644 --- a/MerchantRPGCSE2102/.settings/org.eclipse.jdt.core.prefs +++ b/MerchantRPGCSE2102/.settings/org.eclipse.jdt.core.prefs @@ -1,11 +1,11 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.compliance=1.6 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/MerchantRPGCSE2102/src/images/testsprite.png b/MerchantRPGCSE2102/src/images/testsprite.png new file mode 100644 index 0000000000000000000000000000000000000000..99d022279cbc8c4d3240f8a877a9bcbea3b4b05c GIT binary patch literal 8443 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 xGGOh(qblC}*LVa@#hR%Q0Fv-0pBw(%V frames = new ArrayList(); // Arraylist of frames + + public Animation(BufferedImage[] frames, int frameDelay) { + this.frameDelay = frameDelay; + this.stopped = true; + + for (int i = 0; i < frames.length; i++) { + addFrame(frames[i], frameDelay); + } + + this.frameCount = 0; + this.frameDelay = frameDelay; + this.currentFrame = 0; + this.animationDirection = 1; + this.totalFrames = this.frames.size(); + + } + + public void start() { + if (!stopped) { + return; + } + + if (frames.size() == 0) { + return; + } + + stopped = false; + } + + public void stop() { + if (frames.size() == 0) { + return; + } + + stopped = true; + } + + public void restart() { + if (frames.size() == 0) { + return; + } + + stopped = false; + currentFrame = 0; + } + + public void reset() { + this.stopped = true; + this.frameCount = 0; + this.currentFrame = 0; + } + + private void addFrame(BufferedImage frame, int duration) { + if (duration <= 0) { + System.err.println("Invalid duration: " + duration); + throw new RuntimeException("Invalid duration: " + duration); + } + + frames.add(new Frame(frame, duration)); + currentFrame = 0; + } + + public BufferedImage getSprite() { + return frames.get(currentFrame).getFrame(); + } + + public void update() { + if (!stopped) { + frameCount++; + + if (frameCount > frameDelay) { + frameCount = 0; + currentFrame += animationDirection; + + if (currentFrame > totalFrames - 1) { + currentFrame = 0; + } + else if (currentFrame < 0) { + currentFrame = totalFrames - 1; + } + } + } + + } + +} \ No newline at end of file diff --git a/MerchantRPGCSE2102/src/sprites/Frame.java b/MerchantRPGCSE2102/src/sprites/Frame.java new file mode 100644 index 0000000..eebca6a --- /dev/null +++ b/MerchantRPGCSE2102/src/sprites/Frame.java @@ -0,0 +1,29 @@ +import java.awt.image.BufferedImage; + +public class Frame { + + private BufferedImage frame; + private int duration; + + public Frame(BufferedImage frame, int duration) { + this.frame = frame; + this.duration = duration; + } + + public BufferedImage getFrame() { + return frame; + } + + public void setFrame(BufferedImage frame) { + this.frame = frame; + } + + public int getDuration() { + return duration; + } + + public void setDuration(int duration) { + this.duration = duration; + } + +} \ No newline at end of file diff --git a/MerchantRPGCSE2102/src/sprites/PlayerSprite.java b/MerchantRPGCSE2102/src/sprites/PlayerSprite.java index 220e65a..3c20c36 100644 --- a/MerchantRPGCSE2102/src/sprites/PlayerSprite.java +++ b/MerchantRPGCSE2102/src/sprites/PlayerSprite.java @@ -4,6 +4,8 @@ import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.event.KeyEvent; +import java.awt.image.BufferedImage; + import view.MapUI; public class PlayerSprite { @@ -21,6 +23,23 @@ public class PlayerSprite { private boolean rightBeingPressed = false; private boolean downBeingPressed = false; private boolean upBeingPressed = false; + + // Images for each animation + private BufferedImage[] walkingLeft = {Sprite.getSprite(0, 1), Sprite.getSprite(2, 1)}; // Gets the upper left images of my sprite sheet + private BufferedImage[] walkingRight = {Sprite.getSprite(0, 2), Sprite.getSprite(2, 1)}; + private BufferedImage[] walkingUp = {Sprite.getSprite(0, 1), Sprite.getSprite(2, 1)}; // Gets the upper left images of my sprite sheet + private BufferedImage[] walkingDown = {Sprite.getSprite(0, 2), Sprite.getSprite(2, 1)}; + private BufferedImage[] standing = {Sprite.getSprite(1, 0)}; + + // Animation states + private Animation walkLeft = new Animation(walkingLeft, 10); + private Animation walkRight = new Animation(walkingRight, 10); + private Animation walkUp = new Animation(walkingUp, 10); + private Animation walkDown = new Animation(walkingDown, 10); + private Animation standing1 = new Animation(standing, 10); + + // Actual animation + private Animation animation = standing1; public PlayerSprite(MapUI mapui, int row, int col) { this.x = col*WIDTH; @@ -35,19 +54,27 @@ public PlayerSprite(MapUI mapui, int row, int col) { public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_LEFT) { dx = -1; + animation = walkLeft; + animation.start(); leftBeingPressed = true; } if (e.getKeyCode() == KeyEvent.VK_RIGHT) { dx = 1; + animation = walkRight; + animation.start(); rightBeingPressed = true; } if (e.getKeyCode() == KeyEvent.VK_UP) { dy = -1; + animation = walkUp; + animation.start(); upBeingPressed = true; } if (e.getKeyCode() == KeyEvent.VK_DOWN) { dy = 1; + animation = walkDown; + animation.start(); downBeingPressed = true; } } @@ -171,6 +198,7 @@ public void move() { public void paint(Graphics2D g) { g.setColor(color); g.fillOval(getX(), getY(), WIDTH, WIDTH); + g.drawImage(animation.getSprite(), x, y, null); } /** diff --git a/MerchantRPGCSE2102/src/sprites/Sprite.java b/MerchantRPGCSE2102/src/sprites/Sprite.java new file mode 100644 index 0000000..81711fa --- /dev/null +++ b/MerchantRPGCSE2102/src/sprites/Sprite.java @@ -0,0 +1,36 @@ +package sprites; + +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; + +import javax.imageio.ImageIO; + +public class Sprite { + + private static BufferedImage spriteSheet; + private static final int TILE_SIZE = 32; + + public static BufferedImage loadSprite(String file) { + + BufferedImage sprite = null; + + try { + sprite = ImageIO.read(new File("src/images/testsprite.png")); + } catch (IOException e) { + e.printStackTrace(); + } + + return sprite; + } + + public static BufferedImage getSprite(int xGrid, int yGrid) { + + if (spriteSheet == null) { + spriteSheet = loadSprite("AnimationSpriteSheet"); + } + + return spriteSheet.getSubimage(xGrid * TILE_SIZE, yGrid * TILE_SIZE, TILE_SIZE, TILE_SIZE); + } + +} \ No newline at end of file From 521ca549e34fb9f06710aed800d79c5ab9a8bc8a Mon Sep 17 00:00:00 2001 From: lul11003 Date: Sat, 4 Apr 2015 13:08:04 -0400 Subject: [PATCH 2/5] 1 --- MerchantRPGCSE2102/src/sprites/PlayerSprite.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/MerchantRPGCSE2102/src/sprites/PlayerSprite.java b/MerchantRPGCSE2102/src/sprites/PlayerSprite.java index 3c20c36..134d742 100644 --- a/MerchantRPGCSE2102/src/sprites/PlayerSprite.java +++ b/MerchantRPGCSE2102/src/sprites/PlayerSprite.java @@ -196,8 +196,7 @@ public void move() { * @param g Graphics2D for painting */ public void paint(Graphics2D g) { - g.setColor(color); - g.fillOval(getX(), getY(), WIDTH, WIDTH); + g.drawImage(animation.getSprite(), x, y, null); } From d64b67e6da2dc7242db31669fbd6e6371cae0778 Mon Sep 17 00:00:00 2001 From: lul11003 Date: Sat, 4 Apr 2015 13:17:32 -0400 Subject: [PATCH 3/5] wip animation --- MerchantRPGCSE2102/src/sprites/Animation.java | 2 ++ MerchantRPGCSE2102/src/sprites/Frame.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/MerchantRPGCSE2102/src/sprites/Animation.java b/MerchantRPGCSE2102/src/sprites/Animation.java index c01e1f7..bc64c9d 100644 --- a/MerchantRPGCSE2102/src/sprites/Animation.java +++ b/MerchantRPGCSE2102/src/sprites/Animation.java @@ -1,3 +1,5 @@ +package sprites; + import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.List; diff --git a/MerchantRPGCSE2102/src/sprites/Frame.java b/MerchantRPGCSE2102/src/sprites/Frame.java index eebca6a..f74ac07 100644 --- a/MerchantRPGCSE2102/src/sprites/Frame.java +++ b/MerchantRPGCSE2102/src/sprites/Frame.java @@ -1,3 +1,5 @@ +package sprites; + import java.awt.image.BufferedImage; public class Frame { From cebba3b97255fcdc06b918d42dd6b2c3ed435f32 Mon Sep 17 00:00:00 2001 From: lul11003 Date: Sat, 11 Apr 2015 14:25:23 -0400 Subject: [PATCH 4/5] 1 --- MerchantRPGCSE2102/src/controller/RPGame.java | 42 ++++++++++++++++++- .../src/sprites/PlayerSprite.java | 8 ++++ MerchantRPGCSE2102/src/view/MapUI.java | 10 +++-- 3 files changed, 56 insertions(+), 4 deletions(-) diff --git a/MerchantRPGCSE2102/src/controller/RPGame.java b/MerchantRPGCSE2102/src/controller/RPGame.java index 9711281..7894242 100644 --- a/MerchantRPGCSE2102/src/controller/RPGame.java +++ b/MerchantRPGCSE2102/src/controller/RPGame.java @@ -7,6 +7,7 @@ import javax.swing.JFrame; +import model.Map; import model.Merchant; import model.Player; import view.MapUI; @@ -140,6 +141,7 @@ public void createTransaction(Player player, Merchant targetMerchant) } } + /** * Will refresh number of transactions the Player has available * @@ -266,6 +268,44 @@ public static void main(String[] args) throws InterruptedException playerInventory.addAll(_rpg.getMerchantInventoryList(3)); _rpg.buildPlayer("test", 500, playerInventory); _rpg.getPlayer().getItem("armor").increaseQuantity(15); - _rpg.createTransaction(_rpg.getPlayer(), _rpg.getMerchant(1)); + // SETTING UP PLAYER AND MERCHANT + Player player = new Player("Player", 0, null); + Merchant merch1 = new Merchant("Bill", 0, null); + Merchant merch2 = new Merchant("Joe", 0, null); + Merchant merch3 = new Merchant("Sam", 0, null); + + // CREATING MAP AND INITIALIZE PLAYER AND MERCHANTS + Map map = new Map(30, 40); + map.initializePlayer(player, 15, 20); + map.initializeMerchant(merch1, 15, 0); + map.initializeMerchant(merch2, 29, 20); + map.initializeMerchant(merch3, 15, 39); + + // CREATING JFRAME WINDOW + JFrame frame = new JFrame("Merchant RPG"); + + // CREATING MAPUI AND SPRITES + MapUI mapui = new MapUI(map,_rpg); + mapui.createPlayerSprite(15, 20); + mapui.addMerchantSprite(15, 0); + mapui.addMerchantSprite(29, 20); + mapui.addMerchantSprite(15, 39); + + // ADDING MAPUI TO JFRAME + frame.add(mapui); + + // SETTING PROPERTIES OF JFRAME + frame.setSize(RPGame.WIDTH, RPGame.HEIGHT); + frame.setResizable(false); + frame.setVisible(true); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setLocationRelativeTo(null); + + // MAIN GAME LOOP + while (true) { + mapui.move(); + mapui.repaint(); + Thread.sleep(100/12); // Controls the speed of the game (currently 120 frames/second) + } } } diff --git a/MerchantRPGCSE2102/src/sprites/PlayerSprite.java b/MerchantRPGCSE2102/src/sprites/PlayerSprite.java index 134d742..ec33a2a 100644 --- a/MerchantRPGCSE2102/src/sprites/PlayerSprite.java +++ b/MerchantRPGCSE2102/src/sprites/PlayerSprite.java @@ -106,6 +106,14 @@ public void keyReleased(KeyEvent e) { if (upBeingPressed == false) // Sprite will stop only when the UP key is not being pressed dy = 0; } + if (e.getKeyCode() == KeyEvent.VK_F){ + if(collision()){ + mapui.game.createTransaction(null, null);//RPGame initialize Trade + } + else{ + return; + } + } // This fixes some bugs with holding three keys down at once and letting go of two (Basically ensures that dx and dy match which keys are currently being held) if(leftBeingPressed) diff --git a/MerchantRPGCSE2102/src/view/MapUI.java b/MerchantRPGCSE2102/src/view/MapUI.java index 044fec6..bb04f55 100644 --- a/MerchantRPGCSE2102/src/view/MapUI.java +++ b/MerchantRPGCSE2102/src/view/MapUI.java @@ -11,6 +11,8 @@ import javax.swing.JPanel; +import controller.RPGame; + import model.Map; import sprites.MerchantSprite; import sprites.PlayerSprite; @@ -19,12 +21,14 @@ public class MapUI extends JPanel { private Map map; + public RPGame game; private PlayerSprite player; private ArrayList merchants = new ArrayList(); - public MapUI(Map map) { + public MapUI(Map map,RPGame Game) { this.map = map; + this.game= Game; addKeyListener(new KeyListener() { @Override @@ -70,7 +74,7 @@ public void paint(Graphics g) { for (MerchantSprite merchant : merchants) merchant.paint(g2d); - // For testing purposes. Showes the Player's current x and y position as well as the current Vertex + // For testing purposes. Shows the Player's current x and y position as well as the current Vertex g2d.setColor(Color.GRAY); g2d.setFont(new Font("Verdana", Font.BOLD, 20)); g2d.drawString("x: " + player.getX() + " y : " + player.getY(), 10, 20); @@ -87,7 +91,7 @@ public void addMerchantSprite(int row, int col) { MerchantSprite merchant = new MerchantSprite(row, col); merchants.add(merchant); } - + /** * Creates a player sprite to be painted on the canvas * @param row The row of the player From 46c56e0d7238ff326aacf38e46a321a50d3ad59d Mon Sep 17 00:00:00 2001 From: lul11003 Date: Sat, 11 Apr 2015 15:08:27 -0400 Subject: [PATCH 5/5] 1 --- MerchantRPGCSE2102/src/controller/RPGame.java | 2 +- MerchantRPGCSE2102/src/view/MapUI.java | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/MerchantRPGCSE2102/src/controller/RPGame.java b/MerchantRPGCSE2102/src/controller/RPGame.java index 7894242..e8b9867 100644 --- a/MerchantRPGCSE2102/src/controller/RPGame.java +++ b/MerchantRPGCSE2102/src/controller/RPGame.java @@ -21,7 +21,7 @@ public class RPGame { private ArrayList playerInventoryList = new ArrayList(); // the player's inventory list private Player _player; private Merchant _merchant1, _merchant2, _merchant3; - private boolean _movement; + public boolean _movement; private int _currentDay; private int _transactionLimit; diff --git a/MerchantRPGCSE2102/src/view/MapUI.java b/MerchantRPGCSE2102/src/view/MapUI.java index bb04f55..f422ac5 100644 --- a/MerchantRPGCSE2102/src/view/MapUI.java +++ b/MerchantRPGCSE2102/src/view/MapUI.java @@ -24,6 +24,7 @@ public class MapUI extends JPanel { public RPGame game; private PlayerSprite player; private ArrayList merchants = new ArrayList(); + private boolean _tranState=game._movement; public MapUI(Map map,RPGame Game) { @@ -100,11 +101,22 @@ public void addMerchantSprite(int row, int col) { public void createPlayerSprite(int row, int col) { player = new PlayerSprite(this, row, col); } + + public void changeState(){ + + } /** * Moves the PlayerSprite as well as the Map's instance of Player */ public void move() { + //check transaction + if (_tranState=false){ + + } + else{ + + player.move(); // Every 30 pixels, the player will move to a new Vertex @@ -128,6 +140,7 @@ public void move() { map.movePlayer("south"); player.setChangeInY(1); } + } } public Map getMap() {