package Ġorg . g ort tar . graphics . tur tle . awt Ċ Ċ import Ġorg . g ort tar . graphics . tur tle . Tur tle Core Ċ import Ġorg . g ort tar . graphics . tur tle . Tur tle State View Ċ import Ġjava . awt .* Ċ import Ġjava . awt . EventQueue . invoke And Wait Ċ import Ġkotlin . math . cos Ċ import Ġkotlin . math . round ToInt Ċ import Ġkotlin . math . sin Ċ Ċ /** Ċ Ġ* Ġ[ Tur tle Core ] Ġinterface Ġover ĠA WT Ġ[ Graphics 2 D ] Ċ Ġ*/ Ċ class ĠGraphics Tur tle Core ( ĊĠĠĠ Ġgraphics : ĠGraphics , ĊĠĠĠ Ġprivate Ġval Ġsize : ĠDimension , ĊĠĠĠ Ġprivate Ġval Ġstate View : ĠTur tle State View Ċ ) Ġ: ĠTur tle Core Ġ{ ĊĠĠĠ Ġ// ĠEvery ĠGraphics Ġin Ġruntime Ġis Ġactually ĠGraphics 2 D ĊĠĠĠ Ġprivate Ġval Ġgraphics Ġ= Ġgraphics Ġas ĠGraphics 2 D ĊĊĠĠĠ Ġ// ĠForce Ġall Ġinteractions Ġwith ĠGraphics 2 D Ġto Ġhappen Ġin Ġ ĠUI Ġthread ĊĠĠĠ Ġprivate Ġoperator Ġfun ĠGraphics 2 D . invoke ( block : ĠGraphics 2 D . () Ġ-> ĠUnit ) Ġ= Ġinvoke And Wait Ġ{ Ġblock () Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġtur tle Figure Ġ= ĠlistOf ( 0 Ġto Ġ 0 , Ġ- 5 Ġto Ġ 1 0 , Ġ 1 5 Ġto Ġ 0 , Ġ- 5 Ġto Ġ- 1 0 ) ĊĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġit Ġ+ Ġit . first () Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( x , Ġy ) Ġ-> Ġx . toDouble () Ġto Ġy . toDouble () Ġ} ĊĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĊĠĠĠ Ġoverride Ġfun Ġclear (): ĠUnit Ġ= Ġgraphics Ġ{ Ġclear Rect ( 0 , Ġ 0 , Ġsize . width , Ġsize . height ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġline ( x 1 : ĠDouble , Ġy 1 : ĠDouble , Ġx 2 : ĠDouble , Ġy 2 : ĠDouble ): ĠUnit Ġ= Ġgraphics Ġ{ ĊĠĠĠĠĠĠĠ Ġcolor . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . BLACK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Line ( x 1 . round ToInt (), Ġy 1 . round ToInt (), Ġx 2 . round ToInt (), Ġy 2 . round ToInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpen ( width : ĠFloat ): ĠUnit Ġ= ĊĠĠĠĠĠĠĠ Ġgraphics Ġ{ Ġstroke Ġ= ĠBasic Stroke ( width , ĠBasic Stroke . CAP _ ROUND , ĠBasic Stroke . JOIN _ ROUND ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Tur tle (): ĠUnit Ġ= Ġstate View . let Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it . isVisible ) Ġgraphics Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Stroke Ġ= Ġstroke ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Ġ= ĠBasic Stroke ( 2 f , ĠBasic Stroke . CAP _ ROUND , ĠBasic Stroke . JOIN _ ROUND ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset XOR Mode ( Color . BLACK ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Figure () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Paint Mode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Ġ= Ġold Stroke ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠGraphics 2 D . draw Figure () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġphi Ġ= Ġstate View . phi ĊĠĠĠĠĠĠĠ Ġval Ġbase Ġ= Ġstate View . x Ġto Ġstate View . y ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġsin ( phi ) ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġcos ( phi ) ĊĠĠĠĠĠĠĠ Ġtur tle Figure ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( x , Ġy ) Ġ-> Ġbase Ġ+ Ġ( x Ġ* Ġc Ġ- Ġy Ġ* Ġs Ġto Ġx Ġ* Ġs Ġ+ Ġy Ġ* Ġc ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. zip With Next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġ( from , Ġto ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom . x . round ToInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom . y . round ToInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto . x . round ToInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto . y . round ToInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ type alias ĠPos Ġ= ĠPair < Double , ĠDouble > Ċ Ċ val ĠPos . x : ĠDouble Ġget () Ġ= Ġfirst Ċ val ĠPos . y : ĠDouble Ġget () Ġ= Ġsecond Ċ operator Ġfun ĠPos . plus ( o : ĠPos ): ĠPos Ġ= Ġx Ġ+ Ġo . x Ġto Ġy Ġ+ Ġo . y