C# :: Aufgabe #309 :: Lösung #1

2 Lösungen Lösungen öffentlich
#309

Game - Heiß oder Kalt

Anfänger - C# von DavidDev024 - 20.04.2020 um 19:36 Uhr
Das Spiel läuft folgender Maßen ab:

- Spieler 1 denkt sich eine Zahl aus
- Spieler 2 versucht nun die Zahl zu erraten, indem er eine Zahl eingibt
- nun wird der vorherige Versuch (falls einer vorhanden) mit dem jetzigen verglichen und wärmer oder kälter ausgegeben (je nachdem ob man der geheimen Zahl von Spieler 1 näher kommt oder nicht)
-Erratet Spieler 2 die Zahl sollen die benötigten Versuche und die benötigte Zeit ausgegeben werden.

Have Fun
#1
vote_ok
von JKooP (18090 Punkte) - 28.04.2020 um 16:00 Uhr
NET Core 3.x

Quellcode ausblenden C#-Code
using System;
using System.Diagnostics;
using static System.Math;
using static System.Console;

namespace CS_Aufgabe_309_Game
{
    class Program
    {
        static void Main(string[] args)
        {
            new Game();
        }
    }

    class Game
    {
        private readonly int _maxAttempts;
        private readonly int _minNumber;
        private readonly int _maxNumber;
        private readonly int _numRnd;
        private readonly Stopwatch _sw;
        private int _counter = 1;

        public Game(int maxAttempts = 20, int minNumber = 1, int maxNumber = 100)
        {
            _maxAttempts = maxAttempts;
            _minNumber = minNumber;
            _maxNumber = maxNumber;
            _sw = new Stopwatch();
            _numRnd = new Random().Next(_minNumber, _maxNumber);
            Compare();
            Result();
        }

        private void Compare()
        {
            bool finished = false;

            _sw.Start();

            InputNumbers(out int numOld);

            if (_numRnd == numOld)
                finished = true;
            else
                WriteLine("Leider nicht.");

            while (_counter <= _maxAttempts && !finished)
            {
                InputNumbers(out int numNew);

                if (_numRnd == numNew)
                {
                    finished = true;
                    continue;
                }
                else if (numOld == numNew)
                {
                    WriteLine("Das war die gleiche Zahl!");
                    _counter++;
                    continue;
                }
      
                WriteLine(Abs(_numRnd - numNew) > Abs(_numRnd - numOld) ? "kälter" : "wärmer");
                numOld = numNew;
                _counter++;
            }
        }

        private void InputNumbers(out int num)
        {
            Write($"Bitte eine Zahl zwischen { _minNumber } und { _maxNumber } eingeben: ");
            _ = int.TryParse(ReadLine(), out num);
        }

        private void Result()
        {
            _sw.Stop();

            if (_counter <= _maxAttempts)
            {
                var time = (int)Ceiling(_sw.Elapsed.TotalSeconds);
                var points = 1000 / (time / 10) + 1000 / _counter;

                WriteLine($"\nDie gesuchte Zahl war { _numRnd }." +
                    $"\nDu hast { _counter } Versuch(e) benötigt!" +
                    $"\nZeit:\t{ time,4 }s\nPunkte:\t{ points,4 }");
            }
            else
            {
                WriteLine($"\nSpiel beendet! Zu viele Versuche.");
            }
        }
    }
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben