Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using Wintellect.PowerCollections;
- namespace Scoreboard
- {
- internal class Program
- {
- private static void Main(string[] args)
- {
- SortedDictionary<string, string> Users = new SortedDictionary<string, string>();
- SortedDictionary<string, Game> Games = new SortedDictionary<string, Game>();
- string content, command, line;
- while (true)
- {
- line = Console.ReadLine();
- if (line == "End")
- break;
- if (line != "")
- {
- command = line.Substring(0, line.IndexOf(' '));
- content = line.Substring(line.IndexOf(' ') + 1);
- var parameters = content.Split(' ');
- switch (command)
- {
- case "RegisterUser":
- {
- string user = parameters[0];
- string password = parameters[1];
- if (Users.ContainsKey(user))
- Console.WriteLine("Duplicated user");
- else
- {
- Users.Add(user, password);
- Console.WriteLine("User registered");
- }
- break;
- }
- ;
- case "RegisterGame":
- {
- string game = parameters[0];
- string password = parameters[1];
- if (Games.ContainsKey(game))
- Console.WriteLine("Duplicated game");
- else
- {
- Games.Add(game, new Game(password));
- Console.WriteLine("Game registered");
- }
- }
- break;
- case "AddScore":
- {
- string user = parameters[0];
- string userPassword = parameters[1];
- string game = parameters[2];
- string gamePassword = parameters[3];
- int score = int.Parse(parameters[4]);
- if (Games.ContainsKey(game)
- && Games[game].Password == gamePassword
- && Users.ContainsKey(user)
- && Users[user] == userPassword)
- {
- var scoreGame = new GameScore(user, score);
- Games[game].Scores.Add(scoreGame);
- Console.WriteLine("Score added");
- }
- else
- Console.WriteLine("Cannot add score");
- }
- break;
- case "ShowScoreboard":
- {
- string game = parameters[0];
- if (Games.ContainsKey(game))
- {
- OrderedBag<GameScore> scores = Games[game].Scores;
- var size = scores.Count;
- if (size == 0)
- Console.WriteLine("No score");
- else
- {
- int num = 1;
- foreach (var score in scores)
- {
- if (num == 11)
- break;
- Console.WriteLine("#{0} {1} {2}", num, score.User, score.Score);
- num++;
- }
- }
- }
- else
- Console.WriteLine("Game not found");
- }
- break;
- case "ListGamesByPrefix":
- {
- string prefix = parameters[0];
- var results = Games.Where(g => g.Key.StartsWith(prefix)).OrderBy(g => g.Key);
- int count = 0;
- StringBuilder str = new StringBuilder();
- foreach (var result in results)
- {
- if (count == 10)
- break;
- str.Append(result.Key + ", ");
- count++;
- }
- if (count == 0)
- Console.WriteLine("No matches");
- else
- {
- Console.WriteLine(str.ToString(0, str.Length - 2));
- }
- }
- break;
- case "DeleteGame":
- {
- string game = parameters[0];
- string password = parameters[1];
- if (Games.ContainsKey(game))
- {
- if (Games[game].Password != password)
- Console.WriteLine("Cannot delete game");
- else
- {
- Games.Remove(game);
- Console.WriteLine("Game deleted");
- }
- }
- else
- Console.WriteLine("Cannot delete game");
- }
- break;
- }
- }
- }
- }
- }
- public class GameScore : IComparable<GameScore>
- {
- public string User { get; set; }
- public int Score { get; set; }
- public int CompareTo(GameScore other)
- {
- if (Score < other.Score)
- return 1;
- if (Score == other.Score && User == other.User)
- return 0;
- if (Score == other.Score && string.Compare(User, other.User, 0) > 0)
- return 1;
- return -1;
- }
- public GameScore(string user, int score)
- {
- User = user;
- Score = score;
- }
- }
- public class Game
- {
- public string Password { get; set; }
- public OrderedBag<GameScore> Scores { get; set; }
- public Game(string password)
- {
- Password = password;
- Scores = new OrderedBag<GameScore>();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement