Advertisement
fewfw

Untitled

May 31st, 2020
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.91 KB | None | 0 0
  1. package gameobject;
  2.  
  3. import util.Animation;
  4. import util.Resource;
  5.  
  6. import java.applet.Applet;
  7. import java.applet.AudioClip;
  8. import java.awt.*;
  9. import java.awt.image.BufferedImage;
  10. import java.net.MalformedURLException;
  11. import java.net.URL;
  12.  
  13. public class MainCharacter {
  14.     public static final int LAND_POSY = 80;
  15.     public static final float GRAVITY = 0.4f;
  16.  
  17.     private static final int NORMAL_RUN = 0;
  18.     private static final int JUMPING = 1;
  19.     private static final int DOWN_RUN = 2;
  20.     private static final int DEATH = 3;
  21.  
  22.     private float posY;
  23.     private float posX;
  24.     private float speedX;
  25.     private float speedY;
  26.     private Rectangle rectBound;
  27.  
  28.     public int score = 0;
  29.  
  30.     private int state = NORMAL_RUN;
  31.  
  32.     private Animation normalRunAnim;
  33.     private BufferedImage jumping;
  34.     private Animation downRunAnim;
  35.     private BufferedImage deathImage;
  36.  
  37.     private AudioClip jumpSound;
  38.     private AudioClip deadSound;
  39.     private AudioClip scoreUpSound;
  40.  
  41.     public MainCharacter() {
  42.         posX = 50;
  43.         posY = LAND_POSY;
  44.         rectBound = new Rectangle();
  45.         normalRunAnim = new Animation(90);
  46.         normalRunAnim.addFrame(Resource.getResouceImage("data/main-character1.png"));
  47.         normalRunAnim.addFrame(Resource.getResouceImage("data/main-character2.png"));
  48.         jumping = Resource.getResouceImage("data/main-character3.png");
  49.         downRunAnim = new Animation(90);
  50.         downRunAnim.addFrame(Resource.getResouceImage("data/main-character5.png"));
  51.         downRunAnim.addFrame(Resource.getResouceImage("data/main-character6.png"));
  52.         deathImage = Resource.getResouceImage("data/main-character4.png");
  53.  
  54.         try {
  55.             jumpSound =  Applet.newAudioClip(new URL("file","","data/jump.wav"));
  56.             deadSound =  Applet.newAudioClip(new URL("file","","data/dead.wav"));
  57.             scoreUpSound =  Applet.newAudioClip(new URL("file","","data/scoreup.wav"));
  58.         } catch (MalformedURLException e) {
  59.             e.printStackTrace();
  60.         }
  61.     }
  62.  
  63.     public float getSpeedX() {
  64.         return speedX;
  65.     }
  66.  
  67.     public void setSpeedX(int speedX) {
  68.         this.speedX = speedX;
  69.     }
  70.  
  71.     public void draw(Graphics g) {
  72.         switch(state) {
  73.             case NORMAL_RUN:
  74.                 g.drawImage(normalRunAnim.getFrame(), (int) posX, (int) posY, null);
  75.                 break;
  76.             case JUMPING:
  77.                 g.drawImage(jumping, (int) posX, (int) posY, null);
  78.                 break;
  79.             case DOWN_RUN:
  80.                 g.drawImage(downRunAnim.getFrame(), (int) posX, (int) (posY + 20), null);
  81.                 break;
  82.             case DEATH:
  83.                 g.drawImage(deathImage, (int) posX, (int) posY, null);
  84.                 break;
  85.         }
  86. //      Rectangle bound = getBound();
  87. //      g.setColor(Color.RED);
  88. //      g.drawRect(bound.x, bound.y, bound.width, bound.height);
  89.     }
  90.  
  91.     public void update() {
  92.         normalRunAnim.updateFrame();
  93.         downRunAnim.updateFrame();
  94.         if(posY >= LAND_POSY) {
  95.             posY = LAND_POSY;
  96.             if(state != DOWN_RUN) {
  97.                 state = NORMAL_RUN;
  98.             }
  99.         } else {
  100.             speedY += GRAVITY;
  101.             posY += speedY;
  102.         }
  103.     }
  104.  
  105.     //прыжок
  106.     public void jump() {
  107.         //если координата y больше координаты y земли
  108.         if(posY >= LAND_POSY) {
  109.             //если звук прыжка не равен null
  110.             if(jumpSound != null) {
  111.                 //проигрываем звук прыжка
  112.                 jumpSound.play();
  113.             }
  114.             //устанавливаем скорость
  115.             speedY = -7.5f;
  116.             //изменяем позицию игрока через скорость
  117.             posY += speedY;
  118.             //состояние игрока - в прыжке
  119.             state = JUMPING;
  120.         }
  121.     }
  122.  
  123.     //приседание
  124.     public void down(boolean isDown) {
  125.         //если игрок находится в прыжке
  126.         if(state == JUMPING) {
  127.             //выходим из метода
  128.             return;
  129.         }
  130.         //если игрок присел
  131.         if(isDown) {
  132.             //состояние игрока - бег в присяди
  133.             state = DOWN_RUN;
  134.         }
  135.         //иначе
  136.         else {
  137.             //состояние  игрока - обычное передвижение
  138.             state = NORMAL_RUN;
  139.         }
  140.     }
  141.  
  142.     public Rectangle getBound() {
  143.         rectBound = new Rectangle();
  144.         if(state == DOWN_RUN) {
  145.             rectBound.x = (int) posX + 5;
  146.             rectBound.y = (int) posY + 20;
  147.             rectBound.width = downRunAnim.getFrame().getWidth() - 10;
  148.             rectBound.height = downRunAnim.getFrame().getHeight();
  149.         } else {
  150.             rectBound.x = (int) posX + 5;
  151.             rectBound.y = (int) posY;
  152.             rectBound.width = normalRunAnim.getFrame().getWidth() - 10;
  153.             rectBound.height = normalRunAnim.getFrame().getHeight();
  154.         }
  155.         return rectBound;
  156.     }
  157.  
  158.     //смерть
  159.     public void dead(boolean isDeath) {
  160.         //если мертв
  161.         if(isDeath) {
  162.             //состояние игрока - смерть
  163.             state = DEATH;
  164.         }
  165.         //иначе
  166.         else {
  167.             //состояние игрока - обычный бег
  168.             state = NORMAL_RUN;
  169.         }
  170.     }
  171.  
  172.     //обновление игрока
  173.     public void reset() {
  174.         //присваиваем координату y земли координате y игроку
  175.         posY = LAND_POSY;
  176.     }
  177.  
  178.     public void playDeadSound() {
  179.         deadSound.play();
  180.     }
  181.  
  182.     public void upScore() {
  183.         score += 20;
  184.         if(score % 100 == 0) {
  185.             scoreUpSound.play();
  186.         }
  187.     }
  188.  
  189. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement