6 - Cria um projeto no Visual Studio que respeite o seguinte diagrama UML. O projeto deve ter funcionalidade mínima para demonstrar as relações indicadas no diagrama.
Classe Program
:
using System;
internal class Program
{
static void Main(string[] args)
{
Game game = new Game();
game.GameLoop();
Console.WriteLine($"\nNumber of Games Played: {Game.gamesPlayed}");
}
}
Classe Game
:
using System;
using System.Collections.Generic;
public class Game
{
static internal int gamesPlayed;
private int numberOfPlayers;
private Map currentMap;
internal void GameLoop()
{
gamesPlayed = 0;
List<Player> players;
players = new List<Player>();
{
// Pede ao utilizador o número de jogadores
Console.WriteLine("Create Dungeon Map\nHow many players " +
"will spawn?");
// Converte o input para int e guarda o mesmo na variável de
// mesmo tipo numberOfPlayers
numberOfPlayers = Convert.ToInt32(Console.ReadLine());
// Instancia Players, de número igual à variável numberOfPlayers
// dada, pedindo os parâmetros necessários para a instanciação
for (int id = 0; id < numberOfPlayers; id++)
{
Console.WriteLine("Insert player's name:");
string playerName = Console.ReadLine();
players.Add(new Player(id, playerName, 100.0, 100.0));
}
}
// Instanciar um objeto da classe DungeonMap, guardado numa
// variável de tipo Map
currentMap = new DungeonMap("Dungeon", "dng.PNG",
players, 5);
// ToString() da classe DungeonMap
Console.WriteLine($"\n{currentMap}");
// Imprimir os nomes dos jogadores neste mapa
currentMap.PrintPlayerNames();
// Aumentar o número de jogos jogados
gamesPlayed++;
players = new List<Player>();
{
// Pede ao utilizador o número de jogadores
Console.WriteLine("Create Dungeon Map\nHow many players " +
"will spawn?");
// Converte o input para int e guarda o mesmo na variável de
// mesmo tipo numberOfPlayers
numberOfPlayers = Convert.ToInt32(Console.ReadLine());
// Instancia Players, de número igual à variável numberOfPlayers
// dada, pedindo os parâmetros necessários para a instanciação
for (int id = 0; id < numberOfPlayers; id++)
{
Console.WriteLine("Insert player's name:");
string playerName = Console.ReadLine();
players.Add(new Player(id, playerName, 100.0, 100.0));
}
}
// Instanciar um objeto da classe OpenWorldMap, guardado numa
// variável de tipo Map
currentMap = new OpenWorldMap("openWrld",
"opnWrld.PNG", players, 100.0f, 150.0f);
// ToString() da classe OpenWorldMap
Console.WriteLine($"\n{currentMap}\n");
// Imprimir os nomes dos jogadores neste mapa
currentMap.PrintPlayerNames();
// Aumentar o número de jogos jogados
gamesPlayed++;
players = new List<Player>();
{
// Pede ao utilizador o número de jogadores
Console.WriteLine("Create Dungeon Map\nHow many players " +
"will spawn?");
// Converte o input para int e guarda o mesmo na variável de
// mesmo tipo numberOfPlayers
numberOfPlayers = Convert.ToInt32(Console.ReadLine());
// Instancia Players, de número igual à variável numberOfPlayers
// dada, pedindo os parâmetros necessários para a instanciação
for (int id = 0; id < numberOfPlayers; id++)
{
Console.WriteLine("Insert player's name:");
string playerName = Console.ReadLine();
players.Add(new Player(id, playerName, 100.0, 100.0));
}
}
// Instanciar um objeto da classe DungeonMap, guardado numa
// variável de tipo Map
currentMap = new DungeonMap("Dungeon2", "dng2.PNG",
players, 5);
// ToString() da classe DungeonMap
Console.WriteLine($"\n{currentMap}\n");
// Imprimir os nomes dos jogadores neste mapa
currentMap.PrintPlayerNames();
// Aumentar o número de jogos jogados
gamesPlayed++;
players = new List<Player>();
{
// Pede ao utilizador o número de jogadores
Console.WriteLine("Create Dungeon Map\nHow many players " +
"will spawn?");
// Converte o input para int e guarda o mesmo na variável de
// mesmo tipo numberOfPlayers
numberOfPlayers = Convert.ToInt32(Console.ReadLine());
// Instancia Players, de número igual à variável numberOfPlayers
// dada, pedindo os parâmetros necessários para a instanciação
for (int id = 0; id < numberOfPlayers; id++)
{
Console.WriteLine("Insert player's name:");
string playerName = Console.ReadLine();
players.Add(new Player(id, playerName, 100.0, 100.0));
}
}
// Instanciar um objeto da classe OpenWorldMap, guardado numa
// variável de tipo Map
currentMap = new OpenWorldMap("openWrld2",
"opnWrld2.PNG", players, 200.0f, 450.0f);
// ToString() da classe OpenWorldMap
Console.WriteLine($"\n{currentMap}\n");
// Imprimir os nomes dos jogadores neste mapa
currentMap.PrintPlayerNames();
// Aumentar o número de jogos jogados
gamesPlayed++;
}
}
Classe Map
:
using System;
using System.Collections.Generic;
public abstract class Map
{
// Declarar Variáveis
public string Name { get; }
protected string Filename { get; }
protected ICollection<Player> players;
// Construtor da classe Map, com os parâmetros name, filename e
// numberOfPlayers
public Map(string name, string filename, List<Player> players)
{
this.players = players;
Name = name;
Filename = filename;
}
public override string ToString() => $"Name: {Name}\nFilename: " +
$"{Filename}\nNumber of Players: {players.Count}\n";
public void PrintPlayerNames()
{
foreach(Player p in players)
{
Console.WriteLine($"Player Name: {p.Name}");
}
Console.WriteLine();
}
}
Classe DungeonMap
:
using System.Collections.Generic;
public class DungeonMap : Map
{
public int NumberOfDungeons { get; set; }
public DungeonMap(string name, string filename, List<Player> players,
int numberOfDungeons) : base(name, filename, players)
{
NumberOfDungeons = numberOfDungeons;
}
public override string ToString() => base.ToString() + $"Number of " +
$"Dungeons: {NumberOfDungeons}\n";
}
Classe OpenWorldMap
:
using System.Collections.Generic;
public class OpenWorldMap : Map
{
public float Width { get; }
public float Height { get; }
public OpenWorldMap(string name, string filename, List<Player> players,
float width, float height) : base(name, filename, players)
{
Width = width;
Height = height;
}
public override string ToString() => base.ToString() + $"Width: " +
$"{Width}\nHeight: {Height}";
}
Classe Player
:
public class Player
{
public int ID { get; }
public string Name { get; }
private double health;
private double shield;
public Player(int id, string name, double health, double shield)
{
ID = id;
Name = name;
this.health = health;
this.shield = shield;
}
}
Nota: Código de teste para este exercício encontra-se neste repositório.
Por Pedro Inácio.
Player
public class Player
{
public int ID { get; }
public string Name { get; }
private double health, shield;
public Player(int id, string name, double health, double shield)
{
ID = id;
Name = name;
this.health = health;
this.shield = shield;
}
public void PrintPlayerName()
{
Console.WriteLine($"{Name}.");
}
}
Map
public abstract class Map
{
public string Name { get; }
protected string Filename { get; }
private List<Player> playerList;
public Map(string name, string filename)
{
Name = name;
Filename = filename;
playerList = new List<Player>();
}
public void AddPlayer(Player player)
{
playerList.Add(player);
}
public void PrintPlayerNames()
{
foreach(Player p in playerList)
{
p.PrintPlayerName();
}
}
}
DungeonMap
public class DungeonMap : Map
{
public int NumberOfDungeons { get; }
public DungeonMap(string name, string filename, int numberOfDungeons)
: base(name, filename)
{
NumberOfDungeons = numberOfDungeons;
}
}
OpenWorldMap
public class OpenWorldMap : Map
{
public float Width { get; }
public float Height { get; }
public OpenWorldMap(string name, string filename, int w, int h)
: base(name, filename)
{
Width = w;
Height = h;
}
}
Game
public class Game
{
internal static int gamesPlayed;
private int numberOfPlayers;
private Map map;
internal void GameLoop()
{
// Loop boolean.
bool run = true;
// Variables to use for user input.
string inputStringName, inputStringFilename;
int inputInt, inputIntDungeons, inputIntWidth, inputIntHeight;
double inputDoubleHealth, inputDoubleShield;
Console.WriteLine("Welcome to a simple Map creator game!\n");
// Engage a loop to keep the program always running.
while (run)
{
Console.WriteLine("\tStarting new Map creation process...\n");
Console.WriteLine("What type of Map do you want?\n('1' for " +
"Dungeon | '2' for Open World)\n");
Console.WriteLine("If you simply wish to stop, use '3'.");
// Read user's input.
inputInt = int.Parse(Console.ReadLine());
// Outcome based on user input...
// Exit.
if (inputInt == 3) break;
if (inputInt == 1)
Console.WriteLine("Creating a Dungeon map...\n");
else if (inputInt == 2)
Console.WriteLine("Creating a Open World Map...\n");
Console.WriteLine("What would you like to call it?\n");
inputStringName = Console.ReadLine();
inputStringFilename = inputStringName.ToLower();
if (inputInt == 1)
{
Console.WriteLine("How many dungeons would you like?");
inputIntDungeons = int.Parse(Console.ReadLine());
// After all values inserted, instantiate a DungeonMap.
map = new DungeonMap
(
inputStringName, inputStringFilename, inputIntDungeons
);
}
else if (inputInt == 2)
{
Console.WriteLine("Height?");
inputIntHeight = int.Parse(Console.ReadLine());
Console.WriteLine("Width?");
inputIntWidth = int.Parse(Console.ReadLine());
map = new OpenWorldMap
(
inputStringName, inputStringFilename, inputIntWidth,
inputIntHeight
);
}
Console.WriteLine($"Success! Your map's called {map.Name}.\n");
Console.WriteLine("Time to add some players!\n");
Console.WriteLine("How many players do you want to add?\n");
numberOfPlayers = int.Parse(Console.ReadLine());
Console.WriteLine($"Creating {numberOfPlayers} player(s)...");
// Add a player to the list based on amount of players decided.
for (int i = 0; i < numberOfPlayers; i++)
{
int playerID = i;
Console.WriteLine("Name?\n");
inputStringName = Console.ReadLine();
Console.WriteLine("Health amount?\n");
inputDoubleHealth = double.Parse(Console.ReadLine());
Console.WriteLine("Shield amount?\n");
inputDoubleShield = double.Parse(Console.ReadLine());
Player newPlayer = new Player
(
playerID, inputStringName,
inputDoubleHealth, inputDoubleShield
);
map.AddPlayer(newPlayer);
}
Console.WriteLine($"Success! {inputInt} player(s) created.\n");
Console.WriteLine("With everything done and dusted...\n");
Console.WriteLine("\t- - -\n");
Console.WriteLine($"Your map is called {map.Name}...\n");
Console.WriteLine($"It has {numberOfPlayers} player(s)...");
Console.WriteLine($"And their names are...");
map.PrintPlayerNames();
// Count up the amount of games played (times looped).
gamesPlayed++;
Console.WriteLine("\n");
}
}
}
Program
internal class Program
{
static void Main(string[] args)
{
Game game = new Game();
game.GameLoop();
Console.WriteLine($"\nYou played {Game.gamesPlayed} game(s)!");
}
}
Por Inácio Amerio