Autor Wątek: Rustanks - Zardzewiałe Czołgi  (Przeczytany 8669 razy)

Offline Xirdus

  • Redaktor

  • +5
# Lipiec 22, 2014, 21:05:44
Github: http://github.com/Xirdus/rustanks

Prawie jak klasyczne "czołgi" - są dwie maszyny zniszczenia które próbują się wzajemnie dopaść i które rozwalają przy tym otoczenie. Unikalnymi cechami gry będą dwie bronie - działo główne i karabin maszynowy - oraz losowo generowane mapy które będzie można niszczyć na wzór Wormsów. Priorytetem jest tryb dla dwóch graczy przy jednym komputerze, jak starczy czasu to zrobię tryb walki z komputerem.

Grę tworzę w języku Rust i bibliotece SDL - głównie po to żeby się tego języka nauczyć.
« Ostatnia zmiana: Lipiec 30, 2014, 19:30:44 wysłana przez Xirdus »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Xirdus

  • Redaktor

  • +1
# Lipiec 24, 2014, 23:20:52
Dzień 2.

Kurde, nic jeszcze nie pokazałem a już mam cztery plusy :D

Na razie żeby zobaczyć jak to w ogóle chodzi, klepnąłem hello worlda - inicjalizacja SDL (bo jego używam - tego starego), wczytanie obrazka, wyświetlenie go i obsługa eventu zamknięcia okna. Jakby ktoś chciał zobaczyć jak wygląda Rust, poniżej cały dotychczasowy kod:
Kod: (Rust) [Zaznacz]
extern crate sdl;
extern crate sdl_image;

use sdlv = sdl::video;

fn main() {
    if !sdl::init([sdl::InitVideo, sdl::InitTimer]) {
        println!("Couldn't init SDL");
        return;
    }
    if !sdl_image::init([sdl_image::InitPNG]).contains(&sdl_image::InitPNG) {
        println!("Couldn't init SDL_Image");
        return;
    }
    let helloworld = match sdl_image::load(&std::path::Path::new("res/helloworld.png")) {
        Ok(i) => i,
        Err(_) => {
            println!("Couldn't load image");
            return;
        }
    };
    let screen = match sdlv::set_video_mode(640, 480, 32, [sdlv::SWSurface], [sdlv::DoubleBuf]) {
        Ok(s) => s,
        Err(_) => {
            println!("Couldn't set video mode");
            return;
        }
    };
    sdl::wm::set_caption("Rustanks", "");
   
    'main : loop {
        'event : loop {
            match sdl::event::poll_event() {
                sdl::event::QuitEvent => break 'main,
                sdl::event::NoEvent => break 'event,
                _ => continue
            }
        }
       
        screen.fill(sdlv::RGB(0, 0, 255));
        screen.blit_at(&helloworld, 100, 100);
        screen.flip();
    }
   
    sdl_image::quit();
    sdl::quit();
}
Ja już się w tym języku zakochałem :)

Jakby ktoś chciał śledzić postępy na bieżąco, do pierwszego posta dodałem link do Githuba. Przy okazji, zmieniłem nazwę projektu na Rustanks (wymowa przez U jak pUtin).

Offline Xirdus

  • Redaktor

# Lipiec 27, 2014, 00:26:04
Dzień 4.

Pół dnia walczyłem z dziwnymi błędami kompilacji - aż mi dobry człowiek na kanale #rust wytłumaczył że trzymanie w składowej referencji do elementu składowego wektora to zły pomysł :) No i dowiedzałem się też, że "unboxed closures", tj. w skrócie lambdy niepowiązane z żadną ramką stosu, jeszcze nie są zaimplementowane i nie da się przez to zrobić ładnych callbacków - na szczęście są makra (o wiele sensowniejsze niż te z C) i nie boli to aż tak bardzo. W dalszym ciągu nie ogarniam lifetime'ów referencji.

Z jednej strony, podoba mi się w tym języku to, że nie ma żadnych, absolutnie żadnych implicit castów - z drugiej, kiedy SDL_Rect ma połowę pól i16 a drugą połowę u16, robi się w kodzie trochę rzutowań.

Menu już skończone, można brać się za grę właściwą.

Dodałem projekt na Warsztacie - link w pierwszym poście.
« Ostatnia zmiana: Lipiec 30, 2014, 19:30:35 wysłana przez Xirdus »

Offline JasonVoorhees

  • Użytkownik
    • FotoGry

  • +1
# Lipiec 27, 2014, 12:48:04
Te, dużo jest ofert pracy na tego Rusta :D ?
« Ostatnia zmiana: Lipiec 27, 2014, 12:52:17 wysłana przez JasonVoorhees »

Offline laggyluk

  • Użytkownik
    • twitter

# Lipiec 27, 2014, 14:33:27
Te, dużo jest ofert pracy na tego Rusta :D ?
zlecenia są najczęściej typu 'zrób mi grę i żeby działała na czymś tam' więc w czym to drugorzędne :P

Offline Xirdus

  • Redaktor

  • +2
# Lipiec 27, 2014, 14:42:07
Te, dużo jest ofert pracy na tego Rusta :D ?
Jako że najnowsza wersja to 0.12.0-pre, połowa biblioteki standardowej ma status "experimental" a druga połowa "deprecated", wątpię.

