File IPlayer.cs
namespace Solution_Practical6_Exercise2
{
interface IPlayer
{
string Name { get; set; }
int Age { get; set; }
int Attack { get; set; }
int Defense { get; set; }
int Stamina { get; set; }
int Speed { get; set; }
int Power { get; set; }
void GetInfo();
}
}
File Player.cs
using System;
namespace Solution_Practical6_Exercise2
{
class Player : IPlayer
{
string name;
public string Name { get { return name; } set { name = value; } }
int age;
public int Age { get { return age; } set { age = value; } }
int attack;
public int Attack { get { return attack; } set { attack = value; } }
int defense;
public int Defense { get { return defense; } set { defense = value; } }
int stamina;
public int Stamina { get { return stamina; } set { stamina = value; } }
int speed;
public int Speed { get { return speed; } set { speed = value; } }
int power;
public int Power { get { return power; } set { power = value; } }
public void GetInfo()
{
Console.WriteLine("Name: " + Name);
Console.WriteLine("Age: " + Age);
Console.WriteLine("Average point: " + (Attack + Defense + Stamina + Speed + Power) / 5.0f);
}
}
}
File Club.cs
using System;
using System.Collections;
using System.Collections.Generic;
namespace Solution_Practical6_Exercise2
{
public delegate void ActionDelegate();
class Club<T> : IEnumerable<T> where T : IPlayer
{
event ActionDelegate AttackEvent;
event ActionDelegate DefenseEvent;
public Dictionary<int, T> PlayerList = new Dictionary<int, T>();
public void Add(T t)
{
Console.Write("Input name: ");
t.Name = Console.ReadLine();
while (true)
{
Console.Write("Input age: ");
try
{
t.Age = int.Parse(Console.ReadLine());
break;
}
catch (Exception ex) { Console.WriteLine("Wrong format!"); }
}
while (true)
{
Console.Write("Input attack: ");
try
{
t.Attack = int.Parse(Console.ReadLine());
break;
}
catch (Exception ex) { Console.WriteLine("Wrong format!"); }
}
while (true)
{
Console.Write("Input defense: ");
try
{
t.Defense = int.Parse(Console.ReadLine());
break;
}
catch (Exception ex) { Console.WriteLine("Wrong format!"); }
}
while (true)
{
Console.Write("Input stamina: ");
try
{
t.Stamina = int.Parse(Console.ReadLine());
break;
}
catch (Exception ex) { Console.WriteLine("Wrong format!"); }
}
while (true)
{
Console.Write("Input speed: ");
try
{
t.Speed = int.Parse(Console.ReadLine());
break;
}
catch (Exception ex) { Console.WriteLine("Wrong format!"); }
}
while (true)
{
Console.Write("Input power: ");
try
{
t.Power = int.Parse(Console.ReadLine());
break;
}
catch (Exception ex) { Console.WriteLine("Wrong format!"); }
}
PlayerList.Add(PlayerList.Count + 1, t);
float avePoint = (t.Attack + t.Defense + t.Power + t.Speed + t.Stamina) / 5.0f;
if (avePoint >= 80)
{
AttackEvent += new ActionDelegate(t.GetInfo);
}
else if (60 <= avePoint && avePoint < 80)
{
DefenseEvent += new ActionDelegate(t.GetInfo);
}
}
public IEnumerator<T> GetEnumerator()
{
foreach (T t in PlayerList.Values)
{
yield return t;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
foreach (T t in PlayerList.Values)
{
yield return t;
}
}
public void RaiseAttackEvent()
{
if (AttackEvent != null)
{
AttackEvent();
}
else
{
Console.WriteLine("No players");
}
}
public void RaiseDefenseEvent()
{
if (DefenseEvent != null)
{
DefenseEvent();
}
else
{
Console.WriteLine("No players");
}
}
}
}
File Program.cs
using System;
namespace Solution_Practical6_Exercise2
{
class Program
{
static void Menu()
{
Console.WriteLine("1. Create new Player");
Console.WriteLine("2. List of players");
Console.WriteLine("3. Search player by name");
Console.WriteLine("4. Raise attack event");
Console.WriteLine("5. Raise defense event");
Console.WriteLine("6. Exit");
}
static void Main(string[] args)
{
Club<IPlayer> club = new Club<IPlayer>();
Menu();
while (true)
{
Console.Write("Please choose an option: ");
switch (int.Parse(Console.ReadLine()))
{
case 1:
Player player = new Player();
club.Add(player);
break;
case 2:
Console.WriteLine("List of players:");
if (club.PlayerList.Count == 0)
{
Console.WriteLine("No players!");
}
else
{
foreach(IPlayer player1 in club)
{
player1.GetInfo();
}
}
break;
case 3:
if (club.PlayerList.Count == 0)
{
Console.WriteLine("No players!");
}
else
{
Console.Write("Input player name you want to search: ");
string name = Console.ReadLine();
bool found = false;
foreach (IPlayer player1 in club)
{
if (name.Equals(player1.Name))
{
player1.GetInfo();
found = true;
}
}
if (!found)
{
Console.WriteLine("The name {0} is not found!", name);
}
}
break;
case 4:
club.RaiseAttackEvent();
break;
case 5:
club.RaiseDefenseEvent();
break;
case 6:return;
}
}
}
}
}