package Ġorg . k lips . dsl Ċ Ċ import Ġorg . junit . Test Ċ import Ġorg . k lips . Rule Group Not Triggered Exception Ċ import Ġorg . k lips . engine .* Ċ import Ġorg . k lips . engine . re te . Ret e Input Ċ import Ġkotlin . test . assert Fails With Ċ Ċ class ĠGame Scenario Test Ġ{ ĊĊĠĠĠ Ġval Ġpid 1 Ġ= ĠPlayer Id ( 1 ) ĊĠĠĠ Ġval Ġpid 2 Ġ= ĠPlayer Id ( 2 ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmain () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinput Ġ= ĠGame Rules (). input ĊĊĠĠĠĠĠĠĠ Ġwith ( input ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġaims : ĠPair < Actor Id , ĠActor Id >? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflush (" Adj - Sym metry ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Space () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaims Ġ= Ġplace A ims () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( aim 1 , Ġaim 2 ) Ġ= Ġaims !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( aim s ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate ĠCommunication Ġagent Ġby ĠA IM Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflush (" Create Agent ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ+ Create Agent Command ( aim 1 , Ġcid ( 1 0 , Ġ 1 1 ). value , ĠActor Kind . Comm ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomm 1 Ġ= ĠActor Id . last !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" COMM : Ġ$ comm 1 ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate ĠCommunication Ġagent Ġby ĠA IM Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflush (" Create Agent ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ+ Create Agent Command ( aim 2 , Ġcid ( 9 0 , Ġ 9 1 ). value , ĠActor Kind . Comm ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMove ĠCommunication Ġagent Ġto Ġcell Ġ( 1 0 , 1 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 2 .. 1 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflush (" Move ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ+ Move Command ( comm 1 . facet , Ġcid ( 1 0 , Ġi )) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDeploy ĠCommunication Ġagent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflush (" Deploy ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ+ Deploy Command ( comm 1 . facet ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate ĠGuard Ġagent Ġby ĠA IM Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflush (" Create Agent ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ+ Create Agent Command ( aim 1 , Ġcid ( 1 0 , Ġ 1 1 ). value , ĠActor Kind . Guard ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġguard 1 Ġ= ĠActor Id . last !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMove ĠGuard Ġagent Ġto Ġcell Ġ( 1 0 , 1 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflush (" Move ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ+ Move Command ( guard 1 . facet , Ġcid ( 1 0 , Ġ 1 2 )) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMove ĠGuard Ġagent Ġto Ġcell Ġ( 1 1 , 1 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflush (" Move ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ+ Move Command ( guard 1 . facet , Ġcid ( 1 1 , Ġ 1 2 )) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTry Ġmove ĠGuard Ġagent Ġto Ġcell Ġ( 1 2 , 1 2 ) Ġ=> Ġmust Ġfail Ġdue Ġto Ġout Ġof Ġcomm Ġfield ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With < Rule Group Not Triggered Exception > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflush (" Move ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ+ Move Command ( guard 1 . facet , Ġcid ( 1 2 , Ġ 1 2 )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTry Ġmove ĠGuard Ġagent Ġto Ġcell Ġ( 1 2 , 1 2 ) Ġ=> Ġmust Ġfail Ġdue Ġto Ġout Ġof Ġcomm Ġfield ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With < Rule Group Not Triggered Exception > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflush (" Move ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ+ Move Command ( guard 1 . facet , Ġcid ( 1 1 , Ġ 1 1 )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMove ĠGuard Ġagent Ġto Ġ( 1 1 , 1 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflush (" Move ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ+ Move Command ( guard 1 . facet , Ġcid ( 1 1 , Ġ 1 3 )) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMove ĠGuard Ġagent Ġto Ġ( 1 2 , 1 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflush (" Move ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ+ Move Command ( guard 1 . facet , Ġcid ( 1 2 , Ġ 1 3 )) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTry Ġmove ĠGuard Ġagent Ġto Ġcell Ġ( 1 3 , 1 3 ) Ġ=> Ġmust Ġfail Ġdue Ġto Ġout Ġof Ġcomm Ġfield ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With < Rule Group Not Triggered Exception > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflush (" Move ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ+ Move Command ( guard 1 . facet , Ġcid ( 1 3 , Ġ 1 3 )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTry Ġmove ĠGuard Ġagent Ġto Ġcell Ġ( 1 3 , 1 4 ) Ġ=> Ġmust Ġfail Ġdue Ġto Ġout Ġof Ġcomm Ġfield ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With < Rule Group Not Triggered Exception > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflush (" Move ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ+ Move Command ( guard 1 . facet , Ġcid ( 1 3 , Ġ 1 4 )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDeploy ĠGuard Ġagent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflush (" Deploy ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ+ Deploy Command ( guard 1 . facet ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠRet e Input . create Space () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 1 .. 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcid 1 Ġ= Ġcid ( i , Ġj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Adjacent ( cid 1 , Ġcid ( i , Ġj Ġ+ Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Adjacent ( cid 1 , Ġcid ( i Ġ+ Ġ 1 , Ġj )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠRet e Input . place A ims (): ĠPair < Actor Id , ĠActor Id > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaim 1 Ġ= ĠActor Id () ĊĠĠĠĠĠĠĠ Ġval Ġaim 2 Ġ= ĠActor Id () ĊĊĠĠĠĠĠĠĠ Ġ+ Actor ( aim 1 , Ġpid 1 , ĠActor Kind . A im , ĠState . Deploy ed ) ĊĠĠĠĠĠĠĠ Ġ+ Actor ( aim 2 , Ġpid 2 , ĠActor Kind . A im , ĠState . Deploy ed ) ĊĊĠĠĠĠĠĠĠ Ġ+ At ( aim 1 . facet , Ġcid ( 1 0 , Ġ 1 0 )) ĊĠĠĠĠĠĠĠ Ġ+ At ( aim 2 . facet , Ġcid ( 9 0 , Ġ 9 0 )) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠPair ( aim 1 , Ġaim 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcid Pool Ġ= Ġmutable Map Of < Int , ĠFac et . Const Facet < CellId >>() ĊĊĠĠĠ Ġfun Ġcid ( i : ĠInt , Ġj : ĠInt ): ĠFac et . Const Facet < CellId > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġi Ġ* Ġ 1 0 0 0 Ġ+ Ġj ĊĠĠĠĠĠĠĠ Ġreturn Ġcid Pool . get Or Put ( n ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCell Id ( n ). facet Ġas ĠFac et . Const Facet < CellId > ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġaid Pool Ġ= Ġmutable Map Of < Int , ĠFac et < Actor Id >>() ĊĊĠĠĠ Ġfun Ġaid ( i : ĠInt ): ĠFac et < Actor Id > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġaid Pool . get Or Put ( i ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActor Id ( i ). facet ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ ĠSystem . out . print ("> >") ĊĠĠĠ ĠSystem .` in `. read () ĊĠĠĠ ĠGame Scenario Test (). main () ĊĠĠĠ ĠSystem . out . print ("> >> ") ĊĠĠĠ ĠSystem .` in `. read () Ċ }