Várakozás eseményre C# környezetben, hogyan?
Sziasztok!
A következő problémába kérném segítségeteket:
Az egyszerűség kedvéért egy "itt a piros-hol a piros"-on keresztül vezetem le a kérdésem.
Adott egy gép előtt ülő játékos és egy gépi játékos(ai). A pálya egész egyszerűen három PictureBox-ból áll, amik OnClick eseményre reagálnak.
Először a játékos választhatja ki a három PictureBox egyikét. Egérgomb kattintás esetén beindul az OnClick eseményre létrehozott metódus és kiderül, hogy eltalálta e a vörös dáma hollétét vagy sem. Ezek után a, nem túl bonyolult mesterséges intelligencia választhat, mondjuk generál egy számot egytől háromig és ennek megfelelő OnClick metódusra mutat és folyik a játék tovább.
Ezt összefogva létrehozok egy Fogyseg() metódust, ami eldönti egy egyszerű feltétellel, hogy éppen ki következik és mondjuk addig fut a játék amíg valaki el nem ér 20 pontot.(körönként egy kapható)
Kérdésem a következő lenne ezzel kapcsolatban:
A számítógép esetén értelemszerűen a vezérlést átadom egy metódusnak és ő szépen levezényli az egész műveletet, de a játékos esetén nekem arra kell várakoznom, hogy egy OnClick esemény megtörténjen, hogyan tudom ezt megtenni?
Az OnClick-eket nem tudom mozgatni, a Form hívja meg őket.
Nem kell semmit tenned. PictureBox-ra kattint igaz?
Ha Visual Studioban fejesztesz: Kattints duplán a PictureBox-ra a Designer nézetben és 2 kódort hoz létre:
az egyik a Form.Designer.cs fájlban lesz a másik a Form.cs-ben. Amit neked mutatni fog az az "OnClick" metódus picturebox1_Click (object sender, EventArgse e){}.
Ide írod be, hogy mi történtjen a kattintás után. A másik kódsorral különösebben nem kell foglalkoznod, az szimplán annyi, hogy a Form osztályod regisztrál a PictureBox object Click eseményére.Miután a 3 PictureBox-od mindegyik esetén nagyjából ugyanaz történik, hozd létre az összes Click eventhandlert majd innen irányítsd át a programod egy közös metódusba, pl. calculateGameResult(); Ebben a metódusban, amire mint három PictureBox Click eventhandlerében hivatkozol, implementálja a véletlenszám generálást, stb.
Lehet persze ezt még bonyolítani, de szerintem ennyivel is meg lehet oldani,
Először is köszönöm a választ!
Igen a problémám nem is ezzel a részével van. Hanem a Foegyseg() metódussal. Ha a Játékos jon akkor nem tudom mit kezdjek vele, mert a program ebben a szakaszban arra vár, hogy egy OnClick esemény bekövetkezzen, de ezt nem tudom hogy megírni.
A gép esetén ugye egyértelmű:
Foegyseg()
{
if(valtozo % 2 == 1)
Generálj számot, nézzük jó e
else //most jön a játékos
várj Onclick eseményre--> na ezt nem tudom, hogy írjam meg
}
Kicsit kibővítem a metódust, mert így nem sok értelme lenne:
Foegyseg()
{
do{
if(valtozo % 2 == 1)
Generálj számot, nézzük jó e
else //most jön a játékos
várj Onclick eseményre--> na ezt nem tudom, hogy írjam meg
while(amíg valaki el nem éri a 20 pontot);
}
és itt látszik, ha nem írom meg a várakozás eseményre részét akkor a gép jól eljátszik magával vagy végtelen ciklust készítek
Azt hiszem értem mire gondolsz, hagyjam a vezérlés dolgot és inkább az ellenőrzés részt írjam úgy meg, ha a játékos van soron ellenőrizzen, ha pedig nem akkor ne.
Köszi a választ!
A programot a játékos irányítja, mert tkp. ö indítja el a Click eventet, azzal, hogy a képre kattint. Neked csak kezelned kell ezt az eseményt. Ha éppen nem csinál a játékos semmit, akkor a programod se csinál semmit (ez persze nem igaz, de nem kell egy végtelenített ciklusban másodpercenként kétmilliószor körbe-körbe futkorásznia, abban reménykedve, hogy valamikor hátha becsúszik egy klikk). Amíg nem történik semmi, addig tkp. Az Application.Run(...) részében vagy a kódnak. Ez nyit meg egy message pump-ot (ami számodra lényegtelen, de kb. ez a programod "ütöere"), létrehoz egy ablakot, rápakolja a control elemeket, ezek akkor is jól "elvannak", ha éppen a felhasználó az orrát piszkálja. Ha csinál valamit, akkor a control elemek jelentik a Form (vagy bármilyen más object) felé, hogy "Apafej, megböktek, csináljál valamit!". A Form (vagy más osztály objectje) pedig megkeresi azt a metódust, ami kezeli az eseményt, ennek az elöfeltétele csupán annyi, hogy a Form osztály "feliratkozik" az eseményre és így értesítést kap. A control elem maga fogja "elkurjantani" magát, ha bekövetkezik valamilyen esemény és ezzel értesít minden más objectet, amelyiknek tudnia kell róla. (Ezt a kódot nem látod, mert ez a System.dll-ben (vagy akármelyikben) van és ennek a kódja nem nyilvános. A neked lényeg annyi, hogy definiáld melyik control elem melyik eseményére akarsz feliratkozni és ha bekövetkezik mit szeretnél csinálni.
Tudsz saját eventeket is defininálni, ebben az esetben az összes kódot neked kell írnod. Kiindulásnak ez jó: [link]
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!