Advertisement
fewfw

Untitled

May 31st, 2020
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.92 KB | None | 0 0
  1. package userinterface;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Graphics;
  5. import java.awt.event.KeyEvent;
  6. import java.awt.event.KeyListener;
  7. import java.awt.image.BufferedImage;
  8.  
  9. import javax.swing.JPanel;
  10.  
  11. import gameobject.Clouds;
  12. import gameobject.EnemiesManager;
  13. import gameobject.Land;
  14. import gameobject.MainCharacter;
  15. import util.Resource;
  16.  
  17. public class GameScreen extends JPanel implements Runnable, KeyListener {
  18.  
  19.     private static final int START_GAME_STATE = 0;
  20.     private static final int GAME_PLAYING_STATE = 1;
  21.     private static final int GAME_OVER_STATE = 2;
  22.  
  23.     private Land land;
  24.     private MainCharacter mainCharacter;
  25.     private EnemiesManager enemiesManager;
  26.     private Clouds clouds;
  27.     private Thread thread;
  28.  
  29.     private boolean isKeyPressed;
  30.  
  31.     private int gameState = START_GAME_STATE;
  32.  
  33.     private BufferedImage replayButtonImage;
  34.     private BufferedImage gameOverButtonImage;
  35.  
  36.     public GameScreen() {
  37.         mainCharacter = new MainCharacter();
  38.         land = new Land(GameWindow.SCREEN_WIDTH, mainCharacter);
  39.         mainCharacter.setSpeedX(4);
  40.         replayButtonImage = Resource.getResouceImage("data/replay_button.png");
  41.         gameOverButtonImage = Resource.getResouceImage("data/gameover_text.png");
  42.         enemiesManager = new EnemiesManager(mainCharacter);
  43.         clouds = new Clouds(GameWindow.SCREEN_WIDTH, mainCharacter);
  44.     }
  45.  
  46.     public void startGame() {
  47.         thread = new Thread(this);
  48.         thread.start();
  49.     }
  50.  
  51.     public void gameUpdate() {
  52.         if (gameState == GAME_PLAYING_STATE) {
  53.             clouds.update();
  54.             land.update();
  55.             mainCharacter.update();
  56.             enemiesManager.update();
  57.             if (enemiesManager.isCollision()) {
  58.                 mainCharacter.playDeadSound();
  59.                 gameState = GAME_OVER_STATE;
  60.                 mainCharacter.dead(true);
  61.             }
  62.         }
  63.     }
  64.  
  65.     public void paint(Graphics g) {
  66.         g.setColor(Color.decode("#f7f7f7"));
  67.         g.fillRect(0, 0, getWidth(), getHeight());
  68.  
  69.         switch (gameState) {
  70.             case START_GAME_STATE:
  71.                 mainCharacter.draw(g);
  72.                 break;
  73.             case GAME_PLAYING_STATE:
  74.             case GAME_OVER_STATE:
  75.                 clouds.draw(g);
  76.                 land.draw(g);
  77.                 enemiesManager.draw(g);
  78.                 mainCharacter.draw(g);
  79.                 g.setColor(Color.BLACK);
  80.                 g.drawString("HI " + mainCharacter.score, 500, 20);
  81.                 if (gameState == GAME_OVER_STATE) {
  82.                     g.drawImage(gameOverButtonImage, 200, 30, null);
  83.                     g.drawImage(replayButtonImage, 283, 50, null);
  84.  
  85.                 }
  86.                 break;
  87.         }
  88.     }
  89.  
  90.     @Override
  91.     public void run() {
  92.  
  93.         int fps = 100;
  94.         long msPerFrame = 1000 * 1000000 / fps;
  95.         long lastTime = 0;
  96.         long elapsed;
  97.  
  98.         int msSleep;
  99.         int nanoSleep;
  100.  
  101.         long endProcessGame;
  102.         long lag = 0;
  103.  
  104.         while (true) {
  105.             gameUpdate();
  106.             repaint();
  107.             endProcessGame = System.nanoTime();
  108.             elapsed = (lastTime + msPerFrame - System.nanoTime());
  109.             msSleep = (int) (elapsed / 1000000);
  110.             nanoSleep = (int) (elapsed % 1000000);
  111.             if (msSleep <= 0) {
  112.                 lastTime = System.nanoTime();
  113.                 continue;
  114.             }
  115.             try {
  116.                 Thread.sleep(msSleep, nanoSleep);
  117.             } catch (InterruptedException e) {
  118.                 e.printStackTrace();
  119.             }
  120.             lastTime = System.nanoTime();
  121.         }
  122.     }
  123.  
  124.     @Override
  125.     public void keyPressed(KeyEvent e) {
  126.         //если не нажата клавиша
  127.         if (!isKeyPressed) {
  128.             isKeyPressed = true;
  129.             //проверяем случаи состояния игры
  130.             switch (gameState) {
  131.                 case START_GAME_STATE: //в случае старта игры
  132.                     if (e.getKeyCode() == KeyEvent.VK_SPACE) {  //если нажат пробел
  133.                         gameState = GAME_PLAYING_STATE;  //то запускаем игру(меняем состояние игры)
  134.                     }
  135.                     break;
  136.                 case GAME_PLAYING_STATE:  //в случае работы игры
  137.                     if (e.getKeyCode() == KeyEvent.VK_SPACE) { //если нажат пробел
  138.                         mainCharacter.jump();  //то игрок прыгает
  139.                     } else if (e.getKeyCode() == KeyEvent.VK_DOWN) { //иначе если нажата стрелка вниз
  140.                         mainCharacter.down(true); //то игрок приседает
  141.                     }
  142.                     break;
  143.                 case GAME_OVER_STATE:   //в случае смерти
  144.                     if (e.getKeyCode() == KeyEvent.VK_SPACE) {  //если нажат пробел
  145.                         gameState = GAME_PLAYING_STATE;  //то игра начинается заново
  146.                         resetGame();  //обновление игры
  147.                     }
  148.                     break;
  149.             }
  150.         }
  151.     }
  152.  
  153.     @Override
  154.     public void keyReleased(KeyEvent e) {
  155.         isKeyPressed = false;
  156.         if (gameState == GAME_PLAYING_STATE) {
  157.             if (e.getKeyCode() == KeyEvent.VK_DOWN) {
  158.                 mainCharacter.down(false);
  159.             }
  160.         }
  161.     }
  162.  
  163.     @Override
  164.     public void keyTyped(KeyEvent e) {
  165.         // TODO Auto-generated method stub
  166.  
  167.     }
  168.  
  169.     //обновление игры
  170.     private void resetGame() {
  171.         //обновление всех врагов
  172.         enemiesManager.reset();
  173.         //возрождение игрока
  174.         mainCharacter.dead(false);
  175.         //обновление игрока
  176.         mainCharacter.reset();
  177.     }
  178.  
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement