package Ġcom . example . battle ship . views Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġcom . example . battle ship . config . Board Array Ċ import Ġcom . example . battle ship . config . Constants Ċ Ċ // ĠIn sp ired Ġby Ġtutorial : Ġhttps :// www . youtube . com / watch ? v = 0 0 Q dl Hu K GH 8 & t = 4 5 s Ċ Ċ class ĠShip Board s View ( context : ĠContext , Ġattribute Set : ĠAttributeSet ) Ġ: ĠView ( context , Ġattribute Set ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġ_ cell Size Pixels Ġ= Ġ 0 F ĊĊĠĠĠ Ġprivate Ġvar Ġ_ selected Row Ġ= Ġ- 1 ĊĠĠĠ Ġprivate Ġvar Ġ_ selected Col Ġ= Ġ- 1 ĊĊĠĠĠ Ġprivate Ġvar Ġ_ listener : ĠOn Touch Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġ_ cells : ĠBoard Array ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġ_ thick Line Paint Ġ= ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . BLACK ĊĠĠĠĠĠĠĠ ĠstrokeWidth Ġ= Ġ 4 F ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ thin Line Paint Ġ= ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . BLACK ĊĠĠĠĠĠĠĠ ĠstrokeWidth Ġ= Ġ 2 F ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ selected Cell Paint Ġ= ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . FILL _ AND _ ST RO KE ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . parse Color ("# 2 4 8 0 9 5 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ ship 2 Cell Paint Ġ= ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . FILL _ AND _ ST RO KE ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . parse Color ("# af afb 5 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ ship 3 Cell Paint Ġ= ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . FILL _ AND _ ST RO KE ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . parse Color ("# 7 f 7 f 8 7 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ ship 4 Cell Paint Ġ= ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . FILL _ AND _ ST RO KE ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . parse Color ("# 5 5 5 5 5 a ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ ship 5 Cell Paint Ġ= ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . FILL _ AND _ ST RO KE ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . parse Color ("# 2 a 2 a 2 d ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ ship Hit Paint Ġ= ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . FILL _ AND _ ST RO KE ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . parse Color ("# DB 4 4 3 7 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ ship Miss Paint Ġ= ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . FILL _ AND _ ST RO KE ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . parse Color ("# 9 6 d 6 ed ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ empty Cell Paint Ġ= ĠPaint (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . FILL _ AND _ ST RO KE ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . WHITE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġsize Pixels Ġ= ĠMath . min ( width Measure Spec , Ġheight Measure Spec ) ĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( size Pixels , Ġsize Pixels ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ cell Size Pixels Ġ= ĠMath . min ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( width Ġ/ ĠConstants . board Side Size ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( height Ġ/ ĠConstants . board Side Size ). toFloat () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġfill Cells ( canvas ) ĊĠĠĠĠĠĠĠ Ġdraw Lines ( canvas ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfill Cells ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ cells ?. forEach Ġ{ Ġcolumn Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn . forEach Ġ{ Ġcell Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrow Ġ= Ġcell . row ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcol Ġ= Ġcell . col ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( cell . state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPaint Ġcell Ġwith Ġship . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . Cell States . SHIP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= Ġwhen Ġ( cell . ship ?. size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ_ ship 2 Cell Paint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġ_ ship 3 Cell Paint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> Ġ_ ship 4 Cell Paint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 Ġ-> Ġ_ ship 5 Cell Paint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠPaint () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfill Cell ( canvas , Ġrow , Ġcol , Ġpaint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . Cell States . HIT Ġ-> Ġfill Cell ( canvas , Ġrow , Ġcol , Ġ_ ship Hit Paint ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . Cell States . MIS S Ġ-> Ġfill Cell ( canvas , Ġrow , Ġcol , Ġ_ ship Miss Paint ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . Cell States . EMPTY Ġ-> Ġfill Cell ( canvas , Ġrow , Ġcol , Ġ_ empty Cell Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPaint Ġchosen Ġcell . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( row Ġ== Ġ_ selected Row Ġ&& Ġcol Ġ== Ġ_ selected Col ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(_ selected Row Ġ!= Ġ- 1 Ġ&& Ġ_ selected Col Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfill Cell ( canvas , Ġrow , Ġcol , Ġ_ selected Cell Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfill Cell ( canvas : ĠCanvas , Ġr : ĠInt , Ġc : ĠInt , Ġpaint : ĠPaint ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc Ġ* Ġ_ cell Size Pixels , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr Ġ* Ġ_ cell Size Pixels , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( c Ġ+ Ġ 1 ) Ġ* Ġ_ cell Size Pixels , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( r Ġ+ Ġ 1 ) Ġ* Ġ_ cell Size Pixels , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Lines ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( 0 F , Ġ 0 F , Ġwidth . toFloat (), Ġheight . toFloat (), Ġ_ thick Line Paint ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil ĠConstants . board Side Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ* Ġ_ cell Size Pixels , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ* Ġ_ cell Size Pixels , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ thin Line Paint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 F , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ* Ġ_ cell Size Pixels , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ* Ġ_ cell Size Pixels , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ thin Line Paint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ_ cells ?. forEach Ġ{ Ġcolumn Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn . forEach Ġ{ Ġcell Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrow Ġ= Ġcell . row ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcol Ġ= Ġcell . col ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDraw Ġcross . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cell . state Ġ== ĠConstants . Cell States . HIT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol Ġ* Ġ_ cell Size Pixels , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow Ġ* Ġ_ cell Size Pixels , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol Ġ* Ġ_ cell Size Pixels Ġ+ Ġ_ cell Size Pixels , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow Ġ* Ġ_ cell Size Pixels Ġ+ Ġ_ cell Size Pixels , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ thin Line Paint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol Ġ* Ġ_ cell Size Pixels Ġ+ Ġ_ cell Size Pixels , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow Ġ* Ġ_ cell Size Pixels , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol Ġ* Ġ_ cell Size Pixels , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow Ġ* Ġ_ cell Size Pixels Ġ+ Ġ_ cell Size Pixels , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ thin Line Paint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Touch Event ( event . x , Ġevent . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Touch Event ( x : ĠFloat , Ġy : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpossible Selected Row Ġ= Ġ( y Ġ/ Ġ_ cell Size Pixels ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġpossible Selected Col Ġ= Ġ( x Ġ/ Ġ_ cell Size Pixels ). toInt () ĊĠĠĠĠĠĠĠ Ġ_ listener ?. on Cell Tou ched ( possible Selected Row , Ġpossible Selected Col ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Selected Cell UI ( row : ĠInt , Ġcol : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ selected Row Ġ= Ġrow ĊĠĠĠĠĠĠĠ Ġ_ selected Col Ġ= Ġcol ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Cells ( cells : ĠBoard Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis ._ cells Ġ= Ġcells ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġregister Listener ( listener : ĠOn Touch Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis ._ listener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠOn Touch Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Cell Tou ched ( row : ĠInt , Ġcol : ĠInt ) ĊĠĠĠ Ġ} Ċ }