Własne rekordy w MMF

Klikipedia - klikowa encyklopedia
Wersja z dnia 20:02, 19 lis 2006 autorstwa Morty (dyskusja | edycje)
(różn.) ‹Starsza wersja | zobacz obecną wersję (różn.) | Nowsza wersja› (różn.)
Skocz do: nawigacji, wyszukiwarki

ARTYKUŁ W FAZIE KONSTRUKCJI, NIE EDYTOWAĆ

Czy zastanawiałeś się kiedyś jak zrobić własną listę rekordów, która nie miałaby ograniczeń standardowego obiektu "Hi-Score"? Jeśli tak, to ten kurs jest właśnie dla Ciebie. Uprzedzam, że cały przykład będzie wykonany w MMF, ale będzie można go z powodzeniem przerobić pod TGF. Wystarczy zamiast standardowego obiektu "Array" użyć "Dynamic Array" i "Fast Loop object" dostępnych w TGF.

Wprowadzenie

Na początku zastanówmy się, czym jest lista rekordów, czyli tzw. założenia wstępne. A więc zadaniem listy rekordów jest przechowywanie wyników uzyskiwanych przez graczy. Innymi słowy jest to ranking wyników z gry, który przechowuje najczęściej imię gracza i jego wynik, oraz inne informację o rekordzie. Co więcej lista ta przechowuje jedynie ściśle określoną ilość tych rekordów i aby się dostać na nią musi się uzyskać jakiś dość wysoki wynik. Kolejną bardzo ważną cechą rankingu wyników jest to, że wyniki są posortowane, czyli ułożone w odpowiedniej kolejności w zależności od uzyskiwanego wyniku. Z reguły jest to porządek malejący tzn., że rekord o wyższym wyniku jest wyżej na liście niż rekord o niższym wyniku. Rekordy te są pamiętane nawet po wyłączeniu gry. Oczywiście jedyną metodą zapamiętywania rekordów jest ich zapis w pliku. Aby uniemożliwić ingerencję i manipulację wynikami, przez graczy, plik ten powinien być zakodowany.

Założenia

Jak łatwo zauważyć standardowe "Hi-Score" nie spełnia kilku z naszych założeń. Miedzy innymi pozwala jedynie na przechowanie imienia gracza i jego wyniku i tylko tych dwóch informacji, a przecież czasem przydałaby się jeszcze informacja o rundzie, w której gracz zakończył grę, czy dacie ustanowienia wyniku. Dalej, rekordy przechowywane są w pliku INI, który nie jest w żaden sposób zabezpieczony, co umożliwia oszustwa, które oczywiście nie mają większego sensu. I dodatkowo możemy maksymalnie przechowywać tylko 20 rekordów.

Stworzona przez nas lista rekordów pozbawiona będzie wszystkich tych wad standardowego "Hi-Score". Oczywiście największym problemem w MMF jest sortowanie rekordów. Znanych jest wiele algorytmów sortowania. Niektóre z nich można z powodzeniem wykorzystać w MMF inne nie. My użyjemy najprostszej metody "sortowania bąbelkowego", moglibyśmy użyć innych szybszych metod jak choćby "sortowania przez wstawianie", czy "sortowanie przez kopcowanie", ale przy założeniu, że nasze rekordy będą przechowywane w tablicach, a naraz wstawiać będziemy 1 rekord wszystkie te metody mają podobną złożoność obliczeniową. Oczywiście istnieją inne szybsze metody sortowania jak choćby "sortowanie szybkie", które w większości przypadków jest najszybszym algorytmem sortowania. Jednak w MMF użycie tego algorytmu jest skomplikowane.

Trochę teorii

Tak jak wcześniej napisałem do posortowania listy rekordów użyjemy najprostszego algorytmu sortowania, "sortowania bąbelkowego". Omówię w skrócie, na czym polega ten algorytm. Załóżmy, zatem, że mamy jakąś przypadkową listę liczb np.: 4, 9, 1, 4, 5 którą chcemy posortować malejąco. Algorytm, bąbelkowy "postępuje" następująco sprawdza czy 5 liczba jest większa, od 4 jeśli tak zamienia je miejscami, w przeciwnym wypadku przechodzi dalej (u nas 4, 9, 1, 5, 4) następnie sprawdza 4 z 3 (u nas 4, 9, 5, 1, 4), 3 z 2 (u nas 4, 9, 5, 1, 4), 2 z 1 (u nas 9, 4, 5, 1, 4) jak widać po pierwszym wykonaniu takiej pętli lista nie jest posortowana, aby była posortowana należałoby tę samą operacje powtórzyć 4 razy (w ogólnym przypadku n-1 razy, jeśli za n przyjmiemy ilość elementów w liście). Należy jednak zauważyć, że element maksymalny jest na pierwszym miejscu już po pierwszym wykonaniu szeregu powyższych operacji, a to nam wystarczy w zupełności, bo dodawać będziemy po 1 rekordzie, czyli w chwili dodawania rekordu nasza lista będzie posortowana. Nasza lista rekordów na początku będzie pusta, (czyli np. 0, 0, 0, 0, 0), później będziemy dodawać jakiś rekord, (np. 4), zrobimy to w taki sposób, że sprawdzimy czy ostatni element listy jest mniejszy od tego, który chcemy wstawić, jeśli tak to na jego miejsce wstawimy nasz wynik (u nas 0<4, czyli 0, 0, 0, 0, 4) i wywołamy nasz algorytm sortowania bąbelkowego, czyli porównujemy 5 z 4 (0, 0, 0, 4, 0), 4 z 3 (0, 0, 4, 0, 0), 3 z 2 (0, 4, 0, 0, 0), 2 z 1 (4, 0, 0, 0, 0) jak widać nasz wynik znajduje się na początku, czyli tam gdzie powinien:). Nie ma sensu wykonywania jeszcze 3 razy tych samych czynności, bo nic to by nie zmieniło. Aby lepiej zrozumieć ten algorytm do obecnej naszej listy (4, 0, 0, 0, 0) wstawimy liczbę 2, czyli porównujemy 0<2, więc (4, 0, 0, 0, 2) i wykonujemy, algorytm sortowania bąbelkowego. Porównujemy 5 z 4 (4, 0, 0, 2, 0), 4 z 3 (4, 0, 2, 0, 0), 3 z 2 (4, 2, 0, 0, 0) i 2 z 1 (4, 2, 0, 0, 0) dwójka jest mniejsza, od 4 więc nie zamieniamy ich miejscami. Myślę, że po tym przykładzie zrozumiałeś algorytm sortowania bąbelkowego i całą ideę naszej listy rekordów. Teraz pozostał jedynie problem jak to przełożyć na zdarzenia w MMF, ale ten problem pozostawiam tobie .

Jak to zakodować?