Offline Xirdus

  • Redaktor

  • +1
# Lipiec 30, 2014, 19:32:45
Na stronę projekt dodałem z myślą, że na razie wstawię menu, a za dzień-dwa dodam już coś konkretnego. Niestety moje plany szlag trafił, i dostałem słuszne minusy. Tak więc projekt chwilowo usuwam i dodam z powrotem jak już go skończę (a przynajmniej jak będzie się dało pograć).

Obecnie robię mały refactoring bo trochę się zakopałem z myślą że zrobię osobną pętlę główną na każdy ekran gry.

Offline zx81 (taxi_dr...

  • Użytkownik
    • Something Beautiful team

  • +1
# Lipiec 30, 2014, 20:10:42
Dobra, dobra Xirdus( redaktorze) dawaj ten projekt, a nie usuwaj. Mnie bardziej ciekawi jak go bedziesz rozwial niz jak bedzie wygladala finalna wersja.
Dostales minusy, to sie nie obrazaj jak panienka tylko pokaz jak sie walczy o plusy ;)
Dzień 2.
Kurde, nic jeszcze nie pokazałem a już mam cztery plusy :D
Jak dostales plusy za friko na poczatku projektu to byles caly hepi?

Offline Xirdus

  • Redaktor

  • +1
# Lipiec 30, 2014, 21:02:56
@zx81:
Usunąłem z szacunku do innych użytkowników portalu żeby nie musieli oglądać śmieciowych projektów. Te 258 minusów co dostałem to będę se dodawał w głowie ;)

Offline Xirdus

  • Redaktor

# Lipiec 31, 2014, 01:37:44
Zrobiłem mały refactoring, przy okazji odkryłem małego buga w kompilatorze Rusta - jeśli mamy daną zmienną lokalną buttons_sprites i funkcję Menu::new() przyjmującą w parametrze referencję na tamtą zmienną, to linijka return Rc::new(RefCell::new(box Menu::new(&buttons_sprites) as Box<State>)) nie powoduje błędu kompilacji mimo że powinna. I potem szukaj przyczyny crasha jak pod gdb wszystko działa OK...

BTW immutability potrafi czasem nieźle wk zdenerwować...

Offline Xirdus

  • Redaktor

# Sierpień 01, 2014, 20:13:01
Dzień 10.

Wziąłem się za klasę czołgu, i uświadomiłem sobie, że nikt jeszcze nie przeportował na Rusta SDL_gfx (dla niewtajemniczonych - biblioteki, dzięki której można obracać obrazki w SDL-u). No cóż, czas się wziąć do roboty.

Edit: a jednak jest. Trzeba uważnie przeglądać Githuba, bo community Rusta jest baaardzo luźno zorganizowane.
« Ostatnia zmiana: Sierpień 01, 2014, 21:42:53 wysłana przez Xirdus »

Offline Xirdus

  • Redaktor

# Sierpień 07, 2014, 21:52:06
Dzień 16.

Ten SDL_gfx co go znalazłem jakiś lipny był - nie było Rotozooma. Tak więc byłem w ostateczności zrobić własny binding. Jakby ktoś kiedyś potrzebował: https://github.com/Xirdus/rust-sdl_rotozoom

Przy okazji wrapowania tej libki napisałem całkiem posranefajne makro:
Kod: (Rust) [Zaznacz]
macro_rules! cast_to_f64(($($name:ident),*) => (
    let ($($name,)*) = ($(match $name.to_f64() {
        Some(x) => x,
        None => fail!(concat!("cannot cast '", stringify!($name), "' to f64"))
    },)*);
))

Co do samej gry, zajmowałem się głównie koncepcją, designem klas, grafiką. Mam nadzieję w ciągu tygodnia zrobić coś co można pokazać (niestety w międzyczasie mam egzamin na prawko, więc nie wiem jak to wyjdzie).

Offline Xirdus

  • Redaktor

# Sierpień 21, 2014, 23:15:56
Dzień 30.

Sprawdzanie pożyczania referencji fajna rzecz - ale w obecnej formie jest stanowczo zbyt upierdliwe. Do tego stopnia że niemożliwe staje się dziedziczenie (tzn. takie pseudo-dziedziczenie, że w obiekt klasy "dziedziczącej" jest składową "bazowej", i w metodzie klasy bazowej wywołuję metodę obiektu dziedziczącego przekazują self obiektu bazowego w parametrze - kompilator takie coś blokuje; próbowałem zrobić w drugą stronę i nie da się wtedy obiektu utworzyć). W chwili obecnej Rust nie nadaje się do tworzenia bardziej złożonych aplikacji w sposób nieprowadzący do samozachlastania. Z tego powodu projekt zarzucam. Może za rok będzie lepiej...

Offline PsichiX (ΨΧΞ)

  • Użytkownik
    • PsichiX Website

  • +1
# Sierpień 22, 2014, 08:38:25
tak daje znac, ze masz jeszcze czas na cos prostego do stworzenia w innym srodowisku (prosty != prostacki) :)

Offline Xirdus

  • Redaktor

# Sierpień 22, 2014, 10:03:37
tak daje znac, ze masz jeszcze czas na cos prostego do stworzenia w innym srodowisku (prosty != prostacki) :)
Ale to już nie to samo ;)