Kezdőoldal » Számítástechnika » Programozás » C# Console Application-ben...

Lintint kérdése:

C# Console Application-ben szettnék időkorlátos szövegbevitelt csinálni. Van erre valami egyszerű megoldás?

Figyelt kérdés
Vagyis a program mondjuk várakozzon 500ms és közbe figyeljen és mentse el string-be a beütött beüt de ha nem ütök be semmit a várakozás idő alatt akkor simán lépjen tovább. van erre valami egyszerű megoldás?

2016. nov. 20. 13:31
 1/9 anonim ***** válasza:
Egyszerű nincs, mert a konzolról beolvasás blokkol, tehát külön szálon kellene kezelned az olvasást, ami nem feltétlenül kezdő feladat, persze nem lehetetlen.
2016. nov. 20. 13:35
Hasznos számodra ez a válasz?
 2/9 A kérdező kommentje:

Ááá értem merthogy egy "snake" stílusú játékot szeretnék csinálni csak annyi változtatással ha a kígyó felvesz 1 pontot akkor nem nő csak számolja hogy hány pontom van. És ebbe amikor a kígyó épp vár h tovább lépjen

ha beütöm mondjuk a "w" akkor onnantól felfele mozogjon de ha nem ütök be semmit folytatja a mozgását.

2016. nov. 20. 13:41
 3/9 anonim ***** válasza:
Hát ehhez szerintem mindenképpen két külön szál kellene, egy ami frissíti a kimenetet fix időközönként, egy pedig ami beolvassa és eltárolja az utolsó inputot.
2016. nov. 20. 14:51
Hasznos számodra ez a válasz?
 4/9 anonim ***** válasza:

if(Console.KeyAvailable)

key = Console.ReadKey();

2016. nov. 20. 15:05
Hasznos számodra ez a válasz?
 5/9 A kérdező kommentje:

Igen. Most megírtam anélkül hogy időkorlátos legyen a betű bevitel most próbálok utána olvasni hogy hogy is működi ez a Szálkezelés

Úgy olvasom hogy ez kell hoozá: Thread t = new Thread();

csak azt nem tudom hogy mit kel írni a zárójelbe

2016. nov. 20. 15:07
 6/9 anonim ***** válasza:

Hát annál kicsit összetettebb a probléma, hogy a "zárójelbe mit kell írni".

Szerintem még ne erőltesd a dolgot, ha még ennyire az elején vagy.

2016. nov. 20. 15:13
Hasznos számodra ez a válasz?
 7/9 anonim ***** válasza:

Szerintem ezt a legegyszerűbben egy Timer-el tudod megoldani.


Csináltam most egy egyszerű példát, hogy értsd:


using System;

using System.Timers;


namespace ConsoleApplication1

{

class Program

{

static string direction;


static void Main(string[] args)

{

Timer timer = new Timer(3000);

timer.Elapsed += Timer_Elapsed;

timer.Start();


direction = "jobbra";


ConsoleKeyInfo inputKey;


do

{

inputKey = Console.ReadKey(true);


switch (inputKey.Key)

{

case ConsoleKey.W:

direction = "fel";

break;

case ConsoleKey.S:

direction = "le";

break;

case ConsoleKey.D:

direction = "jobbra";

break;

case ConsoleKey.A:

direction = "balra";

break;

default:

break;

}


if (inputKey.Key == ConsoleKey.W || inputKey.Key == ConsoleKey.S || inputKey.Key == ConsoleKey.A || inputKey.Key == ConsoleKey.D)

{

timer.Interval = 3000;

Move();

}

}

while (inputKey.Key != ConsoleKey.Escape);

}


private static void Timer_Elapsed(object sender, ElapsedEventArgs e)

{

Move();

}

public static void Move()

{

Console.WriteLine(direction);

}

}

}


(Remélem olvasható, ha nem akkor megosztom máshogy.)


Annyi az egész, hogy a Timer ebben a példában 3 másodpercenként elindítja a Timer_Elapsed függvényt, ez pedig meghívja a Move-t, ami ugye a kígyó mozgását reprezentálja. Viszont közben folyamatosan figyeled a lenyomott billentyűket (Esc-nél kilép). Ha olyan gombot nyomtál le, ami iránygomb, akkor a gombnak megfelelően beállítja a mozgás irányát, meghívja a Move-t és a Timer "lefutási idejét" visszaállítja 3 másodpercre.

2016. nov. 20. 15:20
Hasznos számodra ez a válasz?
 8/9 A kérdező kommentje:

Óóó ez király :D

ezt betudom most építeni a nekem meglévőbe :D

2016. nov. 20. 15:29
 9/9 A kérdező kommentje:
Köszönöm :D
2016. nov. 20. 15:29

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!