Exemple #1
0
    public Color TestMatch(Color p1, Color p2)
    {
        Color winner = DecideOutcome(p1, p2);

        Debug.Log(string.Format("Winner ({0} vs {1}) = {2}", p1, p2, winner));
        return(winner);
    }
Exemple #2
0
    public void Test()
    {
        CheckCarriages(new List <Color>(), new List <Color>());

        Color p1      = Color.Red;
        Color p2      = Color.Blue;
        Color winner1 = TestMatch(p1, p2);

        p1      = Color.Red;
        p2      = Color.Green;
        winner1 = TestMatch(p1, p2);

        p1      = Color.Red;
        p2      = Color.None;
        winner1 = TestMatch(p1, p2);

        p1      = Color.Red;
        p2      = Color.Red;
        winner1 = TestMatch(p1, p2);

        // GREEN

        p1      = Color.Green;
        p2      = Color.Red;
        winner1 = TestMatch(p1, p2);

        p1      = Color.Green;
        p2      = Color.Blue;
        winner1 = TestMatch(p1, p2);

        p1      = Color.Green;
        p2      = Color.None;
        winner1 = TestMatch(p1, p2);

        p1      = Color.Green;
        p2      = Color.Green;
        winner1 = TestMatch(p1, p2);

        // BLUE

        p1      = Color.Blue;
        p2      = Color.Red;
        winner1 = TestMatch(p1, p2);

        p1      = Color.Blue;
        p2      = Color.Blue;
        winner1 = TestMatch(p1, p2);

        p1      = Color.Blue;
        p2      = Color.None;
        winner1 = TestMatch(p1, p2);

        p1      = Color.Blue;
        p2      = Color.Green;
        winner1 = TestMatch(p1, p2);
    }
Exemple #3
0
    /// <summary>
    /// Selects who wins over the other
    /// </summary>
    /// <param name="p1"></param>
    /// <param name="p2"></param>
    /// <returns>Constant of the match</returns>
    public Color DecideOutcome(Color p1, Color p2)
    {
        // R -> G -> B -> R

        if (p1 == p2)
        {
            return(Color.None);
        }

        // Player 1 is RED
        if (p1 == Color.Red)
        {
            if (p2 == Color.Blue)
            {
                return(p2);
            }
            else
            {
                return(p1);
            }
        }
        // Player 1 is GREEN
        else if (p1 == Color.Green)
        {
            if (p2 == Color.Red)
            {
                return(p2);
            }
            else
            {
                return(p1);
            }
        }
        // Player 1 is BLUE
        else if (p1 == Color.Blue)
        {
            if (p2 == Color.Green)
            {
                return(p2);
            }
            else
            {
                return(p1);
            }
        }
        else
        {
            return(Color.None);
        }
    }
    public Color GetDominantColor()
    {
        //if (CarriageCount < GameConstants.MAX_CARRIAGE_CAPACITY)
        //{
        //    Debug.LogError(string.Format("Beetle {0} did not return a dominant color — Hand size is not complete", this.name));
        //}

        Dictionary <Color, int> m_colorsFound = new Dictionary <Color, int>();

        foreach (Carriage carriage in m_carriageList)
        {
            CarriageDefinition cs = carriage.CarriageDefinition;

            Color col = cs.GetColor();

            // Dictionary does not contain colour value
            if (!m_colorsFound.ContainsKey(col))
            {
                m_colorsFound.Add(col, 1);
            }
            else
            {
                m_colorsFound[col]++;
            }
        }

        Color dominantColor = Color.None;
        int   dominantNum   = 0;

        foreach (var c in m_colorsFound)
        {
            if (c.Value > dominantNum)
            {
                dominantNum   = c.Value;
                dominantColor = c.Key;
            }
            else if (c.Value == dominantNum)
            {
                dominantColor = Color.None;
            }
        }

        Debug.Log(string.Format("Beetle {0} returned dominant color: {1}", this.name, dominantColor));
        //Debug.Log(string.Format("Beetle {0} does not have a dominant color", this.name));

        return(dominantColor);
    }
