package Ġorg . div y . ai . snake . animation Ċ Ċ import Ġjavafx . animation . Animation Timer Ċ import Ġjavafx . scene . canvas . Graphics Context Ċ import Ġjavafx . scene . paint . Color Ċ import Ġjavafx . scene . paint . Paint Ċ import Ġorg . div y . ai . snake . model . Position Ċ import Ġorg . div y . ai . snake . model . game . Game Board Model Ċ import Ġorg . div y . ai . snake . model . snake . Snake Model Ċ Ċ class ĠGame Board Animation Timer ( private Ġval Ġgraphics Context : ĠGraphics Context ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġprivate Ġval Ġgame Model : ĠGame Board Model ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġprivate Ġval Ġcell Resolution : ĠDouble ) Ġ: ĠAnimation Timer () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġhandle ( now : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgraphics Context . clear Rect ( 0 . 0 , Ġ 0 . 0 , Ġgraphics Context . canvas . width , Ġgraphics Context . canvas . height ) ĊĠĠĠĠĠĠĠ Ġpaint Board Grid () ĊĊĠĠĠĠĠĠĠ Ġpaint Food () ĊĠĠĠĠĠĠĠ Ġfor Ġ( snake Model Ġin Ġgame Model . sn akes ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Vision ( snake Model ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Sn akes ( snake Model ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpaint Vision ( snake : ĠSn ake Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtrace Vision In Direction ( snake , Ġleft ) ĊĠĠĠĠĠĠĠ Ġtrace Vision In Direction ( snake , Ġleft Bottom ) ĊĠĠĠĠĠĠĠ Ġtrace Vision In Direction ( snake , Ġbottom ) ĊĠĠĠĠĠĠĠ Ġtrace Vision In Direction ( snake , Ġright Bottom ) ĊĠĠĠĠĠĠĠ Ġtrace Vision In Direction ( snake , Ġright ) ĊĠĠĠĠĠĠĠ Ġtrace Vision In Direction ( snake , Ġright Top ) ĊĠĠĠĠĠĠĠ Ġtrace Vision In Direction ( snake , Ġtop ) ĊĠĠĠĠĠĠĠ Ġtrace Vision In Direction ( snake , Ġtop Left ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpaint Sn akes ( snake Model : ĠSn ake Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbody Color Ġ= ĠColor . GREEN . derive Color ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsnake Model . life Left Ġ/ Ġ 5 0 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġhead Color Ġ= ĠColor . GREEN . derive Color ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsnake Model . life Left Ġ/ Ġ 2 5 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( body Position Ġin Ġsnake Model . body ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Rectangle ( body Position , Ġbody Color ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpaint Rectangle ( snake Model . head . position , Ġhead Color ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpaint Food () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( food Ġin Ġgame Model . food List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Rectangle ( food . pos , ĠColor . RED ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpaint Board Grid () Ġ{ ĊĠĠĠĠĠĠĠ Ġgraphics Context . stroke Ġ= ĠColor . BLACK ĊĠĠĠĠĠĠĠ Ġgraphics Context . stroke Rect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame Model . board Width . toDouble () Ġ* Ġcell Resolution , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame Model . board Height . toDouble () Ġ* Ġcell Resolution ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( grid Index Ġin Ġ 1 .. game Model . board Width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgraphics Context . stroke Ġ= ĠColor . LIGHT GRAY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgraphics Context . lineWidth Ġ= Ġ 0 . 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgraphics Context . stroke Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid Index Ġ* Ġcell Resolution , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid Index Ġ* Ġcell Resolution , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame Model . board Height Ġ* Ġcell Resolution ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( grid Index Ġin Ġ 1 .. game Model . board Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgraphics Context . stroke Ġ= ĠColor . LIGHT GRAY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgraphics Context . lineWidth Ġ= Ġ 0 . 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgraphics Context . stroke Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid Index Ġ* Ġcell Resolution , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame Model . board Width Ġ* Ġcell Resolution , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid Index Ġ* Ġcell Resolution ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpaint Rectangle ( position : ĠPosition , Ġpaint : ĠPaint ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgraphics Context . fill Ġ= Ġpaint ĊĠĠĠĠĠĠĠ Ġgraphics Context . lineWidth Ġ= Ġ 2 . 0 ĊĠĠĠĠĠĠĠ Ġgraphics Context . fillRect ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition . x . toDouble () Ġ* Ġcell Resolution + 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition . y . toDouble () Ġ* Ġcell Resolution + 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell Resolution - 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcell Resolution - 1 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġleft Ġ= ĠPosition (- 1 , Ġ 0 ) ĊĠĠĠ Ġprivate Ġval Ġleft Bottom Ġ= ĠPosition (- 1 , Ġ 1 ) ĊĠĠĠ Ġprivate Ġval Ġbottom Ġ= ĠPosition ( 0 , Ġ 1 ) ĊĠĠĠ Ġprivate Ġval Ġright Bottom Ġ= ĠPosition ( 1 , Ġ 1 ) ĊĠĠĠ Ġprivate Ġval Ġright Ġ= ĠPosition ( 1 , Ġ 0 ) ĊĠĠĠ Ġprivate Ġval Ġright Top Ġ= ĠPosition ( 1 , Ġ- 1 ) ĊĠĠĠ Ġprivate Ġval Ġtop Ġ= ĠPosition ( 0 , Ġ- 1 ) ĊĠĠĠ Ġprivate Ġval Ġtop Left Ġ= ĠPosition (- 1 , Ġ- 1 ) ĊĊĠĠĠ Ġprivate Ġfun Ġtrace Vision In Direction ( snake : ĠSn ake Model , Ġdirection : ĠPosition ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpos Ġ= Ġsnake . head . position ĊĊĠĠĠĠĠĠĠ Ġpos Ġ= Ġpos . add ( direction ) ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ(! game Model . is Out Side Board ( pos )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( game Model . is Food Dropped At ( pos ) Ġ|| Ġsnake . has Body At Position ( pos )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraphics Context . lineWidth Ġ= Ġ 1 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraphics Context . fill Ġ= ĠColor . LIGHT BLUE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgraphics Context . fill O val ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpos . x . toDouble () Ġ* Ġcell Resolution Ġ+ Ġcell Resolution Ġ/ Ġ 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpos . y . toDouble () Ġ* Ġcell Resolution Ġ+ Ġcell Resolution Ġ/ Ġ 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell Resolution Ġ/ Ġ 2 , Ġcell Resolution Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpos Ġ= Ġpos . add ( direction ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