Exemple #1
0
    public void PlaceCard(CardBehaviourScript temp)
    {
        //
        //Find That Card
        //
        CardBehaviourScript card = AIHandCards.Find(item => item._name == temp._name);

        if (card.team == CardBehaviourScript.Team.AI && AIMana - card.mana >= 0 && AITableCards.Count < 10)
        {
            AIHandCards.Remove(card);
            AITableCards.Add(card);
            Action a;
            a.Card1  = card._name;
            a.Card2  = "";
            a.Hero   = "";
            a.OpCode = 0;
            Actions.Enqueue(a);
            card.SetCardStatus(CardBehaviourScript.CardStatus.OnTable);
            if (card.cardtype == CardBehaviourScript.CardType.Magic)///Apply Magic Effect
            {
                card.canPlay = true;
                if (card.cardeffect == CardBehaviourScript.CardEffect.ToAll)
                {
                    card.AddToAll(card, false, delegate { card.Destroy(card); });
                }
                else if (card.cardeffect == CardBehaviourScript.CardEffect.ToEnemies)
                {
                    card.AddToEnemies(card, PlayerTableCards, false, delegate { card.Destroy(card); });
                }
            }

            AIMana -= card.mana;
        }
    }
    public void PlaceCard(CardBehaviourScript card)
    {
        if (card.team == CardBehaviourScript.Team.My && MyMana - card.mana >= 0 && MyTableCards.Count < 10)
        {
            //card.gameObject.transform.position = MyTablePos.position;
            card.GetComponent <CardBehaviourScript>().newPos = MyTablePos.position;

            MyHandCards.Remove(card.gameObject);
            MyTableCards.Add(card.gameObject);

            card.SetCardStatus(CardBehaviourScript.CardStatus.OnTable);
            //PlaySound(cardDrop);

            if (card.cardtype == CardBehaviourScript.CardType.Magic)///Apply Magic Effect
            {
                card.canPlay = true;
                if (card.cardeffect == CardBehaviourScript.CardEffect.ToAll)
                {
                    card.AddToAll(card, true, delegate { card.Destroy(card); });
                }
                else if (card.cardeffect == CardBehaviourScript.CardEffect.ToEnemies)
                {
                    card.AddToEnemies(card, AITableCards, true, delegate { card.Destroy(card); });
                }
            }

            MyMana -= card.mana;
        }

        if (card.team == CardBehaviourScript.Team.AI && AIMana - card.mana >= 0 && AITableCards.Count < 10)
        {
            //card.gameObject.transform.position = AITablePos.position;
            card.GetComponent <CardBehaviourScript>().newPos = AITablePos.position;

            AIHandCards.Remove(card.gameObject);
            AITableCards.Add(card.gameObject);

            card.SetCardStatus(CardBehaviourScript.CardStatus.OnTable);
            //PlaySound(cardDrop);

            if (card.cardtype == CardBehaviourScript.CardType.Magic)///Apply Magic Effect
            {
                card.canPlay = true;
                if (card.cardeffect == CardBehaviourScript.CardEffect.ToAll)
                {
                    card.AddToAll(card, true, delegate { card.Destroy(card); });
                }
                else if (card.cardeffect == CardBehaviourScript.CardEffect.ToEnemies)
                {
                    card.AddToEnemies(card, MyTableCards, true, delegate { card.Destroy(card); });
                }
            }

            AIMana -= card.mana;
        }

        TablePositionUpdate();
        HandPositionUpdate();
        UpdateGame();
    }
Exemple #3
0
    }//Attack

    public void Destroy(CardBehaviourScript card)
    {
        if (card)
        {
            if (card.gameObject != null)
            {
                if (card.team == CardBehaviourScript.Team.My)
                {
                    BoardBehaviourScript.instance.MyTableCards.Remove(card.gameObject);
                }
                else if (card.team == CardBehaviourScript.Team.AI)
                {
                    BoardBehaviourScript.instance.AITableCards.Remove(card.gameObject);
                }


                //BoardBehaviourScript.instance.PlaySound(BoardBehaviourScript.instance.cardDestroy);
                Destroy(card.gameObject);

                BoardBehaviourScript.instance.TablePositionUpdate();
            }
        }
        else
        {
            //card = null;
        }
    }
