package Ġgame objects Ċ Ċ import Ġcollections . Destroy Anim s List Ċ import Ġcollections . Match List Ċ import Ġcom . badlogic . gdx . G dx Ċ import Ġcom . badlogic . gdx . graphics . g 2 d . Sprite Batch Ċ import Ġcom . badlogic . gdx . math . Vector 2 Ċ import Ġenums . Effect Type Ċ import Ġenums . J ew el Type Ċ import Ġenums . Match Type Ċ import Ġutils . Game Screen Assets Ċ import Ġconstants . Values Ċ import Ġjava . util .* Ċ Ċ // ĠTODO : Ġimplement Ġint ArrayOf ( 0 , Ġ 1 , Ġ 1 , Ġ 1 ) Ġetc ., Ġalso Ġconsider Ġrefactoring Ċ class ĠGame Grid ( private Ġval Ġlevel Data Ġ: ĠLevel , Ġprivate Ġval Ġassets : ĠGame Screen Assets ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġgrid Type Ġ= Ġlevel Data . grid Template ĊĠĠĠ Ġprivate Ġval Ġdestroy Animations Ġ= ĠDestroy Anim s List () ĊĠĠĠ Ġprivate Ġval Ġfall Down Acceleration Ġ= Ġ 0 . 4 5 f Ġ Ġ// ĠOR IGIN AL : Ġ 0 . 4 5 f ĊĠĠĠ Ġprivate Ġval Ġitems ToCheck Ġ= Ġmutable ListOf < J ew el Move >() ĊĠĠĠ Ġprivate Ġvar Ġneed Moves Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġmake Check Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġmove Speed Ġ= ĠValues . JE W EL _ MOVE MENT _ SPEED Ġ Ġ// ĠOR IGIN AL : Ġ 8 f ĊĊĠĠĠ Ġval Ġlast Moves Ġ= Ġmutable ListOf < J ew el Move >() ĊĊĠĠĠ Ġvar Ġscore Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġmove Score Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġscore Multiplier Ġ= Ġ 1 f ĊĊĠĠĠ Ġval Ġspecial Moves Ġ= Ġmutable ListOf < J ew el Move >() ĊĠĠĠ Ġval Ġmoves Ġ= Ġmutable ListOf < J ew el Move >() ĊĠĠĠ Ġvar Ġis Filled Ġ= Ġfalse ĊĠĠĠ Ġvar Ġcells Ġ= ĠArray ( grid Type . count (), Ġ{_ Ġ-> ĠArray ( grid Type [ 0 ]. count () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġ{_ Ġ-> ĠCell ( false , ĠJ ew el ( J ew el Type . from ( Random (). nextInt ( 5 )), assets ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassets . tile Blank , Ġassets )}) }) ĊĠĠĠ Ġval ĠMAX _ ROWS Ġ= Ġcells . count () ĊĠĠĠ Ġval Ġgem Size Ġ= ĠG dx . graphics . width . toFloat () Ġ/ ĠMAX _ ROWS ĊĠĠĠ Ġval ĠMAX _ COL S Ġ= ĠG dx . graphics . height . toFloat () Ġ/ Ġgem Size ĊĠĠĠ Ġprivate Ġval Ġgrid Offset Ġ= Ġ( G dx . graphics . height . toFloat () Ġ- Ġ( gem Size Ġ* Ġcells [ 0 ]. count ())) Ġ/ Ġ 2 ĊĠĠĠ Ġvar Ġmoves Left Ġ= Ġ 3 0 ĊĊĠĠĠ Ġvar Ġrelative Cols Ġ= ĠG dx . graphics . height . toFloat () Ġ/ Ġgem Size ĊĠĠĠ Ġprivate Ġvar Ġrelative Gem Size Ġ= ĠG dx . graphics . width . toFloat () Ġ/ ĠMAX _ ROWS ĊĠĠĠ Ġvar Ġtouch Offset Y Ġ= Ġ( G dx . graphics . height . toFloat () Ġ- Ġ( relative Gem Size Ġ* Ġcells [ 0 ]. count ())) Ġ/ Ġ 2 ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġgrid Type . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġgrid Type [ i ]. indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ i ][ j ]. is Playing Ġ= Ġ( grid Type [ i ][ j ] Ġ== Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMaking Ġcheck Ġno Ġoccurrences Ġof Ġ 3 Ġgems Ġare Ġpresented ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ i ][ j ]. is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ i Ġ- Ġ 1 ][ j ]. is Playing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ i Ġ- Ġ 2 ][ j ]. is Playing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ i Ġ- Ġ 1 ][ j ]. j ew el . j ew el Type Ġ== Ġcells [ i ][ j ]. j ew el . j ew el Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( cells [ i Ġ- Ġ 2 ][ j ]. j ew el . j ew el Type Ġ== Ġcells [ i ][ j ]. j ew el . j ew el Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ i ][ j ]. j ew el Ġ= ĠJ ew el ( J ew el Type . from ( Random (). nextInt ( 5 )), assets ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( j Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ i ][ j Ġ- Ġ 1 ]. is Playing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ i ][ j Ġ- Ġ 2 ]. is Playing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ i ][ j Ġ- Ġ 1 ]. j ew el . j ew el Type Ġ== Ġcells [ i ][ j ]. j ew el . j ew el Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( cells [ i ][ j Ġ- Ġ 2 ]. j ew el . j ew el Type Ġ== Ġcells [ i ][ j ]. j ew el . j ew el Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ i ][ j ]. j ew el Ġ= ĠJ ew el ( J ew el Type . from ( Random (). nextInt ( 5 )), assets ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ i ][ j ]. j ew el . j ew el Type Ġ= ĠJ ew el Type . NO _ JE W EL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġborders Ġ= Ġget B orders ( i , Ġj , Ġgrid Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( b orders [ 3 ] Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ i ][ j ]. is Top Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( b orders [ 0 ] Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ i ][ j ]. is Bottom Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( b orders [ 1 ] Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ i ][ j ]. is Right Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( b orders [ 2 ] Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ i ][ j ]. is Left Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( j Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ i ][ j ]. is Bottom Edge Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( j Ġ== Ġcells [ 0 ]. count () Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ i ][ j ]. is Top Edge Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( j Ġ% Ġ 2 Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ% Ġ 2 Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ i ][ j ]. tile Texture Ġ= Ġassets . tile Blank Lite ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( i Ġ% Ġ 2 Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ i ][ j ]. tile Texture Ġ= Ġassets . tile Blank Lite ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis Filled Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġresize ( width : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrelative Gem Size Ġ= Ġwidth . toFloat () Ġ/ ĠMAX _ ROWS ĊĠĠĠĠĠĠĠ Ġrelative Cols Ġ= Ġheight . toFloat () Ġ/ Ġrelative Gem Size ĊĠĠĠĠĠĠĠ Ġtouch Offset Y Ġ= Ġ( height . toFloat () Ġ- Ġ( relative Gem Size Ġ* Ġcells [ 0 ]. count ())) Ġ/ Ġ 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġswap Field () Ġ: ĠList < J ew el Move > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmoves Ġ= Ġmutable ListOf < J ew el Move >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġgrid Type . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġgrid Type [ i ]. indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ i ][ j ]. is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ i Ġ- Ġ 1 ][ j ]. is Playing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ i Ġ- Ġ 2 ][ j ]. is Playing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ i Ġ- Ġ 1 ][ j ]. j ew el . j ew el Type Ġ== Ġcells [ i ][ j ]. j ew el . j ew el Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( cells [ i Ġ- Ġ 2 ][ j ]. j ew el . j ew el Type Ġ== Ġcells [ i ][ j ]. j ew el . j ew el Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . add ( J ew el Move ( G dx . graphics . width . toFloat () Ġ/ Ġ 2 , ĠG dx . graphics . height . toFloat () Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . toFloat (), Ġj . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ ew el ( J ew el Type . from ( Random (). nextInt ( 5 )), assets ), 8 f )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( j Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ i ][ j Ġ- Ġ 1 ]. is Playing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ i ][ j Ġ- Ġ 2 ]. is Playing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ i ][ j Ġ- Ġ 1 ]. j ew el . j ew el Type Ġ== Ġcells [ i ][ j ]. j ew el . j ew el Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( cells [ i ][ j Ġ- Ġ 2 ]. j ew el . j ew el Type Ġ== Ġcells [ i ][ j ]. j ew el . j ew el Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . add ( J ew el Move ( G dx . graphics . width . toFloat () Ġ/ Ġ 2 , ĠG dx . graphics . height . toFloat () Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . toFloat (), Ġj . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ ew el ( J ew el Type . from ( Random (). nextInt ( 5 )), assets ), 8 f )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ i ][ j ]. j ew el . j ew el Type Ġ= ĠJ ew el Type . NO _ JE W EL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmoves ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ 1 Ġif Ġtile Ġneeds Ġborder , ĠDOWN , ĠRIGHT , ĠLEFT , ĠTOP ĊĠĠĠ Ġprivate Ġfun Ġget B orders ( i Ġ: ĠInt , Ġj Ġ: ĠInt , Ġcells Ġ: ĠArray < IntArray >) Ġ: ĠInt Array Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġborders Ġ= Ġint ArrayOf ( 0 , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( i Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ i Ġ- Ġ 1 ][ j ] Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġborders [ 2 ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġborders [ 2 ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( j Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ i ][ j Ġ- Ġ 1 ] Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġborders [ 0 ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġborders [ 0 ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( i Ġ< Ġcells . count () Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ i Ġ+ Ġ 1 ][ j ] Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġborders [ 1 ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġborders [ 1 ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( j Ġ< Ġcells [ 0 ]. count () Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ i ][ j Ġ+ Ġ 1 ] Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġborders [ 3 ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġborders [ 3 ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġborders ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdraw ( batch er Ġ: ĠSprite Batch , Ġdelta : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( need Moves ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfall Down Moves () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġneed Moves Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate Score () ĊĠĠĠĠĠĠĠ Ġdraw Tiles ( batch er ) ĊĠĠĠĠĠĠĠ Ġdraw J ew els ( batch er , delta ) ĊĠĠĠĠĠĠĠ Ġdraw Destroy Animations ( batch er , delta ) ĊĠĠĠĠĠĠĠ Ġdraw Moves ( batch er , delta ) ĊĠĠĠĠĠĠĠ Ġdraw Special Moves ( batch er , delta ) ĊĠĠĠĠĠĠĠ Ġif Ġ( make Check ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Matches () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Game Over ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmoves Left Ġ= Ġ 3 0 Ġ// ĠTODO : Ġimplement ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Tiles ( batch er Ġ: ĠSprite Batch ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġcells . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġcells [ i ]. indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ i ][ j ]. is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ i ][ j ]. draw Tile ( batch er , i . toFloat () Ġ* Ġgem Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( j . toFloat () Ġ* Ġgem Size ) Ġ+ Ġgrid Offset , Ġgem Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw J ew els ( batch er Ġ: ĠSprite Batch , Ġdelta : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġcells . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġcells [ i ]. indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ i ][ j ]. is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ i ][ j ]. draw J ew el ( batch er , i . toFloat () Ġ* Ġgem Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( j . toFloat () Ġ* Ġgem Size ) Ġ+ Ġgrid Offset , Ġgem Size , Ġdelta ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Special Moves ( batch er Ġ: ĠSprite Batch , Ġdelta Ġ: ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġiterator Ġ= Ġspecial Moves . iterator () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmove Ġ= Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove . draw ( batch er , Ġgem Size , Ġdelta , Ġgrid Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( move . end Move ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! move . destroy On End ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ move . x To . toInt () ][ move . y To . toInt ()]. j ew el Ġ= Ġmove . j ew el ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems ToCheck . add ( move ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . remove () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( special Moves . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfall Down Moves () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Moves ( batch er Ġ: ĠSprite Batch , Ġdelta Ġ: ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġiterator Ġ= Ġmoves . iterator () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmove Ġ= Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Drawing ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove . draw From Position ( batch er , Ġgem Size , Ġdelta , Ġgrid Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove . draw ( batch er , Ġgem Size , Ġdelta , Ġgrid Offset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( move . end Move ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! move . destroy On End ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ move . x To . toInt () ][ move . y To . toInt ()]. j ew el Ġ= Ġmove . j ew el ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems ToCheck . add ( move ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// game Grid . last Moves . add ( J ew el Move ( move . x From , move . y From , move . x To , move . y To , move . j ew el , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġmove . current Speed , 1 8 f , 0 . 4 5 f )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . remove () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( moves . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Filled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Check Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġneed Moves Ġ= Ġ! is Filled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfall Down Moves () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Filled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ( cells [ 0 ]. count () Ġ- Ġ 1 ) Ġdown To Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtmp Moves Ġ= Ġfall Down Row ( j ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( move Ġin Ġtmp Moves ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . add ( move ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( moves . count () Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Filled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Check Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// game Grid . last Moves . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Matches () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠlistOf Matches Ġ= ĠMatch List () ĊĠĠĠĠĠĠĠ Ġval Ġiterator Ġ= Ġitems ToCheck . iterator () ĊĠĠĠĠĠĠĠ Ġvar Ġmatches Found Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġwhile Ġ( iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmove Ġ= Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= Ġcreates Match ( move . x To . toInt (), Ġmove . y To . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match . match Type Ġ!= ĠMatch Type . NO _ MATCH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf Matches . add ( match ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatches Found Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . remove () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmake Check Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġremove Matches ( listOf Matches . get ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( special Moves . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( matches Found ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfall Down Moves () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Matches ( match Ġ: ĠList < Match >) Ġ{ ĊĠĠĠĠĠĠĠ Ġneed Moves Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( match . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( m Ġin Ġmatch ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtmp Ġ= Ġremove Match ( m ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( move Ġin Ġtmp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspecial Moves . add ( move ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Drawing () Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdestroy Animations . list . isNotEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġin Range ( x Ġ: ĠInt , Ġy Ġ: ĠInt ) Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġx Ġ>= Ġ 0 Ġ&& Ġy Ġ>= Ġ 0 Ġ&& Ġx Ġ< Ġgrid Type . count () Ġ&& Ġy Ġ< Ġgrid Type [ 0 ]. count () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Adjacent ( x 1 Ġ: ĠInt , Ġy 1 Ġ: ĠInt , Ġx 2 Ġ: ĠInt , Ġy 2 Ġ: ĠInt ) Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ((( x 1 Ġ- Ġx 2 ) Ġ<= Ġ 1 Ġ&& Ġ( x 1 Ġ- Ġx 2 ) Ġ>= Ġ- 1 ) Ġ Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( y 1 Ġ- Ġy 2 ) Ġ<= Ġ 1 Ġ&& Ġ( y 1 Ġ- Ġy 2 ) Ġ>= Ġ- 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Diag onal Adjacent ( x 1 , y 1 , x 2 , y 2 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Diag onal Adjacent ( x 1 Ġ: ĠInt , Ġy 1 Ġ: ĠInt , Ġx 2 Ġ: ĠInt , Ġy 2 Ġ: ĠInt ) Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(( x 1 Ġ- Ġx 2 ) Ġ== Ġ( y 1 Ġ- Ġy 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ(( x 1 Ġ+ Ġy 1 ) Ġ== Ġ( x 2 Ġ+ Ġy 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġswap Cells ( x 1 Ġ: ĠInt , Ġy 1 Ġ: ĠInt , Ġx 2 Ġ: ĠInt , Ġy 2 Ġ: ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtmp Cell Ġ= Ġcells [ x 1 ][ y 1 ]. j ew el ĊĠĠĠĠĠĠĠ Ġcells [ x 1 ][ y 1 ]. j ew el Ġ= Ġcells [ x 2 ][ y 2 ]. j ew el ĊĠĠĠĠĠĠĠ Ġcells [ x 2 ][ y 2 ]. j ew el Ġ= Ġtmp Cell ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreates Match ( x Ġ: ĠInt , Ġy Ġ: ĠInt ) Ġ: ĠMatch Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġj ew el Type Ġ= Ġcells [ x ][ y ]. j ew el . j ew el Type ĊĠĠĠĠĠĠĠ Ġval Ġmatch Horizontal Ġ= Ġget Horizontal Match ( x , y , j ew el Type ) ĊĠĠĠĠĠĠĠ Ġval Ġmatch Vertical Ġ= Ġget Vertical Match ( x , y , j ew el Type ) ĊĠĠĠĠĠĠĠ Ġval Ġresulting Match Ġ= ĠMatch ( Mutable List ( 1 ,{ Ġ_ Ġ-> ĠVector 2 ( x . toFloat (), y . toFloat ()) Ġ}), Match Type . NO _ MATCH , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ x ][ y ]. j ew el . j ew el Type ) ĊĠĠĠĠĠĠĠ Ġif Ġ( match Horizontal . gems In Match . count () Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match Vertical . gems In Match . count () Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatch Horizontal . merge In ( match Vertical ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresulting Match . merge In ( match Horizontal ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresulting Match . match Type Ġ= ĠMatch Type . MATCH _ CROSS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresulting Match ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresulting Match . merge In ( match Horizontal ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match Vertical . gems In Match . count () Ġ> Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresulting Match . merge In ( match Vertical ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġsize Ġ= Ġresulting Match . gems In Match . count () ĊĠĠĠĠĠĠĠ Ġif Ġ( size Ġ> Ġ 5 ) Ġsize Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġif Ġ( size Ġ< Ġ 3 ) Ġsize Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġresulting Match . match Type Ġ= ĠMatch Type . from ( size ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresulting Match ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Horizontal Match ( x Ġ: ĠInt , Ġy Ġ: ĠInt , Ġj ew el Type : ĠJ ew el Type ) Ġ: ĠMatch Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcounter Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= ĠMatch ( mutable ListOf (), ĠMatch Type . NO _ MATCH , ĠJ ew el Type . NO _ JE W EL ) ĊĠĠĠĠĠĠĠ Ġif Ġ( j ew el Type Ġ!= ĠJ ew el Type . NO _ JE W EL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(( x Ġ- Ġcounter ) Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ x Ġ- Ġcounter ][ y ]. j ew el . j ew el Type Ġ== Ġj ew el Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatch . gems In Match . add ( Vector 2 (( x Ġ- Ġcounter ). toFloat (), Ġy . toFloat ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcounter ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcounter Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(( x Ġ+ Ġcounter ) Ġ< Ġcells . count ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ x Ġ+ Ġcounter ][ y ]. j ew el . j ew el Type Ġ== Ġj ew el Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatch . gems In Match . add ( Vector 2 (( x Ġ+ Ġcounter ). toFloat (), Ġy . toFloat ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcounter ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmatch ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Vertical Match ( x Ġ: ĠInt , Ġy Ġ: ĠInt , Ġj ew el Type : ĠJ ew el Type ) Ġ: ĠMatch Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcounter Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= ĠMatch ( mutable ListOf (), ĠMatch Type . NO _ MATCH , ĠJ ew el Type . NO _ JE W EL ) ĊĠĠĠĠĠĠĠ Ġif Ġ( j ew el Type Ġ!= ĠJ ew el Type . NO _ JE W EL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(( y Ġ- Ġcounter ) Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ x ][ y Ġ- Ġcounter ]. j ew el . j ew el Type Ġ== Ġj ew el Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatch . gems In Match . add ( Vector 2 ( x . toFloat (), Ġ( y Ġ- Ġcounter ). toFloat ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcounter ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcounter Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(( y Ġ+ Ġcounter ) Ġ< Ġcells [ 0 ]. count ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ x ][ y Ġ+ Ġcounter ]. j ew el . j ew el Type Ġ== Ġj ew el Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatch . gems In Match . add ( Vector 2 ( x . toFloat (), Ġ( y Ġ+ Ġcounter ). toFloat ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcounter ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmatch ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Color ( j ew el Type Ġ: ĠJ ew el Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcolor Match Ġ= ĠMatch ( mutable ListOf (), ĠMatch Type . MATCH 3 , ĠJ ew el Type . NO _ JE W EL ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġcells . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġcells [ i ]. indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ i ][ j ]. j ew el . j ew el Type Ġ== Ġj ew el Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Match . gems In Match . add ( Vector 2 ( i . toFloat (), j . toFloat ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġremove Match ( color Match ) ĊĠĠĠĠĠĠĠ Ġfall Down Moves () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Match ( match Ġ: ĠMatch ) Ġ: ĠList < J ew el Move > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmoves Ġ= Ġmutable ListOf < J ew el Move >() ĊĠĠĠĠĠĠĠ Ġvar Ġhas Special s Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġfor Ġ( gem Ġin Ġmatch . gems In Match ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ gem . x . toInt () ][ gem . y . toInt ()]. j ew el . effect Ġ!= ĠEffect Type . NONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Special s Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( gem Ġin Ġmatch . gems In Match ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ gem . x . toInt () ][ gem . y . toInt ()]. j ew el . effect Ġ!= ĠEffect Type . NONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( cells [ gem . x . toInt () ][ gem . y . toInt ()]. j ew el . effect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEffect Type . FIRE Ġ-> Ġfire Destroy ( gem . x , gem . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEffect Type . CROSS Ġ-> Ġcross Destroy ( gem . x , gem . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match . match Type Ġ!= ĠMatch Type . MATCH 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(!( gem . x Ġ== Ġmatch . first Gem (). x Ġ&& Ġgem . y Ġ== Ġmatch . first Gem (). y )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! has Special s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . add ( J ew el Move ( gem . x , Ġgem . y , Ġmatch . first Gem (). x , Ġmatch . first Gem (). y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ ew el ( cells [ gem . x . toInt () ][ gem . y . toInt ()]. j ew el . j ew el Type , assets ), Ġ 8 f )) Ġ Ġ// ĠOR IGIN AL Ġ: Ġ 8 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . last (). destroy On End Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ gem . x . toInt () ][ gem . y . toInt ()]. j ew el . j ew el Type Ġ= ĠJ ew el Type . NO _ JE W EL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ gem . x . toInt () ][ gem . y . toInt ()]. j ew el . effect Ġ= ĠEffect Type . NONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġadd Ġa Ġscore Ġfor Ġcreating Ġfire Ġor Ġcross Ġor Ġsuper Ġgem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestroy Animations . add ( Destroy Animation ( assets , gem . x , gem . y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ ew el ( cells [ gem . x . toInt () ][ gem . y . toInt ()]. j ew el . j ew el Type , assets ), Effect Type . NONE , gem Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrid Offset ,( Values . SCORE _ MATCH _ 3 Ġ* Ġscore Multiplier ). toInt ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove Score Ġ+= ĠValues . SCORE _ MATCH _ 3 Ġ* Ġscore Multiplier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ gem . x . toInt () ][ gem . y . toInt ()]. j ew el . j ew el Type Ġ= ĠJ ew el Type . NO _ JE W EL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( match . match Type Ġ!= ĠMatch Type . MATCH 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ match . first Gem (). x . toInt () ][ match . first Gem (). y . toInt ()]. j ew el . j ew el Type Ġ= Ġmatch . match Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match . match Type Ġ== ĠMatch Type . MATCH 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ match . first Gem (). x . toInt () ][ match . first Gem (). y . toInt ()]. j ew el . effect Ġ= ĠEffect Type . FIRE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match . match Type Ġ== ĠMatch Type . MATCH _ CROSS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ match . first Gem (). x . toInt () ][ match . first Gem (). y . toInt ()]. j ew el . effect Ġ= ĠEffect Type . CROSS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match . match Type Ġ== ĠMatch Type . MATCH 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ match . first Gem (). x . toInt () ][ match . first Gem (). y . toInt ()]. j ew el . j ew el Type Ġ= ĠJ ew el Type . SUPER _ GE M ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ match . first Gem (). x . toInt () ][ match . first Gem (). y . toInt ()]. j ew el . effect Ġ= ĠEffect Type . SUPER _ GE M ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmoves ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfire Destroy ( x : ĠFloat , Ġy : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcells [ x . toInt () ][ y . toInt ()]. j ew el . effect Ġ= ĠEffect Type . NONE ĊĠĠĠĠĠĠĠ Ġval Ġto Destroy Ġ= Ġget Ad jac ents ( x . toInt (), y . toInt ()) ĊĠĠĠĠĠĠĠ Ġfor Ġ( xy Ġin Ġto Destroy ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ xy . x . toInt () ][ xy . y . toInt ()]. j ew el . effect Ġ== ĠEffect Type . FIRE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfire Destroy ( xy . x , xy . y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ xy . x . toInt () ][ xy . y . toInt ()]. j ew el . effect Ġ== ĠEffect Type . CROSS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcross Destroy ( xy . x , xy . y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestroy Animations . add ( Destroy Animation ( assets , xy . x , xy . y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ ew el ( cells [ xy . x . toInt () ][ xy . y . toInt ()]. j ew el . j ew el Type , assets ), Effect Type . FIRE , gem Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, grid Offset ,( Values . SCORE _ MATCH _ 3 Ġ* Ġscore Multiplier ). toInt ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove Score Ġ+= ĠValues . SCORE _ MATCH _ 3 Ġ* Ġscore Multiplier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ xy . x . toInt () ][ xy . y . toInt ()]. j ew el . j ew el Type Ġ= ĠJ ew el Type . NO _ JE W EL ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcross Destroy ( x : ĠFloat , Ġy : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcells [ x . toInt () ][ y . toInt ()]. j ew el . effect Ġ= ĠEffect Type . NONE ĊĠĠĠĠĠĠĠ Ġdestroy Animations . add ( Destroy Animation ( assets , x , y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ ew el ( cells [ x . toInt () ][ y . toInt ()]. j ew el . j ew el Type , assets ), Effect Type . CROSS , gem Size , grid Offset ,( Values . SCORE _ MATCH _ 3 Ġ* Ġscore Multiplier ). toInt ())) ĊĠĠĠĠĠĠĠ Ġmove Score Ġ+= ĠValues . SCORE _ MATCH _ 3 Ġ* Ġscore Multiplier ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġdont Ġadd Ġfor Ġx Ġy ĊĠĠĠĠĠĠĠ Ġfor Ġ( row Ġin Ġ( 0 .. ( cells . count () Ġ- Ġ 1 ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ row ][ y . toInt ()]. j ew el . effect Ġ!= ĠEffect Type . NONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ row ][ y . toInt ()]. j ew el . effect Ġ== ĠEffect Type . CROSS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( row Ġ!= Ġx . toInt ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcross Destroy ( row . toFloat (), Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ x . toInt () ][ y . toInt ()]. j ew el . effect Ġ== ĠEffect Type . FIRE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfire Destroy ( row . toFloat (), Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestroy Animations . add ( Destroy Animation ( assets , row . toFloat (), y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ ew el ( cells [ row ][ y . toInt ()]. j ew el . j ew el Type , assets ), Effect Type . FIRE , gem Size , grid Offset ,( Values . SCORE _ MATCH _ 3 Ġ* Ġscore Multiplier ). toInt ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove Score Ġ+= ĠValues . SCORE _ MATCH _ 3 Ġ* Ġscore Multiplier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ row ][ y . toInt ()]. j ew el . j ew el Type Ġ= ĠJ ew el Type . NO _ JE W EL ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( col Ġin Ġ( 0 .. ( cells [ 0 ]. count () Ġ- Ġ 1 ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ x . toInt () ][ col ]. j ew el . effect Ġ!= ĠEffect Type . NONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ x . toInt () ][ col ]. j ew el . effect Ġ== ĠEffect Type . CROSS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( col Ġ!= Ġy . toInt ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcross Destroy ( x , Ġcol . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ x . toInt () ][ col ]. j ew el . effect Ġ== ĠEffect Type . FIRE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfire Destroy ( x , Ġcol . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestroy Animations . add ( Destroy Animation ( assets , x , col . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ ew el ( cells [ x . toInt () ][ col ]. j ew el . j ew el Type , assets ), Effect Type . FIRE , gem Size , grid Offset ,( Values . SCORE _ MATCH _ 3 Ġ* Ġscore Multiplier ). toInt ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove Score Ġ+= ĠValues . SCORE _ MATCH _ 3 Ġ* Ġscore Multiplier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ x . toInt () ][ col ]. j ew el . j ew el Type Ġ= ĠJ ew el Type . NO _ JE W EL ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Ad jac ents ( x Ġ: ĠInt , Ġy Ġ: ĠInt ) Ġ: ĠList < Vector 2 > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf < Vector 2 >() ĊĠĠĠĠĠĠĠ Ġif Ġ( x Ġ> Ġ 0 Ġ&& Ġy Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ x - 1 ][ y - 1 ]. is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Vector 2 ( x - 1 f , y - 1 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( x Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ x - 1 ][ y ]. is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Vector 2 ( x - 1 f , y . toFloat ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( y Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ x ][ y - 1 ]. is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Vector 2 ( x . toFloat (), y - 1 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(( x Ġ< Ġ( cells . count () Ġ- Ġ 1 )) Ġ&& Ġ( y Ġ< Ġ( cells [ 0 ]. count () Ġ- Ġ 1 ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ x + 1 ][ y + 1 ]. is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Vector 2 ( x + 1 f , y + 1 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( x Ġ< Ġ( cells . count () Ġ- Ġ 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ x + 1 ][ y ]. is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Vector 2 ( x + 1 f , y . toFloat ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( y Ġ< Ġ( cells [ 0 ]. count () Ġ- Ġ 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ x ][ y + 1 ]. is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Vector 2 ( x . toFloat (), y + 1 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ((( x Ġ- Ġ 1 ) Ġ>= Ġ 0 ) Ġ&& Ġ(( y Ġ+ Ġ 1 ) Ġ< Ġcells [ 0 ]. count ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ x - 1 ][ y + 1 ]. is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Vector 2 ( x - 1 f , y + 1 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ((( x Ġ+ Ġ 1 ) Ġ< Ġcells . count ()) Ġ&& Ġ(( y Ġ- Ġ 1 ) Ġ>= Ġ 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ x + 1 ][ y - 1 ]. is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( Vector 2 ( x + 1 f , y - 1 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Destroy Animations ( batch : ĠSprite Batch , Ġdelta : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( destroy Animations . list . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiterator Ġ= Ġdestroy Animations . list . iterator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanim Ġ= Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( anim . is Stopped ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . remove () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim . draw ( batch , delta ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfall Down Row ( row Ġ: ĠInt ) Ġ: ĠList < J ew el Move > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmoves Ġ= Ġmutable ListOf < J ew el Move >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġcells . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġleft Turn Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġright Turn Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ i ][ row ]. is Playing Ġ&& Ġcells [ i ][ row ]. j ew el . j ew el Type Ġ== ĠJ ew el Type . NO _ JE W EL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( row Ġ< Ġcells [ 0 ]. count () Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! cells [ i ][ row Ġ+ Ġ 1 ]. is Blocked ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . add ( J ew el Move ( i . toFloat (), Ġ( row Ġ+ Ġ 1 ). toFloat (), Ġi . toFloat (), Ġrow . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ ew el ( cells [ i ][ row Ġ+ Ġ 1 ]. j ew el . j ew el Type , assets , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ i ][ row Ġ+ Ġ 1 ]. j ew el . effect ), Ġ 5 f )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ i ][ row Ġ+ Ġ 1 ]. j ew el . j ew el Type Ġ= ĠJ ew el Type . NO _ JE W EL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! cells [ i ][ row Ġ+ Ġ 1 ]. is Playing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! cells [ i Ġ- Ġ 1 ][ row Ġ+ Ġ 1 ]. is Blocked ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Turn Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ< Ġcells . count () Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! cells [ i Ġ+ Ġ 1 ][ row Ġ+ Ġ 1 ]. is Blocked ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Turn Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( left Turn Ġ&& Ġright Turn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrand I Ġ= ĠRandom (). nextInt ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rand I Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . add ( J ew el Move (( i Ġ- Ġ 1 ). toFloat (), Ġ( row Ġ+ Ġ 1 ). toFloat (), Ġi . toFloat (), Ġrow . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ ew el ( cells [ i Ġ- Ġ 1 ][ row Ġ+ Ġ 1 ]. j ew el . j ew el Type , assets , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ i Ġ- Ġ 1 ][ row Ġ+ Ġ 1 ]. j ew el . effect ), Ġ 5 f )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ i Ġ- Ġ 1 ][ row Ġ+ Ġ 1 ]. j ew el . j ew el Type Ġ= ĠJ ew el Type . NO _ JE W EL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . add ( J ew el Move (( i Ġ+ Ġ 1 ). toFloat (), Ġ( row Ġ+ Ġ 1 ). toFloat (), Ġi . toFloat (), Ġrow . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ ew el ( cells [ i Ġ+ Ġ 1 ][ row Ġ+ Ġ 1 ]. j ew el . j ew el Type , assets , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ i Ġ+ Ġ 1 ][ row Ġ+ Ġ 1 ]. j ew el . effect ), Ġ 5 f )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ i Ġ+ Ġ 1 ][ row Ġ+ Ġ 1 ]. j ew el . j ew el Type Ġ= ĠJ ew el Type . NO _ JE W EL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( left Turn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . add ( J ew el Move (( i Ġ- Ġ 1 ). toFloat (), Ġ( row Ġ+ Ġ 1 ). toFloat (), Ġi . toFloat (), Ġrow . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ ew el ( cells [ i Ġ- Ġ 1 ][ row Ġ+ Ġ 1 ]. j ew el . j ew el Type , assets , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ i Ġ- Ġ 1 ][ row Ġ+ Ġ 1 ]. j ew el . effect ), Ġ 5 f )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ i Ġ- Ġ 1 ][ row Ġ+ Ġ 1 ]. j ew el . j ew el Type Ġ= ĠJ ew el Type . NO _ JE W EL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( right Turn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . add ( J ew el Move (( i Ġ+ Ġ 1 ). toFloat (), Ġ( row Ġ+ Ġ 1 ). toFloat (), Ġi . toFloat (), Ġrow . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ ew el ( cells [ i Ġ+ Ġ 1 ][ row Ġ+ Ġ 1 ]. j ew el . j ew el Type , assets , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ i Ġ+ Ġ 1 ][ row Ġ+ Ġ 1 ]. j ew el . effect ), Ġ 5 f )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ i Ġ+ Ġ 1 ][ row Ġ+ Ġ 1 ]. j ew el . j ew el Type Ġ= ĠJ ew el Type . NO _ JE W EL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . add ( J ew el Move ( i . toFloat (), Ġcells [ 0 ]. count (). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . toFloat (), Ġrow . toFloat (), ĠJ ew el ( J ew el Type . from ( Random (). nextInt ( 5 )), assets , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEffect Type . NONE ), 5 f )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġmoves ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġtakes Ġcoordinates Ġof Ġtwo Ġcells Ġand Ġreturns Ġresult Ġof Ġthem Ġsw apping ĊĠĠĠ Ġfun Ġswap Actions ( x 1 Ġ: ĠFloat , Ġy 1 Ġ: ĠFloat , Ġx 2 Ġ: ĠFloat , Ġy 2 Ġ: ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ x 1 . toInt () ][ y 1 . toInt ()]. j ew el . j ew el Type Ġ== ĠJ ew el Type . SUPER _ GE M ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġcells [ x 2 . toInt () ][ y 2 . toInt ()]. j ew el . j ew el Type Ġ== ĠJ ew el Type . SUPER _ GE M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells [ x 1 . toInt () ][ y 1 . toInt ()]. j ew el . j ew el Type Ġ!= ĠJ ew el Type . SUPER _ GE M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Color ( cells [ x 1 . toInt () ][ y 1 . toInt ()]. j ew el . j ew el Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestroy Animations . add ( Destroy Animation ( assets , x 2 , y 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ ew el ( cells [ x 2 . toInt () ][ y 2 . toInt ()]. j ew el . j ew el Type , assets ), Effect Type . NONE , gem Size , grid Offset )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ x 2 . toInt () ][ y 2 . toInt ()]. j ew el . j ew el Type Ġ= ĠJ ew el Type . NO _ JE W EL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Color ( cells [ x 2 . toInt () ][ y 2 . toInt ()]. j ew el . j ew el Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestroy Animations . add ( Destroy Animation ( assets , x 1 , y 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ ew el ( cells [ x 1 . toInt () ][ y 1 . toInt ()]. j ew el . j ew el Type , assets ), Effect Type . NONE , gem Size , grid Offset )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ x 1 . toInt () ][ y 1 . toInt ()]. j ew el . j ew el Type Ġ= ĠJ ew el Type . NO _ JE W EL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmoves Left -- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswap Cells ( x 1 . toInt (), y 1 . toInt (), x 2 . toInt (), y 2 . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( creates Match ( x 1 . toInt (), Ġy 1 . toInt ()). match Type Ġ!= ĠMatch Type . NO _ MATCH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġ( creates Match ( x 2 . toInt (), Ġy 2 . toInt ()). match Type Ġ!= ĠMatch Type . NO _ MATCH )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswap Cells ( x 1 . toInt (), y 1 . toInt (), x 2 . toInt (), y 2 . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . add ( J ew el Move ( x 1 , Ġy 1 , Ġx 2 , Ġy 2 , ĠJ ew el ( cells [ x 1 . toInt () ][ y 1 . toInt ()]. j ew el . j ew el Type , assets , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ x 1 . toInt () ][ y 1 . toInt ()]. j ew el . effect ), Ġmove Speed )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmoves . add ( J ew el Move ( x 2 , Ġy 2 , Ġx 1 , Ġy 1 , ĠJ ew el ( cells [ x 2 . toInt () ][ y 2 . toInt ()]. j ew el . j ew el Type , assets , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ x 2 . toInt () ][ y 2 . toInt ()]. j ew el . effect ), Ġmove Speed )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ x 1 . toInt () ][ y 1 . toInt ()]. j ew el . j ew el Type Ġ= ĠJ ew el Type . NO _ JE W EL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ x 2 . toInt () ][ y 2 . toInt ()]. j ew el . j ew el Type Ġ= ĠJ ew el Type . NO _ JE W EL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmoves Left -- ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswap Cells ( x 1 . toInt (), y 1 . toInt (), x 2 . toInt (), y 2 . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRETURN _ BACK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Score () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( move Score . toInt () Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove Score Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( move Score . toInt () Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( move Score Ġ< Ġ 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscore ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove Score -- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( move Score Ġ< Ġ 2 5 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscore Ġ+= Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove Score Ġ-= Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( move Score Ġ< Ġ 5 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscore Ġ+= Ġ 1 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove Score Ġ-= Ġ 1 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscore Ġ+= Ġ 2 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove Score Ġ-= Ġ 2 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġprivate Ġfun Ġprev Move Start Speed ( x From Ġ: ĠFloat , Ġy From Ġ: ĠFloat ) Ġ: ĠFloat Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġfor Ġ( last Move Ġin Ġlast Moves ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Move . x To Ġ== Ġx From Ġ&& Ġlast Move . y To Ġ== Ġy From ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlast Move . current Speed Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġ 0 f Ċ // ĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO : Ġimplement ĊĠĠĠ Ġfun Ġis Game Over () Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmoves Left Ġ== Ġ 0 ĊĠĠĠ Ġ} Ċ Ċ } Ċ