Tux Hunt (cz. 1) - Tworzenie gier

in pl-gamedev •  7 years ago 

Jako, że czegoś się nauczyliśmy by zrobić Tux Hunt czy inną grę - zaczniemy ją projektować. Naszym zadaniem jest stworzenie gry a'la Duck Hunt - oczywiście od zera.

Duck Hunt to prosta gra automatowa, która ukazała się na Famiconach i NESach (i na Pegasusach - bo Pegasus to piracki Famicon), w której latają sobie kaczki a my musimy je zestrzelić.

Taka rozgrywka dla burżujów. Oczywiście tam się strzelało z pistoletu laserowego, ale my nie mamy takich technologii, więc będziemy klikać myszką :)

Nasza gra luźno będzie inspirowana tym tytułem - trzeba by grę bardzo obserwować by zrobić bardzo dobrą kopię, ale nam aż tak nie jest to potrzebne.

Nowy projekt

Oczywiście zakładamy nowy projekt o nazwie np. TuxHunt. Dodajemy obiekt controller, który na razie nie będzie używany. Zróbmy na razie mechanikę strzelania do pingwina.

Grafika

Na OpenGameArt znalazłem taką oto grafikę pingwina na licencji CC-BY 3.0, czyli do użytku komercyjnego:
obraz.png

Zdjęcie to jest przerobione i ma "lepsze tło".

obraz.png

Mała prośba - w Collision Checking zaznacznie Precision (zamiast Rectangle). Rectangle bierze prostokąt z grafiki (czyli nawet jak nie traficie w pingwina, a w prostokąt w którym jest obudowany - to zadziała). - bądźmy precyzyjni ;)

Obj_tux

Skoro mamy pingwina, trzeba go oprogramować. Dodajmy obj_tux i dajmy do zdarzenia "puszczonego lewego przycisku myszy", że ilość punktów jest zwiększona o 100, a pingwin eksploduje (xD) i zostaje zniszczony.

Przy okazji dajmy mu grafikę już :)

score = score + 100;
effect_create_above(ef_explosion, x, y, 1, c_red);
instance_destroy();

Score to zmienna globalna. O zmiennych globalnych mówiliśmy (chyba) przy marynarzyku - ogólnie działają w obrębie całej gry. Są jednak trzy zmienne, które są wbudowane w grę - Score, Lives i Health. Nie musimy ich wykorzystywać, ale już są wbudowane.

Effect create above tworzy eksplozję, wałkowaliśmy to

Instance_destroy() to funkcja, która usuwa instancję obiektu - albo w skrócie obiekt z planszy. Czyli jeśli naciśniemy myszką to Pingwin zostanie usunięty z egzystencji. Ogólnie możliwe, że dwie lekcje będą teoretyczne - o Git (przyda się do tworzenia gier) i Instancje. Instancje są wręcz bardzo ważne, gdyż musimy jakoś tworzyć nowe obiekty - na przykład strzelanie w grze może tworzyć obiekt "kula", a my tego nie omówiliśmy (z tego co pamiętam).

obraz.png
obraz.png

Ilość strzałów

Bardzo trudno to oszacować, ale w DH mieliśmy 3 strzały na rundę (i dwie kaczki). Zróbmy taki teoretyczny (będziemy musieli to zrobić ładnie) system liczenia pocisków. Każde kliknięcie odejmie jeden strzał, więc jak ktoś nie ma strzałów to nie może zabić pingwiniastego.

W obj_controller w Create dajemy

global.ammo=3;

Czyli tworzymy zmienną globalną global.ammo z wartością 3.

Dodajmy w tym samym obiekcie event "Global Left released" (mysz), czyli jeśli ktoś gdzieś kliknie w grze (niekoniecznie na pingwina) to

global.ammo=global.ammo-1;

Odejmie 1 od global.ammo.

Teraz w obj_tux w kodzie, który usuwa pingwinka zróbmy ifa (cały kod wygląda tak)

if(global.ammo>=1)
{
score = score + 100;
effect_create_above(ef_explosion, x, y, 1, c_red);
instance_destroy();
}

Jeśli global.ammo jest większe lub równe 1 - wykonaj kod.

Na zakończenie

Dziękuję za uwagę i zachęcam do testowania naszego kodu. Dzisiaj nauczyliście się (prawdopodobnie) o wbudowanych zmiennych globalnych i niszczeniu obiektów (instancji obiektów). Mam nadzieję naturalnie, że Wam się podobało.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

zachęcam do

excellent pl-artykuly...i like it..i appreciate your pl-artykuly...
Thanks for sharing..

jakich silnikow graficznych uzywasz?

Tzn. gra powstaje w Enigmie, czyli w zasadzie bez silników (sam oprogramowujesz). Gra używa biblioteki OpenGL (1 / 3, GLES chyba nie działa ciągle)