Exemple #4
0
 public void AddToDestroyList(CardBehaviourScript card)
 {
     if (cards.Contains(card))
     {
         cardsToDestroy.Add(card);
         card.gameObject.SetActive(false);
     }
 }
    void OnTriggerEnter(Collider Obj)
    {
        CardBehaviourScript card = Obj.GetComponent <CardBehaviourScript>();

        if (card)
        {
            card.PlaceCard();
        }
    }
Exemple #6
0
    }//Magic

    public void AddToEnemies(CardBehaviourScript magic, List <CardBehaviourScript> targets, bool addhistory, CustomAction action)
    {
        if (magic.canPlay)
        {
            foreach (var target in targets)
            {
                AddToMonster(magic, target, addhistory, delegate { });
            }
            action();
        }
    }//Magic
    public void AddHistory(CardGameBase a, CardGameBase b)
    {
        Hashtable hash = new Hashtable();

        hash.Add(a, b);

        boardHistory.Add(hash);
        currentCard = null;
        targetCard  = null;
        currentHero = null;
        targetHero  = null;
    }
Exemple #8
0
    }//Magic

    public void AddToMonster(CardBehaviourScript magic, CardBehaviourScript target, bool addhistory, CustomAction action)
    {
        if (magic.canPlay)
        {
            target._Attack += magic.AddedAttack;
            target.health  += magic.AddedHealth;
            action();
            if (addhistory)
            {
                BoardBehaviourScript.instance.AddHistory(magic, target);
            }
        }
    }//Magic
Exemple #9
0
    }//Attack

    public void AttackHero(CardBehaviourScript attacker, HeroBehaviourScript target, bool addhistory, CustomAction action)
    {
        if (attacker.canPlay)
        {
            target.health   -= attacker._Attack;
            attacker.health -= target._Attack;

            action();
            if (addhistory)
            {
                BoardBehaviourScript.instance.AddHistory(attacker, target);
            }
        }
    }//Attack
Exemple #10
0
    // Start is called before the first frame update

    private void Awake()
    {
        int i = UnityEngine.Random.Range(4, 6);

        while (i >= 0)
        {
            CardBehaviourScript card = Instantiate(cardExample);
            card.transform.SetParent(this.transform);
            card.OnDestroy += AddToDestroyList;
            cards.Add(card);
            i--;
        }
        cardsToDestroy = new List <CardBehaviourScript>();
        calcCardsPosNoAnim();
    }
Exemple #11
0
    }//Magic

    public void AddToAll(CardBehaviourScript magic, bool addhistory, CustomAction action)
    {
        if (magic.canPlay)
        {
            foreach (var target in BoardBehaviourScript.instance.AITableCards)
            {
                AddToMonster(magic, target.GetComponent <CardBehaviourScript>(), addhistory, delegate { });
            }
            foreach (var target in BoardBehaviourScript.instance.MyTableCards)
            {
                AddToMonster(magic, target.GetComponent <CardBehaviourScript>(), addhistory, delegate { });
            }
            action();
        }
    }//Magic
Exemple #12
0
    public void CardAttackHero(CardBehaviourScript _attacker, HeroBehaviourScript _target)
    {
        CardBehaviourScript attacker = AITableCards.Find(item => item._name == _attacker._name);
        Action a;

        a.Card1  = attacker._name;
        a.Card2  = "";
        a.Hero   = _target._name;
        a.OpCode = 2;
        Actions.Enqueue(a);
        attacker.AttackHero(attacker, PlayerHero, false, delegate
        {
            attacker.canPlay = false;
        });
    }
