package Ġcom . b ent reng ro ve . chess Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . compose . foundation . layout . Column Ċ import Ġandroidx . compose . foundation . layout . Row Ċ import Ġandroidx . compose . foundation . layout . Spacer Ċ import Ġandroidx . compose . foundation . layout . height Ċ import Ġandroidx . compose . material .* Ċ import Ġandroidx . compose . runtime .* Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . platform . setContent Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġcom . b ent reng ro ve . chess . ui . Che ss Theme Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlin . math . round ToInt Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Content Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠChe ss Theme Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠA Ġsurface Ġcontainer Ġusing Ġthe Ġ' background ' Ġcolor Ġfrom Ġthe Ġtheme ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSurface ( color Ġ= ĠMaterial Theme . colors . background ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGame View () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠGame View () Ġ{ ĊĠĠĠ Ġval Ġai Ġby Ġremember Ġ{ Ġmutable State Of ( AI ( Piece Color . Black )) Ġ} ĊĠĠĠ Ġvar Ġai Enabled Ġby Ġremember Ġ{ Ġmutable State Of ( false ) Ġ} ĊĠĠĠ Ġvar Ġmove Result Ġby Ġremember Ġ{ Ġmutable State Of < Move Result >( Move Result . Success ( Game ())) } ĊĠĠĠ Ġvar Ġselection : ĠPosition ? Ġby Ġremember Ġ{ Ġmutable State Of ( null ) Ġ} ĊĊĠĠĠ Ġwhen Ġ( val Ġresult Ġ= Ġmove Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠMove Result . Promotion Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġon Piece Selection Ġ= Ġresult . on Piece Selection ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġon Button Clicked : Ġ( Piece Type ) Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove Result Ġ= Ġon Piece Selection ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Dismiss Request Ġ= Ġ{}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuttons Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠButton ({ Ġon Button Clicked ( Piece Type . Queen ) Ġ}) Ġ{ ĠText ( text Ġ= Ġ" Queen ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠButton ({ Ġon Button Clicked ( Piece Type . R ook ) Ġ}) Ġ{ ĠText ( text Ġ= Ġ" R ook ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠButton ({ Ġon Button Clicked ( Piece Type . K night ) Ġ}) Ġ{ ĠText ( text Ġ= Ġ" K night ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠButton ({ Ġon Button Clicked ( Piece Type . B ish op ) Ġ}) Ġ{ ĠText ( text Ġ= Ġ" B ish op ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġ" Prom ote Ġto ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġ" Please Ġchoose Ġa Ġpiece Ġtype Ġto Ġpromote Ġthe Ġp awn Ġto ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠMove Result . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgame Ġ= Ġresult . game ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠonSelect : Ġ( Position ) Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsel Ġ= Ġselection ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( game . can Select ( it )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( sel Ġ!= Ġnull Ġ&& Ġgame . can Move ( sel , Ġit )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove Result Ġ= Ġgame . do Move ( sel , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ai Enabled Ġ&& Ġgame . turn Ġ== ĠPiece Color . Black ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Move Ġ= Ġai . calculate Next Move ( game , ĠPiece Color . Black ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next Move Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġai Result Ġ= Ġgame . do Move ( next Move . from , Ġnext Move . to ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove Result Ġ= Ġwhen ( ai Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMove Result . Success Ġ-> Ġai Result ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMove Result . Promotion Ġ-> Ġai Result . on Piece Selection ( Piece Type . Queen ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwhite Value Ġ= Ġgame . value For ( Piece Color . White ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblack Value Ġ= Ġgame . value For ( Piece Color . Black ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Value Ġ= Ġwhite Value Ġ+ Ġblack Value ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwhite Percentage Ġ= Ġ(( white Value . toFloat ()/ total Value . toFloat ()) Ġ* Ġ 1 0 0 f ). round ToInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblack Percentage Ġ= Ġ(( black Value . toFloat ()/ total Value . toFloat ()) Ġ* Ġ 1 0 0 f ). round ToInt () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColumn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGame View ( board Ġ= Ġgame . board , Ġselection Ġ= Ġselection , Ġmoves Ġ= Ġgame . moves For Piece At ( selection ), Ġdid Tap Ġ= ĠonSelect ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . height ( 1 6 . dp )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġ" State : Ġ${ game . game State }. ĠWhite : Ġ$ white Percentage % ĠBlack : Ġ$ black Percentage %", Ġstyle Ġ= ĠMaterial Theme . typography . body 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . height ( 1 6 . dp )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRow Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText (" Black Ġis ĠAI ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSwitch ( checked Ġ= Ġai Enabled , Ġon Checked Change Ġ= Ġ{ Ġai Enabled Ġ= Ġit Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠButton ( onClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove Result Ġ= ĠMove Result . Success ( Game ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġmodifier Ġ= ĠModifier . align ( Alignment . Center H orizontally )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġ" Reset ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }