NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
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í.

Diskuze: Odhalování obrázku - hra

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Antonín Výtaha:19.2.2020 8:50

Zdravím kolegové. Měl by někdo nápad, jak nejelegantněji udělat program, kde by byl na pozadí obrázek přes který by byla políčka se souřadnicemi (jako na šachovnici) a po kliknutí na jakékoliv políčko by ono zmizelo a bylo vidět část toho obrázku pod tím? Jestli bude někdo pamatovat, tak to samé bylo kdysi v televizní hře "Kufr", kde na konci hádali co se tam ukrývá.

Zkusil jsem: Já na to šel od lesa přes tlačítka, která byla nastrkaná přes ten obrázek a po kliknutí na ně se změnila viditelnost na false. Jenže mi překvapivě Visual Studio při 70tém tlačítku spadlo a nešlo to ni uložit ani zkompilovat. :-D A náhoda to nebyla, děje se to pořád.

Chci docílit: Moje představa je tam mít těch políček sto (10x10). Jestli někoho napadá, kterou nejjednodušší cestou se vydat, budu rád za jakýkoliv tip. :-) V nejhorším případě to udělám se 66 tlačítky, rohy stejně nikdo neodkrývá. :-D

 
Odpovědět
19.2.2020 8:50
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovídá na Antonín Výtaha
Jaroslav Smrž:19.2.2020 9:18

Ahoj, toto by se dalo řešit pomocí CSS pseudo třídy :hover a :visited. To je asi nejzákladnější možnost. Dále by to šlo snadno pomocí JS, kde si napodmínkuješ pozadí tlačítka při kliknutí a změníš jeho background na false nebo transparent. V C# by to šlo stejným principem. Na mobil rovněž tak do události OnClick(). Nezmiňuješ, jaká to má být aplikace (mobil, desktop, web), tak zde máš obecná řešení pro vše.

Nahoru Odpovědět
19.2.2020 9:18
/* Life runs on code */
Avatar
zelvicek
Člen
Avatar
Odpovídá na Antonín Výtaha
zelvicek:19.2.2020 12:00

Pokud děláš hru pro mobil či desktop, a visuální stránka věci je stěžejní (tj. většinu času bude +- 100% plochy zabrána hrou), navrhuji kompletní custom painting. Je pak otázkou, jaký engine využít a nemusí to nutně být D2D/DDraw, stačí GDI. Implementace je trošku složitější, ale performance je lepší.

(Nostalgie: kdysi, na pentium1, v Delphi, jsem vytvořil 1000 editboxů na scrolovatelný panel. Spuštění a scrolování bylo neuvěřitelně pomalé. Použil jsem custom painting, textboxy se nevytvářely, ale měl jsem vlastní rendering a event handling, a aplikace šlapala velice svižně. Zároveň 1000 nebyl žádný limit, počet jsem mohl volně navyšovat.)

Přesto mě překvapuje pád celého VS - nevidím pro to důvod. Chápal bych pád tvé aplikace/hry. Nejspíše tam máš nějaký leak. Snížení počtu objektů ti nemusí pomoci, protože jiný (slabší) počítač nezvládne ani těch 66 tlačítek a leak se projeví už dříve.

 
Nahoru Odpovědět
19.2.2020 12:00
Avatar
MpCk
Člen
Avatar
MpCk:19.2.2020 19:25

Sice nejsou v zadani podstatne informace, ale nelze jen umistit na plochu podklad-hadany obrazek a nad nej dalsi "obrazek" resp.x*y obrazku malych ctvercu.. po kliknuti prepocitat souradnici ctverce na kt.se kliklo a ten odstranit nebo invisiblovat, zpruhlednit?

 
Nahoru Odpovědět
19.2.2020 19:25
Avatar
Antonín Výtaha:19.2.2020 21:39

Tak asi se mi Visuálko nějak dobře prospalo a překvapivě mi to s těmy tlačítky začalo fungovat, se všemi. :-D Jen mě mrzí, že jsem nevyfotil tu chybu, aby se mi věřilo...

  • Jinak je to děláno v C#, ale šlo mi spíše o nápady, jak to nějak jednoduše vymyslet nehledě na to, včem se to napíše. Posílám obrázek, jak to teď vypadá, kdyby to někoho zajímalo. Zdroják raději ukazovat nebudu, ono na něm stejně není nic zajímavého. Je to jen taková otročina stokrát dokola to samé. :-) Všem děkuji za nápady a kdyby k tomu ještě někdo měl nějakou myšlenku, tak klidně sem s ní.
 