Exemple #13
0
 private void CardMagicCard(CardBehaviourScript _attacker, CardBehaviourScript _target)
 {
     CardBehaviourScript attacker = AITableCards.Find(item => item._name == _attacker._name);
     CardBehaviourScript target   = PlayerTableCards.Find(item => item._name == _target._name);
     {
         Action a;
         a.Card1  = attacker._name;
         a.Card2  = target._name;
         a.Hero   = "";
         a.OpCode = 3;
         Actions.Enqueue(a);
         attacker.AddToMonster(attacker, target, false, delegate
         {
             attacker.Destroy(attacker);
         });
     }
 }
Exemple #14
0
 public void AddToHero(CardBehaviourScript magic, HeroBehaviourScript target, CustomAction action)
 {
     if (magic.canPlay)
     {
         target._Attack += magic.AddedAttack;
         if (target.health + magic.AddedHealth <= 30)
         {
             target.health += magic.AddedHealth;
         }
         else
         {
             target.health = 30;
         }
         action();
         BoardBehaviourScript.instance.AddHistory(magic, target);
     }
 }//Magic
Exemple #15
0
 public void CardAttackCard(CardBehaviourScript _attacker, CardBehaviourScript _target)
 {
     CardBehaviourScript attacker = AITableCards.Find(item => item._name == _attacker._name);
     CardBehaviourScript target   = PlayerTableCards.Find(item => item._name == _target._name);
     //if (attacker!=null&&target!=null)
     {
         Action a;
         a.Card1  = attacker._name;
         a.Card2  = target._name;
         a.Hero   = "";
         a.OpCode = 1;
         Actions.Enqueue(a);
         attacker.AttackCard(attacker, target, false, delegate
         {
             attacker.canPlay = false;
         });
     }
 }
    void EndTurn()
    {
        maxMana += (turnNumber - 1) % 2;
        if (maxMana >= 10)
        {
            maxMana = 10;
        }
        MyMana      = maxMana;
        AIMana      = maxMana;
        turnNumber += 1;
        currentCard = new CardBehaviourScript();
        targetCard  = new CardBehaviourScript();
        currentHero = new HeroBehaviourScript();
        targetHero  = new HeroBehaviourScript();
        foreach (GameObject card in MyTableCards)
        {
            card.GetComponent <CardBehaviourScript>().canPlay = true;
        }

        foreach (GameObject card in AITableCards)
        {
            card.GetComponent <CardBehaviourScript>().canPlay = true;
        }
        MyHero.CanAttack = true;
        AIHero.CanAttack = true;

        if (turn == Turn.AITurn)
        {
            DrawCardFromDeck(CardBehaviourScript.Team.My);
            turn = Turn.MyTurn;
        }
        else if (turn == Turn.MyTurn)
        {
            DrawCardFromDeck(CardBehaviourScript.Team.AI);
            turn = Turn.AITurn;
        }

        HandPositionUpdate();
        TablePositionUpdate();

        OnNewTurn();
    }
    void Update()
    {
        if (Input.GetMouseButtonDown(1))
        {
            currentCard = null;
            targetCard  = null;
            currentHero = null;
            targetHero  = null;
            Debug.Log("Action Revet");
        }
        //if(BoardBehaviourScript.instance.currentCard&&BoardBehaviourScript.instance.targetCard)
        {
            Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, 250, layer))
            {
                if (hit.transform.CompareTag("Board"))
                {
                    //do whatever......
                    //Debug.Log(hit.point);
                    if (BoardBehaviourScript.instance.currentHero)
                    {
                        drawMyLine(BoardBehaviourScript.instance.currentHero.transform.position, hit.point, Color.blue, 0.1f);
                    }
                    if (BoardBehaviourScript.instance.currentCard)
                    {
                        drawMyLine(BoardBehaviourScript.instance.currentCard.transform.position, hit.point, Color.blue, 0.1f);
                    }
                }
            }
        }

        if (MyHero.health <= 0)
        {
            EndGame(AIHero);
        }
        if (AIHero.health <= 0)
        {
            EndGame(MyHero);
        }
    }
