Skip to content

Latest commit

 

History

History
158 lines (132 loc) · 4.71 KB

File metadata and controls

158 lines (132 loc) · 4.71 KB

Pergunta

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();

Soluções

Solução 1

// 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.

Solução 2

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