@startuml
class ShadowFlap {
	- WIDTH: int
	- HEIGHT: int
	- LEVEL0_MAX_SCORE: int
	- LEVEL1_MAX_SCORE: int
	- background: Image
	- font: Font
	- pipes: Queue<Pipe>
	- bird: Bird
	- win: boolean
	- lose: boolean
	- levelUp: boolean
	- levelUpCounter: int
	- score: int
	- pipeSpawningCounter: int
	- started: boolean
	- birdPassPipe: boolean

	+ ShadowFlap()

	- update()
	+ main(args: String[]) {static}
}

class Pipe {
    - GAP: int {static}
    - STEP_SIZE: int
	- image: Image
	- upright: boolean
	- x: double
	- y: double
	- passedByBird: boolean

	+ Pipe(upright: boolean, height: double, type: int)

	+ getRandomPos(): double {static}
	+ draw()
	+ move()
	+ isOutOfBound(): boolean
	+ getImage(): Image
	+ getX(): double
	+ setPassedByBird(b: boolean)
	+ getPassedByBird(): boolean
	+ getRect(): Rectangle
}

class Bird {
	- birdWingUp: Image
	- birdWingdown: Image
	- x: double
	- y: double
	- image: Image
	- wingcounter: int
	- speed: double

	+ getX(): double
	+ draw()
	+ fall()
	+ fly()
	+ move()
	+ isOutOfBound(): boolean
	+ collideWith(pipe: Pipe): boolean
	+ loseLife()
	+ getRect(): Rectangle
}

abstract class Weapon {

}

ShadowFlap ..> Bird
ShadowFlap ..> Pipe
Bird ..> ShadowFlap
Pipe ..> ShadowFlap
Bird ..> Pipe
Pipe "2" <--* "1" ShadowFlap
Bird "1" <--* "1" ShadowFlap
@enduml
