"Tetris" - padání kostek – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

"Tetris" - padání kostek – Java – Fórum – Programujte.com"Tetris" - padání kostek – Java – Fórum – Programujte.com

 

Martin
~ Anonymní uživatel
1602 příspěvků
15. 12. 2013   #1
-
0
-

Ahoj,

rád bych zkusil naprogramovat v Javě nějakou hru a rozhodl jsem se pro tetris, řekl bych, že vše probíhá tak nějak bez problému. Snažím se použít návrhový vzor MVC, mám objekt hrací plocha kde je pole booleanů, která značí jestli tam blok je nebo není a pak mám objekt aktuálně padající blok, který si pamatuje info o své poloze a velikosti. Nějak mám pořešené i zavolání funkce aby se blok posunul nebo se udělal nový, jen jediný problém který se mi zde vyskytuje je, že mám funkci ve které zjišťuji zda mohu blok posunout, pokud ano, vracím true, pokud ne, vracím false, tato metoda mi však nefunguje. Na konci ji přikládám. Mohl bych vás poprosit o pomoc, co v ní mám špatně nebo mě nasměrovat cestou jak ji napsat jinak?

Takto napsaná vykazuje velice zvláštní chování, někdy blok propadne přes jiný, jindy se naopak zastaví o spoustu řádků nad...

Předem děkuji.

public boolean canShift()
        {
            //Ověří zda blok nehodlá překročit hranici hrací plochy
            if (actualHraciBlok.getY() + actualHraciBlok.getHeight() == hraciPlocha.getHeight())
            {
                return false;
            }
            
            //Ověřuje zda blok nehodlá překrýt jiný blok
            for (int x = 0; x < actualHraciBlok.getWidth(); x++)
            {
                if (actualHraciBlok.getPolicko(x, actualHraciBlok.getHeight() - 1)){
                    if (hraciPlocha.getPolicko(x, actualHraciBlok.getY() + actualHraciBlok.getHeight()))
                    {
                        return false;
                    }

                }
                else
                {
                    if (actualHraciBlok.getHeight() > 1 && actualHraciBlok.getPolicko(x, actualHraciBlok.getHeight() - 2)) {
                        if (hraciPlocha.getPolicko(x, actualHraciBlok.getY() + actualHraciBlok.getHeight()-1))
                        {
                            return false;
                        }    
                    }
                }
            }
            return true;
        }
Nahlásit jako SPAM
IP: 88.100.162.–
Flowy0
Věrný člen
15. 12. 2013   #2
-
0
-

osobne by som to riesil trochu viac objektovo ... ukladat si samotne pole a zaroven objekty ktore vykreslujes je dost schyzofrenicke (redundantne) ... odstranil by som pole a radsej vytvoril nejaku kolekciu/mapu s objektami a tie by mali vlastne metody (void isOnPosition(); Position[] getAllPositions()) a samotne pole by som pouzival skor ako sprostredkovatela pre zobrazenie a managera hry

ako navrh na debug odporucam zistit kolko je "spoustu" a hlavne skusit si v prvom rade na hre kde sa nachadzaju len bodky myslim ze tam budes mat problem so zamenenou sirkou/vyskou a nekontrolovanim viacerych bodov kazdej kocky

Nahlásit jako SPAM
IP: 91.127.137.–
https://github.com/Flowy
Martin
~ Anonymní uživatel
1602 příspěvků
15. 12. 2013   #3
-
0
-

#2 Flowy
Díky za odpověď, toto řešení opravdu vypadá lépe, jen, mohl bych poprosit ještě o malý popis těch metod? Co a jak stručně má která dělat?

Díky a hezký večer

Nahlásit jako SPAM
IP: 88.100.162.–
Flowy0
Věrný člen
15. 12. 2013   #4
-
0
-

povedzme ze su definovane "pole" ktore bude spravovat hru potom nejaka "pozicia" ktora bude reprezentovat poziciu v poli a nejaku "kocku"

pole bude obsahovat kolekciu/mapu kociek ktore sa v poli nachadzaju ... a samostatny odkaz na kocku ktora je aktivna ... kocka by mala metody pre posuny, pre nejake zistenie ci sa na zadanom policku nachadza a pod

zrazky potom budes riesit celkom jednoducho tak ze si vytvoris kopiu aktivnej kocky tu posunies v ziadanom smere a potom skontrolujes ci sa kopia neprekriva s okrajmi pola alebo s inymi kockami (na zaklade posielania pozicie vsetkym kockam ktore ti povedia ci tam niesu)

v ramci optimalizacie sa potom da rozhodnut ako ukladat poziciu kocky (absolutne alebo v ramci nejakych tvarov a vlastnosti podla toho) alebo tiez akym sposobom ukladat kocky tak aby sa nekontrolovali zakazdym vsetky ale len v nejakej oblasti

Nahlásit jako SPAM
IP: 91.127.137.–
https://github.com/Flowy
ciop
~ Anonymní uživatel
13 příspěvků
16. 12. 2013   #5
-
0
-

http://www.builder.cz/rubriky/c/c--/allegro-tetris-nic-tezkeho-14-dil--156182cz

  

Nahlásit jako SPAM
IP: 89.177.118.–
Flowy0
Věrný člen
16. 12. 2013   #6
-
0
-

#5 ciop
pisat javu sposobom ako sa pise C? zaujimavy napad

Nahlásit jako SPAM
IP: 91.127.137.–
https://github.com/Flowy
Martin
~ Anonymní uživatel
1602 příspěvků
16. 12. 2013   #7
-
0
-

#6 Flowy
Díky za odpovědi, jinak, až toto dodělám, nebo než toto začnu dodělávat, měli byste nějaké jendodušší návrhy, na hru, kterou bych mohl naprogramovat?

Nahlásit jako SPAM
IP: 88.100.162.–
ciop
~ Anonymní uživatel
13 příspěvků
16. 12. 2013   #8
-
0
-

#6 Flowy
tva otazka si nezaslouzi odpoved

Nahlásit jako SPAM
IP: 89.177.118.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 18 hostů

Podobná vlákna

Padani Wi-Fi site — založil bbtrash

Pointery a padání aplikace — založil DragonBehemont

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý