Diskuze: Random ze třídy/objektu
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 16 zpráv z 16.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Dej to do listu a pro nahodne generovani pouzij tridu Random. Prejmenuj tridy a metody tak, aby byly v jednotnem cisle a nazvy davaly smysl.
To jsem právě taky zkoušel, ale moc mi to nešlo. Mohl bys prosím napsat kratce přiklad jak bys to udělal?
Co jsi zkousel a co ti neslo? Co bys chtel ukazat? + Ukaz kod, co mas jak resene.
Ted prostě, potřebuju víc otázek.
o.Otazky("Kolik je 1 + 1", "1", "2", "3", "4", button2);
to první se zapiše do labelu, pak ty 4 se zapíšou do buttonu a jako
poslední je který button je správně.
Pokud jsem pochopil správně co máte na mysli tak by to mělo být tohle.
//Vytvoření listu otázek
List<Otazky> otazkyList = new List<Otazky>;
//Naplnění listu otázkami
otazkyList.Add(new Otazky("otazka1","odpoved1","odpoved2","odpoved3","odpoved4",button));
otazkyList.Add(new Otazky("otazka2","odpoved1","odpoved2","odpoved3","odpoved4",button));
Pokud chcete podrobnější popis jak to funguje stačí napsat.
a neni nejjednoduzsi si ty buttony predat jako pole?
OtazkyVsechno(Lablel l, List<Button> buttons, Button answerButton);
OtazkyVsechno o = new OtazkyVsechno(label1, new List<Buttons>{button1,
button2, button3}, button4);
a pak nahodne tahat ty butony z listu:
while(buttons.Count>0)
var randomIndex=ra.Next(buttons.Count);
var button=buttons[randomIndex];
buttons.RemoveAt(randomIndex);
Tady je myšleno s tím že tady začíná pokud by chtěl opravdu metodu která by byla použitelná unikátně tak je nejlepší:
//tím pádem pokud použije params tak může mít otázka proměnlivý počet odpovědí
private void AddAnswer(Label label, Button answerButton, params Button buttons[])
{
//text k obsluze metody
}
Nechtěl jsem tu nic takového tahat, protože je zřejmé, že s tím začíná.
Hele to co jsi napsal si myslím, že je hodně blízko k tomu jak to má být ještě trochu to upřesním, protože si myslím, že jsi napsal špatně ty názvy a já jsem v tom uplně ztracenej. Mám třídu OtazkyVsechno a její konstruktor - (label , button1,button2,button3,button4) ten konstuktor pak ve formu mimo třidu napišu jen jednou. Pak je tu metoda, kterou budu použivát pořád - metoda s názvem Otazky s parametry (string otazka, string odpoved1, string odpoved2, string odpoved3 , string odpoved3, string odpoved4, button spravne) .... Budu psát otázku která se mi zapiše do toho labelu, pak odpovedi , který se zapíšou do těch buttonu a nakonec spravnej Button.
Použití mimo tu třídu ve formu:
OtazkyVsechno o = new OtazkyVsechno(label1, button1, button2, button3,
button4);
o.Otazky("Kolik je 1 + 1", "1", "2", "3", "4", button2);
A ted chci aby když kliknu na spravnou otázku tak se mi do toho všeho zapsala jina otázka s jinou odpovědi.
Tak musíš vyřešit nějaký loop(smyčku), nebo jednoduše event na
tlačítka a pokud je to správně tak to tlačítko zavolá metodu která
vygeneruje další odpověď.
Musíš mít nějaký list naplněn více otázkami.
Ta metoda by mohla vypadat nějak takhle.
private void SelectNext()
{
if(/*správně tohle ti bude nastavovat ten button*/)
{
//Můžeš implementovat nějaké skóre
score++;
Random rnd = new Random(); //nemělo by být přímo v metodě ale někde v konstruktoru třídy kvůli paměťovým nárokum, ale to je maličkost
//vyber nahodne otazky bez osetreni opakovaní se otázek
o.Otazky(otazkyList[rnd.Next(0,otazkyList.Count)]);
}
}
Zkusím ti poradit udělej si třídu Otazka, která bude jen pomocná bude
mít jen vlastnosti a konstruktor dále si udělej třídu OtazkaService a kde
budeš mít list generický po Otazce metody jako Spravne(), PridejOtazku(),
privátní metodu DalsiOtazka(), která bude vnořená do metody Spravne(), a
pak si ji zavolej někde v main třídě kde potom následně budeš volat
metodu PridejOtazku() podle toho kolik otazek a dále po stisku tlačítka
budeš volat metodu Spravne().
Doufám že jsi to aspoň trošku pochopil, kdyžtak se můžeš zeptat na
konkrétní informace které by jsi chtěl vědět.
Nebo ti můžu poradit ještě lépe, když jsem nad tím přemýšlel tak nepředávej button ale předávej přímo správný string dám příklad:
o.Otazky("Kolik je 1 + 1", "1", "2", "3", "4","2");
Následně z buttonu získej string:
private void button1_Click(object sender, System.EventArgs e)
{
//metoda Správně bude obsahovat parametr string který budou tlačítka odevzdávat po stisku a zavolají tu metodu
Spravne(button1.Text);
}
Metoda Spravne muze vypadat nějak takhle:
private void Spravne(string odpoved)
{
if(odpoved == otazka.Spravne)
{
// zde je možno poté implementovat vše co je potřeba pokud je správně zobrazeno
}
}
Zobrazeno 16 zpráv z 16.