Exemple #1
0
    public string GetStatsForPrint()
    {
        StringBuilder builder = new StringBuilder();

        //General stats
        builder.Append("=================" + name + "===============\n");
        builder.Append("Average Elapsed Time: ").Append(AverageTimeElapsed).Append("\n");
        builder.Append(" - For Correct Ones: ").Append(AverageTimeElapsedForCorrectOnes).Append("\n");
        builder.Append("  -  For Correctly Colored Ones: ").Append(AverageTimeElapsedForCorrectOnesWithCorrectlyColored).Append("\n");
        builder.Append("  -  For Incorrectly Colored Ones: ").Append(AverageTimeElapsedForCorrectOnesWithIncorrectlyColored).Append("\n");
        builder.Append(" - For Incorrect Ones: ").Append(AverageTimeElapsedForIncorrectOnes).Append("\n");
        builder.Append("  -  For Correctly Colored Ones: ").Append(AverageTimeElapsedForIncorrectOnesWithCorrectlyColored).Append("\n");
        builder.Append("  -  For Incorrectly Colored Ones: ").Append(AverageTimeElapsedForIncorrectOnesWithIncorrectlyColored).Append("\n");
        builder.Append("Total: ").Append(Total).Append("\n");
        builder.Append(" - For Correct Ones: ").Append(TotalCorrect).Append("\n");
        builder.Append("  -  For Correctly Colored Ones: ").Append(TotalCorrectWithCorrectlyColored).Append("\n");
        builder.Append("  -  For Incorrectly Colored Ones: ").Append(TotalCorrectWithIncorrectlyColored).Append("\n");
        builder.Append(" - For Incorrect Ones: ").Append(TotalIncorrect).Append("\n");
        builder.Append("  -  For Correctly Colored Ones: ").Append(TotalIncorrectWithCorrectlyColored).Append("\n");
        builder.Append("  -  For Incorrectly Colored Ones: ").Append(TotalIncorrectWithIncorrectlyColored).Append("\n");
        builder.Append("Total Missed: ").Append(TotalMissed).Append("\n");
        builder.Append(" - For Correctly Colored Ones: ").Append(TotalMissedWithCorrectlyColored).Append("\n");
        builder.Append(" - For Incorrectly Colored Ones: ").Append(TotalMissedWithIncorrectlyColored).Append("\n");
        builder.Append("=============================================\n");

        //stats per guess
        StatisticsList.ForEach(stat =>
        {
            builder.Append("=============================================\n");
            if (!stat.Missed)
            {
                builder.Append("Time Elapsed: ").Append(stat.TimeElapsed).Append("\n");
            }
            else
            {
                builder.Append("Missed\n");
            }
            builder.Append("Card ").Append(stat.UseCorrectColor ? "(Correctly colored)" : "(Incorrectly Colored)").Append("\n");

            Array.ForEach(stat.Card.cardEntities, cardEntity =>
            {
                CardUtil.ColorEnum color = stat.EntityToColor[cardEntity.entity];
                builder.Append(" - ").Append(color).Append(" ").Append(cardEntity.entity).Append("\n");
            });

            if (!stat.Missed)
            {
                builder.Append("Correct Guess?: ").Append(stat.CorrectEntity == stat.GuessedEntity).Append("\n");
                builder.Append(" - Correct Entity: ").Append(stat.CorrectEntity).Append("\n");
                builder.Append(" - Guessed Entity: ").Append(stat.GuessedEntity).Append("\n");
            }
            else
            {
                builder.Append("Correct Entity: ").Append(stat.CorrectEntity).Append("\n");
            }
            builder.Append("=============================================\n");
        });

        return(builder.ToString());
    }
    private void NewRound()
    {
        Card card = generateCard();

        CardUtil.EntityEnum[] allEntities = new CardUtil.EntityEnum[CardUtil.Entities_2Card.Count];
        CardUtil.Entities_2Card.CopyTo(allEntities);

        CardUtil.EntityEnum[] currentEntities = card.cardEntities.Select(e => e.entity).ToArray();
        CardUtil.EntityEnum[] otherEntities   = allEntities.Where(e => !currentEntities.Contains(e)).ToArray();


        useCorrectColor = false;
        HashSet <CardUtil.ColorEnum> colorsUsed = new HashSet <CardUtil.ColorEnum>();
        Dictionary <CardUtil.EntityEnum, CardUtil.ColorEnum> entityToColor = new Dictionary <CardUtil.EntityEnum, CardUtil.ColorEnum>();

        Array.ForEach(card.cardEntities, cardEntity =>
        {
            int index = useCorrectColor ? UnityEngine.Random.Range(0, otherEntities.Length) : UnityEngine.Random.Range(0, otherEntities.Length + 1);
            index--;
            CardUtil.ColorEnum color;
            do
            {
                if (index < otherEntities.Length)
                {
                    index++;
                }
                else
                {
                    index = 0;
                }

                if (index >= otherEntities.Length)
                {
                    useCorrectColor = true;
                }

                color = CardUtil.EntityColorMap[index >= otherEntities.Length ? cardEntity.entity : otherEntities[index]];
            } while (colorsUsed.Contains(color));
            colorsUsed.Add(color);
            entityToColor[cardEntity.entity] = color;
            Debug.Log(cardEntity.entity + ": " + color);

            cardEntity.image.color = CardUtil.ColorColorMap[color];
        });

        if (currentEntities.Contains(CardUtil.EntityEnum.Banana) && entityToColor[CardUtil.EntityEnum.Banana] == CardUtil.ColorEnum.Yellow)
        {
            GameProgressionUtil.UpdateGameProgression(rep => rep.totalTimesYellowBananaWasSeen++);
        }

        correctEntity = null;

        List <CardUtil.EntityEnum> incorrectEntities = new List <CardUtil.EntityEnum>();

        foreach (KeyValuePair <CardUtil.EntityEnum, CardUtil.ColorEnum> entry in entityToColor)
        {
            CardUtil.EntityEnum entity      = entry.Key;
            CardUtil.ColorEnum  color       = entry.Value;
            CardUtil.EntityEnum otherEntity = CardUtil.ColorEntityMap[color];

            if (entity == otherEntity)
            {
                correctEntity = entity;
                break;
            }

            incorrectEntities.Add(entity);
            incorrectEntities.Add(otherEntity);
        }

        if (correctEntity == null)
        {
            correctEntity = allEntities.Except(incorrectEntities).First();
        }

        cardGameObject = Instantiate(card, cardContainer.transform);

        //Enable all buttons

        SetButtonsEnabled(player1Buttons, true);
        SetButtonsEnabled(player2Buttons, true);


        //Set up stats

        float time = Time.time;

        player1.Stats.AddPickedCard(time, card, entityToColor, useCorrectColor);
        player1.guessed = false;
        if (GameSettingsUtil.GetGameType() == GameSettingsUtil.GameTypeEnum.Two)
        {
            player2.Stats.AddPickedCard(time, card, entityToColor, useCorrectColor);
            player2.guessed = false;
        }

        GameUtil.cpuList.ForEach(cpu =>
        {
            cpu.Stats.AddPickedCard(time, card, entityToColor, useCorrectColor);
        });
        GameUtil.cpuList.ForEach(cpu =>
        {
            cpu.guessed = false;
        });

        //Cpu starts guessing
        GameUtil.cpuList.ForEach(cpu =>
        {
            cpuCoroutines.Add(StartCoroutine(CpuGuess(cpu)));
        });
    }
    private void ShowStatsContainer(bool show)
    {
        statsContainer.SetActive(show);
        inGameUiContainer.SetActive(false);
        pauseUiContainer.SetActive(!show);
        scoreUiContainer.SetActive(!show);
        cardContainer.SetActive(show);


        if (card != null)
        {
            DestroyImmediate(card.gameObject);
            card = null;
        }

        playerStatsToggleContainer.SetActive(GameSettingsUtil.GetGameType() != GameSettingsUtil.GameTypeEnum.Single);


        Statistics playerStats = GetPlayerStats();

        if (show)
        {
            if (statsIndex == 0)
            {
                mainStatsContainer.SetActive(true);
                statsPointContainer.SetActive(false);
                averageTimeElapsedText.text = playerStats.Total == 0 ? "-" : playerStats.AverageTimeElapsed.ToString("0.00") + " s";
                averageTimeElapsedForCorrectOnesText.text = playerStats.TotalCorrect == 0 ? "-" : playerStats.AverageTimeElapsedForCorrectOnes.ToString("0.00") + " s";
                averageTimeElapsedForCorrectOnesWithCorrectlyColoredText.text   = playerStats.TotalCorrectWithCorrectlyColored == 0 ? "-" : playerStats.AverageTimeElapsedForCorrectOnesWithCorrectlyColored.ToString("0.00") + " s";
                averageTimeElapsedForCorrectOnesWithIncorrectlyColoredText.text = playerStats.TotalCorrectWithIncorrectlyColored == 0 ? "-" : playerStats.AverageTimeElapsedForCorrectOnesWithIncorrectlyColored.ToString("0.00") + " s";
                averageTimeElapsedForIncorrectOnesText.text = playerStats.TotalIncorrect == 0 ? "-" : playerStats.AverageTimeElapsedForIncorrectOnes.ToString("0.00") + " s";
                averageTimeElapsedForIncorrectOnesWithCorrectlyColoredText.text   = playerStats.TotalIncorrectWithCorrectlyColored == 0 ? "-" : playerStats.AverageTimeElapsedForIncorrectOnesWithCorrectlyColored.ToString("0.00") + " s";
                averageTimeElapsedForIncorrectOnesWithIncorrectlyColoredText.text = playerStats.TotalIncorrectWithIncorrectlyColored == 0 ? "-" : playerStats.AverageTimeElapsedForIncorrectOnesWithIncorrectlyColored.ToString("0.00") + " s";
                totalText.text        = playerStats.Total.ToString();
                totalCorrectText.text = playerStats.TotalCorrect.ToString();
                totalCorrectWithCorrectlyColoredText.text   = playerStats.TotalCorrectWithCorrectlyColored.ToString();
                totalCorrectWithIncorrectlyColoredText.text = playerStats.TotalCorrectWithIncorrectlyColored.ToString();
                totalIncorrectText.text = playerStats.TotalIncorrect.ToString();
                totalIncorrectWithCorrectlyColoredText.text   = playerStats.TotalIncorrectWithCorrectlyColored.ToString();
                totalIncorrectWithIncorrectlyColoredText.text = playerStats.TotalIncorrectWithIncorrectlyColored.ToString();

                //If just one player, dont display misses
                bool onePlayer = statsList.Count <= 1;
                totalMissedText.text = onePlayer ? "-" : playerStats.TotalMissed.ToString();
                totalMissedWithCorrectlyColoredText.text   = onePlayer ? "-" : playerStats.TotalMissedWithCorrectlyColored.ToString();
                totalMissedWithIncorrectlyColoredText.text = onePlayer ? "-" : playerStats.TotalMissedWithIncorrectlyColored.ToString();
            }
            else
            {
                mainStatsContainer.SetActive(false);
                statsPointContainer.SetActive(true);

                StatisticsPoint statsPoint = playerStats.StatisticsList[statsIndex - 1];
                card = Instantiate(statsPoint.Card, cardContainer.transform);
                card.gameObject.SetActive(true);

                Array.ForEach(card.cardEntities, cardEntity =>
                {
                    CardUtil.ColorEnum color = statsPoint.EntityToColor[cardEntity.entity];
                    cardEntity.image.color   = CardUtil.ColorColorMap[color];
                });


                timeElapsedText.text   = statsPoint.Missed ? "-" : statsPoint.TimeElapsed.ToString("0.00") + " s";
                correctEntityText.text = statsPoint.CorrectEntity.ToString();
                guessedEntityText.text = statsPoint.Missed ? "Missed": statsPoint.GuessedEntity.ToString();
                messageText.text       = "Card " + statsIndex;
            }
        }
    }