Diskuze: Random ze třídy/objektu

C# .NET .NET (C# a Visual Basic) Random ze třídy/objektu American English version English version

Avatar
Jakub Bořucký:

mam třídu jménem OtazkyVsechno --- její konstruktor je (label, button1,button2,but­ton3,button4) - otazka se zapiše do labelu a do těch 4 buttonu odpovědi. Pak v ty třídě mám metodu jménem Otazky - ("Otazka", "odpoved1", "odpoved2", "odpoved3", "odpoved4", Button spravna) -- to jsou vlastně stringy , akorát to poslední je kterej button je spravnej.
Ve formu to použivám nějak takhle:
OtazkyVsechno o = new OtazkyVsechno(la­bel1, button1, button2, button3, button4);
o.Otazky("Kolik je 1+1", "1", "2", "3", "4", button2);

AŽ SEM MI TO VŠECHNO FUNGUJE TAK JAK MÁ
Ale ja budu mít těch otázek víc a potřebuju aby když kliknu na tu správnou odpověd , tak se mi to změnilo, ale ted nevím jak. Prostě abych měl těch o.Otazky(xxxx) třeba 10 a v nahodným pořadí se zobrazovaly otázky a odpovědi. Pokud možno prosím, nepiště at to všechno udělám jinak, ikdyby to timhle způsobem bylo nějak extra složitý.

 
Odpovědět 29. března 18:54
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Jakub Bořucký
vajkuba1234:

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.

Nahoru Odpovědět 29. března 19:16
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
Odpovídá na vajkuba1234
michaelbeats7:

.

Editováno 29. března 19:22
 
Nahoru Odpovědět 29. března 19:20
Avatar
Odpovídá na vajkuba1234
Jakub Bořucký:

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?

 
Nahoru Odpovědět 29. března 19:24
Avatar
vajkuba1234
Člen
Avatar
Nahoru Odpovědět 29. března 19:32
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Jakub Bořucký
vajkuba1234:

Co jsi zkousel a co ti neslo? Co bys chtel ukazat? + Ukaz kod, co mas jak resene.

Nahoru Odpovědět 29. března 19:33
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
Jakub Bořucký:

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ě.

 
Nahoru Odpovědět 29. března 19:40
Avatar
vajkuba1234
Člen
Avatar
Nahoru Odpovědět 29. března 19:52
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
abushrek
Člen
Avatar
abushrek:

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.

Editováno 29. března 20:09
 
Nahoru Odpovědět 29. března 20:08
Avatar
Odpovídá na Jakub Bořucký
sadlomaslox25:

a neni nejjednoduzsi si ty buttony predat jako pole?
OtazkyVsechno(La­blel l, List<Button> buttons, Button answerButton);
OtazkyVsechno o = new OtazkyVsechno(la­bel1, new List<Buttons>{but­ton1, button2, button3}, button4);

a pak nahodne tahat ty butony z listu:

while(buttons­.Count>0)
var randomIndex=ra­.Next(buttons­.Count);
var button=button­s[randomIndex];
buttons.Remove­At(randomIndex);

 
Nahoru Odpovědět  +1 29. března 20:14
Avatar
abushrek
Člen
Avatar
abushrek:

Poté pokud budeš chtít náhodně vybírat otázky tak stačí jen.

List<Otazky> otazkyList = new List<Otazky>;
Random rnd = new Random();
//vyber nahodne otazky bez osetreni opakovaní se
otazkyList[rnd.Next(0,otazkyList.Count)];
 
Nahoru Odpovědět 29. března 20:19
Avatar
abushrek
Člen
Avatar
Odpovídá na sadlomaslox25
abushrek:

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á.

Editováno 29. března 20:26
 
Nahoru Odpovědět 29. března 20:23
Avatar
Odpovídá na abushrek
Jakub Bořucký:

Hele to co jsi napsal si myslím, že je hodně blízko k tomu jak to má být :D 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,but­ton3,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(la­bel1, 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.

 
Nahoru Odpovědět 29. března 20:32
Avatar
abushrek
Člen
Avatar
Odpovídá na Jakub Bořucký
abushrek:

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)]);
}
}
Editováno 29. března 20:51
 
Nahoru Odpovědět 29. března 20:50
Avatar
abushrek
Člen
Avatar
abushrek:

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.

 
Nahoru Odpovědět 29. března 22:16
Avatar
abushrek
Člen
Avatar
abushrek:

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
}
}
 
Nahoru Odpovědět 29. března 22:37
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 16 zpráv z 16.