Пример #1
0
    // casting state
    void CalculateSpell()
    {
        // calculate opponents possible moves
        sMovePath   m_PossibleMoves = GetPossibleMoves(m_Opponent.m_CurrentX, m_Opponent.m_CurrentY);
        TileManager targetTile;

        // if only one move left and tile is 1 or 4, simply cast spell to kill
        if (m_PossibleMoves.m_AvailableMoves.Count == 1)
        {
            targetTile = m_PlayerControl.m_TileMap [(int)m_PossibleMoves.m_AvailableMoves [0].transform.position.y].m_Tiles [(int)m_PossibleMoves.m_AvailableMoves [0].transform.position.x].GetComponent <TileManager> ();

            if (targetTile.m_Value == 1)
            {
                targetTile.m_Manager.PlayIceSound();
                m_IceSpell.transform.position = targetTile.transform.position;
                m_IceSpell.SetActive(true);
                targetTile.EnchantTile(-1);
            }
            else if (targetTile.m_Value == 4)
            {
                targetTile.m_Manager.PlayFireSound();
                m_FireSpell.transform.position = targetTile.transform.position;
                m_FireSpell.SetActive(true);
                targetTile.EnchantTile(1);
            }
        }
        else if (m_PossibleMoves.m_AvailableMoves.Count == 0)
        {
            m_PlayerControl.m_Manager.TurnSwitch();
            return;             // should technically cast a spell before passing turn but whatevs
        }

        // otherwise cast spell randomly on one of the opponents next tiles?
        int randomTile = Random.Range(0, m_PossibleMoves.m_AvailableMoves.Count);

        targetTile = m_PlayerControl.m_TileMap [(int)m_PossibleMoves.m_AvailableMoves [randomTile].transform.position.y].m_Tiles [(int)m_PossibleMoves.m_AvailableMoves [randomTile].transform.position.x].GetComponent <TileManager> ();

        if (targetTile.m_Value >= 3)
        {
            targetTile.m_Manager.PlayFireSound();
            m_FireSpell.transform.position = targetTile.transform.position;
            m_FireSpell.SetActive(true);
            targetTile.EnchantTile(1);
        }
        else
        {
            targetTile.m_Manager.PlayIceSound();
            m_IceSpell.transform.position = targetTile.transform.position;
            m_IceSpell.SetActive(true);
            targetTile.EnchantTile(-1);
        }
    }
Пример #2
0
    // movement state
    public void CalculateMove()
    {
        //calculate possible moves
        sMovePath m_PossibleMoves = GetPossibleMoves(m_PlayerControl.m_CurrentX, m_PlayerControl.m_CurrentY);

        // if only one move left, simply go there
        if (m_PossibleMoves.m_AvailableMoves.Count == 1)
        {
            m_PlayerControl.Move((int)m_PossibleMoves.m_AvailableMoves [0].transform.position.x, (int)m_PossibleMoves.m_AvailableMoves [0].transform.position.y);
        }
        else if (m_PossibleMoves.m_AvailableMoves.Count == 0)         // if no moves left, AI loses game
        {
            m_PlayerControl.m_State = WizardState.Dead;
            m_PlayerControl.m_Manager.GameOver();
            return;
        }

        List <sMovePath> m_MoveList = new List <sMovePath>();

        // check moves after next
        foreach (TileManager tile in m_PossibleMoves.m_AvailableMoves)
        {
            m_MoveList.Add(GetPossibleMoves((int)tile.transform.position.x, (int)tile.transform.position.y));
        }

        // sort list so that movement with most options next turn is first in the list
        m_MoveList.Sort(delegate(sMovePath x, sMovePath y) {
            return(x.m_AvailableMoves.Count - y.m_AvailableMoves.Count);
        }
                        );

        // move to tile with most available future options
        m_PlayerControl.Move((int)m_MoveList [0].x, (int)m_MoveList [0].y);

        StartCoroutine(DelayAI());
    }