package Ġme . sem oro . t ako Ċ Ċ import Ġcom . badlogic . gdx . G dx Ċ import Ġcom . badlogic . gdx . Input Ċ import Ġcom . badlogic . gdx . Screen Adapter Ċ import Ġcom . badlogic . gdx . audio . Sound Ċ import Ġcom . badlogic . gdx . graphics . Color Ċ import Ġcom . badlogic . gdx . graphics . Or tho graphic Camera Ċ import Ġcom . badlogic . gdx . graphics . Texture Ċ import Ġcom . badlogic . gdx . graphics . g 2 d . Sprite Batch Ċ import Ġcom . badlogic . gdx . math . Vector 2 Ċ import Ġcom . badlogic . gdx . math . Vector 3 Ċ import Ġcom . badlogic . gdx . utils . Screen Utils Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . max Ċ import Ġkotlin . random . Random ĊĊ Ċ val Ġlevel Ġ= Ġ""" ĊĠĠĠ Ġ ################ ## ĊĠĠĠ Ġ# ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ# ĊĠĠĠ Ġ# Ġ######## # Ġ# Ġ Ġ# Ġ# ĊĠĠĠ Ġ# ĠĠĠĠĠĠĠĠĠĠ Ġ# Ġ Ġ# Ġ# ĊĠĠĠ Ġ# Ġ ###### Ġ##### Ġ# Ġ# ĊĠĠĠ Ġ# Ġ# M ĠĠĠĠ Ġ# ĠM ĠĠ Ġ# Ġ# ĊĠĠĠ Ġ# Ġ# Ġ#### Ġ# Ġ Ġ#### Ġ# ĊĠĠĠ Ġ# Ġ# Ġ# Ġ Ġ# ĠĠĠĠĠĠĠĠ Ġ# ĊĠĠĠ Ġ# Ġ# ĠĠĠĠĠĠ Ġ# Ġ# Ġ#### ĊĠĠĠ Ġ# Ġ#### Ġ#### Ġ# ĠĠĠ Ġ# ĊĠĠĠ Ġ# T ĠĠĠĠĠĠĠĠĠ Ġ# Ġ# Ġ Ġ# ĊĠĠĠ Ġ######## ### Ġ# Ġ#### ĊĠĠĠ Ġ# M ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ# ĊĠĠĠ Ġ ################ ## Ċ """. trim Indent () ĊĊĊ Ċ data Ġclass ĠWall Block ( ĊĠĠĠ Ġval Ġx : ĠFloat , Ġval Ġy : ĠFloat , ĊĠĠĠ Ġval Ġsize : ĠFloat Ċ ) ĊĊ Ċ data Ġclass ĠAnimated ( ĊĠĠĠ Ġvar Ġx : ĠFloat , Ġvar Ġy : ĠFloat , ĊĠĠĠ Ġvar Ġtx : ĠFloat , Ġvar Ġty : ĠFloat , ĊĠĠĠ Ġvar Ġt State : ĠFloat Ċ ) Ċ Ċ data Ġclass ĠM ume ii ( ĊĠĠĠ Ġval Ġanimated : ĠAnimated , ĊĠĠĠ Ġvar Ġdir : ĠMotion Direction Ċ ) Ċ Ċ data Ġclass ĠCookie ( ĊĠĠĠ Ġvar Ġx : ĠFloat , Ġvar Ġy : ĠFloat Ċ ) Ċ Ċ data Ġclass ĠT ako ( ĊĠĠĠ Ġval Ġanimated : ĠAnimated , ĊĠĠĠ Ġvar Ġdir : ĠMotion Direction Ċ ) Ċ Ċ data Ġclass ĠCell ( ĊĠĠĠ Ġvar Ġwall : ĠWall Block ? Ġ= Ġnull Ċ ) Ċ Ċ class ĠMap U ( private Ġval Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġinternal Ġ= ĠArray ( width Ġ* Ġheight ) Ġ{ ĠCell () Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġget ( x : ĠFloat , Ġy : ĠFloat ): ĠCell ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinternal . get OrNull ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx . toInt () Ġ+ Ġy . toInt () Ġ* Ġwidth ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ enum Ġclass ĠMotion Direction ( val Ġx : ĠFloat , Ġval Ġy : ĠFloat ) Ġ{ ĊĠĠĠ ĠUP ( 0 f , Ġ 1 f ), ĊĠĠĠ ĠRIGHT ( 1 f , Ġ 0 f ), ĊĠĠĠ ĠDOWN ( 0 f , Ġ- 1 f ), ĊĠĠĠ ĠLEFT (- 1 f , Ġ 0 f ) Ċ } Ċ Ċ class ĠEnd ing Player ( ĊĠĠĠ Ġval Ġtexture : ĠTexture , ĊĠĠĠ Ġval Ġsound : ĠSound , ĊĠĠĠ Ġvar Ġtime Left : ĠFloat Ċ ) Ċ Ċ class ĠT ako Game Screen ( ĊĠĠĠ Ġval Ġgame : ĠT ako Game , ĊĠĠĠ Ġval Ġdifficulty : ĠDiff iculty Ċ ) Ġ: ĠScreen Adapter () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġbatch : ĠSprite Batch ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġbackground : ĠTexture ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġwalls : ĠTexture ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm ume ii : ĠTexture ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġt ako : ĠTexture ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcookie : ĠTexture ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġwin : ĠTexture ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġlose : ĠTexture ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġwin Sound : ĠSound ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġlose Sound : ĠSound ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmusic Ġ= ĠG dx . audio . new Music ( G dx . files . internal (" music . mp 3 ")). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġis Loop ing Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġvolume Ġ= Ġ 0 . 1 f ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġhard Start Sound Ġ= ĠG dx . audio . new Music ( G dx . files . internal (" ina - its - time - for - pain . mp 3 ")) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln ( difficulty ) ĊĠĠĠĠĠĠĠ Ġif Ġ( difficulty Ġ== ĠDiff iculty . T ak od ach i ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhard Start Sound . volume Ġ= Ġ 0 . 3 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhard Start Sound . setOn Completion Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmusic . play () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhard Start Sound . play () ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmusic . play () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlateinit Ġvar Ġcam : ĠOr tho graphic Camera ĊĊĊĠĠĠ Ġprivate Ġfun Ġcheck Collision ( x : ĠFloat , Ġy : ĠFloat ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmap U ! ![ x , Ġy ]?. wall Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġblocks Ġ= Ġmutable ListOf < Wall Block >() ĊĠĠĠ Ġprivate Ġval Ġm ume i is Ġ= Ġmutable ListOf < M ume ii >() ĊĠĠĠ Ġprivate Ġval Ġcookies Ġ= Ġmutable ListOf < Cookie >() ĊĠĠĠ Ġprivate Ġval Ġtak od ach i Ġ= ĠT ako ( Animated ( 0 f , Ġ 0 f , Ġ 0 f , Ġ 0 f , Ġ 0 f ), ĠMotion Direction . UP ) ĊĊĊĊĠĠĠ Ġfun Ġcreate () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwin Ġ= ĠTexture (" win . png ") ĊĠĠĠĠĠĠĠ Ġlose Ġ= ĠTexture (" lose . jpeg ") ĊĊĠĠĠĠĠĠĠ Ġbackground Ġ= ĠTexture (" background . png "). apply Ġ{ Ġset Wrap ( Texture . Texture Wrap . Repeat , ĠTexture . Texture Wrap . Repeat ) Ġ} ĊĠĠĠĠĠĠĠ Ġwalls Ġ= ĠTexture (" wall s . png "). apply Ġ{ Ġset Wrap ( Texture . Texture Wrap . Repeat , ĠTexture . Texture Wrap . Repeat ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġm ume ii Ġ= ĠTexture (" m ume ii . png ") ĊĠĠĠĠĠĠĠ Ġt ako Ġ= ĠTexture (" t ako . png ") ĊĊĠĠĠĠĠĠĠ Ġcookie Ġ= ĠTexture (" cookie . png ") ĊĊĠĠĠĠĠĠĠ Ġwin Sound Ġ= ĠG dx . audio . new Sound ( G dx . files . internal (" ina - w ah - echo . mp 3 ")) ĊĠĠĠĠĠĠĠ Ġlose Sound Ġ= ĠG dx . audio . new Sound ( G dx . files . internal (" lose . mp 3 ")) ĊĊĊĠĠĠĠĠĠĠ Ġbatch Ġ= ĠSprite Batch () ĊĊĠĠĠĠĠĠĠ Ġcam Ġ= ĠOr tho graphic Camera ( G dx . graphics . width . toFloat (), ĠG dx . graphics . height . toFloat ()) ĊĊĠĠĠĠĠĠĠ Ġreset Map () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġvar Ġmap U : ĠMap U ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġreset Map () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġblocks . clear () ĊĠĠĠĠĠĠĠ Ġcookies . clear () ĊĠĠĠĠĠĠĠ Ġm ume i is . clear () ĊĊĠĠĠĠĠĠĠ Ġvar Ġmax X Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmax Y Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġfor Ġ(( y , Ġline ) Ġin Ġlevel . trim (). lines (). with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( x , Ġc ) Ġin Ġline . trim (). with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c Ġ== Ġ'# ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblocks . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWall Block ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġ 5 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c Ġ== Ġ' M ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm ume i is . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM ume ii ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimated ( x . toFloat (), Ġy . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx . toFloat (), Ġy . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Direction . UP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c Ġ== Ġ' T ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtak od ach i . animated . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . x Ġ= Ġx . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . y Ġ= Ġy . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . tx Ġ= Ġthis . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ty Ġ= Ġthis . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c Ġ== Ġ' Ġ' Ġ|| Ġc Ġ== Ġ' M ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcookies Ġ+= ĠCookie ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx . toFloat (), Ġy . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax X Ġ= Ġmax ( max X , Ġx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Y Ġ= Ġmax ( max Y , Ġy ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmap U Ġ= ĠMap U ( max X Ġ+ Ġ 1 , Ġmax Y Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġblocks . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap U ! ![ it . x , Ġit . y ]?. wall Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĊĊĠĠĠ Ġfun Ġrender D Box ( texture : ĠTexture , Ġx : ĠFloat , Ġy : ĠFloat , Ġwidth : ĠFloat , Ġheight : ĠFloat , Ġrot : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġxy 0 Ġ= ĠVector 2 ( x , Ġy ). rotate Deg (- rot ) ĊĠĠĠĠĠĠĠ Ġval Ġxy 1 Ġ= ĠVector 2 ( x , Ġy Ġ+ Ġheight ). rotate Deg (- rot ) ĊĠĠĠĠĠĠĠ Ġval Ġxy 2 Ġ= ĠVector 2 ( x Ġ+ Ġwidth , Ġy Ġ+ Ġheight ). rotate Deg (- rot ) ĊĠĠĠĠĠĠĠ Ġval Ġxy 3 Ġ= ĠVector 2 ( x Ġ+ Ġwidth , Ġy ). rotate Deg (- rot ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġmake UV ( vector 2 : ĠVector 2 ): ĠVector 2 Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġu Ġ= Ġ( G dx . graphics . width Ġ/ Ġ 2 f Ġ+ Ġvector 2 . x ) Ġ/ ĠG dx . graphics . width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġ( G dx . graphics . height Ġ/ Ġ 2 f Ġ+ Ġvector 2 . y ) Ġ/ ĠG dx . graphics . height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠVector 2 ( u , Ġv ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġuv 0 Ġ= Ġmake UV ( xy 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġuv 1 Ġ= Ġmake UV ( xy 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġuv 2 Ġ= Ġmake UV ( xy 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġuv 3 Ġ= Ġmake UV ( xy 3 ) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġvertices Ġ= ĠFloat Array ( 2 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= ĠColor . WHITE _ FLOAT _ BITS ĊĊĠĠĠĠĠĠĠ Ġvertices [ 0 ] Ġ= Ġxy 0 . x ĊĠĠĠĠĠĠĠ Ġvertices [ 1 ] Ġ= Ġxy 0 . y ĊĠĠĠĠĠĠĠ Ġvertices [ 2 ] Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġvertices [ 3 ] Ġ= Ġuv 0 . x ĊĠĠĠĠĠĠĠ Ġvertices [ 4 ] Ġ= Ġuv 0 . y ĊĊĠĠĠĠĠĠĠ Ġvertices [ 5 ] Ġ= Ġxy 1 . x ĊĠĠĠĠĠĠĠ Ġvertices [ 6 ] Ġ= Ġxy 1 . y ĊĠĠĠĠĠĠĠ Ġvertices [ 7 ] Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġvertices [ 8 ] Ġ= Ġuv 1 . x ĊĠĠĠĠĠĠĠ Ġvertices [ 9 ] Ġ= Ġuv 1 . y ĊĊĠĠĠĠĠĠĠ Ġvertices [ 1 0 ] Ġ= Ġxy 2 . x ĊĠĠĠĠĠĠĠ Ġvertices [ 1 1 ] Ġ= Ġxy 2 . y ĊĠĠĠĠĠĠĠ Ġvertices [ 1 2 ] Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġvertices [ 1 3 ] Ġ= Ġuv 2 . x ĊĠĠĠĠĠĠĠ Ġvertices [ 1 4 ] Ġ= Ġuv 2 . y ĊĊĠĠĠĠĠĠĠ Ġvertices [ 1 5 ] Ġ= Ġxy 3 . x ĊĠĠĠĠĠĠĠ Ġvertices [ 1 6 ] Ġ= Ġxy 3 . y ĊĠĠĠĠĠĠĠ Ġvertices [ 1 7 ] Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġvertices [ 1 8 ] Ġ= Ġuv 3 . x ĊĠĠĠĠĠĠĠ Ġvertices [ 1 9 ] Ġ= Ġuv 3 . y ĊĊĊĠĠĠĠĠĠĠ Ġbatch !!. draw ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertices , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġai Act Last Time Ġ= Ġ 0 f ĊĊĠĠĠ Ġval Ġrandom Ġ= ĠRandom ĊĊĠĠĠ Ġval Ġstep Time Ġ= Ġ 0 . 5 f ĊĊĠĠĠ Ġvar Ġending Player : ĠEnd ing Player ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġspin Speed Ġ= Ġwhen ( difficulty ) Ġ{ ĊĠĠĠĠĠĠĠ ĠDiff iculty . Play able Ġ-> Ġ 0 . 0 f ĊĠĠĠĠĠĠĠ ĠDiff iculty . Hard Ġ-> Ġ 0 . 1 f ĊĠĠĠĠĠĠĠ ĠDiff iculty . T ak od ach i Ġ-> Ġ 0 . 6 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprocess Input () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( G dx . input . is Key Pressed ( Input . Keys . UP )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtak od ach i . dir Ġ= ĠMotion Direction . UP ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( G dx . input . is Key Pressed ( Input . Keys . DOWN )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtak od ach i . dir Ġ= ĠMotion Direction . DOWN ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( G dx . input . is Key Pressed ( Input . Keys . LEFT )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtak od ach i . dir Ġ= ĠMotion Direction . LEFT ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( G dx . input . is Key Pressed ( Input . Keys . RIGHT )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtak od ach i . dir Ġ= ĠMotion Direction . RIGHT ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( G dx . input . is Key Pressed ( Input . Keys . ESCAPE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame . screen Ġ= ĠT ako Menu ( game ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġresize ( width : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcam . viewport Width Ġ= Ġwidth . toFloat () ĊĠĠĠĠĠĠĠ Ġcam . viewport Height Ġ= Ġheight . toFloat () ĊĠĠĠĠĠĠĠ Ġcam . update ( true ) ĊĠĠĠĠĠĠĠ Ġsuper . resize ( width , Ġheight ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhide () Ġ{ ĊĠĠĠĠĠĠĠ Ġmusic . stop () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġai Act ( deltaTime : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġai Act Last Time Ġ+= Ġdelta Time ĊĠĠĠĠĠĠĠ Ġif Ġ( ai Act Last Time Ġ>= Ġstep Time ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġai Act Last Time Ġ= Ġ 0 f ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ume i is . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . animated . x Ġ= Ġit . animated . tx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . animated . y Ġ= Ġit . animated . ty ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmove Ġ= Ġit . dir ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdirections Ġ= ĠMotion Direction . values () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġavailable Ġ= Ġmutable ListOf < Motion Direction >() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ- 1 .. 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdir Ġ= Ġdirections [( directions . indexOf ( move ) Ġ+ Ġi Ġ+ Ġ 4 ) Ġ% Ġ 4 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! check Collision ( it . animated . x Ġ+ Ġdir . x , Ġit . animated . y Ġ+ Ġdir . y )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavailable . add ( dir ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove Ġ= Ġif Ġ( available . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirections [( directions . indexOf ( move ) Ġ+ Ġ 2 ) Ġ% Ġ 4 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavailable . random ( random ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . animated . tx Ġ= Ġit . animated . x Ġ+ Ġmove . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . animated . ty Ġ= Ġit . animated . y Ġ+ Ġmove . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . animated . t State Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . dir Ġ= Ġmove ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtak od ach i . let Ġ{ Ġtak od ach i Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtak od ach i . animated . x Ġ= Ġtak od ach i . animated . tx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtak od ach i . animated . y Ġ= Ġtak od ach i . animated . ty ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcookie Ġ= Ġcookies . find Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabs ( it . x Ġ- Ġtak od ach i . animated . x ) Ġ<= Ġ 0 . 1 f Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabs ( it . y Ġ- Ġtak od ach i . animated . y ) Ġ<= Ġ 0 . 1 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cookie Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcookies . remove ( cookie ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cookies . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset Map () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspin Speed Ġ*= Ġ 2 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmusic !!. stop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwin Sound !!. play ( 0 . 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġending Player Ġ= ĠEnd ing Player ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwin !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwin Sound !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm ume ii Ġ= Ġm ume i is . find Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabs ( it . animated . x Ġ- Ġtak od ach i . animated . x ) Ġ<= Ġ 0 . 3 f Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabs ( it . animated . y Ġ- Ġtak od ach i . animated . y ) Ġ<= Ġ 0 . 3 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m ume ii Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset Map () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( difficulty Ġ!= ĠDiff iculty . T ak od ach i ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspin Speed Ġ/= Ġ 2 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmusic !!. stop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlose Sound !!. play ( 0 . 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġending Player Ġ= ĠEnd ing Player ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlose !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlose Sound !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmove Ġ= Ġtak od ach i . dir ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! check Collision ( tak od ach i . animated . x Ġ+ Ġmove . x , Ġtak od ach i . animated . y Ġ+ Ġmove . y )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtak od ach i . animated . tx Ġ= Ġtak od ach i . animated . x Ġ+ Ġmove . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtak od ach i . animated . ty Ġ= Ġtak od ach i . animated . y Ġ+ Ġmove . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtak od ach i . animated . t State Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Animated ( animated : ĠAnimated , Ġdelta Time : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġanimated . t State Ġ+= Ġ 1 f Ġ/ Ġstep Time Ġ* Ġdelta Time ĊĠĠĠĠĠĠĠ Ġanimated . t State Ġ= Ġanimated . t State . coerce In ( 0 f , Ġ 1 f ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrender Animated Sprite ( texture : ĠTexture , Ġanimated : ĠAnimated ) Ġ{ ĊĠĠĠĠĠĠĠ Ġanimated . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbatch !!. draw ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- G dx . graphics . width Ġ/ Ġ 2 f Ġ+ Ġ( it . x Ġ* Ġ( 1 f Ġ- Ġit . t State ) Ġ+ Ġ( it . tx ) Ġ* Ġit . t State ) Ġ* Ġ 5 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- G dx . graphics . height Ġ/ Ġ 2 f Ġ+ Ġ( it . y Ġ* Ġ( 1 f Ġ- Ġit . t State ) Ġ+ Ġ( it . ty ) Ġ* Ġit . t State ) Ġ* Ġ 5 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġanimate Act ( deltaTime : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm ume i is . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Animated ( it . animated , Ġdelta Time ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate Animated ( tak od ach i . animated , Ġdelta Time ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġrot Ġ= Ġ 0 f ĊĊĠĠĠ Ġoverride Ġfun Ġrender ( delta : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ ĠScreen Utils . clear ( 0 f , Ġ 0 f , Ġ 0 f , Ġ 1 f ) ĊĊĠĠĠĠĠĠĠ Ġrot Ġ+= Ġspin Speed ĊĠĠĠĠĠĠĠ Ġif Ġ( difficulty Ġ== ĠDiff iculty . T ak od ach i Ġ&& Ġabs ( rot ) Ġ> Ġ 1 8 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspin Speed Ġ= Ġ- spin Speed ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbatch !!. projection Matrix . set ( cam . projection ) ĊĠĠĠĠĠĠĠ Ġbatch !!. transform Matrix . set ( cam . view ) ĊĊĠĠĠĠĠĠĠ Ġbatch !!. begin () ĊĠĠĠĠĠĠĠ Ġrender D Box ( background !! , Ġ- G dx . graphics . width . toFloat (), Ġ- G dx . graphics . height . toFloat (), ĠG dx . graphics . width . toFloat () Ġ* Ġ 2 f , ĠG dx . graphics . height . toFloat () Ġ* Ġ 2 f , Ġrot ) ĊĠĠĠĠĠĠĠ Ġblocks . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender D Box ( wall s !! , Ġ- G dx . graphics . width Ġ/ Ġ 2 f Ġ+ Ġit . x Ġ* Ġ 5 0 f , Ġ- G dx . graphics . height / 2 f Ġ+ Ġit . y Ġ* Ġ 5 0 f , Ġit . size , Ġit . size , Ġ- rot ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbatch !!. end () ĊĠĠĠĠĠĠĠ Ġbatch !!. transform Matrix . rotate ( Vector 3 . Z , Ġrot ) ĊĠĠĠĠĠĠĠ Ġbatch !!. begin () ĊĊĊĠĠĠĠĠĠĠ Ġcookies . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbatch !!. draw ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcookie , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- G dx . graphics . width Ġ/ Ġ 2 f Ġ+ Ġit . x Ġ* Ġ 5 0 f , Ġ- G dx . graphics . height / 2 f Ġ+ Ġit . y Ġ* Ġ 5 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 0 f , Ġ 5 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm ume i is . forEach Ġ{ Ġchar Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender Animated Sprite ( m ume ii !! , Ġchar . animated ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrender Animated Sprite ( t ako !! , Ġtak od ach i . animated ) ĊĊĊĠĠĠĠĠĠĠ Ġbatch !!. end () ĊĊĠĠĠĠĠĠĠ Ġbatch !!. transform Matrix . rotate ( Vector 3 . Z , Ġ- rot ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( ending Player Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġending Player !!. time Left Ġ-= Ġdelta ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbatch !!. begin () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbatch !!. draw ( ending Player !!. texture , Ġ- G dx . graphics . width Ġ/ Ġ 2 f , Ġ- G dx . graphics . height / 2 f , ĠG dx . graphics . width . toFloat (), ĠG dx . graphics . height . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbatch !!. end () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ending Player !!. time Left Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġending Player !!. sound . stop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġending Player Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmusic !!. play () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimate Act ( delta ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġai Act ( delta ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Input () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġbatch !!. dispose () ĊĠĠĠĠĠĠĠ Ġbackground !!. dispose () ĊĠĠĠĠĠĠĠ Ġwalls !!. dispose () ĊĠĠĠĠĠĠĠ Ġm ume ii !!. dispose () ĊĠĠĠĠĠĠĠ Ġt ako !!. dispose () ĊĠĠĠĠĠĠĠ Ġcookie !!. dispose () ĊĠĠĠĠĠĠĠ Ġwin !!. dispose () ĊĠĠĠĠĠĠĠ Ġlose !!. dispose () ĊĠĠĠĠĠĠĠ Ġwin Sound !!. dispose () ĊĠĠĠĠĠĠĠ Ġlose Sound !!. dispose () ĊĠĠĠĠĠĠĠ Ġmusic !!. dispose () ĊĠĠĠ Ġ} Ċ }