Advertisement
Guest User

Level

a guest
Dec 28th, 2013
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.68 KB | None | 0 0
  1. package main;
  2.  
  3. import java.awt.Shape;
  4. import java.awt.geom.Rectangle2D;
  5. import org.newdawn.slick.*;
  6. import org.newdawn.slick.state.*;
  7. import user.Main;
  8.  
  9. public class Level extends BasicGameState {
  10.  
  11.     private Animation IDLE, UP, DOWN, LEFT, RIGHT;
  12.     private int state, GridX, GridY, ScreenX, ScreenY;
  13.     private boolean[] walls;
  14.     private boolean initialized = false;
  15.     private Hero hero;
  16.     private float relative_x, relative_y;
  17.     public static Grid grid;
  18.     private IMaze maze;
  19.     private int nextstate;
  20.  
  21.     public Level(int state, IMaze maze) {
  22.         this.state = state;
  23.         this.maze = maze;
  24.     }
  25.  
  26.     @Override
  27.     public int getID() {
  28.         return state;
  29.     }
  30.  
  31.     @Override
  32.     public void init(GameContainer gc, StateBasedGame sbg) throws SlickException {
  33.         int[] duration = {100, 100, 100};
  34.        
  35.         hero = Hero.getInstance();
  36.         hero.setDuration(duration);
  37.         hero.setSpriteSheet(new Image("res/char.png"), 32, 48, 0);
  38.  
  39.         //Main.getInstance().getState(Main.getInstance().getmyOwnCurrentState()).leave(gc, Main.getInstance());
  40.         Main.getInstance().setCurrentState(state);
  41.         grid = Main.getInstance().getGrid();
  42.  
  43.         grid.setWallSpriteSheet(new Image("res/fence.png"), 99, 135, 0);
  44.  
  45.         grid.setGroundSpriteSheet(new Image("res/ground.png"), 32, 32, 1);
  46.  
  47.         grid.setDoorSpriteSheet(new Image("res/gate.png"), 64, 63, 0);
  48.  
  49.         Image[] walkUP = {hero.getSheet().getSprite(0, 3), hero.getSheet().getSprite(1, 3), hero.getSheet().getSprite(2, 3)};
  50.         Image[] walkDOWN = {hero.getSheet().getSprite(0, 0), hero.getSheet().getSprite(1, 0), hero.getSheet().getSprite(2, 0)};
  51.         Image[] walkLEFT = {hero.getSheet().getSprite(0, 1), hero.getSheet().getSprite(1, 1), hero.getSheet().getSprite(2, 1)};
  52.         Image[] walkRIGHT = {hero.getSheet().getSprite(0, 2), hero.getSheet().getSprite(1, 2), hero.getSheet().getSprite(2, 2)};
  53.  
  54.         hero.setAnimation(walkUP, walkDOWN, walkLEFT, walkRIGHT);
  55.  
  56.         UP = hero.getAnim_UP();
  57.         DOWN = hero.getAnim_DOWN();
  58.         LEFT = hero.getAnim_LEFT();
  59.         RIGHT = hero.getAnim_RIGHT();
  60.         IDLE = DOWN;
  61.  
  62.         maze.generate();
  63.  
  64.         grid.unlock(); //zatial nesu kluce
  65.  
  66.         initialized = true;
  67.     }
  68.  
  69.     @Override
  70.     public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException {
  71.         if (initialized) {
  72.             GridX = grid.getX();
  73.             GridY = grid.getY();
  74.             ScreenX = Main.app.getWidth();
  75.             ScreenY = Main.app.getHeight();
  76.  
  77.             hero.setX(0);
  78.             hero.setY(0);
  79.  
  80.             grid.setTypeOfWall(3);
  81.             grid.setTypeOfGround(3);
  82.  
  83.             int counterX = 0;
  84.             int counterY = 0;
  85.             for (int i = 0; i < GridX; i++) {
  86.                 for (int j = 0; j < GridY; j++) {
  87.                     Main.getInstance().getGrid().getBlock(i, j).setHeight(100);
  88.                     Main.getInstance().getGrid().getBlock(i, j).setWidth(100);
  89.                     Main.getInstance().getGrid().getBlock(i, j).setCollision(hero.getX() + relative_x - 34 + counterX, hero.getY() + relative_y - 26 + counterY);
  90.                     walls = Main.getInstance().getGrid().getBlock(i, j).getWalls();
  91.  
  92.                     g.drawImage(grid.getGround(), hero.getX() + relative_x - 34 + counterX, hero.getY() + relative_y - 10 + counterY);
  93.  
  94.                     if ((i == GridX - 1) && (j == GridY - 1)) {
  95.                         g.drawImage(grid.getDoor(), hero.getX() + relative_x - 30 + counterX, hero.getY() + relative_y - 0 + counterY);
  96.                     }
  97.                     if (walls[0] == true) { //UP
  98.                         g.drawImage(grid.getFrontWall(), hero.getX() + relative_x - 34 + counterX, hero.getY() + relative_y - 26 + counterY);
  99.                         //g.drawLine(hero.getX() + relative_x - 34 + counterX, hero.getY() + relative_y - 26 + counterY, hero.getX() + relative_x + 66 + counterX, hero.getY() + relative_y - 26 + counterY);
  100.                     }
  101.                     if (walls[1] == true) { //DOWN
  102.                         g.drawImage(grid.getFrontWall(), hero.getX() + relative_x - 34 + counterX, hero.getY() + relative_y + 74 + counterY);
  103.                         //g.drawLine(hero.getX() + relative_x - 34 + counterX, hero.getY() + relative_y + 74 + counterY, hero.getX() + relative_x + 66 + counterX, hero.getY() + relative_y + 74 + counterY);
  104.                     }
  105.                     if (walls[2] == true) { //LEFT
  106.                         g.drawImage(grid.getSideWall(), hero.getX() + relative_x - 34 + counterX, hero.getY() + relative_y - 26 + counterY);
  107.                         //g.drawLine(hero.getX() + relative_x - 34 + counterX, hero.getY() + relative_y - 26 + counterY, hero.getX() + relative_x - 34 + counterX, hero.getY() + relative_y + 74 + counterY);
  108.                     }
  109.                     if (walls[3] == true) { //RIGHT
  110.                         g.drawImage(grid.getSideWall(), hero.getX() + relative_x + 66 + counterX, hero.getY() + relative_y - 26 + counterY);
  111.                         //g.drawLine(hero.getX() + relative_x + 66 + counterX, hero.getY() + relative_y - 26 + counterY, hero.getX() + relative_x + 66 + counterX, hero.getY() + relative_y + 74 + counterY);
  112.                     }
  113.                     if ((relative_x - 34 + counterX < 0) && (relative_y - 26 + counterY < 0) && (relative_x + 66 + counterX > 0) && (relative_y + 74 + counterY > 0)) {
  114.                         hero.setBlockNumber(i, j);
  115.                     }
  116.                     counterY += Main.getInstance().getGrid().getBlock(i, j).getHeight();
  117.                 }
  118.                 counterX += Main.getInstance().getGrid().getBlock(i, 0).getWidth();
  119.                 counterY = 0;
  120.             }
  121.             IDLE.draw(hero.getX(), hero.getY());
  122.        
  123.             if ((hero.getBlockX() == GridX - 1) && (hero.getBlockY() == GridY - 1) && (grid.getLockState())) {
  124.                     if (state == (Main.getInstance().getStateCount() - 2)) {
  125.                         nextstate = 0;
  126.                     } else {
  127.                         nextstate = state + 1;
  128.                     }
  129.                     //Main.getInstance().getState(state).leave(gc, sbg);
  130.                     //Main.getInstance().getState(nextstate).init(gc, Main.getInstance());
  131.                     //Main.getInstance().getState(nextstate).enter(gc, Main.getInstance());
  132.                     Main.getInstance().enterState(nextstate);
  133.                     initialized = false;
  134.             }
  135.         }
  136.     }
  137.  
  138.     @Override
  139.     public void update(GameContainer gc, StateBasedGame sbg, int i) throws SlickException {
  140.         if (initialized) {
  141.             System.out.println(state);
  142.             Input input = gc.getInput();
  143.             int key;
  144.            
  145.             hero.setLocation();
  146.             IDLE.start();
  147.  
  148.  
  149.             if (input.isKeyDown(Input.KEY_SPACE)) {
  150.                 {
  151.                     Main.getInstance().setCurrentState(state);
  152.                     Main.getInstance().enterState(10);
  153.                 }
  154.             }
  155.  
  156.             if (input.isKeyDown(Input.KEY_UP)) {
  157.                 relative_y += i * 0.1f;
  158.                 IDLE = UP;
  159.                 key = Input.KEY_UP;
  160.  
  161.                 for (int j = 0; j < GridX; j++) {
  162.                     for (int k = 0; k < GridY; k++) {
  163.                         walls = Main.getInstance().getGrid().getBlock(j, k).getWalls();
  164.                         Shape[] corners = Main.getInstance().getGrid().getBlock(j, k).getCollisionCorners();
  165.                         Shape[] shapes = Main.getInstance().getGrid().getBlock(j, k).getCollisionWalls();
  166.                         if (walls[0] == true && initialized) {
  167.                             if (hero.getLocation().intersects((Rectangle2D) shapes[0])) {
  168.                                 relative_y -= i * 0.25f;
  169.                             }
  170.                         }
  171.                         if (walls[2] == true && initialized) {
  172.                             if (hero.getLocation().intersects((Rectangle2D) corners[2])) {
  173.                                 relative_y -= i * 0.25f;
  174.                             }
  175.                         }
  176.                     }
  177.                 }
  178.  
  179.             } else if (input.isKeyDown(Input.KEY_DOWN)) {
  180.                 relative_y -= i * 0.1f;
  181.                 IDLE = DOWN;
  182.                 key = Input.KEY_DOWN;
  183.  
  184.                 for (int j = 0; j < GridX; j++) {
  185.                     for (int k = 0; k < GridY; k++) {
  186.                         walls = Main.getInstance().getGrid().getBlock(j, k).getWalls();
  187.                         Shape[] shapes = Main.getInstance().getGrid().getBlock(j, k).getCollisionWalls();
  188.                         Shape[] corners = Main.getInstance().getGrid().getBlock(j, k).getCollisionCorners();
  189.                         if (walls[1] == true && initialized) {
  190.                             if (hero.getLocation().intersects((Rectangle2D) shapes[1])) {
  191.                                 relative_y += i * 0.25f;
  192.                             }
  193.                         }
  194.                         if (walls[3] == true && initialized) {
  195.                             if (hero.getLocation().intersects((Rectangle2D) corners[3])) {
  196.                                 relative_y += i * 0.25f;
  197.                             }
  198.                         }
  199.                     }
  200.                 }
  201.  
  202.             } else if (input.isKeyDown(Input.KEY_LEFT)) {
  203.                 relative_x += i * 0.1f;
  204.                 IDLE = LEFT;
  205.                 key = Input.KEY_LEFT;
  206.  
  207.                 for (int j = 0; j < GridX; j++) {
  208.                     for (int k = 0; k < GridY; k++) {
  209.                         walls = Main.getInstance().getGrid().getBlock(j, k).getWalls();
  210.                         Shape[] shapes = Main.getInstance().getGrid().getBlock(j, k).getCollisionWalls();
  211.                         Shape[] corners = Main.getInstance().getGrid().getBlock(j, k).getCollisionCorners();
  212.                         if (walls[2] == true && initialized) {
  213.                             if (hero.getLocation().intersects((Rectangle2D) shapes[2])) {
  214.                                 relative_x -= i * 0.25f;
  215.                             }
  216.                         }
  217.                         if (walls[1] == true && initialized) {
  218.                             if (hero.getLocation().intersects((Rectangle2D) corners[1])) {
  219.                                 relative_x -= i * 0.25f;
  220.                             }
  221.                         }
  222.                     }
  223.                 }
  224.  
  225.             } else if (input.isKeyDown(Input.KEY_RIGHT)) {
  226.                 relative_x -= i * 0.1f;
  227.                 IDLE = RIGHT;
  228.                 key = Input.KEY_RIGHT;
  229.  
  230.                 for (int j = 0; j < GridX; j++) {
  231.                     for (int k = 0; k < GridY; k++) {
  232.                         walls = Main.getInstance().getGrid().getBlock(j, k).getWalls();
  233.                         Shape[] shapes = Main.getInstance().getGrid().getBlock(j, k).getCollisionWalls();
  234.                         Shape[] corners = Main.getInstance().getGrid().getBlock(j, k).getCollisionCorners();
  235.                         if (walls[3] == true && initialized) {
  236.                             if (hero.getLocation().intersects((Rectangle2D) shapes[3])) {
  237.                                 relative_x += i * 0.25f;
  238.                             }
  239.                         }
  240.                         if (walls[0] == true && initialized) {
  241.                             if (hero.getLocation().intersects((Rectangle2D) corners[0])) {
  242.                                 relative_x += i * 0.25f;
  243.                             }
  244.                         }
  245.                     }
  246.                 }
  247.             } else {
  248.                 IDLE.stop();
  249.             }
  250.         }
  251.     }
  252. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement