From 287f36697282769c87727552c584375dacfae9fe Mon Sep 17 00:00:00 2001 From: Furkan Mudanyali Date: Wed, 22 Dec 2021 15:13:13 +0300 Subject: [PATCH] Initial bullet implementation --- assets/player/bullet.bmp | Bin 0 -> 378 bytes .../com/fmudanyali/bullets/PlayerBullet.java | 48 +++++++++++++++++ .../com/fmudanyali/characters/Player.java | 51 +++++++++++------- src/main/java/com/fmudanyali/scenes/Game.java | 19 ++++++- 4 files changed, 97 insertions(+), 21 deletions(-) create mode 100644 assets/player/bullet.bmp create mode 100644 src/main/java/com/fmudanyali/bullets/PlayerBullet.java diff --git a/assets/player/bullet.bmp b/assets/player/bullet.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e8e1b46ca74d278e2d7d2a2cf58fc22fb1d4790a GIT binary patch literal 378 zcmZ?rtzu*VgDxOh1H`OA%mc)X37m^AK`;wAQKAyGcZ69i2vWoJ*XHaLoCgN wrtts&{|q4P>^uobLD(?. + */ + +package com.fmudanyali.bullets; + +import com.fmudanyali.FileLoader; +import com.fmudanyali.Render; +import com.fmudanyali.Time; + +import org.libsdl.api.rect.SDL_Rect; +import org.libsdl.api.render.SDL_Texture; +import org.libsdl.api.surface.SDL_Surface; + +import static org.libsdl.api.surface.SdlSurface.*; +import static org.libsdl.api.render.SdlRender.*; + +public class PlayerBullet { + public static SDL_Surface tempSurface = SDL_LoadBMP(FileLoader.getFilePath("player/bullet.bmp")); + public static SDL_Texture texture = SDL_CreateTextureFromSurface(Render.renderer, tempSurface); + public SDL_Rect position = new SDL_Rect(); + public int width = 5; + public int height = 12; + + public PlayerBullet(SDL_Rect playerPos, int xOffset, int yOffset){ + position.w = width; + position.h = height; + position.x = Math.min(Math.max(playerPos.x + xOffset, 300), 628 + 27); + position.y = playerPos.y - 6 - 3 - yOffset; + } + + public void fly(){ + position.y = position.y - (int)(Time.deltaTime * 0.5); + } +} \ No newline at end of file diff --git a/src/main/java/com/fmudanyali/characters/Player.java b/src/main/java/com/fmudanyali/characters/Player.java index bdd1592..2cf64c5 100644 --- a/src/main/java/com/fmudanyali/characters/Player.java +++ b/src/main/java/com/fmudanyali/characters/Player.java @@ -22,6 +22,8 @@ import com.fmudanyali.Render; import com.fmudanyali.Screen; import com.fmudanyali.Keyboard; import com.fmudanyali.Time; +import com.fmudanyali.bullets.PlayerBullet; +import com.fmudanyali.scenes.Game; import org.libsdl.api.rect.SDL_Rect; import org.libsdl.api.render.SDL_Texture; @@ -37,6 +39,7 @@ public class Player extends Character { public SDL_Texture shooter; public int frame = 0; public int roll = 0; + public int cooldown = 0; public SDL_Rect propellerPos = new SDL_Rect(); public SDL_Rect shooterPos = new SDL_Rect(); @@ -167,21 +170,12 @@ public class Player extends Character { if(roll > 0){ shipFrame.x = shipFrame.y = 0; - } if(roll > 8){ - shipFrame.x = 32; } if(roll > 15){ - shipFrame.x = 0; - shipFrame.y = 32; - } if(roll > 23){ shipFrame.x = 32; } if(roll > 30){ - shipFrame.x = shipFrame.y = 0; - } if(roll > 38){ - shipFrame.x = 32; - } if(roll > 45){ shipFrame.x = 0; shipFrame.y = 32; - } if (roll > 53){ + } if(roll > 45){ shipFrame.x = 32; } @@ -192,20 +186,20 @@ public class Player extends Character { if(Keyboard.getKeyState(SDL_SCANCODE_LSHIFT)){ speed = 1.5; }else{ - speed = 3; + speed = 2; } if(Keyboard.getKeyState(SDL_SCANCODE_A) | Keyboard.getKeyState(SDL_SCANCODE_LEFT)){ - position.x = Math.max(position.x - (int)(speed * Time.deltaTime * 0.1), Screen.canvasPos.x); - shooterPos.x = Math.max(shooterPos.x - (int)(speed * Time.deltaTime * 0.1), Screen.canvasPos.x + 16 - 4); - propellerPos.x = Math.max(propellerPos.x - (int)(speed * Time.deltaTime * 0.1), Screen.canvasPos.x + 16 - 5); - roll = Math.floorMod(roll + (int)(Time.deltaTime * 0.1),60); + position.x = Math.max(position.x - (int)(speed * Time.deltaTime * 0.1), Screen.canvasPos.x - 5); + shooterPos.x = Math.max(shooterPos.x - (int)(speed * Time.deltaTime * 0.1), Screen.canvasPos.x + 16 - 4 - 5); + propellerPos.x = Math.max(propellerPos.x - (int)(speed * Time.deltaTime * 0.1), Screen.canvasPos.x + 16 - 5 - 5); + roll = Math.floorMod(roll + (int)(speed * Time.deltaTime * 0.1),60); } if(Keyboard.getKeyState(SDL_SCANCODE_D) | Keyboard.getKeyState(SDL_SCANCODE_RIGHT)){ - position.x = Math.min(position.x + (int)(speed * Time.deltaTime * 0.1), Screen.canvasPos.x + Screen.canvas.w - 32); - shooterPos.x = Math.min(shooterPos.x + (int)(speed * Time.deltaTime * 0.1), Screen.canvasPos.x + Screen.canvas.w - 16 - 4); - propellerPos.x = Math.min(propellerPos.x + (int)(speed * Time.deltaTime * 0.1), Screen.canvasPos.x + Screen.canvas.w - 16 - 5); - roll = Math.floorMod(roll - (int)(Time.deltaTime * 0.1),60); + position.x = Math.min(position.x + (int)(speed * Time.deltaTime * 0.1), Screen.canvasPos.x + Screen.canvas.w - 27); + shooterPos.x = Math.min(shooterPos.x + (int)(speed * Time.deltaTime * 0.1), Screen.canvasPos.x + Screen.canvas.w - 16 - 4 + 5); + propellerPos.x = Math.min(propellerPos.x + (int)(speed * Time.deltaTime * 0.1), Screen.canvasPos.x + Screen.canvas.w - 16 - 5 + 5); + roll = Math.floorMod(roll - (int)(speed * Time.deltaTime * 0.1),60); } if(Keyboard.getKeyState(SDL_SCANCODE_W) | Keyboard.getKeyState(SDL_SCANCODE_UP)){ position.y = Math.max(position.y - (int)(speed * Time.deltaTime * 0.1), Screen.canvasPos.y + 6); @@ -217,5 +211,24 @@ public class Player extends Character { shooterPos.y = Math.min(shooterPos.y + (int)(speed * Time.deltaTime * 0.1), Screen.canvasPos.y + Screen.canvas.h - 32 - 8); propellerPos.y = Math.min(propellerPos.y + (int)(speed * Time.deltaTime * 0.1), Screen.canvasPos.y + Screen.canvas.h - 8); } + if(Keyboard.getKeyState(SDL_SCANCODE_SPACE) && cooldown == 0 && !Keyboard.getKeyState(SDL_SCANCODE_LSHIFT)){ + Game.playerBullets.add(new PlayerBullet(position, -2, 0)); + Game.playerBullets.add(new PlayerBullet(position, 4, 0)); + Game.playerBullets.add(new PlayerBullet(position, 10, 0)); + Game.playerBullets.add(new PlayerBullet(position, 17, 0)); + Game.playerBullets.add(new PlayerBullet(position, 23, 0)); + Game.playerBullets.add(new PlayerBullet(position, 29, 0)); + cooldown = 1; + } + if(Keyboard.getKeyState(SDL_SCANCODE_SPACE) && cooldown == 0 && Keyboard.getKeyState(SDL_SCANCODE_LSHIFT)){ + Game.playerBullets.add(new PlayerBullet(position, 2, 9)); + Game.playerBullets.add(new PlayerBullet(position, 6, 6)); + Game.playerBullets.add(new PlayerBullet(position, 10, 0)); + Game.playerBullets.add(new PlayerBullet(position, 17, 0)); + Game.playerBullets.add(new PlayerBullet(position, 21, 6)); + Game.playerBullets.add(new PlayerBullet(position, 25, 9)); + cooldown = 1; + } + cooldown = Math.max(cooldown -1, 0); } } diff --git a/src/main/java/com/fmudanyali/scenes/Game.java b/src/main/java/com/fmudanyali/scenes/Game.java index 07364c4..f5a68aa 100644 --- a/src/main/java/com/fmudanyali/scenes/Game.java +++ b/src/main/java/com/fmudanyali/scenes/Game.java @@ -18,22 +18,26 @@ package com.fmudanyali.scenes; import com.fmudanyali.FileLoader; -import com.fmudanyali.Render; import com.fmudanyali.Main; import com.fmudanyali.Screen; import com.fmudanyali.characters.Player; +import com.fmudanyali.bullets.PlayerBullet; import static com.fmudanyali.Audio.*; import static org.libsdl.api.event.SdlEvents.*; import static com.fmudanyali.Render.*; import static org.libsdl.api.keycode.SDL_Keycode.*; import static org.libsdl.api.render.SdlRender.*; -import static org.libsdl.api.surface.SdlSurface.*; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; public class Game extends Scene { public static boolean escPressed = false; int kek = 0; private Player player = new Player(); + public static List playerBullets = new ArrayList<>(); private static Thread thread; private static Runnable runnable = new Runnable() { public void run(){ @@ -101,6 +105,17 @@ public class Game extends Scene { SDL_RenderCopy(renderer, player.texture, player.shipFrame, player.position); SDL_RenderCopy(renderer, player.propeller, player.propellerFrame, player.propellerPos); SDL_RenderCopy(renderer, player.shooter, player.shooterFrame, player.shooterPos); + + for(Iterator bulletIterator = playerBullets.iterator(); bulletIterator.hasNext();){ + PlayerBullet b = bulletIterator.next(); + b.fly(); + if(b.position.y < 30){ + bulletIterator.remove(); + } else { + SDL_RenderCopy(renderer, PlayerBullet.texture, null, b.position); + } + } + SDL_RenderPresent(renderer); player.shiftFrame(); }