Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Gra] Kwadraciaki :-P
Forum PHP.pl > Inne > Oceny
crash
Witam, pamięta ktoś z Was może taka mała, stara gierkę (nie komputerową tongue.gif), która była zbudowana z 15 ponumerowanych kolejno kwadracików na planszy 4 na 4 i chodziło w niej o ułożenie tych kwadracików w kolejności ruszając je tylko po jednym pustym polu? Otóż napisałem implementacje tej gry w php i wypadałoby wiedzieć chociaż jak to się zwie biggrin.gif Może działający skrypt przypomni komuś o jaka grę chodzi...

http://www.crash.gaa.pl/gra.php
nospor
hihi, fajna implemetacja. gratualacje.

Co do nazwy, to byŁo wiele wersji tej gierki i jakoś nie wiem czy ma ona jakąć konkretną nazwę
hwao
Mozna dostac zipa tego winksmiley.jpg przeladowania dlugo trwaja sad.gif szkoda ze nie jest to w js... sad.gif

Na localhoscie bedzie smiagac:)
crash
A tam, dość szybko się przeładowuje, ale jeśli chcesz źródło to proszę bardzo http://crash.gaa.pl/gra.phps. Miłej gry.

btw. Ciekawe czy kiedyś uda mi się w to wygrać biggrin.gif
SongoQ
Hehe mi sie udalo. Gierka jest calkiem ok. Kiedys byl taki konkurs mozna bylo aparacik wygrac. Jak tylko konkurs wystartowal to byla walka programow.

@crashu Lepiej by bylo jak by sie klikalo w numerki, lub w cale kwadraty a nie w strzalki.
FiDO
Wydaje mi sie, ze kod nie jest do konca sprawny...
Ułożyłem wszystko poprawnie: klik
i nie pojawilo sie zadnej info, o tym ze wygralem. Za to po wykonaniu jakiegokolwiek ruchu z tego ulozenia juz mi pokazalo, ze wygralem... i cos jeszcze bonusowo smile.gif -> klik
crash
No kod nie był sprawny, przyznaje smile.gif Pisałem dość szybko w niecałe 2 godzinki. Ułożyłem, zobaczyłem, że nie ma info o wygranej - poprawiłem, warning od array_keys stłumiony... A co do klikania w całe kwadraciki - nie chce mi się już tego przerabiać, kod wolny, róbta co chceta smile.gif

Poprawiony kod do pobrania z linku w poście powyżej...

Edit: A jednak zrobiłem "klikanie w cały kwadrat"... Wersja raczej finalna.

Edit2: W sumie jakiś moder mógłby przerzucić ten wątek do Ocen. Tam chyba więcej ludzi zagląda...
revyag
U mnie chodziło to całkiem szybko i sprawnie smile.gif
Klik
dr_bonzo
No to na razie wygrywam: 122s
http://northslope.lap.pl/dev/smieci/crashu...s-1280x1024.jpg
smile.gif

Ale trzeba znac sposob na ta gre, to bez problemow ulozysz nawet plansze 10x10:

zaczynasz od pierwszej kolumny i wiersza (dla 5x5):
Kod
01 02 03 04 05
06 .. .. .. ..
11 .. .. .. ..
16 .. .. .. ..
21 .. .. .. ..

potem
01 02 03 04 05
06 07 08 09 10
11 12 .. .. ..
16 17 .. .. ..
21 22 .. .. ..
a potem 9ke jest latwo ulozyc
rogrog
przy normalnej grze mi wyskakuje "niepoprawny ruch, nie kombinuj"

----
fajnie by bylo to uoglonic i rozszerzyc na dowolną wybieraną długość boku tego kwadratu
Cudi
W wolnej chwili napisałem coś podobnego w JS. Brakuje kilku bajerów jak liczenie czasu, ilości ruchów czy restartu, ale nie chciało mi się tego już dzisiaj robić. Kod jest gotowy do ustawienia dowolnego rozmiaru planszy (nawet niekwadratowej).

Demo:
http://cudi.dotgeek.org/js/game/index.html

Kod:
[JS] http://cudi.dotgeek.org/js/game/game.js
[CSS] http://cudi.dotgeek.org/js/game/game.css

Nie wiem czy będe miał jeszcze zapał by to dopracować, więc jak ktoś ma ochote sie pobawić to prosze bardzo smile.gif

--- EDIT ---
Dodałem małe utrudnienie. Teraz zamiast cyferek są pociete kawałki obrazka smile.gif Ciekawe czy teraz komuś udałoby się ułożyć kwadrat 10x10 winksmiley.jpg Myśle że teraz taką gierke można nazwać poprostu puzzle smile.gif
nospor
Chyba mialeś dluższą wolną chwilę biggrin.gif . Super. NIe trzeba przeladowywać, nie trzeba klikać na strzałki tylko na kwadraciki (@SongoQ by się ucieszył). Coolowe.winksmiley.jpg

pozdro
SongoQ
@Cudi super. Mozna grac i grac.
NuLL
Fajny sofcik smile.gif

Przenoszę jak prosi autor smile.gif
dr_bonzo
@Cudi: tworzac nowa plansze, szuffle()ujesz klocki, zamieniajac DOWOLNE dwa miejscami (zamiast ich przesuwac), przez co czasami wychodza uklady nie do rozwiazania.
crash
Skrypt wypas, zaczynam doceniać JS, ale troche mnie irytuje 'interpreter' Opery, bo dość często akurat przy tej grze się wywala cała przeglądarka mad.gif
Cudi
@dr_bonzo: nie wiedziałem jak rozwiązać mieszanie, wkońcu wpadłem na pomysł by spłaszyć tablice z mapą, posortować i spowrotem wsadzić w dwa wymiary. Też zauważyłem że czasami poprostu się nie da. Jak mi się będzie kiedyś nudziło postaram sie to naprawić. Jeśli możesz dać jakieś wskazówki jak to rozwiązać to czekam smile.gif

