Ve škole jsme dostali úžasný domácí úkol na svátky.
Vytvořit hru člověče nezlob se v grafické podobě... až na hrací kostku
nemám šajnu jak na to.
Věděl by někdo ?
Myslel tim logickou reprezentaci hraci plochy - policek.
To namodelujes idealne seznamem policek, kde kazde pole bude nejak ukazovat na
to dalsi a protoze v clovece nezlob se je ta cesta kruhova, tak "posledni"
policko v tvem seznamu by melo ukazovat zase na prvni.
A pak jeste samozrejme budes muset vymyslet odbocky do domecku
Pictureboxy? Ne to opravdu ne... Klasicky v XNA - uděláš to v políčkové
grafice. Zvolíš velikost políčka a jím pak budeš násobit čísla zapsaná
v políčkových jednotkách. Na začátku budeš mít seznam políček, po
kterých lze chodit - a v Update budeš sledovat, zda pro budoucí místo
figurky platí
a soucasne kontrola kolik políček tím překročí... Tedy po kliknutí na
figurku - které díky rozdělení herní plochy na políčka můžeš snadno
získat dotazem na
Před tím jej budeš muset pomocí LINQ zkrátit o tvé figurky...
Jo a pohyb upřesním:
pomocí dotazu Contains zjistíš, na kterou figurku je kliknuto - tu dáš
do proměnné - lastFigure - a když další klik bude v seznamu
polickaPoKterychSeDaChodit a nebude v seznamu figurek protihráčů, tak
provedeš onu kontrolu dostupnosti políčka - podle hozené hodnoty...
A v Draw budeš pochopitelně políčka ze seznamu
polickaPoKterychSeDaChodit vykreslovat jinak, než políčka po kterých se
nedá chodit...
Jsme tu v C# a .NET - je kravina dělat hry ve WF/WPF - chceš hru - XNA...
Jakmile budeš dělat v xy Pictureboxech, tak dokonale zahltíš
procesor...Kdepak - toto chce pěkně DirectX... A jak jsem napsal - dá se to
krásně zvládnout v políčkové grafice... Stačí sepsat políčkové pozice
průchozích polí a uchovávat seznam pozic všech hráčů + jejich
identifikátor - takže bych to udělal přes slovník - identifikátor může
být třeba Struct - tím to bude pěkně přehledné... Pomocí LINQ pak ze
seznamu hráčů půjde snadno vynechat aktuálního hráče na tahu...
Seznam průchozích polí by se asi měl udělat v externím textovém
souboru.
Pokud to máš jako úkol do školy, tak se od tebe XNA asi neočekává...
Člověče není graficky náročná hra, nic se tam nepřekresluje, klidně to
může být jako form.
Protože ho profesor třeba ani nezná nebo se nemá smysl učit XNA když
neumíš ani formy? Já bych to dělal jako 1 picturebox a na ten si čmáral,
tedy jako v XNA, jen ve formech.
Obrazek nemusis skladat pres graphics, staci mit jeden picturebox jako pozadi
a dalsi transparentni pictureboxy, ktery jen budes posouvat jako figurky. A
updatovat to staci az kdyz se hybe figurkou, ani tam nemusi byt animace pohybu,
proste rovnou skoci na cilove misto.
Takhle jsem delal hry, kdyz jsem zacinal a je to nejjednodussi zpusob, jak
delat s grafikou.
A to je právě blbost - když už PictureBox - tak jeden. Je rozhodně
lepší lepit pomocí Graphics... Nechápu nač to zesložiťovat tisíce
Controly - lze to krásně udělat v políčkové grafice - takže stačí po
celou dobu počítat v políčkové grafice a při vyreslení vynásobit
velikostí políčka...
A o čem jiném je XNA? Je to pravidelné překreslování herní plochy -
navíc s možností skládání - komponentky...
No kapli jste na to že ten wikipediamaster XNA neumí, takže to neumím ani
já, ale zatím jsem stále u kostky hrací pole přes graphics dokážu
udělat..... proste kopu koleček udělám.. jestli to teda takto myslíte
Ale zatím mě teda nenapadlo jak posunovat figurky po hracím poli + k tomu
budu musit propojit aj kostku ne ?
Uděláš seznam políček, po kterých se dá chodit, seznam figurek a při
kliknutí se podíváš, zda nejbližší políčková pozice kliklého místa
je v seznamu figurek - pokud ano - uložíš do proměnné lastFigure onu
figurku - pokud ne - posuneš lastFigure na kliklé místo - pokud bude v
rozsahu hozené hodnoty...
"Uděláš seznam políček, po kterých se dá chodit, seznam figurek a při
kliknutí se podíváš, zda nejbližší políčková pozice kliklého místa
je v seznamu figurek - pokud ano - uložíš do proměnné lastFigure onu
figurku - pokud ne - posuneš lastFigure na kliklé místo - pokud bude v
rozsahu hozené hodnoty..."
PictureBoxy muzes vytvaret dynamicky a mit je prirazeny k figurkam, pak je uz
celkem fuk, jestli kreslis na jeden nebo obcas hejbnes s dalsima..
Hlavne ti to staci updatovat az po pohnuti figurkou, takze nemusis mit zadnou
smycku/timer -> zatizeni procesoru je 0% narozdil od XNA, ktery porad kresli
(kdyz uz jsi tu na zacatku diskuze zminoval zatizeni procesoru)
takže ještě jednou... nevím jak to mam zapsat, jelikož jsem dosud
dokázala vytvořit jen hrací kostku a šibenici podle tutoriálu....
tak promin že jsem holka a zřejmě asi uplně blbá...
rozumím jak to bude fungovat, ale nevím jak to napsat...
Proč to děláš složité? Stačí jeden PictureBox - v cyklu na něj
vykreslíš podle pozic figurek figurky, podle pozic polí po kterých se dá
chodit políčko průchozího pole a zbytek dolepíš Graphics...
TwigyDaFirenze
Popsal jsem ti to jak to jen šlo... Vytvoříš seznam políček, po kterých se dá chodit, slovník
figurek - kde klíč bude asi enum a proměnnou lastFigure. Střídat po kolech
budeš hodnoty enum - a ty pak budeš používat při dotazu po kliknutí - zda
slovníkFigurek.Values.Contains(viz. hoře) a před tím usekneš asi
pomocí LINQ aktuálního hráče - zvoleného z enum... Vše je hoře
popsáno...
ale já tě chápu ale samotnej text nedokážu jak napsat...
bože kašlete na to, asi nechápete že to vidim zhruba po 5tí... a nevím co
jakej zmetek dělá... tak logicky ani nevím jak to zapsat...
například nemam ani šajnu co je enum...
Když jen posouváš PictureBoxy - takže ty potřebuješ xy PictureBoxů -
atd... Mě stačí 2 proměnné, seznam a slovník - zda pak použiješ Graphics
je jen na tobě...
Koukám, že tě matesax odrovnal, to je mu podobné Úplně v klidu, na XNA zapomeň a
na enum taky.
1. Jako první si vytvoř hrací pole. Je celkem jedno, přes kterou
komponentu to uděláš, Luboš Běhounek Satik má pravdu, že jednodušší (i když
ošklivější) je dát jich tam více. Čili si udělej picturebox s puntíkem
a ty si 100x nakopíruj na formulář a postav si z toho hezky hrací
plánek.
Pictureboxům vyplň vlastnost Tag a to hezky od 1 do X, kde X je poslední
poličko ve hře (nevím z hlavy kolik jich je). Prostě aby 1. puntík měl 1,
druhý 2 atd., hezky popořadě, jak se kolem nich chodí.
"Domečkům" (těm 4 puntíkům, kde se čeká na nasazení fungurky) dej Tag
podle barvy (tedy třeba 4 červené puntiky budou mít tag "cerveny0",
"cerveny1"...). Pak jsou ty 2. domečky, kde je cíl, to udělej podobně, jen s
nějakým prefixem, třeba cil_cerveny0, cil_zeleneny0 atd.
2. Udělej si třídu Figurka, té uděláš atributy pozice (int) a barva
(tu jako string). Dále tam bude bool domecek a bool cil.
3. Poté si udělej List figurek a ten si naplň. Vytvoříš tam figurky,
těm dáš barvu a nastavíš pozici na 1,2,3,4, barvu dle potřeby a domecek na
true, cil na false.
4. Kostku máš ukázanou v tutoriálu zde, udělej si jí podle toho: http://www.itnetwork.cz/…ahodna-cisla . Udělej si instanci
kostky a na nějaké tlačítko na formu si udělej, aby se vykreslovala podle
toho, co padlo.
5. Až se sem dostaneš, pošli to a pokud to k něčemu bude, vymyslím
zbytek
Algoritmicky podle mého názoru nejde o nic složitého,
pokud se nesnažíš napsat k tomu kvalitní, konfigurovatelnou AI.
Jako 2x human player to musí jít napsat prakticky v čemkoli a jakkoli
celkem se základními znalostmi vybraného prostředí.
Mám jedno Člověče hotové na skladě, ale opsat ho nemůžeš,
protože je v gamemaker language. A to by asi sveřepí šakali zavile vyli..
Jestli ale chceš, můžeš z něj vytahat sprity. Figurky jsou rendrované,
políčka jednoduchá, kostka je plně animovaná. Třeba ti to pomůže,
myslím, že graficky to nemám špatné. Kód má nějaké drobné
nedostatky,
hlavně v AI, která je extrémně hloupá (takže spíš Artificial
Stupidity)
a občas se stane, že nejde zapnout zvuk. To ale zas tak velká škoda
není,
protože je dost hrozný.
Kód určitě nečti, je to taková prasárna, že to dřív napíšeš
třikrát znovu,
než se v tom vyznáš. Psal jsem to dětem na hraní, tak to prostě bylo
jedno.
Pro nějakou inspiraci to snad může posloužit, tak prosím nekamenovat.
no tak to jsem zvědavá co z toho upatlám
jinak kostku jsem si vytvořila sama, to jsem zvládla
zítra to budeme prej ve škole řešit tak jsem zvědavá na toho
WikipediaMastera co nám hodlá "vysvětlit"
Možná by bylo dobré hru zjednodušit z 'klasického' rozvržení na
'zjednodušené' ... to tak že hrácí pole budou ve čtverci např 10x10 a
domečky budou průsečíky stran - rohy .... také by bylo třeba dobré
zjednodušení udělat že v cíli nemusíš figurky rovnat ale prostě že
vejdou do cíle a budou tam (jestli to chápete)
(klasickou herní deskou myslím - http://www.openoffice.cz/…nal/1417.jpg)
není potřeba dělat těžké hrací pole když dívenka nemůže pochopit jak
na to
má rade zní ... zjednodušuj jak můžeš nejsi nějaká ***** vývojářka
No při hodu kostkou připočteš to co padlo (třeba 4) k pozici figurky
(třeba 11). Finta jak najít políčko kam chceš jít (tedy 15) je v tom, že
projedeš všechny komponenty formuláře a podle vlastnosti tag najdeš to
správné. Nemám čas to zkoušet, ale bude to vypadat nějak takto:
kamChci = "15";
// projedu vše na formulářiforeach (Component c in formular.Components)
{
// jsem na pictureboxuif (c is PictureBox)
{
// mám správný pictureboxif ((c as PictureBox).Tag == "15")
{
// dám picturebox figurky na pozici toho políčka
figurka.Position = c.Position;
...
}
}
}
Kdyz ted plynule navazu na David Čápka Hartinger , tak dalsim krokem budou
pravdepodobne kolize figurek. Tedy pokud na cilovem policku nekdo stoji, tak
vykonam nejakou akci.
Kdyz tam bude stat figurka prave hrajiciho hrace, hrac bude muset tahnout
jinou. Kdyz tam bude stat figurka ciziho hrace, bude vyloucena z5 do domecku
Môže mať jeden Picturebox viac obrázkov a tie prepínať?
Myslím to tak, že jedno políčko Človeče sa bude meniť podľa toho, či je
prázdne, alebo je tam farebná figurka.
Viem, že to ide tak, že sa prekryje niekoľko Picturebox-ov a len potrebný
bude viditeľný.
Ale predsa ma zaujíma, či to nejde aj inakšie.
Zakládej prosím nová vlákna místo komentování článků a psaní do
starých vláken. Picturebox slouží pouze k zobrazení jednoho obrázku a
neměl by sloužit ani k jeho uchování. Obrázky se ukládají do Bitmap a
potom se vykreslují na Graphics.
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.