public V2 Last1() { var returnPos = new V2(); var firstBoard = new BoolCoin[8][]; var maxScore = 0; for (var i = 0; i < 8; i++) { firstBoard[i] = new BoolCoin[8]; for (var j = 0; j < 8; j++) { if (GameController.Board[i][j]) { firstBoard[i][j] = new BoolCoin(GameController.Board[i][j].GetComponent <Coin>().Color); } else { firstBoard[i][j] = new BoolCoin(); } } } var firstPutablePos = PutablePos(AiTurn, firstBoard); Debug.Log("count:" + firstPutablePos.Count); foreach (var pos in firstPutablePos) { var thisScore = 0; var nextBoard = MakeBoard(firstBoard); PutBool(pos, AiTurn, nextBoard); var playerPutable = PutablePos(!AiTurn, nextBoard); if (playerPutable.Count == 0) { return(pos); } foreach (var playerpos in playerPutable) { var nextnextBoard = MakeBoard(nextBoard); PutBool(playerpos, !AiTurn, nextnextBoard); var aiPutable = PutablePos(AiTurn, nextnextBoard); var allGet = (from aiPut in aiPutable let lastBoard = MakeBoard(nextnextBoard) select PutBoolCoinResult(aiPut, AiTurn, lastBoard).Count).Sum(); thisScore += allGet; Debug.Log("allGet:" + allGet); } Debug.Log("thisScore:" + thisScore); if (maxScore > thisScore) { continue; } maxScore = thisScore; returnPos = pos; Debug.Log("(" + pos.X + "," + pos.Y + ")"); } Debug.Log("(" + returnPos.X + "," + returnPos.Y + ")"); return(returnPos); }
public BoolCoin[][] MakeBoard(BoolCoin[][] originBoard) { var newBoard = new BoolCoin[originBoard.Length][]; for (var i = 0; i < originBoard.Length; i++) { newBoard[i] = new BoolCoin[originBoard[i].Length]; for (var j = 0; j < originBoard[i].Length; j++) { newBoard[i][j] = new BoolCoin { Exist = originBoard[i][j].Exist, Color = originBoard[i][j].Color }; } } return(newBoard); }
public V2 Last2() { Debug.Log("Last2"); BoolBoard = new BoolCoin[GameController.Board.Length][]; for (var i = 0; i < BoolBoard.Length; i++) { BoolBoard[i] = new BoolCoin[GameController.Board[i].Length]; for (var j = 0; j < BoolBoard[i].Length; j++) { if (GameController.Board[i][j]) { BoolBoard[i][j] = new BoolCoin(GameController.Board[i][j].GetComponent <Coin>().Color); } else { BoolBoard[i][j] = new BoolCoin(); } } } var maxScore = -9999; var goodPos = new List <V2>(); foreach (var pos in PutCoins) { var thisScore = 0; PutBool(pos, AiTurn, BoolBoard); thisScore += CoinCount(AiTurn, BoolBoard); thisScore -= Score(PutablePos(!AiTurn, BoolBoard)); if (maxScore < thisScore) { goodPos = new List <V2> { pos }; maxScore = thisScore; } else if (maxScore == thisScore) { goodPos.Add(pos); } } var returnPos = goodPos[Random.Range(0, goodPos.Count - 1)]; return(returnPos); }