@crashu: przyznaje się bez bicia, że sprawdziłem to tylko w FF. Ale Opera dość często robi śmieszne rzeczy przy DHTML'u (niestety). Pod IE działa (o dziwo) sprawnie.
dr_bonzo
@Cudi: cos ty zrobil -- teraz tego nie da sie ulozyc (obrazki zamiast liczb) smile.gif
Wlasnie lukam do kodu i wrzuce dzisiaj zmiany.
Cudi
Ja też pracuje nad poprawkami, i w sumie wymyśliłem takie mieszanie:
1. wybieramy wszystkie komórki które da sie przesunąć
2. losujemy jedną z nich
3. przesuwamy ją w puste miejsce

I tak ileś tam razy. Niestety, ciężko mi znaleźć liczbę która zagwarantuje dokładne mieszanie. Jest to też metoda troche niewydajna, niestety czuć jej działanie podczas wczytywania i restartów.

Wyniki badań na ilością ruchów:
ilość komórek (w jednym rzędzie lub kolumnie, mamy kwadrat) ^ 2 - miesza tylko środek, brzegi pozostają nieruszona
ilość komórek ^ 3 - brzegi nie są dokładnie wymieszane
ilość komórek ^ 4 - całkiem ładnie wymieszane, ale dla planszy 5x5 to już 625 iteracji, za dużo, gra wczytuje sie wooolno.

EDIT:
przeniosłem najnowszą wersje pod: http://cudi.dotgeek.org/js/puzzle/index.html (widać niedokładność mieszania przy trzeciej potędze).
dr_bonzo
Zaczalem kodowac, przerabialem calkowicie sktypt (m.in. indexacja od zera - tak jak w twojej najnowszej wersji) zeby byl latwiejszy do operacji i ugrzezlem na errorach.
Cytat
Ja też pracuje nad poprawkami, i w sumie wymyśliłem takie mieszanie:

Tez tak chcialem zrobic:
szukam findEmpty() potem wybieram jedna z sasiadujacuch komorek (jesli istnieja) i przesuwam ja, a potem uaktualniam pustaKomorke (to bedzie ta z ktorjed dokonano przesuniecia).

rows = cols = n

1. szukanie findEmpty(): O( n^2 )
PETLA( X - powtorzen)
2.1. znalezienie sasiednich komorek: O( 4 ) = O( 1 )
2.2. zamiana: O( 1 )
2.3. aktualizacja pustej komorki O( 1 )


ogolnie: O( n^2 ) + O( X ), (moglem sie pomylic -- mam tyko 4.0 z tego smile.gif)
czyli calkiem szybko: findEmpty() tylko raz a potem proste operacje.


U ciebie jest OOOOOOO:
size = n
O( n^3 ) * O( n^2 ) = O( n^5 ) -- duuuzo
przy czym aby porownac oba alg. X = n^3 i wtedy mam: O( n^3 )
----------------
189/149s smile.gif
---------------
chyba przydalo by sie przeniesc wersje Cudiego do nowego watku
Cudi
Jeśli dobrze rozumiem to nasze algorytmy są identyczne. U mnie też szukam sąsiadujących z pustą, też wybieram jedną z nich, a przesunięcie to poprostu zamiana pustej z wybraną. Więc chyba czegoś nie zrozumiałem smile.gif

EDIT:
teraz rozumiem, chodzi o realizacje znajdowania sąsiadujących. U mnie jest niepotrzebna pętla, już sie biore za poprawe tego i zobacze jak to będzie wtedy śmigało.

EDIT2:
została już tylko jedna pętla w klasie Puzzle, do renderowania. Znajdowanie pustej komórki jest niepotrzebne, przecież można sobie zapisywać gdzie ona jest po każdym przesunięciu. A znajdywanie rozwiązałem tak jak powiedziałeś, zapisując sąsiadów tak jak w isMoveable(), z tym że z drobnym sprwadzeniem czy nie wychodze poza plansze (jednowarunkowe ify). I teraz w zasadzie przyglądając się procesowi przesuwania (render() + alert() - wygląda jak animacja biggrin.gif) zauważyłem że trzeba jeszcze zrobić zabezpieczenie przed cofaniem się przesunięć. To przez to nawet przy dużej ilości iteracji plansza potrafi być niewymieszana.

EDIT3:
W sumie to niech sie cofa, efekt jest ten sam smile.gif Tak czy siak trzeba zrobić pow(size, 4) powtórzeń smile.gif Ale teraz to już śmiga tak szybko, że nie ma sie o co martwić smile.gif Na FTP są ostateczne poprawki do metody shuffle(). Uff.
kowal1122
fajoska gierka!!
naprawdę dobra robota snitch.gif
dr_bonzo
No i wlasnie zakonczylismy kolejnego php-ballte'a biggrin.gif
crash
Taa. Takie spontany się przydają bo coś te planowate battle umierają szybciej niż się zaczynają. Btw. mam już prawie gotowe Kółko i Krzyżyk na dużej siatce z wygrywaniem 5 znaków w linii dla dwóch graczy przez sieć smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.