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); }
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); }
/// <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); }
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); } }