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

Diskuze: Člověče nezlob se - algoritmizace posunu

Aktivity
Avatar
David Pleva
Člen
Avatar
David Pleva:7.2.2019 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.2.2019 17:01
Tohle je život a nic víc už nebude | Kazma Kazmitch
Avatar
JerryM
Člen
Avatar
Odpovídá na David Pleva
JerryM:8.2.2019 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
8.2.2019 12:42
Avatar

Člen
Avatar
Odpovídá na David Pleva
:12.2.2019 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
12.2.2019 13:54
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:12.2.2019 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
12.2.2019 14:15
Avatar
David Pleva
Člen
Avatar
David Pleva:12.2.2019 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.2.2019 23:03
Tohle je život a nic víc už nebude | Kazma Kazmitch
Avatar
David Pleva
Člen
Avatar
David Pleva:13.2.2019 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.2.2019 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.