Exemple #18
0
    }//Magic

    public object Clone()
    {
        CardBehaviourScript temp = new CardBehaviourScript();

        temp._name              = _name;
        temp.description        = this.description;
        temp.health             = this.health;
        temp._Attack            = this._Attack;
        temp.mana               = this.mana;
        temp.canPlay            = this.canPlay;
        temp.cardStatus         = this.cardStatus;
        temp.cardtype           = this.cardtype;
        temp.cardeffect         = this.cardeffect;
        temp.AddedHealth        = this.AddedHealth;
        temp.AddedAttack        = this.AddedAttack;
        temp.team               = this.team;
        temp.newPos             = this.newPos;
        temp.distance_to_screen = this.distance_to_screen;
        temp.Selected           = this.Selected;
        return(temp);
    }
    public void AttackCard(HeroBehaviourScript attacker, CardBehaviourScript target, CustomAction action)
    {
        if (attacker.CanAttack)
        {
            target.health   -= attacker._Attack;
            attacker.health -= target._Attack;

            if (target.health <= 0)
            {
                target.Destroy(target);
            }

            //if (attacker.health <= 0)
            //{
            //    BoardBehaviourScript.instance.
            //}

            action();
            BoardBehaviourScript.instance.AddHistory(attacker, target);
        }
    }
    void DecksPositionUpdate()
    {
        foreach (GameObject CardObject in MyDeckCards)
        {
            CardBehaviourScript c = CardObject.GetComponent <CardBehaviourScript>();

            if (c.cardStatus == CardBehaviourScript.CardStatus.InDeck)
            {
                c.newPos = MYDeckPos.position + new Vector3(Random.value, Random.value, Random.value);
            }
        }

        foreach (GameObject CardObject in AIDeckCards)
        {
            CardBehaviourScript c = CardObject.GetComponent <CardBehaviourScript>();

            if (c.cardStatus == CardBehaviourScript.CardStatus.InDeck)
            {
                c.newPos = AIDeckPos.position + new Vector3(Random.value, Random.value, Random.value);
            }
        }
    }
    void Start()
    {
        foreach (GameObject CardObject in GameObject.FindGameObjectsWithTag("Card"))
        {
            CardObject.GetComponent <Rigidbody>().isKinematic = true;
            CardBehaviourScript c = CardObject.GetComponent <CardBehaviourScript>();

            if (c.team == CardBehaviourScript.Team.My)
            {
                MyDeckCards.Add(CardObject);
            }
            else
            {
                AIDeckCards.Add(CardObject);
            }
        }
        //Update Deck Cards Position
        DecksPositionUpdate();
        //Update Hand Cards Position
        HandPositionUpdate();

        //Start Game
        StartGame();
    }
Exemple #22
0
    public void AttackCard(CardBehaviourScript attacker, CardBehaviourScript target, bool addhistory, CustomAction action)
    {
        if (attacker.canPlay)
        {
            target.health   -= attacker._Attack;
            attacker.health -= target._Attack;

            if (target.health <= 0)
            {
                Destroy(target);
            }

            if (attacker.health <= 0)
            {
                attacker.Destroy(attacker);
            }

            action();
            if (addhistory)
            {
                BoardBehaviourScript.instance.AddHistory(attacker, target);
            }
        }
    }//Attack
