Tytuł: AI Sokoban
Autor: Gemini 3 Pro i nosty
Sumaryczny czas pracy nad grą: około 5 godzin.
==================================================================
Prompt początkowy (juz po wprowadzeniu w programowanie w asemblerze na Atari):
Chcę byś stworzył w asemblerze kompletną grę na Atari typu "Sokoban", czyli grę logiczną z widokiem z góry, gdzie bohater (którym sterujemy) musi umieścić skrzynki na właściwych miejscach pchając je przed sobą.
Zasady gry:
1. Pole gry podzielone jest na kwadraty.
2. Bohater (B.) porusza się skokowo między sąsiednimi polami (kwadratami) góra/doł/prawa/lewa. Ruchy po przekatnej nie są dozwolone.
3. B. może pchać przed sobą jedną skrzynkę. Nie może ciągnąć skrzynki. Nie można pchać dwóch lub więcej skrzynek.
4. Na polu gdy oznaczamy miejsca (sloty) gdzie mają znaleźć się skrzynki by wygrać dany poziom. Nie ma znaczenia, która skrzynka znajdzie się na którym slocie.
5. Skrzynek jest tyle samo co slotów. Warunek wygranej: wszystkie sloty są zajęte przez skrzynki.
Wykonanie, szczegóły techniczne:
1. Stwórz trzy ekrany i zaprojektuj dla nich odpowiednie Display Listy:
1.1 Ekran Startowy. 24 linie w trybie tekstowym hi-res. Na górze wysrodkowany tytul gry (wymyśl go). Niżej opisane w skrócie co jest zadaniem gracza (może być po angielsku). Na dole napis "Press Fire to Start". Po naciśnięciu "fire" w joysticku przechodzimy do Ekranu Gry.
1.2 Ekran Gry. 24 linie w trybie tekstowym $05 antic (4-kolorowym). W tym trybie kolor koduje kombinacja 2 bitów, (00, 01, 10,11), a piksele są kwadratowe.
1.2.1 Ponieważ chcemy by elementy gry byly kwadratami, to każdy z nich będą tworzyły 2 znaki ustawione poziomo obok siebie.
1.2.2 Maksymalna wielkość mapy danego poziomu to 20x12 (gdzie każdy element tworzą dwa znaki obok siebie).
1.2.3 Mapy poszczególnych poziomów będą miały różny rozmiar.
1.2.4 Na mapie poziomu wykorzystamy następujące elementy:
; 0 - podloga (po której bohater może się poruszać)
; 1 - pusty slot na skrzynkę
; 2 - skrzynka w slocie
; 3 - skrzynka (poza slotem) na polu gry
; 4 - ściana (bohater nie może przez nią przechodzić)
; 5 - początkowa pozycja gracza na pustym slocie
; 6 - początkowa pozycja gracza na podłodze
; 9 - tło (spacje)
1.2.5 Przepisz definicję znaków z systemu operacyjnego w nowe miejsce w pamięci i zmodyfikuj, tworząc graficzną reprezentację dla każdego elementu z punktu 1.2.4. Pamiętaj, że każdy z tych elementów będzie złożony z 2 znaków. Zaprojektuj prostą, czytelną grafikę, tak by elementy kluczowe ściany, podłoga, skrzynki, bohater wyraźnie się różniły. Pamiętaj jednak, że każdy z elementów ma mieć kształt kwadratu. Wykorzystaj dobrze kolory (3 + kolor tła).
1.2.6 Stwórz procedurę przepisującą mapę do obszaru roboczego, który będzie służył Ci do obsługi całej logiki.
1.2.7 Stwórz procedurę rysującą znakowe pole gry na podstawie mapy (każde pole to 2 znaki). Rysować zaczynasz od lewego górnego rogu.
1.2.8 Pamiętaj aktualną pozycję pohatera. Napisz obsługę ruchu Bohatera po mapie w obszarze roboczym. Zasady:
1.2.8.1 Jeśli obok B. w kierunku wychylenia joysticka znajduje się podłoga, to bohater zmienia pozycję.
1.2.8.2 Jeśil obok B. w kierunku wychylenia joysticka znajduje się skrzynka, a za nią podłoga, to bohater zmienia pozycję i skrzynka zmienia pozycję (bohater pcha skrzynkę).
1.2.8.3 Dotychczasową pozycje bohatere wypełniamy odpowiednim elementem (podłoga-0 lub pusty slot-1) na podstawie oryginalnej mapy poziomu.
1.2.8.4 Jeśli pchamy skrzynkę, to na dotychczasowej pozycji skrzynki będzie stał bohater.
1.2.8.5 Jeśli w wyniku pchania skrzynka znajdzie się na slocie, to zmieniamy ją na mapie z 3 (skrznka poza slotem), na 2 (skrzynka w slocie). Analogicznie, jeśli zepchniemy skrzynkę ze slotu, to zmieniamy element na mapie roboczej z 2 na 3.
1.2.9 Po ruchu wykonujemy sprawdzenie, czy poziom został ukończony: na mapie roboczej ma nie być pozycji 1 (pusty slot). Wtedy Ładujemy kolejny poziom.
1.2.10. Naciśnięcie klawisza ESC powoduje reset poziomu (np. gdy gracz się zablokuje): ponowne przepisanie mapy do obszaru roboczego.
1.2.11 Naciśnięcie klawisza SPACJA powoduje przeskoczenie na kolejny pozim, bez konieczności ukończenia obencego.
1.2.12 Wprowadź zabezpieczenie, by bohater nie przemieszczał się błyskawicnie o jedno pole co ramkę. Jeśli gracz będzie trzymał wychylony joystick to między kolejnymi ruchami musi minąć co najmniej 16 ramek.
1.3. Po ukończeniu ostatniego poziomu ładujemy trzeci ekran tekstowy hi-res z napisem "CONGRATULATION! YOU WON!" na środku ekranu. Po naciśnięciu fire przechodzimy do ekranu startowego 1.1
UWAGA. Moje zalecenia i procedury, które opisałem to zapewne nie wszystkie konieczne rzeczy do wykoania. Zanim zaczniesz pracę przemyśl wszystko dokładnie i uzupełnij moje pomysły. Nie spiesz się. Przemyśl wszystko dwa razy. Pamiętaj, że twoim zadaniem jest stworzyć działającą poprawnie grę.
Podaję definicje 4 poziomów. Stwórz na ich postawie linie dta:
...
==================================================================