PCT?
Czasem mamy ochotę zrobić jakąś krótką, prostą grę.. Czasem chcemy zrobić np.: symulację jakiejś aplikacji przedmiotu np.: komórki. I najczęściej w takich sytuacjach pada na tradycyjnego wężyka
Potrzebne składniki?
Na początek odrobina teorii:
Aby stworzyć wężyka potrzebujemy kilku rzeczy:
1 Obiekt który będzie głową węża
2 Obiekt który będzie tułowiem i ogonem węża
3 Obiekt który będzie zjadanym owocem
4 Licznik
5 Ograniczniki na krawędziach planszy
Jako ograniczniki zastosujemy krawędzie okna gry co zaoszczędzi nam:
a) cennej pamięci
b) kilku obiektów aktywnych
c) kilku linijek zdarzeń
A więc otwórzmy nowy projekt z oknem 640x480 pikseli. Wstawmy na planszę licznik i stwórzmy 3 obiekty aktywne. Każdy niech będzie rozmiaru 20x20 z Hot Spotem na samym środku czyli 10,10. Głowa (obiekt Głowa węża) niech będzie jasnozielona, tułów (obiekt Tułów węża) ciemnozielony a owoc (obiekt Owoc) czerwony (obiekty mogą być kulkami, kwadratami czy co tam chcecie byleby zajmowały większość pola 20x20). Umieśćmy wszystkie 3 obiekty poza ekranem gry (na szarym polu) a licznik w prawym górnym rogu ekranu. I dajemy Głowie węża ruch piłki lecz koniecznie odznaczamy pole Moving at start oraz odznaczamy wszystkie kierunki w Initial direction.
Do dzieła
A więc zaczynamy kodowanie w 15 zdarzeniach:
| 1 | • Start of level Głowa węża Set alterable value A to 6 Głowa węża Set position at (10,10)
Owoc Set X position to random(32) * 20 + 10
OwocSet Y position to random(24) * 20 + 10 |
Dlaczego ustawiamy wartość A głowy węża na 6? Jest to spowodowane tym, że tułów będzie porównywać swoją wartość A z wartością A głowy i dzięki temu zawsze będzie odpowiednia długość ogona (wartość A głowy liczymy z głową czyli 6 daje nam głowę i 4 części tułowia oraz ogon). A co do owocu to jego pozycja powinna być losowa więc korzystamy z polecenia random np.: random (2) losuje albo 0 albo 1 więc random 32 będzie losować od 0 do 31 więc komenda Set X position to random (32) * 20 + 10 spowoduje że jabłko pojawi się co 20 px w zakresie od 10 do 630 (licząc hot spot) dzięki temu pozostanie ono zawsze na planszy i będzie miało losową pozycje. Druga komenda jest prawie identyczna ale dotyczy pozycji Y.
| 2 | [komentarz]Kierunek góra[/komentarz] • Upon pressing "Up Arrow" Głowa węża Set direction to ad256} |
| 3 | [komentarz]Kierunek lewo[/komentarz] • Upon pressing "Left Arrow" Głowa węża Set direction to ad65536} |
| 4 | [komentarz]Kierunek prawo[/komentarz] • Upon pressing "Right Arrow" Głowa węża Set direction to ad1} |
| 5 | [komentarz]Kierunek dół[/komentarz] • Upon pressing "Down Arrow" Głowa węża Set direction to ad16777216} |
Tutaj chyba wszystko jasne po wciśnięciu odpowiedniego klawisza ustawiamy w odpowiednia stronę głowę węża.
| 6 | • Every 00''-50
Głowa węża is facing a direction to ad256} Create new objects Create Tułów węża at (0,20) from Głowa węża
Głowa węża set Y position to Y ("Głowa węża") - 20
Tułów węża Set alterable value A to Value A ("Głowa węża") |
| 7 | • Every 00''-50
Głowa węża is facing a direction to ad65536} Create new objects Create Tułów węża at (20,0) from Głowa węża
Głowa węża set X position to X ("Głowa węża") - 20
Tułów węża Set alterable value A to Value A ("Głowa węża") |
| 8 | • Every 00''-50
Głowa węża is facing a direction to ad1} Create new objects Create Tułów węża at (-20,0) from Głowa węża
Głowa węża set X position to X ("Głowa węża") + 20
Tułów węża Set alterable value A to Value A ("Głowa węża") |
Głowa węża is facing a direction to ad16777216}| 9 | • Every 00''-50
Create new objects Create Tułów węża at (0,-20) from Głowa węża
Głowa węża set Y position to Y ("Głowa węża") + 20
Tułów węża Set alterable value A to Value A ("Głowa wężą") |
Tutaj mamy praktycznie całe serce naszego silnika. Wytłumaczę je na podstawie zdarzenia 6] co pół sekundy (tyle trwa odstęp pomiędzy 1 przeskokiem) jeśli Głowa węża ma kierunek do góry stwórz nowy obiekt Tułów węża 20 px w dół od pozycji głowy. A głowę węża przesuń o 20 px w górę. Ustaw wartość A tułowia na wartość A głowy węża w czasie tworzenia. Dzięki temu długość życia tułowia jest zależna od aktualnej wartości A głowy węża.
| 10 | • Alterable Value A of Tułów węża <> 0
Collision between Głowa węża i Tułów węża Restart level |
Jest tu zastosowane dodatkowo (prócz kolizji głowy węża z tułowiem co oczywiście kończy się śmiercią węża) zdarzenie jeśli wartość A tułowia węża jest różna od 0. Jest ono dodane z tego względu, że podczas tworzenia Tułowia węża zanim się ono przestawi jest tworzone na obiekcie głowa węża co by doprowadziło do niekończącego się restartu poziomu (bo zachodzi kolizja) jednak, że równo z tworzeniem Tułów węża ma wartości równe 0 (jeszcze ich zdarzenie nie zrównało z wartością A Głowy węża) taki restart nie nastąpi (chyba, że usuniemy zdarzenie <> od 0).
| 11 | • Every 00''-50 Tułów węża Substract from value A 1 |
Co pół sekundy (czyli czas stworzenia nowej części tułowia) odejmujemy od wartości starych części 1 co powoduje, że każda część ma różną wartość.
| 12 | • Alterable Value A of Tułów węża = 0 Tułów węża Destroy |
Jeśli wartość A Tułowia węża jest równa 0 zniszcz tą część.
| 13 | • Głowa węża leaves the play area Głowa węża Wrap |
Jeśli głowa węża opuszcza pole gry przenieś ją na drugą stronę..
| 14 | • Collision between Owoc and Głowa węża Głowa węża Add 1 to alterable value A
Tułów węża Add 1 to alterable value A
Owoc Set X position to random( 32 ) * 20 + 10
Set Y position to random( 24 ) * 20 + 10
Licznik Add 10 to counter |
Kiedy następuje kolizja pomiędzy owocem i głową węża dodaj 1 do wartości A głowie węża (dzięki temu nowe części tułowia mają dłuższe życia) dodaj 1 do wartości A tułowia (przedłużony czas życia obecnych części tułowia aby mógł urosnąć) Zmień pozycję Owocu na losową dodaj do wyniku 10 punktów.
| 15 | • Collision between Owoc and Tułów węża Owoc Set X position to random( 32 ) * 20 + 10
Set Y position to random( 24 ) * 20 + 10 |
Jeśli wydarzy się tak, że owoc pojawi w miejscu gdzie jest tułów naszego węża zmień jego pozycję (jest to spowodowane tym, że przy dłuższej rozgrywce mogło by być niemożliwe dojście do tego owocu...).
Podsumowanie
Jest to tak elastyczny silnik, że bardzo łatwo można dodać do niego obsługę innych kierunków jak również zmniejszyć czy też zwiększyć szybkość co da inny poziom trudności, a wszystko w 15 zdarzeniach.
Ostatnio edytowane 4 kwietnia 2009, 20:35 przez
Fanotherpg