Nahoru Odpovědět
19.2.2020 21:39
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:20.2.2020 10:40

Kdyz VS spadne na 70 policko, co zkusit pouzit 2 obrazky? Z obrazku by melo jit vyriznout, nastavit transparentni barvu. Pripadne ho muzes vzdy smazat a vykresli vyplnene ctverecky z nejakeho pole. Na onclick si prepocitas souradnice na cislo policka.
Edit: A ted koukam, ze to same pise MpCk. :)

Editováno 20.2.2020 10:42
 
Nahoru Odpovědět
20.2.2020 10:40
Avatar
Ghst
Člen
Avatar
Ghst:20.2.2020 10:51

Ahoj,

udělal jsem picturebox, nastavil mu image a přes obrázek kreslím pomocí třídy Graphic rectangle. S každým klikem myši jeden smažu a překreslím to.

 
Nahoru Odpovědět
20.2.2020 10:51
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:20.2.2020 20:01

To je sikovne. Takhle vybarvis celou plochu barvou a pak na ni jen nakreslis obdelnicky.
Mozna, ze v dalsim lvl bys mohl prekryt barevny obrazek jinym, 2 odstiny barev, jen jakasi maluvka, symbol hry nebo napovedny obrazek. Mrizku muzes mit jako treti obrazek nad tim a schovat ji, az kdyz uhodnou obrazek.

https://img.myloview.cz/…19296384.jpg
https://www.kalendareone.cz/…ove-2018.jpg
Neco takoveho, desaturace a pak efekt saturace treba do zlutohnede,nebo modrobile. Neco, jak jsou perokresby na mapach. A symbolizovalo by to tema priroda. Nemelo by to byt moc vyrazne, spis takove vodotisk nebo tak. Aby byl dobre vyrazny obrazek

 
Nahoru Odpovědět
20.2.2020 20:01
Avatar
Antonín Výtaha:20.2.2020 20:15

Ty jo hoši, tak to už vypadá mnohem profesionálněji než ta moje hloupá tlačítka. :-) Akorát jsem se v těch třech vrstvách trochu ztratil. To už by bylo jakože hádám mezi dvěma obrázky? Takové 3D pexeso? :-D

 
Nahoru Odpovědět
20.2.2020 20:15
Avatar
Antonín Výtaha:28.2.2020 21:57

Ještě jen tak závěrem, dohledal jsem přímo od Microsoftu ofiko návod na něco podobného: https://docs.microsoft.com/…atching-game?… - překvapivě to vypadá líp jak ty moje tlačítka...

 
Nahoru Odpovědět
28.2.2020 21:57
Avatar
Jakub Verner
Tvůrce
Avatar
Jakub Verner:1.3.2020 9:25

Ahoj,
něco takového jsem dělal asi rok zpátky... Normálně si vytvoř Windows Forms Aplikaci, vezmi PictureBox, kde bude obrázek a umísti ho do okna... Namísto toho, aby jsi vzal jednotlivé Panely, kterými bude obrázek rozdělen, napiš toto (událost Form_Load):

private void oO_Load(object sender, EventArgs e)
        {
            for (int top = 12; top != 462; top += 50)
            {
                for (int left = 12; left != 812; left += 50)
                {
                    Panel panel = new Panel();
                    panel.Size = new Size(50, 50);
                    panel.BorderStyle = BorderStyle.FixedSingle;
                    panel.Top = top;
                    panel.Left = left;
                    panel.Parent = this;
                    panel.Visible = true;
                    panel.BringToFront();

                    panel.Click += (oSender, eE) =>
                    {
                        panel.Visible = false;
                    };
                }
            }
        }

Nebo si prostě stáhni tohle ode mne... Teď jsem to napsal: Odkrývání obrázku

 
Nahoru Odpovědět
1.3.2020 9:25
Avatar
Odpovídá na Jakub Verner
Antonín Výtaha:2.3.2020 19:53

Ahoj Vernýsi, tohle je super řešení, přesně to jsem měl na mysli!

Děkuji. ;-)

 
Nahoru Odpovědět
2.3.2020 19:53
Avatar
Jakub Verner
Tvůrce
Avatar
Jakub Verner:2.3.2020 19:55

V pořádku, rád jsem pomohl! ;-)

 
Nahoru Odpovědět
2.3.2020 19:55
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 13 zpráv z 13.