Exemple #23
0
    //Delete card func////////////////////////////

    public void removeCardFromList(CardBehaviourScript cd)
    {
        cards.Remove(cd);
        calcCardsPos();
    }
    void RendomActions()
    {
        #region placing cards
        //float chanceToPlace = Random.value;

        if (AIHandCards.Count == 0)
        {
            EndTurn();
        }
        else
        {
            PlaceRandomCard(CardBehaviourScript.Team.AI);
        }
        #endregion
        #region attacking
        Hashtable attacks = new Hashtable();
        foreach (GameObject Card in AITableCards)
        {
            CardBehaviourScript card = Card.GetComponent <CardBehaviourScript>();

            if (card.canPlay)
            {
                float changeToAttackhero = Random.value;

                if (changeToAttackhero < 0.50f)
                {
                    card.AttackHero(card, MyHero, true, delegate
                    {
                        card.canPlay = false;
                    });
                }
                else if (MyTableCards.Count > 0)
                {
                    int        random       = Random.Range(0, MyTableCards.Count);
                    GameObject CardToAttack = MyTableCards[random];

                    attacks.Add(card, CardToAttack.GetComponent <CardBehaviourScript>());
                }
            }
        }

        foreach (DictionaryEntry row in attacks)
        {
            CardBehaviourScript tempCard = row.Key as CardBehaviourScript;
            CardBehaviourScript temp2    = row.Value as CardBehaviourScript;

            if (tempCard.cardtype == CardBehaviourScript.CardType.Monster)
            {
                tempCard.AttackCard(tempCard, temp2, true, delegate
                {
                    tempCard.canPlay = false;
                });
            }
            else if (tempCard.cardtype == CardBehaviourScript.CardType.Magic)
            {
                tempCard.AddToMonster(tempCard, temp2, true, delegate
                {
                    tempCard.canPlay = false;
                    tempCard.Destroy(tempCard);
                });
            }
        }
        #endregion
    }
    void AIGetAttacks()
    {
        AIGameState InitialState = new AIGameState(/*MyHandCards,*/ MyTableCards, AIHandCards, AITableCards, MyHero, AIHero, maxMana, MyMana, AIMana, turn, null);

        InitialState.GetAllAttackingActions(AILEVEL);
        //Find Best Score
        float       MaxScore  = float.MinValue;
        AIGameState BestState = new AIGameState();

        foreach (AIGameState item in AIGameState.AllStates)
        {
            if (item.State_Score > MaxScore)
            {
                MaxScore  = item.State_Score;
                BestState = item;
            }
        }
        //Debug.Log("Best choice Index" + BestState.Index);
        int count = BestState.Actions.Count;

        //GetActions
        for (int i = 0; i < count; i++)
        {
            AIGameState.Action a;
            a = BestState.Actions.Dequeue();
            if (a.OpCode == 1)
            {
                foreach (var item in AITableCards)//Find Card1
                {
                    if (item.GetComponent <CardBehaviourScript>()._name == a.Card1)
                    {
                        currentCard = item.GetComponent <CardBehaviourScript>();
                        break;
                    }
                }
                foreach (var item in MyTableCards)//Find Card2
                {
                    if (item.GetComponent <CardBehaviourScript>()._name == a.Card2)
                    {
                        targetCard = item.GetComponent <CardBehaviourScript>();
                        break;
                    }
                }
                if (currentCard != null && targetCard != null)//MakeAction
                {
                    currentCard.AttackCard(currentCard, targetCard, true, delegate
                    {
                        currentCard.canPlay = false;
                    });
                }
            }
            else if (a.OpCode == 2)
            {
                foreach (var item in AITableCards)//Find Card1
                {
                    if (item.GetComponent <CardBehaviourScript>()._name == a.Card1)
                    {
                        currentCard = item.GetComponent <CardBehaviourScript>();
                        break;
                    }
                }
                if (a.Hero == "MyHero")
                {
                    targetHero = MyHero;
                }
                if (currentCard != null && targetHero != null)
                {
                    currentCard.AttackHero(currentCard, MyHero, true, delegate
                    {
                        currentCard.canPlay = false;
                    });
                }
            }
            else if (a.OpCode == 3)
            {
                foreach (var item in AITableCards)//Find Card1
                {
                    if (item.GetComponent <CardBehaviourScript>()._name == a.Card1)
                    {
                        currentCard = item.GetComponent <CardBehaviourScript>();
                        break;
                    }
                }
                foreach (var item in MyTableCards)//Find Card2
                {
                    if (item.GetComponent <CardBehaviourScript>()._name == a.Card2)
                    {
                        targetCard = item.GetComponent <CardBehaviourScript>();
                        break;
                    }
                }
                if (currentCard != null && targetCard != null)//MakeAction
                {
                    currentCard.AddToMonster(currentCard, targetCard, true, delegate
                    {
                        currentCard.Destroy(currentCard);
                    });
                }
            }
        }
        //AIGameState.AllStates=new List< AIGameState > ();
    }