PHP týden Letní akce
Pouze tento týden sleva až 80 % na kurzy PHP. Lze kombinovat s akcí Letní slevy na prémiový obsah!
Brno? Vypsali jsme pro vás nové termíny školení Základů programování a OOP v Brně!
Avatar
David Pleva
Člen
Avatar
David Pleva:7. února 17:01

Ahoj, vím, že tady na ITnetwork se už pár vláken na téma Člověče nezlob se respektive Ludo nachází, ale nikde jsem nenašel to, co já potřebuji :) Jedná se o klasické Člověče nezlob se pro čtyři hráče, kde momentální barvu, která hraje, tak si daný hráč vybere přes ComboBox. Dále mám vytvořenou kostku, kdy mám hotové nasazování figurek do tzv. StartPointu - to znamená, když padne šestka, tak program po kliknutí na figurku přesune danou figurku do Startovního políčka dané barvy. To bylo všechno v pohodě, ale jakmile došlo na samotný algoritmus posunu figurky podle čísla, vylosovaného na kostce, tak jsem se do toho zamotal. Proto jsem zde přišel pro radu, jak jednoduše a efektivně vytvořit algoritmus pro xTou figurku xTé barvy (tzn. 4 figurky každé barvy = 16 figurek). Samotné políčka mám vykreslené podle standartního boardu pro Člověče nezlob se (viz https://thumbs.dreamstime.com/…63422103.jpg) pomocí metody Paint a figurky jsou vsazené do PictureBoxu (tj. 4 PB pro každou barvu = 16PictureBoxů). Kdyby kohokoliv cokoliv napadlo, budu mega rád za každou radu!

Zatím díky David :)

Odpovědět 7. února 17:01
Tohle je život a nic víc už nebude | Kazma Kazmitch
Avatar
JerryM
Člen
Avatar
Odpovídá na David Pleva
JerryM:8. února 12:42

máš to hezký akorát nějak nechápu proč má 4 PictureBoxy ??? A v čem to děláš ? Máš mí bitmapu pro každou figurku a pak bitmapu jako hrací plán a figurku jen vykreslíš do hracího plánu...

 
Nahoru Odpovědět  +1 8. února 12:42
Avatar

Člen
Avatar
Odpovídá na David Pleva
:12. února 13:54

Já bych šel cestou 4 instancí stejných objektů - hráč. Každý objekt hráč má 4 prvky (človíčky) a pro každý prvek bych držel číslo aktuální pozice.
Vlastní hrací plochu bych očísloval napevno od 1 do X a pro každou "barvu" bych stanovil offset vůči očíslování hracího pole (to kvůli tomu, abych posunul start a zjistil správný konec oběhu kola každé barvy na hracímu plánu). Dále bych měl speciální pozici -1 až -4 pro domácí nasazovací pozici. 0+OFFSET BARVY(tzn. min)=Nasazeno na domácí startovní pole.
Házení kostkou by jen inkrementovalo v každém kole pozici aktuálního hráče a pole/subobjektů všech človíčků hráče.
Po každém hodu a posunu bych zjištoval přes offset (může být property readonly co to rovnou interpretuje jako pole převedené na hrací plán) kam človíčka postavit a testoval bych rovnou zdali nedošlo k vyhození jiného protihráče. Toť asi vše?
Při cestě do domečku by se nedalo "přetéci" přes maximální číslo pole hracího plánu/resp. barvy a buď človíček zůstane stát, protože nemůže dál, anebo zajede do domečku (napadá mě že by stačilo určit maximální počet polí hracího plánu a to co bude přes toto číslo je domeček. tzn -4 až -1 nasazování, 0 nasazeno, cca. 50 poslední pole před domácím nasazováním, 50+4 domeček, cokoli nad 54 nejde).
Červenej offset 0 (0-50, skutečný stav Č-0), Zelenej offset +8 (od 8 do 58, skutečný stav Z-8), Žlutej + 16 (od 16 do 66, skutečný stav Ž-16) a Modrej +24 (tzn. modrej se pohybuje od 24 do 74, skutečný stav na plánu je ale M-24 polí).
V podstatě se každej barvě v objektu nastaví min, max a stav po odečtení offsetu ke čtení pro vykreslení přímo do jednoznačného plánu hry.
Přičítá se vždy k pozici Pé, která začíná pro každou barvu na její min hodnotě a po hození kostkou nesmí překročit svoje max. Uff :D

 
Nahoru Odpovědět  +1 12. února 13:54
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:12. února 14:15
hrac: id, pos

P = 44 // policek
H =  4 // hracu
F = 4 // figurek
start = id * P/H // 11, 22, 33, 44
policko = pos < P ? plocha[(start + pos) % P] : domecek[id*F + pos-P];

(start + pos) % P
(0 + 24) % 44 = 24
(11 + 24) % 44 = 35 % 44 = 35
(33 + 24) % 44 = 57 % 44 = (57-44) = 13

 
Nahoru Odpovědět  +1 12. února 14:15
Avatar
David Pleva
Člen
Avatar
David Pleva:12. února 23:03

Ahoj, díky moc za návrhy řešení. Zítra se na to kouknu a případně dám vědět, jak na tom jsem :)

Nahoru Odpovědět 12. února 23:03
Tohle je život a nic víc už nebude | Kazma Kazmitch
Avatar
David Pleva
Člen
Avatar
David Pleva:13. února 18:13

Ahoj, celkem jsem pokročil - momentálně řeším obecný kód pro nasazování xté figurky xté barvy při padnutí šestky. Chtěl bych to vyřešit pomocí comboBoxů, kdy si člověk vybere barvu a (první, druhou, třetí, čtvrtou) figurku. Teď řeším, jak dosadit proměnou místo pictureBox1 -> pictureBox1.Lo­cation = new Point(x,y)

Nahoru Odpovědět 13. února 18:13
Tohle je život a nic víc už nebude | Kazma Kazmitch
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 6 zpráv z 6.