package Ġbit sp ittle . z eld ali ke Ċ Ċ import Ġbit sp ittle . game 2 d . core . graphics . Color Ċ import Ġbit sp ittle . game 2 d . core . math . Pt 2 Ċ import Ġbit sp ittle . game 2 d . core . math . Vec 2 Ċ import Ġbit sp ittle . game 2 d . core . time . Duration Ċ import Ġbit sp ittle . game 2 d . core . time . Immutable Duration Ċ import Ġbit sp ittle . game 2 d . core . time . min Ċ import Ġbit sp ittle . game 2 d . engine . api . Game Ċ import Ġbit sp ittle . game 2 d . engine . api . context . Draw Context Ċ import Ġbit sp ittle . game 2 d . engine . api . context . Init Context Ċ import Ġbit sp ittle . game 2 d . engine . api . context . Update Context Ċ import Ġbit sp ittle . game 2 d . engine . api . graphics . Draw Surface Ċ import Ġbit sp ittle . game 2 d . engine . api . graphics . Draw Surface . Draw Params Ċ import Ġbit sp ittle . game 2 d . engine . api . graphics . Image Ċ import Ġbit sp ittle . game 2 d . engine . api . input . Keyboard . Key Ċ Ċ private Ġval ĠCLEAR _ COLOR Ġ= ĠColor ( 0 x 7 7 , Ġ 0 x 7 7 , Ġ 0 x 7 7 ) Ċ Ċ /** Ċ Ġ* ĠIn Ġcase Ġour Ġupdate Ġloop ĠRE ALLY Ġstarts Ġto Ġfall Ġbehind , Ġsay Ġa Ġrender Ġtakes Ġ 5 Ġseconds Ġor Ġyou , Ġthe Ċ Ġ* Ġdev , Ġset Ġa Ġbreakpoint Ġ-- Ġit 's Ġuseful Ġto Ġclamp Ġthe Ġupdate Ġlogic Ġto Ġsome Ġmax Ġduration , Ġto Ġensure Ċ Ġ* Ġthat Ġthere Ġisn 't Ġa Ġsingle Ġframe Ġwhere Ġthings Ġgo ĠIN S ANE . Ċ Ġ*/ Ċ private Ġval ĠMAX _ UPDATE _ DURATION : ĠImmutable Duration Ġ= ĠDuration . of Millis ( 1 0 0 . 0 ) Ċ Ċ class ĠZ eld ali ke Game Ġ: ĠGame Ġ{ ĊĠĠĠ Ġprivate Ġclass ĠEntity ( val Ġpos : ĠPt 2 , Ġval Ġimage : ĠImage ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġdraw To ( surface : ĠDraw Surface ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsurface . draw ( image , ĠDraw Params ( pos )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġplayer : ĠEntity ĊĠĠĠ Ġprivate Ġval Ġwalls Ġ= Ġmutable ListOf < Entity >() ĊĊĠĠĠ Ġoverride Ġfun Ġinit ( ctx : ĠInit Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Ġ{ Ġ// Ġinit Ġplayer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplayer Image : ĠImage Ġ= Ġctx . assets . find Asset ("/ images / player . png ") !!. into < Image >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcenter Ġ= ĠPt 2 (( ctx . screen . size Ġ- Ġplayer Image . size ) Ġ/ Ġ 2 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Ġ= ĠEntity ( center , Ġplayer Image ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrun Ġ{ Ġ// Ġinit Ġwalls ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwall Image Ġ= Ġctx . assets . find Asset ("/ images / wall . png ") !!. into < Image >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtile Counts Ġ= Ġ( ctx . screen . size Ġ/ Ġwall Image . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnum W alls X Ġ= Ġtile Counts . x . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnum W alls Y Ġ= Ġtile Counts . y . toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 Ġuntil Ġnum W alls X ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwalls . add ( Entity ( Pt 2 ( x Ġ* Ġwall Image . size . x , Ġ 0 f ), Ġwall Image )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwalls . add ( Entity ( Pt 2 ( x Ġ* Ġwall Image . size . x , Ġ( num W alls Y Ġ- Ġ 1 ) Ġ* Ġwall Image . size . y ), Ġwall Image )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġ 1 Ġuntil Ġnum W alls Y Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwalls . add ( Entity ( Pt 2 ( 0 f , Ġy Ġ* Ġwall Image . size . y ), Ġwall Image )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwalls . add ( Entity ( Pt 2 (( num W alls X Ġ- Ġ 1 ) Ġ* Ġwall Image . size . x , Ġy Ġ* Ġwall Image . size . y ), Ġwall Image )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( ctx : ĠUpdate Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( ctx . keyboard . is Down ( Key . ESC )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . app . quit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġelapsed Ġ= Ġmin ( ctx . timer . last Frame Duration , ĠMAX _ UPDATE _ DURATION ) ĊĠĠĠĠĠĠĠ Ġrun Ġ{ Ġ// Ġhandle Ġkeyboard Ġinput ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun ĠBoolean . toFloat () Ġ= Ġif Ġ( this ) Ġ 1 f Ġelse Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvel Ġ= ĠVec 2 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . keyboard . is Down ( Key . RIGHT ). toFloat () Ġ- Ġctx . keyboard . is Down ( Key . LEFT ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . keyboard . is Down ( Key . DOWN ). toFloat () Ġ- Ġctx . keyboard . is Down ( Key . UP ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġplayer Ġshould Ġmove Ġaround Ġ 6 0 Ġpixels Ġ/ Ġsecond , Ġa Ġspeed Ġwhich Ġwhich Ġgets Ġthem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġacross Ġthe Ġscreen Ġin Ġ 2 - 3 Ġseconds . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . pos Ġ+= Ġ( vel Ġ* Ġ( elapsed . secs Ġ* Ġ 6 0 ). toFloat ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdraw ( ctx : ĠDraw Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġctx . screen . clear ( CLEAR _ COLOR ) ĊĠĠĠĠĠĠĠ Ġwalls . forEach Ġ{ Ġwall Ġ-> Ġwall . draw To ( ctx . screen ) Ġ} ĊĠĠĠĠĠĠĠ Ġplayer . draw To ( ctx . screen ) ĊĠĠĠ Ġ} Ċ }