Пример #1
0
 public HOHGameModel()
 {
     teams = new List<HOHTeam>();
     puzzles = new List<HOHPuzzle>();
     events = new List<HOHEvent>();
     gameRules = new HOHGameRules();
     pointsForTeam = new Dictionary<HOHTeam, decimal>();
     hintsTakenForTeam = new Dictionary<HOHTeam, int>();
     puzzlesTakenForTeam = new Dictionary<HOHTeam, int>();
     standingsTakenForTeam = new Dictionary<HOHTeam, int>();
     idToPuzzle = new Dictionary<string, HOHPuzzle>();
     idToTeam = new Dictionary<string, HOHTeam>();
     pointsForTeamAtPuzzle = new Dictionary<HOHTeam, Dictionary<HOHPuzzle, decimal>>();
     placeForTeamAtPuzzle = new Dictionary<HOHTeam, Dictionary<HOHPuzzle, int>>();
     correctPlaceForTeamAtPuzzle = new Dictionary<HOHTeam, Dictionary<HOHPuzzle, int>>();
     hintsTakenForTeamAtPuzzle = new Dictionary<HOHTeam, Dictionary<HOHPuzzle, int>>();
     placeForTeam = new List<HOHTeam>();
 }
Пример #2
0
        public static HOHGameRules getGameRulesFromCSVLine(string csvLine)
        {
            if (csvLine.Trim().CompareTo("") == 0)
                return null;

            HOHGameRules newGameRules = null;
            ArrayList alResult = CSVParser.parseCSVLine(csvLine);

            if (string.Join("+", (string[])alResult.ToArray(typeof(string))).CompareTo(string.Join("+", (string[])CSVParser.parseCSVLine(getCSVHeaderLine().Trim()).ToArray(typeof(string)))) == 0)
                return null;

            if (alResult.Count >= (HOHGameRules.csvLine.Length - HOHGameRules.csvLine.Replace("{", "").Length))
            {
                try
                {
                    newGameRules = new HOHGameRules();
                    newGameRules.gameDurationMinutes = Convert.ToInt32(alResult[0]);
                    newGameRules.pointPenaltiesForLateness = alResult[1].ToString();
                    newGameRules.gameTimeoutMinutes = Convert.ToInt32(alResult[2]);
                    newGameRules.maxHintsPerTeam = Convert.ToInt32(alResult[3]);
                    newGameRules.maxStandingsPerTeam = Convert.ToInt32(alResult[4]);
                }
                catch { return null; }
            }

            return newGameRules;
        }
Пример #3
0
        private int calculateStandingsTakenForTeam(HOHTeam team, HOHGameRules gameRules)
        {
            int standingsTaken = 0;

            foreach (HOHEvent oneEvent in team.events)
            {
            if (oneEvent.eventType == HOHEvent.HOHEventType.StandingsReplyEventType)
            {
                standingsTaken++;
            }
            }

            return standingsTaken;
        }
Пример #4
0
        private int calculatePuzzlesTakenForTeam(HOHTeam team, HOHGameRules gameRules)
        {
            int puzzlesTakenCount = 0;

            List<HOHPuzzle> puzzlesTaken = new List<HOHPuzzle>();

            foreach (HOHEvent oneEvent in team.events)
            {
            if (oneEvent.eventType == HOHEvent.HOHEventType.SolutionEventType && !puzzlesTaken.Contains(oneEvent.puzzle))
            {
                puzzlesTaken.Add(oneEvent.puzzle);
                puzzlesTakenCount++;
            }
            }

            return puzzlesTakenCount;
        }
Пример #5
0
        private decimal calculatePointsForTeam(HOHTeam team, HOHGameRules gameRules)
        {
            decimal points = 0;

            foreach (HOHPuzzle puzzle in this.puzzles)
            points += getPointsForTeamAtPuzzle(team, puzzle);

            points -= this.getTimePenaltyForTeam(team);

            return points;
        }
Пример #6
0
        private int calculateHintsTakenForTeam(HOHTeam team, HOHGameRules gameRules)
        {
            int hintsTaken = 0;

            List<HOHPuzzle> puzzlesWithHint = new List<HOHPuzzle>();

            foreach (HOHEvent oneEvent in team.events)
            {
            if (oneEvent.eventType == HOHEvent.HOHEventType.HintReplyEventType && !puzzlesWithHint.Contains(oneEvent.puzzle))
            {
                puzzlesWithHint.Add(oneEvent.puzzle);
                hintsTaken++;
            }
            }

            return hintsTaken;
        }
Пример #7
0
        internal decimal getTimePenaltyForTeam(HOHTeam team, HOHGameRules gameRules)
        {
            if (team.hasGivenUp)
                return gameRules.pointPenaltyForGivingUp;

            DateTime targetTime;
            if (team.hasFinished)
                targetTime = team.finishTime;
            else
                targetTime = DateTime.Now;

            return gameRules.getTimePenaltyForDateTime(team.startTime.AddMinutes(gameRules.gameDurationMinutes), targetTime);
        }
Пример #8
0
 public TimeSpan getTimeToFinishForTeam(HOHTeam team, HOHGameRules gameRules)
 {
     return gameRules.getTimeToFinishForDateTime(team.startTime);
 }