package Ġok in awa . flat _ e . picture pu zzle čĊč Ċ import Ġandroid . animation . Animator č Ċ import Ġandroid . animation . Animator Listener Adapter č Ċ import Ġandroid . animation . Animator Set č Ċ import Ġandroid . animation . Object Animator č Ċ import Ġandroid . annotation . Suppress Lint č Ċ import Ġandroid . graphics . Bitmap č Ċ import Ġandroid . graphics . Bitmap Factory č Ċ import Ġandroid . graphics . Matrix č Ċ import Ġandroid . graphics . Path č Ċ import Ġandroid . os . Bundle č Ċ import Ġandroid . util . Display Metrics č Ċ import Ġandroid . util . Log č Ċ import Ġandroid . view . Motion Event č Ċ import Ġandroid . view . View č Ċ // import Ġandroid . view . WindowManager č Ċ import Ġandroid . widget . ImageView č Ċ import Ġandroid . widget . TextView č Ċ import Ġandroidx . appcompat . app . AppCompatActivity č Ċ import Ġandroidx . constraint layout . widget . Constraint Layout č Ċ import Ġkotlin . math . sqrt č Ċ import Ġkotlin . random . Random čĊč Ċ // Ġ ãĤ¢ãĥĹãĥª ãģ® çĬ¶æħĭ č Ċ enum Ġclass ĠMy App Status Ġ{ čĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* Ġ éĸĭå§ĭ çĶ» éĿ¢ čĊĠĠĠĠ Ġ*/ čĊĠĠĠ ĠStart , čĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠãĤ¢ ãĥĭ ãĥ¡ ãĥ¼ãĤ·ãĥ§ãĥ³ ä¸Ń čĊĠĠĠĠ Ġ*/ čĊĠĠĠ ĠIn Animation , čĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠãĤ ² ãĥ¼ãĥł ä¸Ń čĊĠĠĠĠ Ġ*/ čĊĠĠĠ ĠOn Game č Ċ } čĊč Ċ class ĠBoard Ġ{ čĊĠĠĠ Ġvar ĠnumOf Piece : Int Ġ= Ġ- 1 čĊĠĠĠ Ġvar Ġpiece Width : Int Ġ= Ġ- 1 čĊĠĠĠ Ġvar Ġpiece Height : Int Ġ= Ġ- 1 čĊčĊĠĠĠ Ġ// Ġãĥ ľ ãĥ¼ãĥī Ġãģ¯ éħį åĪĹ ãģ§ è¡¨ çı¾ ãģķãĤĮãĤĭ ãĢĤ 1 6 ãĥĶ ãĥ¼ãĤ¹ ãģ® ãĥľ ãĥ¼ãĥī ãģ® åł´åĲĪ ãĢģ čĊĠĠĠ Ġ// Ġ ãĤ¤ãĥ³ ãĥĩ ãĥĥãĤ¯ãĤ¹ çķª åı· Ġn Ġãģ® è¦ģ ç´ł ãģ¯ ãĢģ čĊĠĠĠ Ġ// Ġãĥ ľ ãĥ¼ãĥī ãģ® ( x , Ġy ) Ġ= Ġ( n Ġ% Ġ 4 , Ġn Ġ/ Ġ 4 ) ãģ® ãĥĶ ãĥ¼ãĤ¹ ãģ«å¯¾ å¿ľ ãģĻãĤĭ čĊĠĠĠ Ġvar Ġpieces Ġ: ĠArray < Int > Ġ= ĠArray ( 0 ){ 0 } čĊčĊĠĠĠ Ġ// Ġ æİ ´ ãĤĵ ãģ¦ãģĦãĤĭ çĶ» åĥı ãģ® çķª åı· čĊĠĠĠ Ġvar Ġnum Grab bed : Int Ġ= Ġ- 1 čĊčĊĠĠĠ Ġ// Ġãĥ Ķ ãĥ¼ãĤ¹ ãĤĴ è¡¨ç¤º ãģĻãĤĭ éļ Ľ ãģ® x åº§ æ¨Ļ čĊĠĠĠ Ġprivate Ġvar Ġorigin X : Int Ġ= Ġ 0 čĊĠĠĠ Ġ// Ġãĥ Ķ ãĥ¼ãĤ¹ ãĤĴ è¡¨ç¤º ãģĻãĤĭ éļ Ľ ãģ® y åº§ æ¨Ļ čĊĠĠĠ Ġprivate Ġvar Ġorigin Y : Int Ġ= Ġ 0 čĊčĊĠĠĠ Ġ// Ġãĥ Ķ ãĥ¼ãĤ¹ éĸĵ ãģ® ãĥŀ ãĥ¼ãĤ¸ ãĥ³ čĊĠĠĠ Ġprivate Ġval Ġmargin Piece : Int Ġ= Ġ 1 0 čĊčĊĠĠĠ Ġ// Ġè¡¨ç¤º ãģĻãĤĭ ãĥĵ ãĥĥãĥĪ ãĥŀ ãĥĥãĥĹ ãģ® ãĥĩ ãĥĲãĤ¤ ãĤ¹ çĶ» éĿ¢ ãĤµ ãĤ¤ãĤº ãģ«å¯¾ ãģĻãĤĭ æ¯Ķ çİĩ čĊĠĠĠ Ġprivate Ġval Ġtgt Pixel Rate Ġ= Ġ 0 . 9 čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* Ġè¡¨ç¤º çĶ¨ ãĥĵ ãĥĥãĥĪ ãĥŀ ãĥĥãĥĹ ãģ® åĪĿ æľŁ åĮĸ čĊĠĠĠĠ Ġ* čĊĠĠĠĠ Ġ* Ġ åº§ æ¨Ļ éĸ¢ éĢ£ ãģ® å¤īæķ° ãģ® åĪĿ æľŁ åĮĸ ãĤĤ åĲĪ ãĤı ãģĽ ãģ¦ è¡Į ãģĨ čĊĠĠĠĠ Ġ* čĊĠĠĠĠ Ġ* Ġ@ param Ġd Metrics Ġãĥĩ ãĥĲãĤ¤ ãĤ¹ ãģ® çĶ» éĿ¢ ãĤµ ãĤ¤ãĤº čĊĠĠĠĠ Ġ* Ġ@ param Ġbitmap 0 ĠãĤ ª ãĥª ãĤ¸ ãĥĬ ãĥ«ãģ® ãĥĵ ãĥĥãĥĪ ãĥŀ ãĥĥãĥĹ čĊĠĠĠĠ Ġ* Ġ@ param ĠnumOf Piece Ġãĥ Ķ ãĥ¼ãĤ¹ æķ° čĊĠĠĠĠ Ġ* Ġ@ return Ġãĥĩ ãĤ£ ãĤ¹ ãĥĹ ãĥ¬ ãĤ¤ ãģ« è¡¨ç¤º ãģĻãĤĭ ç¸ ® å°ı çīĪ ãģ® ãĥĵ ãĥĥãĥĪ ãĥŀ ãĥĥãĥĹ čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġfun Ġinit Bitmap 1 ( d Metrics : Display Metrics , Ġbitmap 0 : Bitmap , ĠnumOf Piece : Int ): ĠBitmap Ġ{ čĊĠĠĠĠĠĠĠ Ġthis . num Of Piece Ġ= ĠnumOf Piece čĊĠĠĠĠĠĠĠ Ġ// Ġãĥ ĵ ãĥĥãĥĪ ãĥŀ ãĥĥãĥĹ ãĤĴ ãĥĩ ãĥĲãĤ¤ ãĤ¹ ãģ® çĶ» éĿ¢ ãĤµ ãĤ¤ãĤº ãģ« åĲĪ ãĤı ãģĽ ãģ¦ ç¸ ® å°ı ãĥ» æĭ ¡ å¤§ ãģĻãĤĭ čĊĠĠĠĠĠĠĠ Ġ// Ġãĥ ĵ ãĥĥãĥĪ ãĥŀ ãĥĥãĥĹ ãģ¨ ãĥĩ ãĥĲãĤ¤ ãĤ¹ çĶ» éĿ¢ ãģ® å¹ ħ ãĢģ é«ĺ ãģķ ãģ® æ¯Ķ çİĩ ãĤĴ æ±Ĥ ãĤģ ãĤĭ čĊĠĠĠĠĠĠĠ Ġval Ġrate Width Ġ= Ġbitmap 0 . width . toFloat () Ġ/ Ġd Metrics . width Pixels . toFloat () čĊĠĠĠĠĠĠĠ Ġval Ġrate Height Ġ= Ġbitmap 0 . height . toFloat () Ġ/ Ġd Metrics . height Pixels . toFloat () čĊčĊĠĠĠĠĠĠĠ Ġ// ĠãĤ ª ãĥª ãĤ¸ ãĥĬ ãĥ« çĶ» åĥı ãģ® ãĤµ ãĤ¤ãĤº ( æ¯Ķ çİĩ ãģ® å¤§ ãģį ãģĦ è¾ º ãĤĴ åŁº æºĸ ãģ« ãģĻãĤĭ ) čĊĠĠĠĠĠĠĠ Ġval Ġorg P xl Size Ġ= Ġif Ġ( rate Width Ġ> Ġrate Height ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å¹ ħ ãģ® æ¯Ķ çİĩ ãģĮ å¤§ ãģį ãģĦ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap 0 . width . toFloat () čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ é«ĺ ãģķ ãģ® æ¯Ķ çİĩ ãģĮ å¤§ ãģį ãģĦ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap 0 . height . toFloat () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ// Ġ çĽ® æ¨Ļ ãģ® ãĤµ ãĤ¤ãĤº Ġ= Ġ çĶ» éĿ¢ ãĤµ ãĤ¤ãĤº Ġ* čĊĠĠĠĠĠĠĠ Ġval Ġtgt P xl Size Ġ= Ġif Ġ( rate Width Ġ> Ġrate Height ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( d Metrics . width Pixels Ġ* Ġtgt Pixel Rate ). toFloat () čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( d Metrics . height Pixels Ġ* Ġtgt Pixel Rate ). toFloat () čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// developer . android . com / reference / kotlin / android / graphics / Matrix # pre scale _ 1 čĊĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix () čĊĠĠĠĠĠĠĠ Ġmatrix . pre Scale ( tgt P xl Size Ġ/ Ġorg P xl Size , Ġtgt P xl Size Ġ/ Ġorg P xl Size ) čĊčĊĠĠĠĠĠĠĠ Ġ// Ġ ç¸ ® å°ı ãĥ» æĭ ¡ å¤§ ãģķãĤĮãģŁ ãĥĵ ãĥĥãĥĪ ãĥŀ ãĥĥãĥĹ čĊĠĠĠĠĠĠĠ Ġval Ġbitmap 1 Ġ= ĠBitmap . create Bitmap ( bitmap 0 , Ġ 0 , Ġ 0 , čĊĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap 0 . width , Ġbitmap 0 . height , Ġmatrix , Ġtrue ) čĊčĊĠĠĠĠĠĠĠ Ġ// Ġ ç¸ ¦ ãĢģ ãģ¾ãģŁãģ¯ ãĢģ æ¨ ª ãģ§ ä¸¦ ãģ ¶ ãĥĶ ãĥ¼ãĤ¹ ãģ® æķ° čĊĠĠĠĠĠĠĠ Ġval Ġnum Piece Row Cl m Ġ= Ġsqrt ( num Of Piece . toDouble ()). toInt () čĊčĊĠĠĠĠĠĠĠ Ġ// ĠåĪĨ åī² ãģķãĤĮãģŁ ãĥĵ ãĥĥãĥĪ ãĥŀ ãĥĥãĥĹ ãģ® ãĤµ ãĤ¤ãĤº čĊĠĠĠĠĠĠĠ Ġpiece Width Ġ= Ġbitmap 1 . width Ġ/ Ġnum Piece Row Cl m čĊĠĠĠĠĠĠĠ Ġpiece Height Ġ= Ġbitmap 1 . height Ġ/ Ġnum Piece Row Cl m čĊčĊĠĠĠĠĠĠĠ Ġ// Ġãĥ ľ ãĥ¼ãĥī ãģ® ãĤµ ãĤ¤ãĤº čĊĠĠĠĠĠĠĠ Ġval Ġboard Width Ġ= Ġpiece Width Ġ* Ġnum Piece Row Cl m Ġ+ Ġmargin Piece Ġ* Ġ( num Piece Row Cl m Ġ- Ġ 1 ) čĊĠĠĠĠĠĠĠ Ġval Ġboard Height Ġ= Ġpiece Height Ġ* Ġnum Piece Row Cl m Ġ+ Ġmargin Piece Ġ* Ġ( num Piece Row Cl m Ġ- Ġ 1 ) čĊčĊĠĠĠĠĠĠĠ Ġ// Ġãĥ Ķ ãĥ¼ãĤ¹ ãĤĴ ç½® ãģı éļ Ľ ãģ® åİŁ çĤ¹ čĊĠĠĠĠĠĠĠ Ġorigin X Ġ= Ġ 0 Ġ+ Ġd Metrics . width Pixels Ġ/ Ġ 2 Ġ- Ġboard Width Ġ/ Ġ 2 čĊĠĠĠĠĠĠĠ Ġorigin Y Ġ= Ġ 0 Ġ+ Ġd Metrics . height Pixels Ġ/ Ġ 2 Ġ Ġ- Ġboard Height Ġ/ Ġ 2 čĊčĊĠĠĠĠĠĠĠ Ġreturn Ġbitmap 1 čĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġ// Ġãĥ ľ ãĥ¼ãĥī ä¸Ĭ ãģ® ãĥĶ ãĥ¼ãĤ¹ ãĤĴ åĪĿ æľŁ åĮĸ ãģĻãĤĭ čĊĠĠĠ Ġfun Ġinit Pieces () Ġ{ čĊĠĠĠĠĠĠĠ Ġpieces Ġ= ĠArray ( num Of Piece ){ 0 } čĊĠĠĠĠĠĠĠ Ġfor Ġ( Ġn Ġin Ġ 0 Ġuntil ĠnumOf Piece ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġpieces [ n ] Ġ= Ġn čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ// Ġãĥ Ķ ãĥ¼ãĤ¹ ãģĮ æŃ£ ãģĹãģĦ ä½įç½® ãģ« ãĤ»ãĥĥãĥĪ ãģķãĤĮãģŁ ãģĭ ? čĊĠĠĠ Ġfun Ġis All Pieces On Pro per Places (): Boolean Ġ{ čĊĠĠĠĠĠĠĠ Ġ// Ġpieces [ n ] Ġ= Ġn Ġãģ§ ãģĤ ãĤĮãģ° æŃ£ ãģĹãģĦ ä½įç½® ãģ« ç½® ãģĭ ãĤĮ ãģ¦ãģĦãĤĭ ãĢĤ čĊĠĠĠĠĠĠĠ Ġreturn Ġpieces . filter Indexed Ġ{ index , Ġpiece Ġ-> Ġindex Ġ== Ġpiece }. size Ġ== Ġpieces . size čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ// ĠãĤ · ãĥ£ ãĥĥ ãĥķ ãĥ« ãģĹãģŁ ãĥĶ ãĥ¼ãĤ¹ ãģ® éħį åĪĹ ãĤĴ è¿Ķ ãģĻ čĊĠĠĠ Ġfun Ġget Sh uffled Pieces (): ĠArray < Int > Ġ{ čĊĠĠĠĠĠĠĠ Ġ// Ġãĥ Ķ ãĥ¼ãĤ¹ ãĤĴ ãĥĲ ãĥ© ãĥĲ ãĥ© ãģ« ãģĹãģŁ çĬ¶æħĭ ãģ® ãĥľ ãĥ¼ãĥī čĊĠĠĠĠĠĠĠ Ġval Ġsh uffled Ġ= Ġpieces . clone () čĊĠĠĠĠĠĠĠ Ġ// ĠFish er âĢĵ Y ates Ġshuffle čĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// blog . y - y uki . net / entry / 2 0 1 8 / 0 8 / 2 2 / 0 9 4 0 0 0 čĊĠĠĠĠĠĠĠ Ġfor Ġ( idx 1 Ġin ĠnumOf Piece Ġ- Ġ 1 Ġdown To Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġidx 2 Ġ= ĠRandom . nextInt ( 0 , Ġidx 1 Ġ+ Ġ 1 ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue 1 Ġ= Ġsh uffled [ idx 1 ] čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue 2 Ġ= Ġsh uffled [ idx 2 ] čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsh uffled [ idx 1 ] Ġ= Ġvalue 2 čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsh uffled [ idx 2 ] Ġ= Ġvalue 1 čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn Ġsh uffled čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ// Ġãĥ ľ ãĥ¼ãĥī ä¸Ĭ ãģ® åĪĹ çķª åı· ãĤĴ è¿Ķ ãģĻ čĊĠĠĠ Ġprivate Ġfun Ġget Board Cl m ( n : Int ): Int Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġn Ġ% Ġsqrt ( this . num Of Piece . toDouble ()). toInt () čĊĠĠĠ Ġ} čĊĠĠĠ Ġ// Ġãĥ ľ ãĥ¼ãĥī ä¸Ĭ ãģ® è¡Į çķª åı· ãĤĴ è¿Ķ ãģĻ čĊĠĠĠ Ġprivate Ġfun Ġget Board Row ( n : Int ): Int Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġn Ġ/ Ġsqrt ( this . num Of Piece . toDouble ()). toInt () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ// Ġ ç¸ ® å°ı ãĥ» æĭ ¡ å¤§ ãģķãĤĮãģŁ ãĥĵ ãĥĥãĥĪ ãĥŀ ãĥĥãĥĹ ä¸Ĭ ãģ® X åº§ æ¨Ļ ãĤĴ è¿Ķ ãģĻ čĊĠĠĠ Ġfun Ġget Orig Bitmap X ( n : Int ): Int Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġget Board Cl m ( n ) Ġ* Ġpiece Width čĊĠĠĠ Ġ} čĊĠĠĠ Ġ// Ġ ç¸ ® å°ı ãĥ» æĭ ¡ å¤§ ãģķãĤĮãģŁ ãĥĵ ãĥĥãĥĪ ãĥŀ ãĥĥãĥĹ ä¸Ĭ ãģ® X åº§ æ¨Ļ ãĤĴ è¿Ķ ãģĻ čĊĠĠĠ Ġfun Ġget Orig Bitmap Y ( n : Int ): Int Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġget Board Row ( n ) Ġ* Ġpiece Height čĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġ// Ġãĥĩ ãĤ£ ãĤ¹ ãĥĹ ãĥ¬ ãĤ¤ ä¸Ĭ ãģ® X åº§ æ¨Ļ ãĤĴ è¿Ķ ãģĻ čĊĠĠĠ Ġfun Ġget Display X ( n : Int ): Float Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġ( origin X Ġ+ Ġget Board Cl m ( n ) Ġ* Ġpiece Width Ġ+ Ġmargin Piece Ġ* Ġ( get Board Cl m ( n ) Ġ- Ġ 1 )). toFloat () čĊĠĠĠ Ġ} čĊĠĠĠ Ġ// Ġãĥĩ ãĤ£ ãĤ¹ ãĥĹ ãĥ¬ ãĤ¤ ä¸Ĭ ãģ® Y åº§ æ¨Ļ ãĤĴ è¿Ķ ãģĻ čĊĠĠĠ Ġfun Ġget Display Y ( n : Int ): Float Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġ( origin Y Ġ+ Ġget Board Row ( n ) Ġ* Ġpiece Height Ġ+ Ġmargin Piece Ġ* Ġ( get Board Row ( n ) Ġ- Ġ 1 )). toFloat () čĊĠĠĠ Ġ} čĊĠĠĠ Ġ// Ġãĥĩ ãĤ£ ãĤ¹ ãĥĹ ãĥ¬ ãĤ¤ ä¸Ĭ ãģ® Ġãĥ ľ ãĥ¼ãĥĪ ãģ® Ġãĥ Ķ ãĥ¼ãĤ¹ çķª åı· ãĤĴ è¿Ķ ãģĻ čĊĠĠĠ Ġfun Ġget Display N ( x : Float , Ġy : Float ): Int Ġ{ čĊĠĠĠĠĠĠĠ Ġvar Ġret Ġ= Ġ- 1 čĊĠĠĠĠĠĠĠ Ġfor Ġ( n Ġin Ġ 0 Ġuntil ĠnumOf Piece ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdx Ġ= Ġget Display X ( n ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdy Ġ= Ġget Display Y ( n ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ>= Ġdx Ġ&& Ġx Ġ< Ġdx Ġ+ Ġpiece Width čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġy Ġ>= Ġdy Ġ&& Ġy Ġ< Ġdy Ġ+ Ġpiece Height ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret Ġ= Ġn čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn Ġret čĊĠĠĠ Ġ} č Ċ } čĊč Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ čĊĠĠĠ Ġ// Ġ çĶ» éĿ¢ ãĤĴ ãĤ¿ ãĥĥ ãĥģ ãģĹãģ¦ ãģ¤ ãģĭ ãĤĵ ãģł ãĤ¤ ãĥ¡ ãĥ¼ãĤ¸ ãĥĵ ãĥ¥ ãĥ¼ čĊĠĠĠ Ġprivate Ġvar Ġgrab bed IV Ġ: ĠImageView ? Ġ= Ġnull čĊčĊčĊĠĠĠ Ġ// Ġ ãĤ¤ ãĥ¡ ãĥ¼ãĤ¸ ãĥĵ ãĥ¥ ãĥ¼ãĤĴ ãģ¤ ãģĭ ãĤĵ ãģł æĻĤ ãģ® ãĢģ ãĤ¤ ãĥ¡ ãĥ¼ãĤ¸ ãĥĵ ãĥ¥ ãĥ¼ åº§ æ¨Ļ ç³» ãģ§ ãģ® ãĤ¿ ãĥĥ ãĥģ ãģķãĤĮãģŁ ä½įç½® čĊĠĠĠ Ġprivate Ġvar Ġgrab bed X Ġ: Float Ġ= Ġ- 1 . 0 f čĊĠĠĠ Ġprivate Ġvar Ġgrab bed Y Ġ: Float Ġ= Ġ- 1 . 0 f čĊčĊčĊĠĠĠ Ġ// ĠåĪĨ åī² ãģķãĤĮãģŁ ãĥĵ ãĥĥãĥĪ ãĥŀ ãĥĥãĥĹ ãģ® ãĤ¤ ãĥ¡ ãĥ¼ãĤ¸ ãĥĵ ãĥ¥ ãĥ¼ãģ® ãĥªãĤ¹ãĥĪ čĊĠĠĠ Ġprivate Ġvar Ġiv List Ġ= Ġmutable ListOf < ImageView >() čĊčĊĠĠĠ Ġ// Ġãĥ ľ ãĥ¼ãĥī ãĤĴ æ§ĭæĪĲ ãģĻãĤĭ ãĥĶ ãĥ¼ãĤ¹ ãģ® æķ° čĊĠĠĠ Ġprivate Ġvar ĠnumOf Piece Ġ= Ġ 4 Ġ* Ġ 4 čĊčĊĠĠĠ Ġ// ĠåĪĨ åī² ãģķãĤĮãģŁ ãĥĵ ãĥĥãĥĪ ãĥŀ ãĥĥãĥĹ ãĤĴ è¡¨ç¤º ãģĻãĤĭ è« ĸ çĲĨ ä¸Ĭ ãģ® ãĥľ ãĥ¼ãĥī čĊĠĠĠ Ġvar Ġboard Ġ= ĠBoard () čĊčĊĠĠĠ Ġ// Ġ ãĤ¢ãĥĹãĥª ãģ® çĬ¶æħĭ čĊĠĠĠ Ġvar Ġmy App Status Ġ= ĠMy App Status . Start čĊčĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) čĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon Window Focus Changed ( has Focus : ĠBoolean ) Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . on Window Focus Changed ( has Focus ) čĊčĊĠĠĠĠĠĠĠ Ġinit Image Views () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") čĊĠĠĠ Ġprivate Ġfun Ġinit Image Views () Ġ{ čĊĠĠĠĠĠĠĠ Ġ// Ġ çĶ» éĿ¢ ãĤµ ãĤ¤ãĤº ( application Ġdisplay Ġarea ) ãģ® åıĸå¾Ĺ čĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// ak ira - w atson . com / android / screen - size . html čĊĠĠĠĠĠĠĠ Ġ// Ġon Window Focus Changed åĳ¼ ãģ³ åĩº ãģĹ æĻĤ ãģ«ãģ¯ ãĥ¬ ãĤ¤ ãĤ¢ ãĤ¦ ãĥĪ ãģ® ãĤµ ãĤ¤ãĤº ãģĮ åĪ¤ æĺİ ãģĻãĤĭ čĊĠĠĠĠĠĠĠ Ġval Ġlayout Ġ= ĠfindViewById < Constraint Layout >( R . id . main Layout ) čĊĠĠĠĠĠĠĠ Ġval Ġd Metrics Ġ= ĠDisplay Metrics () čĊĠĠĠĠĠĠĠ Ġd Metrics . height Pixels Ġ= Ġlayout . height čĊĠĠĠĠĠĠĠ Ġd Metrics . width Pixels Ġ= Ġlayout . width čĊčĊĠĠĠĠĠĠĠ Ġ// Ġ 1 æŀļ ãģ® çĶ» åĥı ãĤĴ åĪĨ åī² ãģĹãģ¦ è¡¨ç¤º ãģĻãĤĭ čĊĠĠĠĠĠĠĠ Ġ// Ġ( åıĤèĢĥ ) ãĥªãĤ½ãĥ¼ãĤ¹ çĶ» åĥı ãģĭãĤī åĬł å·¥ ãģĹãģŁ çĶ» åĥı ãĤĴ ä½ľ ãĤĭ čĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// ak ira - w atson . com / android / matrix . html čĊĠĠĠĠĠĠĠ Ġval Ġbitmap 0 Ġ= ĠBitmap Factory . decode Resource ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . leaf _ small čĊĠĠĠĠĠĠĠ Ġ) čĊčĊĠĠĠĠĠĠĠ Ġ// Ġè¡¨ç¤º çĶ¨ ãĥĵ ãĥĥãĥĪ ãĥŀ ãĥĥãĥĹ ãĤĴ çĶ¨ æĦı ãģĻãĤĭ čĊĠĠĠĠĠĠĠ Ġval Ġbitmap 1 Ġ= Ġboard . init Bitmap 1 ( d Metrics , Ġbitmap 0 , ĠnumOf Piece ) čĊčĊĠĠĠĠĠĠĠ Ġ// Ġ ãĥªãĤ¹ãĥĪ ãģ® åĪĿ æľŁ åĮĸ čĊĠĠĠĠĠĠĠ Ġiv List Ġ= Ġmutable ListOf () čĊčĊĠĠĠĠĠĠĠ Ġ// ĠåĪĨ åī² ãģĹãģŁ çĶ» åĥı ãĤĴä½ľæĪĲ ãģĻãĤĭ čĊĠĠĠĠĠĠĠ Ġfor Ġ( n Ġin Ġ 0 Ġuntil ĠnumOf Piece ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġãĥ ĵ ãĥĥãĥĪ ãĥŀ ãĥĥãĥĹ çĶ» åĥı ãģ® åĪĩ ãĤĬ åĩº ãģĹ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap . create Bitmap ( bitmap 1 , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard . get Orig Bitmap X ( n ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard . get Orig Bitmap Y ( n ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard . piece Width , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard . piece Height , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çĶ» åĥı ãĤĴ è¡¨ç¤º ãģĻãĤĭãģŁãĤģ ãģ® ãĤ¤ ãĥ¡ ãĥ¼ãĤ¸ ãĥĵ ãĥ¥ ãĥ¼ãģ® ä½ľæĪĲ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġè¡¨ç¤º æ©Łèĥ½ ãģ® åĪĩ ãĤĬ åĩº ãģĹ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠimageView Ġ= ĠImageView ( this ). apply Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Image Bitmap ( bitmap ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çĶ» åĥı ãģ® è¡¨ç¤º ä½įç½® ãĤĴ å¤īæĽ´ ãģĻãĤĭ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġboard . getDisplay X ( n ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġboard . getDisplay Y ( n ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġiv List . add ( imageView ) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġ// Ġ æĹ¢ åŃĺ ãģ® ãĥ¬ ãĤ¤ ãĤ¢ ãĤ¦ ãĥĪ ãģ« ãĤ¤ ãĥ¡ ãĥ¼ãĤ¸ ãĥĵ ãĥ¥ ãĥ¼ãĤĴ è¿½åĬł ãģĻãĤĭ čĊĠĠĠĠĠĠĠ Ġval Ġmain Layout Ġ= ĠfindViewById < Constraint Layout >( R . id . main Layout ) čĊĠĠĠĠĠĠĠ Ġ// Ġ ãģĻ ãģ§ ãģ« ãĤ¤ ãĥ¡ ãĥ¼ãĤ¸ ãĥĵ ãĥ¥ ãĥ¼ ãģĮãģĤãĤĭ åł´åĲĪãģ¯ ãĢģ ãĥ¬ ãĤ¤ ãĤ¢ ãĤ¦ ãĥĪ ãģĭãĤī åīĬéĻ¤ ãģĹãģ¦ ãģĬ ãģı čĊĠĠĠĠĠĠĠ Ġ// main Layout . removeAll Views () čĊčĊĠĠĠĠĠĠĠ Ġmain Layout . apply Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġiv List ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( i ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġ// ĠãĤ ¿ ãĥĥ ãĥģ ãĤ¤ ãĥĻ ãĥ³ãĥĪ ãģ® è¨Ńå®ļ čĊĠĠĠĠĠĠĠ Ġmain Layout . setOn Touch Listener { čĊĠĠĠĠĠĠĠĠĠĠĠ Ġv : View ?, Ġevent : ĠMotion Event ? Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . on Touch ( v , event ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠãĤ ¿ ãĥĥ ãĥģ ãĤ¤ ãĥĻ ãĥ³ãĥĪ čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġprivate Ġfun Ġon Touch ( v : ĠView ?, Ġevent : ĠMotion Event ?): ĠBoolean Ġ{ čĊĠĠĠĠĠĠĠ ĠLog . d (" on Touch ", Ġ" v Ġ$ v Ġevent Ġ$ event ") čĊĠĠĠĠĠĠĠ Ġ// Ġwarning ãģĮ åĩº ãģŁ ãģŁãĤģ å¯¾ å¿ľ ãģĻãĤĭ čĊĠĠĠĠĠĠĠ Ġv ?. perform Click () čĊčĊĠĠĠĠĠĠĠ Ġwhen ( my App Status ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy App Status . Start Ġ-> Ġon Touch Start ( v , Ġevent ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠMy App Status . On Game Ġ-> Ġon Touch On Game ( v , Ġevent ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ// Ġ ãĤ¤ ãĥĻ ãĥ³ãĥĪ ãĤĴ ä¼ Ŀ æĲ ¬ ãģķ ãģĽ ãģªãģĦ čĊĠĠĠĠĠĠĠ Ġreturn Ġtrue čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠãĤ ¿ ãĥĥ ãĥģ ãĤ¤ ãĥĻ ãĥ³ãĥĪ ĠStart Ġæ Ļ Ĥ čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġprivate Ġfun Ġon Touch Start ( v : ĠView ?, Ġevent : ĠMotion Event ?): ĠBoolean Ġ{ čĊĠĠĠĠĠĠĠ ĠLog . d (" on Touch Start ", Ġ" v Ġ$ v Ġevent Ġ$ event ") čĊĠĠĠĠĠĠĠ Ġwhen Ġ( event ?. action ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ ² ãĥ¼ãĥł ãģ® åĪĿ æľŁ åĮĸ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard . init Pieces () čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ ² ãĥ¼ãĥł ãĤ¯ãĥª ãĤ¢ æĻĤ ãģ® ãĥ¡ ãĥĥãĤ»ãĥ¼ãĤ¸ ãĤĴ éļ ł ãģĹãģ¦ ãģĬ ãģı čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtextView Game Clear Ġ= ĠfindViewById < TextView >( R . id . textView Game Clear ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView Game Clear . visibility Ġ= ĠTextView . IN VISIBLE čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġãĥ Ķ ãĥ¼ãĤ¹ ãĤĴ åĪĿ æľŁ ä½įç½® ãģ« ãĤ»ãĥĥãĥĪ ãģĻãĤĭ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( n Ġin Ġ 0 Ġuntil Ġboard . num Of Piece ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiv Idx Ġ= Ġboard . pieces [ n ] čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiv List [ iv Idx ]. apply Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġboard . getDisplay X ( n ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġboard . getDisplay Y ( n ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġãĥ Ķ ãĥ¼ãĤ¹ ãĤĴ ãĥĲ ãĥ© ãĥĲ ãĥ© ãģ« ãģĹãģŁ çĬ¶æħĭ ãģ® ãĥľ ãĥ¼ãĥī čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsh uffled Ġ Ġ= Ġboard . get Sh uffled Pieces () čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġãĥ Ķ ãĥ¼ãĤ¹ ãĤĴ ãĥĲ ãĥ© ãĥĲ ãĥ© ãģ® çĬ¶æħĭ ãģ§ è¡¨ç¤º ãģĻãĤĭ čĊčĊč ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ¢ ãĥĭ ãĥ¡ ãĥ¼ãĤ·ãĥ§ãĥ³ ãĤĴ åĲĮ æĻĤ å®Łè¡Į ãģĻãĤĭãģŁãĤģ ãģ® ãĥĢ ãĥŁ ãĥ¼ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdummy An ime Ġ= ĠObject Animator . of Int ( 0 , 0 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġan ime Set Ġ= ĠAn imator Set () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( n Ġin Ġ 0 Ġuntil Ġboard . num Of Piece ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiv Idx Ġ= Ġsh uffled [ n ] čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġiv List [ iv Idx ] čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdest X Ġ= Ġboard . getDisplay X ( n ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdest Y Ġ= Ġboard . getDisplay Y ( n ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠObject Animator . of Float ( i , ĠView . X , ĠView . Y , ĠPath (). apply Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// lineTo ( center X , Ġcenter Y ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove To ( i . x , Ġi . y ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( dest X , Ġdest Y ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġan ime Set . play ( dummy An ime ). with ( obj ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġan ime Set . apply Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġ 1 0 0 0 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Listener ( object : ĠAn imator Listener Adapter () Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ?) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Animation End ( animation ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ¢ ãĥĭ ãĥ¡ ãĥ¼ãĤ·ãĥ§ãĥ³ çµĤ äºĨ å¾Į ãģ« ãĤ¹ãĥĨ ãĥ¼ãĤ¿ ãĤ¹ ãĤĴ ãĤ ² ãĥ¼ãĥł ä¸Ń ãģ« å¤īæĽ´ ãģĻãĤĭ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy App Status Ġ= ĠMy App Status . On Game čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard . pieces Ġ= Ġsh uffled čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ¢ ãĥĭ ãĥ¡ ãĥ¼ãĤ·ãĥ§ãĥ³ ä¸Ń ãģ« ãģĻãĤĭ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy App Status Ġ= ĠMy App Status . In Animation čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ä½ķ ãĤĤ ãģĹãģªãģĦ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn Ġtrue čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠãĤ ¿ ãĥĥ ãĥģ ãĤ¤ ãĥĻ ãĥ³ãĥĪ ĠOn Game Ġæ Ļ Ĥ čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġprivate Ġfun Ġon Touch On Game ( v : ĠView ?, Ġevent : ĠMotion Event ?): ĠBoolean Ġ{ čĊĠĠĠĠĠĠĠ Ġ// Ġ ãĤ¤ ãĥĻ ãĥ³ãĥĪ ãģĮ çĻº çĶŁ ãģĹãģŁ åº§ æ¨Ļ čĊĠĠĠĠĠĠĠ Ġ// Ġevent . x , Ġevent . y Ġãģ¨ Ġevent . raw X , Ġevent . raw Y ãģ§ãģ¯ åİŁ çĤ¹ ãģ® ä½įç½® ãģĮ çķ ° ãģªãĤĭ čĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// stackoverflow . com / questions / 2 0 6 3 6 1 6 3 / difference - between - motion event - ge tr aw x - and - motion event - get x čĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġevent ?. x Ġ?: Ġ- Ġ 1 . 0 f čĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġevent ?. y Ġ?: Ġ- Ġ 1 . 0 f čĊĠĠĠĠĠĠĠ Ġwhen Ġ( event ?. action ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ãģ¤ ãģĭ ãĤĵ ãģł çĶ» åĥı ãģ® ç§» åĭķ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grab bed IV Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" on Touch ", Ġ" v Ġ$ v Ġevent Ġ$ event ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" on Touch ", Ġ" MOVE ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrab bed IV ?. x Ġ= Ġx Ġ- Ġgrab bed X čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrab bed IV ?. y Ġ= Ġy Ġ- Ġgrab bed Y čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠåĪĨ åī² ãģķãĤĮãģŁ çĶ» åĥı ãĤĴ ãģ¤ ãģĭ ãĤĢ čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è© ² å½ĵ ãģĻãĤĭ ãĥĶ ãĥ¼ãĤ¹ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpiece N Ġ= Ġboard . getDisplay N ( x , Ġy ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( piece N Ġ>= Ġ 0 Ġ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard . num Grab bed Ġ= Ġpiece N čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrab bed IV Ġ= Ġiv List [ board . pieces [ piece N ]] čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ãĤ¤ ãĥ¡ ãĥ¼ãĤ¸ ãĥĵ ãĥ¥ ãĥ¼ãģ® ãģ© ãģ® ä½įç½® ãĤĴ ãģ¤ ãģĭ ãĤĵ ãģł ãģ® ãģĭ è¦ ļ ãģĪ ãģ¦ ãģĬ ãģı čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrab bed X Ġ= Ġx Ġ- Ġgrab bed IV !!. x čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrab bed Y Ġ= Ġy Ġ- Ġgrab bed IV !!. y čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ãģ¤ ãģĭ ãĤĵ ãģł çĶ» åĥı ãĤĴ æľĢ ä¸Ĭ ä½į ãģ« ãģĻãĤĭ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġchange Ġorder Ġof Ġviews Ġin Ġlinear Ġlayout Ġandroid čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhttps :// stackoverflow . com / questions / 1 7 7 7 6 3 0 6 / change - order - of - views - in - linear - layout - android čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grab bed IV Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġvar Ġmain Layout Ġ= ĠfindViewById < Constraint Layout >( R . id . main Layout ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmain Layout Ġ= Ġv Ġas ĠConstraint Layout čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Layout . remove View ( grab bed IV ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Layout . addView ( grab bed IV ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" on Touch ", Ġ" v Ġ$ v Ġevent Ġ$ event ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" on Touch ", Ġ" RELEASE ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çĶ» åĥı ãĤĴ éĽ ¢ ãģĻ åĩ¦çĲĨ ï¼ļ Ġ ä»ĸ ãģ® çĶ» åĥı ãģ® ä¸Ĭ ãģ§ éĽ ¢ ãģĻ åł´åĲĪãģ¯ ãĢģ ãģĿãģ® çĶ» åĥı ãģ¨ åħ¥ ãĤĮ æĽ¿ ãģĪãĤĭ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ãģĿãĤĮ ä»¥ å¤ĸ ãģ® åł´åĲĪãģ¯ éĽ ¢ ãģĹãģŁ çĶ» åĥı ãĤĴ åħĥ ãģ® ä½įç½® ãģ« æĪ » ãģĻ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnum Sw itched Ġ= Ġboard . getDisplay N ( x , Ġy ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( num Sw itched Ġ>= Ġ 0 Ġ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çĶ» åĥı ãģ® åħ¥ ãĤĮ æĽ¿ ãģĪ ãĤ¢ ãĥĭ ãĥ¡ ãĥ¼ãĤ·ãĥ§ãĥ³ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġswitched IV Ġ= Ġiv List [ board . pieces [ num Sw itched ]] čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdummy An ime Ġ= ĠObject Animator . of Int ( 0 , 0 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġan ime Set Ġ= ĠAn imator Set () čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġãĥ Ķ ãĥ¼ãĤ¹ 1 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj 1 Ġ= ĠObject Animator . of Float ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswitched IV , ĠView . X , ĠView . Y , ĠPath (). apply Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove To ( sw itched IV . x , Ġswitched IV . y ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard . getDisplay X ( board . num Grab bed ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard . getDisplay Y ( board . num Grab bed )) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġan ime Set . play ( dummy An ime ). with ( obj 1 ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġãĥ Ķ ãĥ¼ãĤ¹ 2 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj 2 Ġ= ĠObject Animator . of Float ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrab bed IV , ĠView . X , ĠView . Y , ĠPath (). apply Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove To ( grab bed IV !!. x , Ġgrab bed IV !!. y ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard . getDisplay X ( num Sw itched ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard . getDisplay Y ( num Sw itched )) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġan ime Set . play ( dummy An ime ). with ( obj 2 ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġan ime Set . apply Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġ 3 0 0 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Listener ( object : ĠAn imator Listener Adapter () Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ?) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Animation End ( animation ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ¢ ãĥĭ ãĥ¡ ãĥ¼ãĤ·ãĥ§ãĥ³ çµĤ äºĨ å¾Į ãģ« ãĤ ² ãĥ¼ãĥł ãĤ¯ãĥª ãĤ¢ åĪ¤ å®ļ ãĤĴ ãģĻãĤĭ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( board . is All Pieces On Pro per Places ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ ² ãĥ¼ãĥł ãĤ¯ãĥª ãĤ¢ ãģ® åĩ¦çĲĨ ãģ¸ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ ² ãĥ¼ãĥł ãĤ¯ãĥª ãĤ¢ æĻĤ ãģ® ãĥ¡ ãĥĥãĤ»ãĥ¼ãĤ¸ ãĤĴ è¡¨ç¤º ãģĻãĤĭ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtextView Game Clear Ġ= ĠfindViewById < TextView >( R . id . textView Game Clear ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView Game Clear . visibility Ġ= ĠTextView . VISIBLE čĊč ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġãĥ ¬ ãĤ¤ ãĤ¢ ãĤ¦ ãĥĪ ãģ® æľĢ ä¸Ĭ ä½į ãģ« è¡¨ç¤º ãģĻãĤĭ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmain Layout Ġ= ĠfindViewById < Constraint Layout >( R . id . main Layout ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Layout . remove View ( textView Game Clear ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Layout . addView ( textView Game Clear ) čĊč ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ãĤ¹ãĥĨ ãĥ¼ãĤ¿ ãĤ¹ ãģ¯ éĸĭå§ĭ çĶ» éĿ¢ ãģ« ãģĻãĤĭ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy App Status Ġ= ĠMy App Status . Start čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ãĤ¹ãĥĨ ãĥ¼ãĤ¿ ãĤ¹ ãĤĴ ãĤ ² ãĥ¼ãĥł ä¸Ń ãģ« å¤īæĽ´ ãģĻãĤĭ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy App Status Ġ= ĠMy App Status . On Game čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġãĥ Ķ ãĥ¼ãĤ¹ ãģ® ä½įç½® ãĤĴ åħ¥ ãĤĮ æĽ¿ ãģĪ ãģĻãĤĭ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Grab bed Ġ= Ġboard . pieces [ board . num Grab bed ] čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Sw itched Ġ= Ġboard . pieces [ num Sw itched ] čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard . pieces [ board . num Grab bed ] Ġ= Ġv Sw itched čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard . pieces [ num Sw itched ] Ġ= Ġv Grab bed čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çĶ» åĥı ãĤĴ åħĥ ãģ« æĪ » ãģĻ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grab bed IV Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrab bed IV !!. x Ġ= Ġboard . getDisplay X ( board . num Grab bed ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrab bed IV !!. y Ġ= Ġboard . getDisplay Y ( board . num Grab bed ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard . num Grab bed Ġ= Ġ- 1 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrab bed IV Ġ= Ġnull čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ä½ķ ãĤĤ ãģĹãģªãģĦ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġreturn Ġtrue čĊĠĠĠ Ġ} č Ċ } čĊčĊ