Exemple #5
0
    private void OnReadyToFight(Beetle p1, Beetle p2)
    {
        Color p1Dom = p1.GetDominantColor();
        Color p2Dom = p2.GetDominantColor();

        Color outcome = DecideOutcome(p1Dom, p2Dom);

        bool p1wins = outcome == p1Dom;

        if (outcome == Color.None)
        {
            p1wins = true;
        }

        OnMatchOutcomeDecided?.Invoke(p1wins);
        return;
    }
    public void AddCarriage(Color carriageColor)
    {
        if (CarriageCount >= GameConstants.MAX_CARRIAGE_CAPACITY)
        {
            Debug.LogWarning(string.Format("Beetle {0} carriage count is maxed out", this.name));
            return;
        }

        Debug.Log(string.Format("Beetle {0} added carriage color {1}", this.name, carriageColor));

        CarriageDefinition newDef      = new CarriageDefinition(carriageColor, CarriageDefinition.Ability.None);
        Carriage           newCarriage = Instantiate(carriagePrefab, Vector3.zero, Quaternion.identity);

        newCarriage.transform.SetParent(m_layoutGroup.transform, false);
        newCarriage.Init(newDef, Carriage.State.Attached);
        m_carriageList.Add(newCarriage);

        Color color = GetDominantColor();

        Debug.Log("dominant color: " + color);

        Transform beetleImage = null;

        foreach (Transform child in transform)
        {
            if (child.name == "Beetle" + m_playerNumber)
            {
                beetleImage = child;
                break;
            }
        }

        foreach (Transform child in beetleImage)
        {
            if (child.name == color.ToString())
            {
                child.gameObject.SetActive(true);
            }
            else
            {
                child.gameObject.SetActive(false);
            }
        }
    }
    private void OnCarriageSelected(Carriage c)
    {
        if (ReadyToFight)
        {
            Debug.Log("READY TO FIGHT");
            OnReadyToFight?.Invoke(m_player1, m_player2);
            return;
        }
        CarriageDefinition.Color color = c.CarriageDefinition.GetColor();

        if (color == CarriageDefinition.Color.Wild)
        {
            int rand = UnityEngine.Random.Range(0, 3);
            color = (CarriageDefinition.Color)rand;
        }

        CarriageDefinition.Ability ability = c.CarriageDefinition.GetAbility();

        Beetle player      = GetCurrentPlayer();
        Beetle otherPlayer = GetOtherPlayer();

        switch (ability)
        {
        case CarriageDefinition.Ability.None:
            player.AddCarriage(color);
            break;

        case CarriageDefinition.Ability.Copy:
            if (player.CarriageCount == 0)
            {
                return;
            }

            Carriage lastCarriage = player.GetLastCarriage();
            color = lastCarriage.CarriageDefinition.GetColor();
            player.AddCarriage(color);
            break;

        case CarriageDefinition.Ability.Send:
            if (otherPlayer.CarriageCount == GameConstants.MAX_CARRIAGE_CAPACITY)
            {
                player.AddCarriage(color);
            }
            else
            {
                otherPlayer.AddCarriage(color);
            }
            break;

        case CarriageDefinition.Ability.Swap:
            if (player.CarriageCount > 0 && otherPlayer.CarriageCount > 0)
            {
                Carriage c1 = player.RemoveLastCarriage();
                Carriage c2 = otherPlayer.RemoveLastCarriage();
                player.AddCarriage(c2.CarriageDefinition.GetColor());
                otherPlayer.AddCarriage(c1.CarriageDefinition.GetColor());
                Destroy(c1.gameObject);
                Destroy(c2.gameObject);
            }

            player.AddCarriage(color);
            break;

        case CarriageDefinition.Ability.DoubleDip:
            m_doubleDip = true;
            player.AddCarriage(color);
            break;

        case CarriageDefinition.Ability.Shuffle:
            player.AddCarriage(color);
            m_carriageContainer.GetComponent <CarriageMenu>().Reset();
            m_currentHand.Clear();
            DrawHand();
            m_carriageContainer.GetComponent <CarriageMenu>().Init();
            break;
        }

        c.gameObject.SetActive(false);

        if (m_doubleDip)
        {
            m_doubleDip = false;
        }
        else
        {
            NextTurn();
        }

        if (ReadyToFight)
        {
            OnReadyToFight?.Invoke(m_player1, m_player2);
        }
    }