/* ĠMIT ĠLicense Ċ Ċ Copyright Ġ( c ) Ġ 2 0 1 8 ĠE rid an ĠDom or ats ki y Ċ Ċ Permission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ of Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ in Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ to Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ copies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ furnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ċ The Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ copies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ċ THE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ IMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ FITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ AUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ LIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ OUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ SOFTWARE . Ġ*/ Ċ Ċ package Ġru . by prog miner . Lab _ Programming _ Addition Ċ Ċ import Ġjava . awt . image . Buffered Image Ċ Ċ import Ġjavax . image io . Image IO Ċ Ċ import Ġkotlin . random . Random Ċ Ċ open Ġclass ĠPlayer ( ĊĠĠĠĠĠĠĠ Ġval Ġname : ĠString Ġ= Ġ" Player " Ċ ) Ġ{ ĊĊĠĠĠ Ġenum Ġclass ĠDirection ( val Ġx : ĠInt , Ġval Ġy : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠ ĠRIGHT ( 1 , Ġ 0 ), ĠDOWN ( 0 , Ġ- 1 ), ĠLEFT (- 1 , Ġ 0 ), ĠUP ( 0 , Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġdefault Texture : ĠBufferedImage Ġ= ĠImage IO . read ( this :: class . java . getResource AsStream ("/ assets / images / player . png ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġgame : ĠAbstract Game ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġ!= Ġnull Ġ&& Ġvalue Ġ!= Ġfield ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Change Ġgame Ġof Ġplayer Ġis Ġnot Ġpermitted ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġx Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġvar Ġy Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġvar Ġrotation Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġfun Ġmove ( direction : ĠDirection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgame Ġ= Ġgame !! ĊĊĠĠĠĠĠĠĠ Ġif Ġ( game . state Ġ== ĠAbstract Game . State . BEFORE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġnew X Ġ= Ġx ĊĠĠĠĠĠĠĠ Ġvar Ġnew Y Ġ= Ġy ĊĊĠĠĠĠĠĠĠ Ġnew X Ġ+= Ġdirection . x ĊĠĠĠĠĠĠĠ Ġnew Y Ġ+= Ġdirection . y ĊĊĠĠĠĠĠĠĠ Ġif Ġ( y Ġ== Ġgame . size . height Ġ- Ġ 1 Ġ&& Ġnew X Ġin Ġ 0 Ġuntil Ġgame . size . width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġnew X ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew X Ġin Ġ 0 Ġuntil Ġgame . size . width Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Y Ġin Ġ 0 Ġuntil Ġgame . size . height Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame . getBlock At ( new X , Ġnew Y ). can Stand () ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġnew X ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġnew Y ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame . getBlock At ( new X , Ġnew Y ). on Stand ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠĠ Ġr Ġ| Ġd . x Ġ| Ġd . x Ġ* Ġ 2 Ġ| Ġ Ġ+ Ġ| Ġ Ġ% ĊĠĠĠĠĠĠĠĠ Ġ* Ġ---- + -----+ ---------+ ----+ ---- ĊĠĠĠĠĠĠĠĠ Ġ* ĠĠĠ 1 Ġ| ĠĠ 1 Ġ Ġ| ĠĠĠĠ 2 ĠĠĠ Ġ| ĠĠ 3 Ġ| ĠĠ 1 ĊĠĠĠĠĠĠĠĠ Ġ* ĠĠĠ 1 Ġ| ĠĠ 0 Ġ Ġ| ĠĠĠĠ 0 ĠĠĠ Ġ| ĠĠ 1 Ġ| ĠĠ 1 ĊĠĠĠĠĠĠĠĠ Ġ* ĠĠĠ 1 Ġ| Ġ- 1 Ġ Ġ| ĠĠ Ġ- 2 ĠĠĠ Ġ| Ġ- 1 Ġ| Ġ- 1 ĊĠĠĠĠĠĠĠĠ Ġ* Ġ Ġ- 1 Ġ| ĠĠ 1 Ġ Ġ| ĠĠĠĠ 2 ĠĠĠ Ġ| ĠĠ 1 Ġ| ĠĠ 1 ĊĠĠĠĠĠĠĠĠ Ġ* Ġ Ġ- 1 Ġ| ĠĠ 0 Ġ Ġ| ĠĠĠĠ 0 ĠĠĠ Ġ| Ġ- 1 Ġ| Ġ- 1 ĊĠĠĠĠĠĠĠĠ Ġ* Ġ Ġ- 1 Ġ| Ġ- 1 Ġ Ġ| ĠĠ Ġ- 2 ĠĠĠ Ġ| Ġ- 3 Ġ| Ġ- 1 ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠĠĠ Ġr \ d . x Ġ| Ġ- 1 Ġ| ĠĠ 0 Ġ| ĠĠ 1 ĊĠĠĠĠĠĠĠĠ Ġ* Ġ Ġ-------- + ----+ ----+ ---- ĊĠĠĠĠĠĠĠĠ Ġ* ĠĠĠĠ Ġ- 1 ĠĠ Ġ| Ġ- 1 Ġ| Ġ- 1 Ġ| ĠĠ 1 ĊĠĠĠĠĠĠĠĠ Ġ* Ġ Ġ-------- + ----+ ----+ ---- ĊĠĠĠĠĠĠĠĠ Ġ* ĠĠĠĠĠĠ 1 ĠĠ Ġ| Ġ- 1 Ġ| ĠĠ 1 Ġ| ĠĠ 1 ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġrotation Ġ= Ġ( rotation Ġ+ Ġdirection . x Ġ* Ġ 2 ) Ġ% Ġ 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfall () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgame Ġ= Ġgame !! ĊĊĠĠĠĠĠĠĠ Ġif Ġ( game . state Ġ== ĠAbstract Game . State . BEFORE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġplayer Y Ġ= Ġy ĊĊĠĠĠĠĠĠĠ Ġif Ġ( player Y Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= ĠRandom ( System . currentTimeMillis ()). nextInt ( 1 , Ġplayer Y Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġheight ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ-- player Y ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! game . getBlock At ( x , Ġplayer Y ). can Stand ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġplayer Y ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġgame . getBlock At ( x , Ġy ). on Stand ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġget Texture () Ġ= Ġdefault Texture ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġname Ċ } Ċ