Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Herní čas v C#

Zdravím, potřeboval bych prosím poradit.

Dělám v C# jednoduchou hru s využitím WPF a potřeboval bych nějak naimplementovat herní čas - tj. 1s ve skutečnosti by odpovídala 1min ve hře. Napadl mě Timespan, ale bohužel nevím jak na to.
Prosím o radu a případný vzor kódu v C#

Děkuji.

Předmět Autor Datum
Nechapem co chces "implementovat". TimeSpan je len konverzia 4 cisel na string. Vysvetlenie je v pri…
MM.. 10.03.2017 00:16
MM..
Resp sorry TimeSpan vie aj Add a Subtract, https://msdn.microsoft.com/en-us/library/system.ti mespan…
MM.. 10.03.2017 00:20
MM..
Ok, implementovat není to správné slovo. Tady to mají vysvětlené: http://stackoverflow.com/questions…
Petr.Pa 10.03.2017 00:36
Petr.Pa
DateTime - datum a čas TimeSpan - časový úsek Takže záleží na tobě, co tam vlastně chceš mít.
Wikan 10.03.2017 07:43
Wikan
Vůbec nevím, jak to zapsat - aby 1s ve skutečnosti by odpovídala 1min ve hře.
Petr.Pa 10.03.2017 10:56
Petr.Pa
Např.: - při startu hry si uložíš aktuální čas - pokud budeš chtít "herní" čas, zjistíš si opět aktu…
Wikan 10.03.2017 11:07
Wikan
Tak jsem něco vyzkoušel, bohužel to nefunguje tak jak by mělo. Byl by mi někdo schopen upravit tento…
Petr.Pa 10.03.2017 11:47
Petr.Pa
DateTime puvodnicas = DateTime.Now; Console.WriteLine(puvodnicas); Thread.Sleep(1000); DateTime nove…
Wikan 10.03.2017 11:52
Wikan
Díky, ale teď mi to dělá toto: [cas.PNG] Potřeboval bych, aby na posledním řádku bylo: 15:14:57 Dě…
Petr.Pa 10.03.2017 15:18
Petr.Pa
Ten původní čas si samozřejmě musíš uložit pouze na začátku a ne ho pokaždé měnit.
Wikan 10.03.2017 15:19
Wikan
Ano, měl jsou to vše ve while. Děkuji moc za cenné rady, jste borec. :-)
Petr.Pa 10.03.2017 15:23
Petr.Pa
Ještě bych měl dotaz - tento herní čas by se měl zobrazovat v okně aplikace - mám pro něj TextBlock.…
Petr.Pa 10.03.2017 16:14
Petr.Pa
Nepoužívej cyklus ale DispatcherTimer.
Wikan 10.03.2017 16:46
Wikan
Tak jsem už myslel, že je to funkční - v konzoli ano, ale v tom WPF stále ještě ne. Použil jsem Disp…
Petr.Pa 10.03.2017 17:13
Petr.Pa
Stejná chyba jako před tím. Původní čas si musíš uložit jednou a ne při každém ticku. poslední
Wikan 10.03.2017 17:37
Wikan
Zdar hele vyser se na WPF :D a stáhni si unity , výtvářet hry ve WPF je o ničem :D
UnityBetter 10.03.2017 11:38
UnityBetter
Máme bohužel ve škole povinnost vytvářet aplikace ve WPF.
Petr.Pa 10.03.2017 11:47
Petr.Pa

Tak jsem něco vyzkoušel, bohužel to nefunguje tak jak by mělo.
Byl by mi někdo schopen upravit tento základ tak, aby 1s ve skutečnosti by odpovídala 1min ve hře?

        DateTime puvodnicas = DateTime.Now;
                Console.WriteLine(puvodnicas);

                Thread.Sleep(1000);
                DateTime novejsicas = DateTime.Now;
                Console.WriteLine(novejsicas);

                TimeSpan duration = new TimeSpan(0, 0, 60);
                duration = TimeSpan.FromTicks(duration.Ticks * 60);
                Console.WriteLine(duration);

                DateTime hernicas = puvodnicas - duration;

                Console.WriteLine(hernicas);

Děkuji moc.

DateTime puvodnicas = DateTime.Now;
Console.WriteLine(puvodnicas);

Thread.Sleep(1000);
DateTime novejsicas = DateTime.Now;
Console.WriteLine(novejsicas);

TimeSpan duration = novejsicas - puvodnicas;
duration = TimeSpan.FromTicks(duration.Ticks * 60);
Console.WriteLine(duration);

DateTime hernicas = puvodnicas + duration;

Console.WriteLine(hernicas);

Ještě bych měl dotaz - tento herní čas by se měl zobrazovat v okně aplikace - mám pro něj TextBlock.
Potřeboval bych, aby se Text v TextBlocku neustále měnil - v závislosti na herním čase. V konzoli jsem to měl ve

while(true)

loopu, ale to v tomto případě zapříčiní zamrznutí programu.

Mám to zatím takto:

public navigace()
        {
            InitializeComponent();

            frame.Navigate(oknomapa);

            herni_cas();

        }

        private void herni_cas()
        {
            DateTime puvodnicas = DateTime.Now;
            while (true)
            {
                Thread.Sleep(1000);
                DateTime novejsicas = DateTime.Now;

                TimeSpan duration = novejsicas - puvodnicas;
                duration = TimeSpan.FromTicks(duration.Ticks * 60);

                DateTime hernicas = puvodnicas + duration;


                cas.Text = hernicas.ToShortTimeString();

            }
        }

Děkuji.

Tak jsem už myslel, že je to funkční - v konzoli ano, ale v tom WPF stále ještě ne. Použil jsem DispatcherTimer a mám to v takovémto stádiu:

public navigace()
        {


            DispatcherTimer timer = new DispatcherTimer();
            timer.Interval = TimeSpan.FromSeconds(1);
            timer.Tick += timer_Tick;
            timer.Start();


        }

        void timer_Tick(object sender, EventArgs e)

        {
            DateTime puvodnicas = DateTime.Now;

            DateTime novejsicas = DateTime.Now.AddSeconds(1.0);


            TimeSpan duration = novejsicas - puvodnicas;
            duration = TimeSpan.FromTicks(duration.Ticks * 60);

            DateTime hernicas = puvodnicas + duration;

            cas.Text = hernicas.ToShortTimeString();

        }

Děkuji

Zpět do poradny Odpovědět na původní otázku Nahoru