예제 #1
0
    public void ResetValues(bool physicalMovement, GameObject marble, GameObject position)
    {
        if (physicalMovement)
        {
            NewTileScript fromPos = marble.GetComponent <MarbleScript>().myPosition.GetComponent <NewTileScript>();
            NewTileScript toPos   = position.GetComponent <NewTileScript>();

            fromPos.taken    = false;
            fromPos.myMarble = null;

            toPos.taken        = true;
            toPos.myMarble     = marble;
            toPos.moveHere     = false;
            toPos.jumpPosition = false;
        }
        switch (playerState)
        {
        case (PlayerState.Player):
            if (neighbours != null)
            {
                foreach (GameObject pos in possibleMoves)
                {
                    pos.GetComponent <NewTileScript>().taken        = false;
                    pos.GetComponent <NewTileScript>().myMarble     = null;
                    pos.GetComponent <NewTileScript>().moveHere     = false;
                    pos.GetComponent <NewTileScript>().jumpPosition = false;

                    Behaviour halo = (Behaviour)pos.GetComponent("Halo");
                    halo.enabled = false;
                }
                possibleMoves.Clear();
                StartCoroutine(SwitchCurrentPlayer());
            }
            return;

        case (PlayerState.Npc):
        case (PlayerState.NpcMinimax):
            if (neighbours != null)
            {
                foreach (GameObject pos in possibleMoves)
                {
                    pos.GetComponent <NewTileScript>().taken        = false;
                    pos.GetComponent <NewTileScript>().myMarble     = null;
                    pos.GetComponent <NewTileScript>().moveHere     = false;
                    pos.GetComponent <NewTileScript>().jumpPosition = false;
                }
                possibleMoves.Clear();
                if (playerState == PlayerState.Npc)
                {
                    StartCoroutine(SwitchCurrentPlayer());
                }
                else
                {
                    GameObject.FindGameObjectWithTag(currentPlayer + "Player").GetComponent <NpcBehaviour>().WaitForMoves();
                }
            }
            return;
        }
    }
예제 #2
0
    public Minimax(NpcBehaviour npc, MarbleScript marble, NewTileScript tileToMoveTo, GameManager gameManager, List <NewTileScript> previousTiles, bool jump)
    {
        this.bestNode      = this;
        score              = -Mathf.Infinity;
        this.npc           = npc;
        this.jump          = jump;
        this.marble        = marble;
        this.tileToMoveTo  = tileToMoveTo;
        this.gameManager   = gameManager;
        this.previousTiles = previousTiles;

        gameManager.MoveMarbleScript(marble.gameObject, tileToMoveTo.gameObject);

        previousTiles.Add(tileToMoveTo);
        if (jump && gameManager.playerList[(gameManager.playerList.IndexOf(marble.Player.PlayerColor) + 1) % gameManager.playerList.Count] + "Player" != gameManager.CurrentPlayer)
        {
            gameManager.MarblePicked(marble.gameObject, tileToMoveTo.gameObject, true, this, npc);
        }
        else
        {
            bestNode = this;
        }
        gameManager.StartMinimax(this);
    }
예제 #3
0
 public PossibleMove(MarbleScript marble, NewTileScript tile)
 {
     this.marble = marble;
     this.tile   = tile;
 }