Strona główna

poniedziałek, 12 września 2011

Robimy "OdionoidO" - devlog #2

Ciąg dalszy devloga prac nad "OdionoidO" (linki do: zapowiedzi i części pierwszej).

Postanowiłem wyświetlać planszę gry w taki sposób, aby wypełniała całą przestrzeń ekranu na wysokość i podobnie na szerokość, z tym że z poprawką (rozszerzającą ten drugi wymiar) na to, aby wszystkie kluczowe wymiary dały się łatwo wyliczyć w dzieleniach bez reszty.

Górną część planszy zajmował będzie obszar gry, zaś u dołu zostanie przestrzeń, którą poświęcę na prezentację wyniku, pozostałych żyć, numeru planszy, etc.

Wstępnie postanowiłem, że obszar samej gry będzie miał szerokość równą szerokości 13 cegiełek, zaś wysokość równą wysokości 20 cegiełek. Cegiełki mają proporcje 2:1, przy czym dłuższym wymiarem jest szerokość.

Rakieta będzie szeroka na dwie cegiełki, o wysokości równej lub nieco mniejszej od wysokości cegiełki. Ten ostatni wymiar pozostaje bez wpływu na całą resztę, więc nie musi być rezultatem jakiejś eleganckiej proporcji.

Na potrzeby testów kod wyliczający istotne wymiary elementów znajdujących się na ekranie ująłem do postaci funkcji, aczkolwiek niewykluczone, że w finalnym kodzie znajdzie się on w nieco innej postaci. Oto funkcja wyliczająca kluczowe wymiary w oparciu o podaną wysokość ekranu, grubość obramowań oraz wymiary obszaru gry liczone w cegiełkach a wynik zwracajaca w postaci slownika:


def wymiary_planszy(wysokosc_ekranu, grubosc_ramki, ile_klockow_szer = 13, ile_klockow_wys = 20):
    wnetrzetmp = wysokosc_ekranu - (2 * grubosc_ramki)
    szerokosc_wnetrza = (ile_klockow_szer - wnetrzetmp%ile_klockow_szer) + wnetrzetmp
    if (szerokosc_wnetrza / ile_klockow_szer)%2 == 1:
        szerokosc_wnetrza = szerokosc_wnetrza + ile_klockow_szer
    klocek_szerokosc = szerokosc_wnetrza / ile_klockow_szer
    klocek_wysokosc = klocek_szerokosc / 2
    szerokosc_planszy = szerokosc_wnetrza + (2 * grubosc_ramki)
    wysokosc_obszaru_gry = ile_klockow_wys * klocek_wysokosc
    wysokosc_menu = wysokosc_ekranu - wysokosc_obszaru_gry - (3 * grubosc_ramki)
    plansza_wymiary = {'grubosc_ramki' : grubosc_ramki, 'szerokosc_planszy' : szerokosc_planszy, 'wysokosc_planszy' : wysokosc_ekranu, 'szerokosc_wnetrza' : szerokosc_wnetrza, 'wysokosc_obszaru_gry' : wysokosc_obszaru_gry, 'wysokosc_menu' : wysokosc_menu, 'klocek_szerokosc' : klocek_szerokosc, 'klocek_wysokosc' : klocek_wysokosc, 'rakieta_szerokosc' : (2*klocek_szerokosc), 'rakieta_wysokosc' : ((int)(klocek_wysokosc*0.8))}
    return plansza_wymiary


Wstępne testy wykazały, że funkcja działa poprawnie, aczkolwiek w pełni będzie można to ocenić dopiero po napisaniu kodu wyświetlającego przykładowy obszar gry w oparciu o zwracane wymiary.