Finalize refactoring
This commit is contained in:
parent
a7d68e5ef6
commit
08bca1c0db
@ -7,7 +7,6 @@
|
|||||||
|
|
||||||
package com.example.flappybird;
|
package com.example.flappybird;
|
||||||
|
|
||||||
import com.example.flappybird.states.GameState;
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.geom.AffineTransform;
|
import java.awt.geom.AffineTransform;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
@ -33,6 +32,7 @@ public class Bird extends HasPosition {
|
|||||||
// Bird sprites
|
// Bird sprites
|
||||||
private final BufferedImage[] sprites;
|
private final BufferedImage[] sprites;
|
||||||
|
|
||||||
|
// Track current frame
|
||||||
private static double currentFrame = 0;
|
private static double currentFrame = 0;
|
||||||
|
|
||||||
public Bird (int x, int y) {
|
public Bird (int x, int y) {
|
||||||
@ -150,7 +150,6 @@ public class Bird extends HasPosition {
|
|||||||
|
|
||||||
// Create bird animation and pass in rotation angle
|
// Create bird animation and pass in rotation angle
|
||||||
animateBird(g, rotation);
|
animateBird(g, rotation);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void animateBird(Graphics g, double angle) {
|
private void animateBird(Graphics g, double angle) {
|
||||||
@ -173,7 +172,9 @@ public class Bird extends HasPosition {
|
|||||||
// Switch animation frames
|
// Switch animation frames
|
||||||
if (currentFrame >= count - 1) {
|
if (currentFrame >= count - 1) {
|
||||||
currentFrame = 0;
|
currentFrame = 0;
|
||||||
} else currentFrame += 0.09;
|
}
|
||||||
|
else {
|
||||||
|
currentFrame += 0.09;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -45,18 +45,21 @@ public class FlappyBird implements ActionListener {
|
|||||||
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
frame.setSize(WIDTH, HEIGHT);
|
frame.setSize(WIDTH, HEIGHT);
|
||||||
|
|
||||||
|
String fontPath = "/res/fonts/flappy-font.ttf";
|
||||||
|
|
||||||
// Try to load ttf file
|
// Try to load ttf file
|
||||||
try {
|
try {
|
||||||
InputStream is = new BufferedInputStream(this.getClass().getResourceAsStream("/res/fonts/flappy-font.ttf"));
|
InputStream fontStream = this.getClass().getResourceAsStream(fontPath);
|
||||||
|
assert fontStream != null;
|
||||||
|
|
||||||
|
InputStream is = new BufferedInputStream(fontStream);
|
||||||
flappyFontBase = Font.createFont(Font.TRUETYPE_FONT, is);
|
flappyFontBase = Font.createFont(Font.TRUETYPE_FONT, is);
|
||||||
|
|
||||||
// Header and sub-header fonts
|
// Header and sub-header fonts
|
||||||
flappyScoreFont = flappyFontBase.deriveFont(Font.PLAIN, 50);
|
flappyScoreFont = flappyFontBase.deriveFont(Font.PLAIN, 50);
|
||||||
flappyFontReal = flappyFontBase.deriveFont(Font.PLAIN, 20);
|
flappyFontReal = flappyFontBase.deriveFont(Font.PLAIN, 20);
|
||||||
flappyMiniFont = flappyFontBase.deriveFont(Font.PLAIN, 15);
|
flappyMiniFont = flappyFontBase.deriveFont(Font.PLAIN, 15);
|
||||||
|
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
|
|
||||||
// Exit is font cannot be loaded
|
// Exit is font cannot be loaded
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
System.err.println("Could not load Flappy Font!");
|
System.err.println("Could not load Flappy Font!");
|
||||||
|
@ -78,10 +78,6 @@ public class GamePanel extends JPanel implements KeyListener, MouseListener {
|
|||||||
// Mouse actions //
|
// Mouse actions //
|
||||||
///////////////////
|
///////////////////
|
||||||
|
|
||||||
public Point getClickedPoint() {
|
|
||||||
return clickedPoint;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if point is in rectangle
|
* Checks if point is in rectangle
|
||||||
*
|
*
|
||||||
|
@ -14,8 +14,14 @@ public class Pipe extends HasPosition {
|
|||||||
// Pipe constants
|
// Pipe constants
|
||||||
public static final int WIDTH = 67;
|
public static final int WIDTH = 67;
|
||||||
public static final int HEIGHT = 416;
|
public static final int HEIGHT = 416;
|
||||||
public static final int PIPE_DISTANCE = 150; // Horizontal distance between pipes
|
|
||||||
public static final int PIPE_SPACING = HEIGHT + 170; // Vertical distance between pipes
|
// Horizontal distance between pipes
|
||||||
|
public static final int PIPE_DISTANCE = 150;
|
||||||
|
|
||||||
|
// Vertical distance between pipes
|
||||||
|
public static final int PIPE_SPACING = HEIGHT + 200;
|
||||||
|
|
||||||
|
// Speed of the bird.
|
||||||
private static final int SPEED = -2;
|
private static final int SPEED = -2;
|
||||||
|
|
||||||
// If the bird can get a point passing this pipe
|
// If the bird can get a point passing this pipe
|
||||||
|
@ -16,7 +16,6 @@ public class Texture extends HasPosition {
|
|||||||
private final BufferedImage image;
|
private final BufferedImage image;
|
||||||
private final Rectangle rect;
|
private final Rectangle rect;
|
||||||
|
|
||||||
|
|
||||||
public Texture (BufferedImage image, int x, int y) {
|
public Texture (BufferedImage image, int x, int y) {
|
||||||
super(x, y);
|
super(x, y);
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@ public abstract class GameState {
|
|||||||
// Game variables //
|
// Game variables //
|
||||||
////////////////////
|
////////////////////
|
||||||
|
|
||||||
|
// Background
|
||||||
protected static final int[] baseCoords = { 0, 435 };
|
protected static final int[] baseCoords = { 0, 435 };
|
||||||
|
|
||||||
// Player score
|
// Player score
|
||||||
@ -31,8 +32,10 @@ public abstract class GameState {
|
|||||||
// Arraylist of Pipe objects
|
// Arraylist of Pipe objects
|
||||||
public static ArrayList<Pipe> pipes;
|
public static ArrayList<Pipe> pipes;
|
||||||
|
|
||||||
|
// Game bird
|
||||||
protected static Bird gameBird;
|
protected static Bird gameBird;
|
||||||
|
|
||||||
|
// Game panel
|
||||||
public GamePanel gamePanel;
|
public GamePanel gamePanel;
|
||||||
|
|
||||||
public GameState(GamePanel panel) {
|
public GameState(GamePanel panel) {
|
||||||
@ -63,13 +66,11 @@ public abstract class GameState {
|
|||||||
|
|
||||||
// Only move screen if bird is alive
|
// Only move screen if bird is alive
|
||||||
if (gameBird.isAlive()) {
|
if (gameBird.isAlive()) {
|
||||||
|
|
||||||
// Move base
|
// Move base
|
||||||
// Moving base effect
|
// Moving base effect
|
||||||
int baseSpeed = 2;
|
int baseSpeed = 2;
|
||||||
baseCoords[0] = baseCoords[0] - baseSpeed < -435 ? 435 : baseCoords[0] - baseSpeed;
|
baseCoords[0] = baseCoords[0] - baseSpeed < -435 ? 435 : baseCoords[0] - baseSpeed;
|
||||||
baseCoords[1] = baseCoords[1] - baseSpeed < -435 ? 435 : baseCoords[1] - baseSpeed;
|
baseCoords[1] = baseCoords[1] - baseSpeed < -435 ? 435 : baseCoords[1] - baseSpeed;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Background
|
// Background
|
||||||
@ -96,4 +97,3 @@ public abstract class GameState {
|
|||||||
public abstract void handleKeyboardEvent(KeyEvent e);
|
public abstract void handleKeyboardEvent(KeyEvent e);
|
||||||
public abstract void handleMouseEvent(MouseEvent e);
|
public abstract void handleMouseEvent(MouseEvent e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -142,7 +142,6 @@ public class PlayState extends GameState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Move and draw each pipe
|
// Move and draw each pipe
|
||||||
|
|
||||||
for (Pipe p : pipes) {
|
for (Pipe p : pipes) {
|
||||||
|
|
||||||
// Move the pipe
|
// Move the pipe
|
||||||
|
BIN
refactoring/flappy-bird/uml/class-diagram.png
Normal file
BIN
refactoring/flappy-bird/uml/class-diagram.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 189 KiB |
133
refactoring/flappy-bird/uml/class-diagram.puml
Normal file
133
refactoring/flappy-bird/uml/class-diagram.puml
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
@startuml
|
||||||
|
|
||||||
|
!theme plain
|
||||||
|
top to bottom direction
|
||||||
|
skinparam linetype ortho
|
||||||
|
|
||||||
|
class Audio {
|
||||||
|
+ Audio():
|
||||||
|
- playSound(String): void
|
||||||
|
+ jump(): void
|
||||||
|
+ point(): void
|
||||||
|
+ hit(): void
|
||||||
|
}
|
||||||
|
class Bird {
|
||||||
|
+ Bird(int, int):
|
||||||
|
- isAlive: boolean
|
||||||
|
+ renderBird(Graphics): void
|
||||||
|
+ jump(): void
|
||||||
|
+ killBird(): void
|
||||||
|
+ menuFloat(): void
|
||||||
|
+ inGameBorders(): void
|
||||||
|
- animateBird(Graphics, double): void
|
||||||
|
+ setGameStartPos(): void
|
||||||
|
isAlive: boolean
|
||||||
|
}
|
||||||
|
class FlappyBird {
|
||||||
|
+ FlappyBird():
|
||||||
|
+ actionPerformed(ActionEvent): void
|
||||||
|
+ main(String[]): void
|
||||||
|
}
|
||||||
|
class GamePanel {
|
||||||
|
+ GamePanel():
|
||||||
|
- gameState: GameState
|
||||||
|
# clickedPoint: Point
|
||||||
|
+ keyReleased(KeyEvent): void
|
||||||
|
+ mouseEntered(MouseEvent): void
|
||||||
|
+ keyPressed(KeyEvent): void
|
||||||
|
+ mousePressed(MouseEvent): void
|
||||||
|
+ paintComponent(Graphics): void
|
||||||
|
+ keyTyped(KeyEvent): void
|
||||||
|
+ mouseClicked(MouseEvent): void
|
||||||
|
+ mouseReleased(MouseEvent): void
|
||||||
|
+ isTouching(Rectangle): boolean
|
||||||
|
+ addNotify(): void
|
||||||
|
+ mouseExited(MouseEvent): void
|
||||||
|
gameState: GameState
|
||||||
|
clickedPoint: Point
|
||||||
|
}
|
||||||
|
class GameState {
|
||||||
|
+ GameState(GamePanel):
|
||||||
|
+ prepareScreen(Graphics): void
|
||||||
|
+ renderGameState(Graphics): void
|
||||||
|
+ handleMouseEvent(MouseEvent): void
|
||||||
|
+ handleKeyboardEvent(KeyEvent): void
|
||||||
|
+ restart(): void
|
||||||
|
+ drawBase(Graphics): void
|
||||||
|
}
|
||||||
|
class HasPosition {
|
||||||
|
+ HasPosition(int, int):
|
||||||
|
# y: int
|
||||||
|
# x: int
|
||||||
|
y: int
|
||||||
|
x: int
|
||||||
|
}
|
||||||
|
class Highscore {
|
||||||
|
+ Highscore():
|
||||||
|
+ bestScore(): int
|
||||||
|
newBest: int
|
||||||
|
}
|
||||||
|
class MenuState {
|
||||||
|
+ MenuState(GamePanel):
|
||||||
|
+ handleKeyboardEvent(KeyEvent): void
|
||||||
|
# drawMenu(Graphics): void
|
||||||
|
+ drawCentered(String, int, int, int, Graphics): void
|
||||||
|
+ handleMouseEvent(MouseEvent): void
|
||||||
|
+ renderGameState(Graphics): void
|
||||||
|
+ openReviewUrl(): void
|
||||||
|
}
|
||||||
|
class Pipe {
|
||||||
|
+ Pipe(String):
|
||||||
|
+ move(): void
|
||||||
|
+ reset(): void
|
||||||
|
+ collide(Bird): boolean
|
||||||
|
y: int
|
||||||
|
}
|
||||||
|
class PlayState {
|
||||||
|
+ PlayState(GamePanel):
|
||||||
|
+ drawScore(Graphics, int, boolean, int, int): void
|
||||||
|
+ startGameScreen(Graphics): void
|
||||||
|
+ pipeHandler(Graphics): void
|
||||||
|
+ handleMouseEvent(MouseEvent): void
|
||||||
|
+ gameOver(Graphics): void
|
||||||
|
+ renderGameState(Graphics): void
|
||||||
|
+ handleKeyboardEvent(KeyEvent): void
|
||||||
|
}
|
||||||
|
class Sprites {
|
||||||
|
+ Sprites():
|
||||||
|
- putTexture(String, int, int, int, int, int, int): void
|
||||||
|
- resize(BufferedImage): BufferedImage
|
||||||
|
gameTextures: HashMap<String, Texture>
|
||||||
|
}
|
||||||
|
class Texture {
|
||||||
|
+ Texture(BufferedImage, int, int):
|
||||||
|
- image: BufferedImage
|
||||||
|
- rect: Rectangle
|
||||||
|
image: BufferedImage
|
||||||
|
rect: Rectangle
|
||||||
|
}
|
||||||
|
|
||||||
|
Bird -[#000082,plain]-^ HasPosition
|
||||||
|
FlappyBird -[#595959,dashed]-> Audio : "«create»"
|
||||||
|
FlappyBird "1" *-[#595959,plain]-> "audio\n1" Audio
|
||||||
|
FlappyBird -[#595959,dashed]-> GamePanel : "«create»"
|
||||||
|
FlappyBird "1" *-[#595959,plain]-> "game\n1" GamePanel
|
||||||
|
FlappyBird -[#595959,dashed]-> Sprites : "«create»"
|
||||||
|
FlappyBird "1" *-[#595959,plain]-> "textures\n*" Texture
|
||||||
|
GamePanel "1" *-[#595959,plain]-> "gameState\n1" GameState
|
||||||
|
GamePanel -[#595959,dashed]-> MenuState : "«create»"
|
||||||
|
GameState -[#595959,dashed]-> Bird : "«create»"
|
||||||
|
GameState "1" *-[#595959,plain]-> "gameBird\n1" Bird
|
||||||
|
GameState "1" *-[#595959,plain]-> "gamePanel\n1" GamePanel
|
||||||
|
GameState "1" *-[#595959,plain]-> "pipes\n*" Pipe
|
||||||
|
MenuState -[#000082,plain]-^ GameState
|
||||||
|
MenuState -[#595959,dashed]-> PlayState : "«create»"
|
||||||
|
Pipe -[#000082,plain]-^ HasPosition
|
||||||
|
PlayState -[#000082,plain]-^ GameState
|
||||||
|
PlayState -[#595959,dashed]-> Highscore : "«create»"
|
||||||
|
PlayState "1" *-[#595959,plain]-> "highscore\n1" Highscore
|
||||||
|
PlayState -[#595959,dashed]-> Pipe : "«create»"
|
||||||
|
Sprites "1" *-[#595959,plain]-> "textures\n*" Texture
|
||||||
|
Sprites -[#595959,dashed]-> Texture : "«create»"
|
||||||
|
Texture -[#000082,plain]-^ HasPosition
|
||||||
|
@enduml
|
Loading…
Reference in New Issue
Block a user