Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
matesax
Tvůrce
Avatar
matesax:2.8.2012 7:02

Dobrý den,
nasledující kód funguje dokonale:

 switch (pic)
{
    case 0:
        this.pictureBox1.Image = this.l[this.i[pic]];
        break;
    case 1:
        this.pictureBox2.Image = this.l[this.i[pic]];
        break;
    case 2:
        this.pictureBox3.Image = this.l[this.i[pic]];
        break;
    case 3:
        this.pictureBox4.Image = this.l[this.i[pic]];
        break;
    case 4:
        this.pictureBox5.Image = this.l[this.i[pic]];
        break;
    case 5:
        this.pictureBox6.Image = this.l[this.i[pic]];
        break;
    case 6:
        this.pictureBox7.Image = this.l[this.i[pic]];
        break;
    case 7:
        this.pictureBox8.Image = this.l[this.i[pic]];
        break;
    case 8:
        this.pictureBox9.Image = this.l[this.i[pic]];
        break;
    case 9:
        this.pictureBox10.Image = this.l[this.i[pic]];
        break;
    case 10:
        this.pictureBox11.Image = this.l[this.i[pic]];
        break;
    case 11:
        this.pictureBox12.Image = this.l[this.i[pic]];
        break;
    case 12:
        this.pictureBox13.Image = this.l[this.i[pic]];
        break;
    case 13:
        this.pictureBox14.Image = this.l[this.i[pic]];
        break;
    case 14:
        this.pictureBox15.Image = this.l[this.i[pic]];
        break;
    case 15:
        this.pictureBox16.Image = this.l[this.i[pic]];
        break;
}

if (this.s[0] == -5)
{
    this.s[0] = pic;
    this.s[1] = this.i[pic];
}
else
{
    if (this.s[0] != pic && this.s[1] == this.i[pic])
    {
        this.Zr(pic);
        this.Zr(this.s[0]);

        MessageBox.Show("Good job!");
    }
    else
        this.Zr();

    this.s[0] = -5;
}

S jedeným háčkem - neotočí se mi druhá karta dříve, než se vykonají příkazy pod switchem (switch provádí otočení karty). To nevadí, pokud se jedná o první otočenou kartu - ale až ta druhá, co uzavírá kolo - ta se vůbec neotočí. Navíc bych potřeboval tuto otočenou kartu "podržet" - nejspíše pomocí Thread.Sleep()... Tak jak na to? Děkuji.

 
Odpovědět
2.8.2012 7:02
Avatar
matesax
Tvůrce
Avatar
matesax:2.8.2012 7:59

Tedy to, že se provedou prvně příkazy pod switchem je jen doměnka - možná chvíli trvá, než se obrázek nastaví - každopádně jak píši, potřebuji aby alespoň chvíly byla i druhá karta vidět...

Celý kód:
http://www.text-upload.com/…944025977381

 
Nahoru Odpovědět
2.8.2012 7:59
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:2.8.2012 8:36

Nepochopil jsem to kvantum switchů. Neumíš použít pole? Také číslování pic 0..15 a pictureBox1..16 je také podivné a zavádějící. Buď obojí 0..15, anebo obojí 1..16.

Nejdříve bych předělal datové struktury a až potom bych hledal chyby.

Je dost hloupé používat proměnnou s názvem "l". Uvidíš, časem se ti to vymstí.

Nahoru Odpovědět
2.8.2012 8:36
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:2.8.2012 8:49

Nač tam strkat pole? Tedy jak bych do pole dostal příkaz?? :) V čem ti vadí, že posloupnost pictureboxů a hodnot pic není souměrná?

 
Nahoru Odpovědět
2.8.2012 8:49
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:2.8.2012 8:51

A jaké kvyntum switchů - jsou tam 2 - přišlo mi blbé strkat do každé hodnoty strkat if else - tak jsem ho tam dal navrch a rozdělil to na 2 switche - dle mého názoru mnohem lepší, než 60 if else ve switchi...

 
Nahoru Odpovědět
2.8.2012 8:51
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:2.8.2012 8:58

V každém switchi máš 16 case. Přitom by se to celé dalo napsat na 1 řádek bez použití switche. Prostě jako jedno přiřazení.

this.pictureBox[pic].Image = this.l[this.i[pic]];
Nahoru Odpovědět
2.8.2012 8:58
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:2.8.2012 9:01

Jaký příkaz do pole? Také existuje pole objektů, můžeš volat jejich metody.

Nahoru Odpovědět
2.8.2012 9:01
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:2.8.2012 9:04

Aha - teď tě - chápu - já to nemám jako pole - bude to lepší - možná to i vše vyřeší - děkuji.

 
Nahoru Odpovědět
2.8.2012 9:04
Avatar
Kit
Tvůrce
Avatar
Kit:2.8.2012 9:30

Ještě takový doplňující příspěvek ke zvážení: Server http://www.text-upload.com/ mi připadá jako vhodný pro sdílení prostých textů. Nedávno jsem objevil server na sdílení zdrojáků. Výhodou je barvení syntaxe a že po registraci se dají soubory i editovat.

https://gist.github.com/…ca6ea90958ca

Nahoru Odpovědět
2.8.2012 9:30
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:2.8.2012 10:12

Abych se ospravedlnil - nemohu měnit část třídy form1, jelikož je PC generována. Takže přidat textboxy jakožto v poli mohu jedině v ukázané části - proto jsem ty pictureboxy neměl jako pole. Zvážím to, každopádně jednoho switche jsem se zbavil. Nakonec to nechám jak to je - alespoň to ztíží hru... :)

Výsledek:
https://gist.github.com/3235132

Nějaké výtky? - pár věcí by šlo zjednodušit - ale... :)

 
Nahoru Odpovědět
2.8.2012 10:12
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na matesax
David Hartinger:3.8.2012 15:21

Těch 16 metod na začátku se dá nahradit jedinou. Můžeš buď pictureBoxy vložit do nějakého kontejneru a brát je z jeho pole .controls nebo můžeš každému do jeho vlastnosti tag napsat jeho číslo a poté přes parametr sender zjistit, který metodu zavolal. Takhle je to opravdu hrozné. Myslím, že variantu se sendery používá ta kalkulačka, co je zde v tutoriálu.

Stejný problém je s tím switchem na konci. Když píšeš takovýhle rutinní dlouhý kód, kde se nic nemění, mělo by ti dojít, že bude něco špatně. Když už to chceš dělat takhle, dej si ty pictureboxy do pole a potom jen volej polePictureBo­xu[index].visi­ble = false. Máš z 50ti řádků 2. Jinak opět můžeš proiterovat pole controls kontejneru, ve kteérm jsou boxy obsaženy, to je ještě kratší.

Nahoru Odpovědět
3.8.2012 15:21
New kid back on the block with a R.I.P
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Hartinger
matesax:3.8.2012 15:48

Toto už neplatí - pictureboxy byly vyřešeny přes pole. Switch tam již není žádný... Nechtělo se mi to řešit složitěji, jelikož se jedná o malou aplikaci - dát to dohormaty jakožto pole a tak, prostě to dalo dost práce, každopádně to stálo za to - nyní je kód mnohem osekanější, a jediné opakování je v labelech - zde by byla obecná funkce spíše na škodu...

 
Nahoru Odpovědět
3.8.2012 15:48
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 12 zpráv z 12.