Advertisement
sundintra

2D Game Engine Pacman Example

Nov 24th, 2014
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.76 KB | None | 0 0
  1. package com.sundttranb.game;
  2.  
  3. import java.awt.Color;
  4. import java.awt.event.KeyEvent;
  5.  
  6. import com.sundttranb.engine.core.GameEngine;
  7. import com.sundttranb.engine.core.GameObject;
  8. import com.sundttranb.engine.core.game.entities.Entity;
  9. import com.sundttranb.engine.core.game.entities.Mob;
  10. import com.sundttranb.engine.core.game.entities.Player;
  11. import com.sundttranb.engine.core.game.levels.Level;
  12. import com.sundttranb.engine.core.game.levels.tiles.Tile;
  13. import com.sundttranb.engine.core.input.InputHandler;
  14. import com.sundttranb.engine.physics.PhysicsEngine;
  15. import com.sundttranb.engine.physics.entities.BasicTopDownEntityPhysics;
  16. import com.sundttranb.engine.physics.utils.Point;
  17. import com.sundttranb.engine.rendering.RenderEngine;
  18. import com.sundttranb.engine.rendering.Window;
  19. import com.sundttranb.engine.rendering.graphics.AnimatedSprite;
  20. import com.sundttranb.engine.rendering.graphics.Sprite;
  21. import com.sundttranb.engine.rendering.graphics.sheets.Font;
  22. import com.sundttranb.engine.rendering.graphics.sheets.SpriteSheet;
  23. import com.sundttranb.engine.rendering.graphics.utils.ColorEntityMapper;
  24. import com.sundttranb.engine.rendering.graphics.utils.ColorTileMapper;
  25.  
  26. public class Game extends GameObject
  27. {
  28.    
  29.     private GameEngine gameEngine;
  30.    
  31.     private Level level;
  32.     private Pacman player;
  33.    
  34.     private boolean won;
  35.     private boolean lost;
  36.    
  37.     public Game(boolean scroll, boolean platformer)
  38.     {
  39.         Window.init(512, 536, "Pacman Demo");
  40.         gameEngine = new GameEngine(this, scroll, platformer);
  41.         RenderEngine.init();
  42.         PhysicsEngine.init();
  43.         Window.create(gameEngine);
  44.     }
  45.    
  46.     public void init()
  47.     {
  48.         // RENDERING
  49.         RenderEngine.addSpriteSheet(new SpriteSheet("res/textures/spritesheet.png"));
  50.         RenderEngine.addFont(new Font("res/textures/fonts.png", "res/textures/fonts.txt", 7, 7));
  51.        
  52.         ColorTileMapper.addPair(new Color(63, 79, 156), new Tile("00010"));
  53.         ColorTileMapper.addPair(new Color(255, 180, 119), new Tile("00100"));
  54.        
  55.         ColorEntityMapper.addPair(new Color(255, 255, 0), new Player("010111", null));
  56.         ColorEntityMapper.addPair(new Color(255, 0, 0), new Ghost("02010", null));
  57.         ColorEntityMapper.addPair(new Color(0, 255, 255), new Ghost("02110", null));
  58.         ColorEntityMapper.addPair(new Color(255, 94, 217), new Ghost("02210", null));
  59.         ColorEntityMapper.addPair(new Color(255, 106, 0), new Ghost("02310", null));
  60.        
  61.         // GAME
  62.         level = new Level("res/levels/basic_level/basic_level_tiles.png", "res/levels/basic_level/basic_level_entities.png");
  63.         Player p = level.getPlayer();
  64.         player = new Pacman(p.getSpriteID(), p.getLevel());
  65.         player.setPhysics(new BasicTopDownEntityPhysics(player, level));
  66.         player.setX(p.getX());
  67.         player.setY(p.getY());
  68.         level.setPlayer(player);
  69.     }
  70.    
  71.     public void update()
  72.     {
  73.         if (!lost && !won)
  74.         {
  75.             level.update();
  76.             player.update();
  77.             checkEntityCollision();
  78.            
  79.             int pellets = countPellets();
  80.             if (pellets == 0)
  81.                 won = true;
  82.         }
  83.     }
  84.    
  85.     public boolean isPellet(Tile tile)
  86.     {
  87.         return tile.getSpriteID().substring(0, 3).equals("001");
  88.     }
  89.    
  90.     public int countPellets()
  91.     {
  92.         int count = 0;
  93.        
  94.         for (int r = 0; r < level.getNRows(); r++)
  95.             for (int c = 0; c < level.getNCols(); c++)
  96.                 if (level.getTile(r, c) != null && isPellet(level.getTile(r, c)))
  97.                     count++;
  98.        
  99.         return count;
  100.     }
  101.    
  102.     private void checkEntityCollision()
  103.     {
  104.         float px = player.getX();
  105.         float py = player.getY();
  106.         for (int i = 0; i < level.getNEntities(); i++)
  107.         {
  108.             Mob mob = (Mob) level.getEntity(i);
  109.             float mx = mob.getX();
  110.             float my = mob.getY();
  111.            
  112.             if (mx >= px && mx <= px + Player.WIDTH && my >= py && my <= py + Player.HEIGHT)
  113.             {
  114.                 lost = true;
  115.                 break;
  116.             }
  117.         }
  118.     }
  119.    
  120.     public void render()
  121.     {
  122.         level.draw();
  123.         player.draw();
  124.        
  125.         RenderEngine.drawString("SCORE:" + player.getScore(), 0, 512, RenderEngine.getFont(0), 3, Color.ORANGE);
  126.        
  127.         if (won)
  128.             RenderEngine.drawString("YOU WIN!", 256, 512, RenderEngine.getFont(0), 3, Color.GREEN);
  129.         else if (lost)
  130.             RenderEngine.drawString("YOU LOSE!", 256,512, RenderEngine.getFont(0), 3, Color.RED);
  131.     }
  132.    
  133.     public static void main(String args[])
  134.     {
  135.         Game game = new Game(false, false);
  136.     }
  137.    
  138. }
  139.  
  140. class Pacman extends Player implements Entity
  141. {
  142.    
  143.     private int score;
  144.    
  145.     private AnimatedSprite sprite;
  146.    
  147.     private static final int UP = 0;
  148.     private static final int DOWN = 1;
  149.     private static final int LEFT = 2;
  150.     private static final int RIGHT = 3;
  151.     private int facing;
  152.    
  153.     private boolean moving;
  154.    
  155.     public Pacman(String spriteID, Level level)
  156.     {
  157.         super(spriteID, level);
  158.        
  159.         sprite = (AnimatedSprite) super.sprite;
  160.        
  161.         facing = -1;
  162.     }
  163.    
  164.     @Override
  165.     public void update()
  166.     {
  167.         pollInput();
  168.         physics.update();
  169.         if (moving)
  170.             sprite.update();
  171.         else
  172.             sprite.reset();
  173.         checkScore();
  174.        
  175.         if (facing == UP)
  176.             sprite.rotateCurrentFrame(-90);
  177.         else if (facing == DOWN)
  178.             sprite.rotateCurrentFrame(90);
  179.         else if (facing == LEFT)
  180.             sprite.rotateCurrentFrame(180);
  181.     }
  182.    
  183.     private void pollInput()
  184.     {
  185.         boolean w = InputHandler.isPressed(KeyEvent.VK_W);
  186.         boolean s = InputHandler.isPressed(KeyEvent.VK_S);
  187.         boolean a = InputHandler.isPressed(KeyEvent.VK_A);
  188.         boolean d = InputHandler.isPressed(KeyEvent.VK_D);
  189.        
  190.         physics.setUp(w);
  191.         physics.setDown(s);
  192.         physics.setLeft(a);
  193.         physics.setRight(d);
  194.        
  195.         checkFace(w, s, a, d);
  196.        
  197.         moving = w || s || a || d;
  198.     }
  199.    
  200.     private void checkFace(boolean w, boolean s, boolean a, boolean d)
  201.     {
  202.         if (w)
  203.             facing = UP;
  204.         if (s)
  205.             facing = DOWN;
  206.         if (a)
  207.             facing = LEFT;
  208.         if (d)
  209.             facing = RIGHT;
  210.     }
  211.    
  212.     private void checkScore()
  213.     {
  214.         int r = Math.round(getY() / Tile.SIZE);
  215.         int c = Math.round(getX() / Tile.SIZE);
  216.         if (level.getTile(r, c) != null && isPellet(level.getTile(r, c)))
  217.         {
  218.             level.setTile(r, c, null);
  219.             score += 5;
  220.         }
  221.     }
  222.    
  223.     public boolean isPellet(Tile tile)
  224.     {
  225.         return tile.getSpriteID().substring(0, 3).equals("001");
  226.     }
  227.    
  228.     public AnimatedSprite getAnimatedSprite()
  229.     {
  230.         return (AnimatedSprite) sprite;
  231.     }
  232.    
  233.     public int getScore()
  234.     {
  235.         return score;
  236.     }
  237.    
  238. }
  239.  
  240. class Ghost extends Mob implements Entity
  241. {
  242.    
  243.     private boolean attacking;
  244.    
  245.     public Ghost(String spriteID, Level level)
  246.     {
  247.         super(spriteID, level);
  248.        
  249.         maxMoves = 50;
  250.     }
  251.    
  252.     @Override
  253.     public void update()
  254.     {
  255.         move();
  256.         physics.update();
  257.     }
  258.    
  259.     private void move()
  260.     {
  261.         Point point = new Point((int)getX(), (int)getY());
  262.         Point playerPoint = new Point((int)level.getPlayer().getX(), (int)level.getPlayer().getY());
  263.         int dist = point.calcDistance(playerPoint);
  264.        
  265.         if (attacking)
  266.         {
  267.             physics.setUp(false);
  268.             physics.setDown(false);
  269.             physics.setLeft(false);
  270.             physics.setRight(false);
  271.         }
  272.         if (dist >= Tile.SIZE * 3)
  273.         {
  274.             attacking = false;
  275.             physics.setMoveSpeed(1.0f);
  276.            
  277.             if (moves == 0)
  278.             {
  279.                 physics.setUp(false);
  280.                 physics.setDown(false);
  281.                 physics.setLeft(false);
  282.                 physics.setRight(false);
  283.                
  284.                 int dir = (int)(Math.random() * 4);
  285.                
  286.                 if (dir == 0)
  287.                     physics.setUp(true);
  288.                 else if (dir == 1)
  289.                     physics.setDown(true);
  290.                 else if (dir == 2)
  291.                     physics.setLeft(true);
  292.                 else if (dir == 3)
  293.                     physics.setRight(true);
  294.                
  295.                 moves = maxMoves;
  296.             }
  297.             else
  298.             {
  299.                 moves--;
  300.                
  301.                 if (getX() == lastX && getY() == lastY)
  302.                     moves = 0;
  303.                
  304.                 lastX = getX();
  305.                 lastY = getY();
  306.             }
  307.         }
  308.         else
  309.         {
  310.             attacking = true;
  311.             physics.setMoveSpeed(1.5f);
  312.            
  313.             if (getY() >= level.getPlayer().getY())
  314.                 physics.setUp(true);
  315.             if (getY() <= level.getPlayer().getY())
  316.                 physics.setDown(true);
  317.             if (getX() >= level.getPlayer().getX())
  318.                 physics.setLeft(true);
  319.             if (getX() <= level.getPlayer().getX())
  320.                 physics.setRight(true);
  321.         }
  322.     }
  323.    
  324.     @Override
  325.     public Entity clone()
  326.     {
  327.         return new Ghost(spriteID, level);
  328.     }
  329.    
  330. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement