public void TestIsDarkSquare() { GameObject o = new GameObject(); BoardPreparator preparator = o.AddComponent <BoardPreparator>(); int i = 0; int j = 0; bool result = preparator.IsDarkSquare(0, 0); Assert.AreEqual(true, result); result = preparator.IsDarkSquare(0, 1); Assert.AreEqual(false, result); result = preparator.IsDarkSquare(1, 0); Assert.AreEqual(false, result); result = preparator.IsDarkSquare(1, 1); Assert.AreEqual(true, result); }
public void EmptySpaceClicked(int xWorldPos, int yWorldPos) { bool attacked = false; bool attackAgain = false; Debug.Log("Empty Space Clicked"); if (currentPiece == null) { Debug.Log("There is no piece selected"); } else { if (currentPiece.GetPlayerNumber() == currentPlayerNumber) { Piece targetPiece = PieceToAttackFromPosition(currentPiece, xWorldPos, yWorldPos); if (targetPiece && boardPreparator.IsDarkSquare(xWorldPos, yWorldPos)) { Debug.Log("Can attack!"); ExecuteAttack(currentPiece, targetPiece); ExecuteMove(currentPiece.GetXPosition(), currentPiece.GetYPosition(), xWorldPos, yWorldPos); attacked = true; attackAgain = CanAttackAgain(currentPiece.GetXPosition(), currentPiece.GetYPosition()); EndCurrentPlayerTurn(attackAgain); } else if (CanMoveToSpace(currentPiece, xWorldPos, yWorldPos)) { Debug.Log(xWorldPos.ToString() + " AND " + yWorldPos.ToString()); ExecuteMove(currentPiece.GetXPosition(), currentPiece.GetYPosition(), xWorldPos, yWorldPos); EndCurrentPlayerTurn(attackAgain); } } else { Debug.Log("That's not your turn funny boy..."); } } CheckBoardState(attacked); }
void BotAction() { //If CountBlackPieces == 0, o player ganhou Piece p; bool atk = false; bool move = false; bool attackAgain = false; for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { if (((i + j) % 2) == 0) { int[] pos; pos = null; p = boardState[i][j]; if (p != null && p.CompareTag("P2 Piece")) { pos = BotAttacker(p, i, j); } if (p && pos != null && atk == false) // p.CompareTag("P2 Piece") serve pra escolher só peça da IA { Piece targetPiece = PieceToAttackFromPosition(p, pos[0], pos[1]); if (targetPiece && boardPreparator.IsDarkSquare(pos[0], pos[1])) { currentPiece = p; Debug.Log("Can attack!"); ExecuteAttack(p, targetPiece); ExecuteMove(p.GetXPosition(), p.GetYPosition(), pos[0], pos[1]); attackAgain = CanAttackAgain(pos[0], pos[1]); EndCurrentPlayerTurn(attackAgain); atk = true; } } } } } if (atk == false) { //Botar um seed, mas funciona List <Piece> possibleMoves = new List <Piece>(); for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { p = boardState[i][j]; if (p != null && move == false && p.CompareTag("P2 Piece")) { /*if (IsPositionInsideBoard(i + 1, j - 1) && boardState[i + 1][j - 1] == null && boardPreparator.IsDarkSquare(i+1, j-1)) * { * // aqui estava currentPiece que é a peça selecionada atualmente, só que a peça atual não era p. * currentPiece = p; * ExecuteMove(p.GetXPosition(), p.GetYPosition(), i+1, j-1); * EndCurrentPlayerTurn(attackAgain); * move = true; * } * else if (IsPositionInsideBoard(i - 1, j - 1) && boardState[i - 1][j - 1] == null && boardPreparator.IsDarkSquare(i - 1, j - 1)) * { * currentPiece = p; * ExecuteMove(p.GetXPosition(), p.GetYPosition(), i - 1, j - 1); * EndCurrentPlayerTurn(attackAgain); * move = true; * } * * Implementando o aleatorio a partir daqui, o codigo em cima funfa mas n aleatorio */ if (CanBlackMove(p)) { possibleMoves.Add(p); //Faz uma lista de possiveis pecas a serem mexidas } } } } int size = possibleMoves.Count; var rand = new System.Random(); p = possibleMoves[rand.Next(size)]; //Escolhe uma peca aleatoriamente do que foi selecionado currentPiece = p; int direction = rand.Next(2); /*Se direction for true ele tenta ir pela direita. Se nao conseguir, ele vai pela esquerda, ja q teoricamente ele tem q conseguir ir pra algum lugar. * Se direction for false ele comeca pela esquerda e dps vai pra direita.*/ if (direction == 1) { int i = p.GetXPosition(), j = p.GetYPosition(); if (IsPositionInsideBoard(i + 1, j - 1) && boardState[i + 1][j - 1] == null) { ExecuteMove(p.GetXPosition(), p.GetYPosition(), i + 1, j - 1); EndCurrentPlayerTurn(attackAgain); move = true; } else { ExecuteMove(p.GetXPosition(), p.GetYPosition(), i - 1, j - 1); EndCurrentPlayerTurn(attackAgain); move = true; } } else { int i = p.GetXPosition(), j = p.GetYPosition(); if (IsPositionInsideBoard(i - 1, j - 1) && boardState[i - 1][j - 1] == null) { ExecuteMove(p.GetXPosition(), p.GetYPosition(), i - 1, j - 1); EndCurrentPlayerTurn(attackAgain); move = true; } else { ExecuteMove(p.GetXPosition(), p.GetYPosition(), i + 1, j - 1); EndCurrentPlayerTurn(attackAgain); move = true; } } } //If(move == 0), o player ganhou. Significa q ele n conseguiu nem comer ngm nem fazer nenhum movimento }