26 - Implementa um jogo turn-based, com o número máximo de turns dado como
argumento na linha de comando. O jogo deve decorrer enquanto o jogador estiver
vivo e enquanto o número máximo de turns não tiver sido atingido. Em cada
turn o jogador tem uma probabilidade de morrer de 2%. Se o jogador não morrer
numa dada turn, deve ser apresentada a mensagem Player has survived turn #3
(substituir 3 pela pela turn atual). Caso contrário, deve ser apresentada a
mensagem Player died after 10 turns
(substituir 10 pela turn em que o
jogador efetivamente morreu).
Nota 1: O "jogo" não é interativo, simplesmente apresenta uma mensagem por turn.
Nota 2: Podem ser obtidos números aleatórios entre 0 e 1 usando o método NextDouble da classe Random (namespace System) da seguinte forma:
// Criar objeto do tipo Random
Random rng = new Random();
// Obter double entre 0 e 1
double probability = rng.NextDouble();
// Definir variáveis e guardar os seus valores
int turn = 0;
bool gameLoop = true;
// Valor dado na linha de comandos é convertido para inteiro
int maxTurns = Convert.ToInt32(args[0]);
// Criar objeto do tipo random
Random rng = new Random();
Console.WriteLine("Press any key to start!");
Console.ReadKey();
// Inicia while loop que fica ativo até o jogador morrer, através
// da variável bool denominada de gameLoop que começa como true e
// apenas é alterada para false quando é atribuído um valor abaixo
// de 0,02 (2%) à variável ou o valor de turn chega ao valor de
// maxTurns
while (gameLoop)
{
// Declarar variável deathRNG, usada para determinar se o
// jogador morre ou não
double deathRNG = rng.NextDouble();
// Incrementar o valor do turno
turn++;
// if/else if/else para os casos possíveis fechado o while loop
// em duas delas, que acabam o jogo se o jogador sobreviver a
// todos os turnos, sendo o nº deles dado na linha de comandos
// ou se o jogador sobreviver
if (turn == maxTurns)
{
Console.WriteLine($"Player has survided turn {turn} and " +
$"made it to the end!\nCongratulations!");
gameLoop = false;
}
else if (deathRNG > 0.02)
{
Console.WriteLine($"Player has survided turn {turn}!");
}
else
{
Console.WriteLine($"Player died after {turn} turns..." +
$"\nGAME OVER...");
gameLoop = false;
}
}
Console.WriteLine("\nPress any key to exit.");
Console.ReadKey();
Por Pedro Inácio.
using System;
namespace Exercicio26
{
class Program
{
static void Main(string[] args)
{
// Declare variables
int maxturns;
int turns = 0;
double chance;
// Creating the Random object
Random rng = new Random();
// Dodging exceptions and erros
// If code wasn't run through console
// It would throw an exception -- fixing that
try
{
// Converts console's first argument to int
maxturns = Convert.ToInt32(args[0]);
// This wouldn't work if a string was entered
// On the console, so...
}
catch
{
// If program crashes
// Asks user for input
// And proceeds program
Console.Write("Enter max turns: ");
maxturns = Convert.ToInt32(Console.ReadLine());
}
// Reinforces number of maxturns as "game" starts
Console.WriteLine("You have too survive " + maxturns + " turns");
// As long as player is alive and turns haven't ran out
// Does the following
while (turns < maxturns)
{
// Probability/alive check
chance = rng.NextDouble();
// Each turn player has chance to die of 2%
if (chance < 0.02)
{
// Die message
Console.WriteLine("Player has died after " + turns + " Turns");
break;
}
else
{
// Increments number of turns
turns++;
// Outputs number of turns survived
Console.WriteLine("Player has survided turn #" + turns);
}
}
}
}
}
Por João Rebelo