Diskuze – Lonesure
ZpětUpozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.


matesax:5.8.2012 6:26
Na PC módu se ustavičně pracuje pracuje - to co tam je teď, je jen dočasná záplata - a již teď mám mnohem lepší algoritmus - má však nepochopitelné problémy - tak snad dnes bude hotov... Mám to takto:
Každou první kartu ukládám do listu (její hodnotu + její picturebox) - a tak není možné za žádných okolností otočit stejnou první kartu. Ke každé první kartě se provede kontrola, zda její hodnota (ne její picturebox) není obsažena v tomto listu. Pokud ano, tak příští otočená karta není náhodná, ale právě ta, co je v onom listu. Jinak náhodný picture box dělám tak, že pomocí rekurze vypíchnu do dočasného listu ty pictureboxy, které splňují určité podmínky - musí být viditelné a pokud se jedná o první kartu, tak musí splňovat podmínky hoře (nesmí být již někdy otočena), anebo, pokud se jedná o druhou kartu, tak nesmí být její dvojice (první a druhá karta) obsažena ve stringu, kam ukládám již provedené kombinace - nikdy nesmí být provedena stejná kombinace. Rovnou dole přiložím kód, ve kterém by jsi mi mohl pomoci - vysvětlit mi, proč podlední 2 - nyní dokonce 4 karty mají problémy a sem tak se nenajde nic vyhovující podmínce provybrání karty - pochopíš z kódu...
Druhá karta není vidět nikdy - to jsem tu již řešil - prvně se provede kontrola ve větvení if else a až pak se provede otočení karty - takže když pc vyhodnotí kartu jako tu, která by se měla smazat, tak ji smaže dříve, než se otočí. A nakonec jsem se s tím smířil - alespoň to je originálnější a hra není tak rychlá... Celkově ta hra je jen narychlo uplácána - dělám ji do jednoho komunitného centra - takže s grafikou jsem chtěl počkat, až podle toho, co mi dají za materiáli - ovšem co se karet týče, rozhodně plánuji něco lepšího...
Kód:
private int Ran()
{
this.pol.Clear();
this.Pol();
int ou = this.pol[this.r.Next(this.pol.Count - 1)];
if (this.s[0] != -5)
this.k += "|" + this.s[0] + ";" + ou + "|";
else
this.za.Add(ou);
return ou;
}
private void Pol(int hf = 15)
{
if ((this.p[hf].Visible && ((this.s[0] == -5 && !this.za.Contains(hf)) || (this.s[0] != -5 && !k.Contains("|" + this.s[0] + ";" + hf + "|")))))
this.pol.Add(hf);
if (hf > 0)
this.Pol(hf - 1);
}
private void Pics(int pic, bool pc = false)
{
this.p[pic].Image = this.l[this.i[pic]];
if (this.s[0] == -5)
{
if (this.de.Contains(this.i[pic]))
this.next = this.de[this.de.IndexOf(this.i[pic]) + 1];
else
{
this.de.Add(this.i[pic]);
this.de.Add(pic);
}
this.s[0] = pic;
this.s[1] = this.i[pic];
if (!pc && !this.za.Contains(pic))
this.za.Add(pic);
}
else
{
if (!k.Contains("|" + this.s[0] + ";" + pic + "|"))
this.k += "|" + this.s[0] + ";" + pic + "|";
if (this.s[0] != pic && this.s[1] == this.i[pic])
{
this.Zr(pic);
this.Zr(this.s[0]);
if (!pc)
MessageBox.Show("Good job!");
int h1 = int.Parse(this.label1.Text.Substring(name1.Length + 2)), h2 = int.Parse(this.label2.Text.Substring(name2.Length + 2));
if (this.b)
{
h1 = h1 + 1;
this.label1.Text = this.name1 + ": " + h1.ToString();
}
else
{
h2 = h2 + 1;
this.label2.Text = this.name2 + ": " + h2.ToString();
}
if ((h1 + h2) == this.poc * 8)
{
this.timer1.Enabled = false;
string vit;
if (h1 > h2)
vit = this.name1 + ".";
else if (h1 < h2)
vit = this.name2 + ".";
else
vit = "Nikdo - remíza.";
if (MessageBox.Show("Konec hry! Zvítězil: " + vit + Environment.NewLine + "Chcete pokračovat ve hře? Pokud ne, bude program ukončen...", "Předzavírací dialog", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
{
this.za.Clear();
this.de.Clear();
this.k = "";
this.poc++;
this.Zr();
this.p[0].Visible = this.p[1].Visible = this.p[2].Visible = this.p[3].Visible = this.p[4].Visible = this.p[5].Visible = this.p[6].Visible = this.p[7].Visible = this.p[8].Visible = this.p[9].Visible = this.p[10].Visible = this.p[11].Visible = this.p[12].Visible = this.p[13].Visible = this.p[14].Visible = this.p[15].Visible = true;
this.ShuffleList(this.i.Count);
this.timer1.Enabled = true;
}
else
this.Close();
}
}
else
{
this.Zr();
if (this.s[1] != this.i[pic])
{
this.b = !this.b;
if (this.b == true)
{
this.label1.ForeColor = Color.RoyalBlue;
this.label2.ForeColor = Color.Black;
}
else
{
this.label2.ForeColor = Color.RoyalBlue;
this.label1.ForeColor = Color.Black;
}
}
}
this.s[0] = -5;
}
}
private void Zr(int co = -5)
{
if (co == -5)
this.p[0].Image = this.p[1].Image = this.p[2].Image = this.p[3].Image = this.p[4].Image = this.p[5].Image = this.p[6].Image = this.p[7].Image = this.p[8].Image = this.p[9].Image = this.p[10].Image = this.p[11].Image = this.p[12].Image = this.p[13].Image = this.p[14].Image = this.p[15].Image = this.def;
else
this.p[co].Visible = false;
}
PC si parametr pic generuje sám podle kódu hoře Ran(), Pol() - jinak
hráč volá pouze metodu Pics - s předefinovaným pic podle pictureboxu (pic
jest zkratka pictureboxu
)...
matesax:5.8.2012 6:30
Pardon za pravopis - psal jsem to zde, takže v tom malém okénku (vím, že
se dá zvětšit ) se mi to
blbě psalo...
Toto dělá PC v timeru:
if ((((this.name1 == "PC" || this.name1 == "pc" || this.name1 == "Pc") && this.b == true) || ((this.name2 == "PC" || this.name2 == "pc" || this.name2 == "Pc") && this.b == false)))
if (this.next == -5)
this.Pics(this.Ran(), true);
else
{
this.Pics(this.next, true);
this.next = -5;
}
matesax:5.8.2012 6:37
Část problému jsem již vyřešil - přidal jsem podmínku, že picture box druhé karty nesmí být obsažen v prvním popisovvaném listu - a problém mi dělá již jen poslední dvojice - ani jedna karta z poslední dvojice nerpojde přes podmínky v Pol()...
matesax:5.8.2012 6:42
Jo a název vznikl z:
Long Resource - dlouhý zdroják (to je totiž pravda)...
matesax:5.8.2012 6:53
Nuže z nového pozorování vyplynulo, že sem tam otočí již otočenou kartu - přičemž to samozřejmě nemá jít - tím to celé naruší a proto to pak selže. Zatím nefunguje kompabilita PC - člověk - jen PC - PC a člověk - člověk - ale to už pak bude sranda - teď se spíše snažím odstranit ten bug, kdy PC poruší podmínku...
Kit:5.8.2012 7:12
Rejp: Možná by to nebylo tak dlouhé, kdybys to napsal objektově.
matesax:5.8.2012 7:18
Dost blbě by se takto dělalo ovládání pictureboxů - když je to takto malý program, tak mi to přijde zbytečné - navíc abych mohl zprovoznit to ovládání pictureboxů, tak by byl kód mnohem delší...
Kit:5.8.2012 7:39
Zatím těch karet máš jen 16. Zajímavější (nebo spíš nudnější) to bude, až jich bude 64.
Takhle se nedá programovat. Jednopísmenné názvy proměnných se používají jen u řídících proměnných krátkých cyklů. Špagetový kód je ukázkou nezvládnuté dekompozice problému. Proč se metoda pro otočení karty jmenuje Pics?
Nemáš vůbec oddělenou herní a prezentační logiku. V takových programech se chyby hledají velmi těžko.
Zobrazeno 10 zpráv z 19.