W duchu ponownej implementacji klasycznych gier wideo chciałbym zaprosić społeczność do stworzenia najlepszej implementacji Tetris .
W celach informacyjnych zrzut ekranu oficjalnej wersji Tetris NES.
Wymagane funkcje
- Musi istnieć rozsądny system punktacji, który nagradza czyszczenie wieloliniowe bardziej niż czyszczenie jednoliniowe. Aktualny wynik musi być widoczny przez cały czas.
- Następny kawałek, który się pojawi, musi być w jakiś sposób wskazany.
- Rozkład siedmiu tetrominoów powinien być dość równy (tj. Wybrany pseudolosowo).
- Użytkownik musi mieć możliwość obracania bieżącego elementu w obu kierunkach, a także przyspieszenia jego opadania.
- Po zakończeniu gry należy wyraźnie zaznaczyć, że gra się zakończyła.
- Kod źródłowy musi być uporządkowany i łatwo zrozumiały.
Funkcje opcjonalne
- Zwiększanie prędkości opadania po określonej liczbie przejazdów (tj. Zwiększanie poziomu trudności) i zwiększanie wyniku na linię wyczyszczenia, proporcjonalnie do prędkości.
- Powaga. Możesz zdecydować się na zastosowanie „klasycznej” grawitacji, w której bloki mogą pozostać unoszące się nad szczelinami, lub możesz zastosować grawitację „zalewania”, w której bloki, które zostały oddzielone od ich pierwotnego tetromino za pomocą linii, mogą się otworzyć luki.
- Najlepsze wyniki dzięki wprowadzeniu nazwy.
- Animacja po wyczyszczeniu linii i / lub po uzyskaniu nowego rekordu.
Ograniczenia
- Wszelkie używane biblioteki ( jQuery , PyGame itp.) Powinny być swobodnie dostępne.
- Rozmiar kodu źródłowego nie może przekraczać 4096 bajtów, z wyłączeniem białych znaków i komentarzy. Wszelkie zasoby zewnętrzne (pliki danych, obrazy itp.) Zostaną dodane do długości kodu, z wyjątkiem wszelkich plików, które są generowane, na przykład w celu uzyskania wysokich wyników.
Zdaję sobie sprawę, że jest to raczej arbitralne ograniczenie; moim podstawowym celem jest zniechęcenie do kopiowania i wklejania istniejących implementacji oraz zachęcanie do zwięzłości i samozaparcia.
Zwycięskie kryteria
To wyzwanie zostanie ocenione jako konkurs popularności , co oznacza, że zgłoszenie z największą liczbą głosów pozytywnych zostanie wybrane jako zwycięzca. Podczas głosowania zachęcam użytkowników do głosowania za wszystkimi zgłoszeniami, które ich zdaniem odpowiednio spełniają wyżej wymienione wymagania.
Zwycięzca zostanie wybrany nie wcześniej niż 2 tygodnie po pierwszym ważnym rozwiązaniu. Dodatkowo przyznam nagrodę zwycięzcy, mniej więcej proporcjonalnie do liczby głosów przychodzących, które otrzyma to pytanie ( 10 * #votes
zaokrąglone w górę do najbliższych 50). W przypadku remisu po upływie 2 tygodni okres konkursowy zostanie przedłużony o jeden tydzień. W przypadku remisu zastrzegam sobie prawo do głosowania końcowego.
Poproś o wyjaśnienia. Niech wygra najlepsza implementacja!
Odpowiedzi:
Spróbuj: http://tetris.muehe.org
Aktualizacja Istnieje globalny wysoki wynik. Ciesz się pokonaniem go lub - alternatywnie - włamaniem :-)
CoffeeScript i wersja HTML powinny spełniać wymagania mojej najlepszej wiedzy (i nigdy tak naprawdę nie grałem w Tetris).
Github https://github.com/henrik-muehe/tetris
cechy
źródło
Pascal
Opracowany w FreePascal 2.6.2, powinien również zostać skompilowany z Turbo Pascal 6.0. Używana jest tylko jednostka Crt , bez zasobów zewnętrznych.
Zrzut ekranu
(W systemie Linux, w oknie XTerm.)
Kontrola
Punktacja
Poziom zaczyna się od 1 i wzrasta po ukończeniu 25 linii. (Wiele wierszy wypełnionych jednocześnie liczy się jako 1.)
Pomiary
źródło
Java (Swing)
To implementacja pierwszej historycznej edycji Game Boy od Nintendo (c) z 1989 roku.
Jak grać:
Z= obrót w lewo
X= obrót w prawo
Left= ruch w lewo
Right= ruch w prawo
Down= ruch w dół (powoli)
Up= obrót w lewo (tylko dla łatwiejszego użytkowania)
R= reset gry
Unikałem używania więcej niż jednej klasy (ponieważ przychodzi mi do głowy aspekt golfa). Ale teraz nie ma już możliwości gry w golfa ... Jednak spakowałem i zakodowałem Base64 jeden plik czcionek i jeden plik obrazu, więc mogę go używać w jednym pliku klasy.
Aby go uruchomić, skopiuj kod Java do IDE i uruchom. Nie potrzebujesz żadnych dodatkowych bibliotek ani zasobów.
DO ZROBIENIA:
Komentarze są mile widziane :)
źródło
import java.awt.event.KeyAdapter;
i zmieńnew KeyAdapter
nanew java.awt.event.KeyAdapter
.Lua - 2876
Tetris w terminalu, działa na większości systemów uniksowych, czysty lua, nie potrzeba żadnych dodatkowych bibliotek.
Sterowanie to: wasd lub hjkl, w / k, aby upuścić, s / j, aby obrócić, ad / hl, aby przenieść
Prędkość rośnie wraz z wynikiem, ilekroć usuwa się wiele linii, otrzymujesz kwadrat liczby zniszczonych linii
To nie jest najbardziej możliwe rozwiązanie w golfa, ale i tak zdecydowałem się trochę zagrać w golfa. Nowe wiersze mają po prostu zmieścić tekst w 80 kolumnach, nie uwzględniłem ich w liczbie znaków.
źródło
cat
.cat
, korzystałem zC-x
M-c
M-butterfly
...Matematyka
Ten kod został napisany w Mathematica przez Xiangdong Wen i może być odtwarzany w przeglądarce tutaj: Shape Descender (kliknij grafikę, aby zainicjować klawisze strzałek). Poniżej znajduje się zrzut ekranu i pełny kod - co jest całkiem nieźle jak na kompletną aplikację internetową tej gry.
Kod
źródło
do
Napisałem ten rok temu, gdy nudziłem się w klasie w szkole średniej. Podobno pierwotny programista napisał pierwszą wersję Tetris, używając nawiasów kwadratowych jako bloków, i wydawało się, że wystarczy próba odtworzenia, prawda? Nie znałem żadnych GUI, więc stworzyłem dobry, staromodny program konsolowy. To było zanim nauczyłem się C ++ i tych przykrych praktyk programowania, więc kod może być nieco niechlujny. Prawie właśnie go uskrzydłem.
Spełnia wszystkie wymagania wyzwania, z wyjątkiem tego, że element obraca się tylko w jednym kierunku (zgodnie z ruchem wskazówek zegara). Użyj WASD, aby zagrać, W obraca kawałek. Pełny kod źródłowy i plik exe można znaleźć tutaj: http://sourceforge.net/projects/tklone/files/tklone/tklone-v1.0/
tetris.c
setPiece.c
źródło
Zbudowałem wersję javascript https://marchingband.github.io/tetris/
źródło
dom[p.x][p.y+1].style.background
wracablue none repeat scroll 0% 0%
, więc nigdy nie będą równeblue
. Twoje rozwiązanie jest prawidłowe, ale proponuję zmienić wszystko.style.background
→,.style.backgroundColor
aby działało dobrze zarówno w Firefoksie, jak i Chrome.