Countdown

Die Programmiersprache C# und Programmierung im .NET Framework/Mono
Antworten
DerSamu
Beiträge: 35
Registriert: Sa Dez 23, 2017 3:15 pm

Countdown

Beitrag von DerSamu » So Feb 04, 2018 4:39 pm

Hey und zwar wollte ich einen Countdown machen. Der Hintergrund: Ich wollte ein Mathe-Quiz machen, welches einfach eine zufällige Rechnung erstellen soll. Der User gibt dann das Ergebnis ein und das so lange, bis 30 sekunden vergangen sind. Jetzt hab ich mir gedacht, ich könnte doch einen int countdown machen, welcher am Anfang den Wert 30 bekommt. Und jede Sekunde soll dann eben 1 von countdown weggezählt werden. Ich dachte mir anfangs, das würde mit Thread.Sleep(1000); gehen, und danach halt 1 von countdown wegzählen. Aber Thread.Sleep(); lässt das Programm ja im Prinzip nur 1 Sekunde warten oder? Was ich aber will ist, dass der Countdown sozusagen im Hintergrund läuft. Kann mir dabei jemand helfen?
lernender Programmierer, hauptsächlich C# und Java

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Countdown

Beitrag von Xin » So Feb 04, 2018 5:17 pm

Was Du suchst ist ein Timer. Das ist ein Element des Betriebsystems, dass die nach einer eingestellten Zeit ein Event schickt.
Wenn Du einfach C# und Timer suchst findest Du Informationen.

Wenn Du den Timer genauer haben willst, lässt Du Dir alle 50ms eine Nachricht schicken und zeigst dann die Uhr neu an. Die Uhr selbst ergibt sich aber nicht durch die Anzahl der Events, sondern stellt eben den Unterschied zwischen Startzeitpunkt und gegenwärtiger Zeit dar.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

DerSamu
Beiträge: 35
Registriert: Sa Dez 23, 2017 3:15 pm

Re: Countdown

Beitrag von DerSamu » So Feb 04, 2018 5:18 pm

Okay danke! Werde mal danach suchen. Danke für die schnelle Antwort :)
lernender Programmierer, hauptsächlich C# und Java

DerSamu
Beiträge: 35
Registriert: Sa Dez 23, 2017 3:15 pm

Re: Countdown

Beitrag von DerSamu » So Feb 04, 2018 5:32 pm

Okay hab es jetzt gefunden. Eine Frage noch: Ich habe jetzt ein Programm geschrieben, welches eben ein Mathe-Quiz ist. Dieses soll nach z.B. 30 sekunden aufhören, wie ich das schon vorher erwähnt habe. Jetzt ist es aber so, dass es ja erst am Ende der Schleife schaut, ob die Zeit denn schon erreicht wurde. Ich hätte gerne, dass das Programm beendet wird, wenn die Zeit vorbei ist, auch wenn gerade eine Usereingabe bevorsteht.

Code: Alles auswählen

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Diagnostics;
namespace MathsGame
{
    class Program
    {
        static void Main(string[] args)
        {
            //Mathe-Quiz
            int[] time = {30, 60, 90 };
            int countdown;
            int firstNumber;
            int secondNumber;
            int result=0;
            int userResult;
            char actualOperand;
            int findOperand; //sucht einen von 4 operanden aus, die in einem array gespeichert sind
            char[] operands= {'+', '-','/', '*' };
            string userInput;
            Random random = new Random();
            Stopwatch sw = new Stopwatch();
            //Start and getting the stopwatch
            Console.Write("Maths-Quiz\n==========\n Please put in the result as fast as possible\n  How much time do you wanna have? 30sek[1], 60sek[2] oder 90sek[3]");
            userInput = Console.ReadLine();
            int index = Convert.ToInt32(userInput);
            countdown = time[index - 1];
            sw.Start();                 //Start the Stopwatch
            
            do
            {
                Console.Clear();
                //Calculations
                firstNumber = random.Next(0, 100 + 1);
                secondNumber = random.Next(0, 10 + 1);
                findOperand = random.Next(0,4);
                actualOperand = operands[findOperand];
                if (actualOperand == '+')
                {
                    result = firstNumber + secondNumber;
                }else if(actualOperand== '-')
                {
                    result = firstNumber - secondNumber;
                }else if (actualOperand == '/')
                {
                    result = firstNumber / secondNumber;
                }else if (actualOperand == '*')
                {
                    result = firstNumber * secondNumber;
                }
                Console.Write("What is {0}{1}{2}? Result: ", firstNumber, actualOperand, secondNumber);
                userInput = Console.ReadLine();
                userResult = Convert.ToInt32(userInput);
                Console.Clear();
                for (int i=4; userResult != result&&i>=0; i--)
                {
                    Console.Write("Wrong result. Try again! You have {0} tries left. \n", i);
                    Console.Write("What is {0}{1}{2}? Result: ", firstNumber, actualOperand, secondNumber);
                    userInput = Console.ReadLine();
                    userResult = Convert.ToInt32(userInput);
                    Console.Clear();
                }
                
            } while (sw.ElapsedMilliseconds<=countdown*1000);
            sw.Stop();
            Console.WriteLine("Executiontime: {0} seconds", time[index]);
            Console.Write("Please Press any Key to end the Program...");
            Console.ReadKey();

        }
    }
}

lernender Programmierer, hauptsächlich C# und Java

Antworten