added a nice rocket animation + optimizations

This commit is contained in:
Martin Dvořák 2026-10-19 22:48:28 +02:00
commit 7fe2bd30b1

View file

@ -27,7 +27,7 @@ public class Game extends JPanel implements ActionListener, KeyListener {
private final Timer timer = new Timer(16, this); // 60 FPS private final Timer timer = new Timer(16, this); // 60 FPS
private Font caveat; private Font caveat;
private Font titleCaveat;
private int level = 1; private int level = 1;
private boolean levelProgress = false; // this is used to make the transition from the main menu to the game level look cool private boolean levelProgress = false; // this is used to make the transition from the main menu to the game level look cool
private int fadeAnimation = 0; private int fadeAnimation = 0;
@ -36,11 +36,11 @@ public class Game extends JPanel implements ActionListener, KeyListener {
private BufferedImage planetZX311; private BufferedImage planetZX311;
private BufferedImage planetZX311H; private BufferedImage planetZX311H;
private int planetYOffset = 0; private int hoverYOffset = 0;
private String planetYOffsetDirection = "up"; // this makes the cool floating animation on the main menu private String hoverDirection = "up"; // this makes the cool floating animation on the main menu
private int planetX = 450; private int planetX = 450;
private int planetYPre = 140; private int planetYPre = 140;
private int planetY = planetYPre + planetYOffset /6; private int planetY = planetYPre + hoverYOffset /6;
private int planetSize = 128*3; private int planetSize = 128*3;
private Rectangle planetCollision = new Rectangle(planetX, planetY, planetSize, planetSize); private Rectangle planetCollision = new Rectangle(planetX, planetY, planetSize, planetSize);
private boolean hoveringOverPlanet = false; private boolean hoveringOverPlanet = false;
@ -58,6 +58,9 @@ public class Game extends JPanel implements ActionListener, KeyListener {
private boolean hoveringOverPlayButton = false; private boolean hoveringOverPlayButton = false;
private boolean hoveringOverQuitButton = false; private boolean hoveringOverQuitButton = false;
private BufferedImage rocket;
private int rocketYPre = windowHeight/2-125;
private int rocketY = windowHeight/2-125;
public Game() { public Game() {
// sets the window size // sets the window size
setPreferredSize(new Dimension(windowWidth,windowHeight)); setPreferredSize(new Dimension(windowWidth,windowHeight));
@ -70,6 +73,7 @@ public class Game extends JPanel implements ActionListener, KeyListener {
// loads up the fonts // loads up the fonts
try { try {
caveat = Font.createFont(Font.TRUETYPE_FONT, new File("assets/CaveatBrush-Regular.ttf")); caveat = Font.createFont(Font.TRUETYPE_FONT, new File("assets/CaveatBrush-Regular.ttf"));
titleCaveat = caveat.deriveFont(Font.BOLD, 100f);
} catch (FontFormatException | IOException e) { } catch (FontFormatException | IOException e) {
e.printStackTrace(); e.printStackTrace();
caveat = new Font("Arial", Font.PLAIN, 12); caveat = new Font("Arial", Font.PLAIN, 12);
@ -80,6 +84,7 @@ public class Game extends JPanel implements ActionListener, KeyListener {
planetZX311H = ImageIO.read(new File("assets/planet-ZX311_highlighted.png")); planetZX311H = ImageIO.read(new File("assets/planet-ZX311_highlighted.png"));
button = ImageIO.read(new File("assets/button.png")); button = ImageIO.read(new File("assets/button.png"));
buttonH = ImageIO.read(new File("assets/button_highlighted.png")); buttonH = ImageIO.read(new File("assets/button_highlighted.png"));
rocket = ImageIO.read(new File("assets/rocket.png"));
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -96,21 +101,25 @@ public class Game extends JPanel implements ActionListener, KeyListener {
@Override @Override
public void actionPerformed(ActionEvent e) { // update step public void actionPerformed(ActionEvent e) { // update step
Random rand = new Random();
starSize = rand.nextInt(2,4);
hoveringOverPlanet = planetCollision.contains(mouseX, mouseY); hoveringOverPlanet = planetCollision.contains(mouseX, mouseY);
hoveringOverPlayButton = playButtonCollision.contains(mouseX, mouseY); hoveringOverPlayButton = playButtonCollision.contains(mouseX, mouseY);
hoveringOverQuitButton = quitButtonCollision.contains(mouseX, mouseY); hoveringOverQuitButton = quitButtonCollision.contains(mouseX, mouseY);
if (planetYOffsetDirection == "up") { if (hoverDirection == "up") {
planetYOffset++; hoverYOffset++;
if (planetYOffset > 90) { if (hoverYOffset > 90) {
planetYOffsetDirection = "down"; hoverDirection = "down";
} }
} else { } else {
planetYOffset--; hoverYOffset--;
if (planetYOffset <= 0) { if (hoverYOffset <= 0) {
planetYOffsetDirection = "up"; hoverDirection = "up";
} }
} }
planetY = planetYPre + planetYOffset /6; if (level == 1) { planetY = planetYPre + hoverYOffset /6; }
if (level == 2) {rocketY = rocketYPre + hoverYOffset /6; }
repaint(); // triggers render repaint(); // triggers render
} }
@ -119,14 +128,12 @@ public class Game extends JPanel implements ActionListener, KeyListener {
super.paintComponent(g); // this clears the previous frame super.paintComponent(g); // this clears the previous frame
if (level == 1) { if (level == 1) {
g.setColor(Color.WHITE); g.setColor(Color.WHITE);
Random rand = new Random();
for (int i = 0; i < MENU_STAR_COUNT; i++) { // drawing the stars for (int i = 0; i < MENU_STAR_COUNT; i++) { // drawing the stars
starSize = rand.nextInt(1,3);
g.fillOval(starX[i]-starSize, starY[i]-starSize, starSize, starSize); g.fillOval(starX[i]-starSize, starY[i]-starSize, starSize, starSize);
} }
g.setColor(Color.GRAY); g.setColor(Color.GRAY);
g.setFont(caveat.deriveFont(Font.BOLD, 100f)); g.setFont(titleCaveat);
g.drawString("Very Cool Space Sim", 72, 100); g.drawString("Very Cool Space Sim", 72, 100);
if (planetZX311 != null) { if (planetZX311 != null) {
@ -171,19 +178,19 @@ public class Game extends JPanel implements ActionListener, KeyListener {
} }
if (level == 2) { if (level == 2) {
g.setColor(Color.WHITE); g.setColor(Color.WHITE);
Random rand = new Random();
for (int i = 0; i < MENU_STAR_COUNT; i++) { // drawing the stars for (int i = 0; i < MENU_STAR_COUNT; i++) { // drawing the stars
starSize = rand.nextInt(1,8);
g.fillOval(starX[i]-starSize, starY[i]-starSize, starSize, starSize); g.fillOval(starX[i]-starSize, starY[i]-starSize, starSize, starSize);
} }
g.drawImage(rocket, windowWidth/2-73, rocketY, 147, 234, this);
if (levelProgress) { if (levelProgress) {
g.setColor(Color.BLACK); g.setColor(Color.BLACK);
g.fillRect(windowWidth-fadeAnimation, 0, windowWidth, windowHeight); g.fillRect(windowWidth-fadeAnimation, 0, windowWidth, windowHeight);
fadeAnimation += 20; fadeAnimation += 20;
} }
} }
Toolkit.getDefaultToolkit().sync();
} }
@Override @Override