Piszemy wyścigi

Na początek co musimy umieć ?
1. Myśleć.
2. Programować obiektowo w stopniu minimalnym.
3. Programować obiektowo w stopniu minimalnym plus (trza wiedzieć co to lista).
4. Czytać ze zrozumieniem.

Ok., jak wygląda pomysł na gierkę ? Prosty scroller do góry, z możliwością ruchu naszego pojazdu na boki oraz przyśpieszania/zwalniania. Żeby nie było za prosto to jeszcze dorzucimy kilka samochodów które będą się snuły po naszej drodze.

Realizacja.
Prosta jak drut, na początek tworzymy drogę, będzie to klasa która będzie zarządzać naszymi wszystkimi samochodami. W drodze będą dwie listy na pierwszej będziemy trzymać samochody, których nasz gracz jeszcze nie widzi, na drugiej będą te które są widoczne (lub były widoczne niedawno).

Po co 2 listy ? Aby kod działał wydajnie, jeśli na drodze jest 300 samochodów, to nie potrzeba wszystkich updatować wystarczy zająć się tymi które są widoczne, niby uproszczenie ale efekt zadawalający i spory zysk na mocy obliczeniowej. Jak będzie działał nasz algorytm ?

1. Robimy ruch gracza.
2. liczymy jaki obszar drogi jest widoczny przez gracza.
3. Sprawdzamy czy jakiś obiekt z listy obiektów (samochodów) nieaktywnych pojawił się w polu widzenia, jeśli tak to zostaje on przeniesiony do listy obiektów aktywnych.
4. Wykonujemy update obiektów na liście obiektów aktywnych.
5. Sprawdzamy czy jakiś z obiektów z listy obiektów aktywnych nie wyszedł poza pole widzenia, jeśli tak się stało to go niszczymy, do niczego już nam nie będzie potrzebny.

Ok. to już mamy załatwioną pętlę główna programu. Teraz zobaczmy co będzie nasz samochodzik robił. Aby było fajnie to dajemy mu przedział prędkości jakie może uzyskać np. (0..25), AI będzie losowo sprawdzał czy ma ochotę przyśpieszyć czy zwolnić. Będzie również starał się nie zderzać z nikim do okoła, co z tego wyjdzie to się okaże….
W skrócie update:

1. Dokonujemy zmiany pozycji pojazdu.
2. Sprawdzamy czy nie jesteśmy w stanie po zderzeniu, jeśli tak to wyhamowujemy do zera, po czym możemy wznowić jazdę.
3. Sprawdzamy kolizje, jeśli nastąpiła kolizja to odbijamy wektor prędkości i załączamy stan zderzenia.
4. Sprawdzamy czy nie wyjechaliśmy poza drogę, jeśli tak to na nią wracamy 🙂
5. Jeśli pojazdem nie steruje AI wychodzimy.
6. Losujemy sobie co robi AI, może przyśpieszy a może zwolni.
7. AI postara się sprawdzić czy przed nim nie jedzie ktoś wolniej, jeśli tak to zwolni jednocześnie trąbiąc na gościa przed nami aby przyśpieszył 🙂

Dobra, koniec pitolenia, czas na supa koda. Polecam analizę może znajdziecie coś ciekawego.

PS. Kilka uwag o których zapomniałem.

1. W procedurze ustawiającej samochody muszą one być w kolejności rosnącej dodane do listy, dlaczego ? patrz jak się dodaje obiekty do listy obiektów aktywnych i zastanów się co na tym zyskujemy 🙂
2. Program jest bardzo prosty, bez optymalizacji tak aby jak najłatwiej dało się go zrozumieć. Ale z drugiej strony staram się pokazać jak zbudować algorytmy które ruszą na bardzo słabych kompach czy nawet na komórkach (tak tak)

Autor: Toster

Załączniki