trawa

Autor Wątek: Piszemy gry  (Przeczytany 12245 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline Sajuuk'

  • Szafarz bracki
  • *****
  • Wiadomości: 3 018
  • Total likes: 0
  • Płeć: Mężczyzna
  • z'; DROP TABLE profile; --
    • sireliah.com
Piszemy gry
« dnia: Styczeń 02, 2014, 08:50:24 pm »
Pierwsza sprawa: nie jestem botem i niczego nie chcę reklamować.
Druga sprawa: no dobra, może tylko trochę, ale mam szczere intencje. ; p

Jakie macie doświadczenia z tworzeniem gier PC? Ja niedawno odkryłem jaka to świetna zabawa i żałuję, że nie wziąłem się za to bodaj w wieku 15 lat, bo miałbym dziś już opanowane C/C++ na 100% (i zapewne uraz kręgosłupa oraz wadę -10 dioptrii w obojgu oczu). W każdym razie chciałbym się pochwalić grą i zachęcić do bezlitosnej krytyki.

Nazwa: Adsidera
Język: Python
Moduł: Pygame

Gdzie pobrać: http://sourceforge.net/projects/adsidera/
Dostępne są wersje na Windowsa oraz Linuksa. Gra jest na licencji GPL 3, więc można swobodnie ściągać, rozpowszechniać, zaglądać w kod i modyfikować, jeśli się to właściwie zaznaczy.

Aha, zapomniałbym. Kieruje się kursorami, napędza się spacją, a startuje z Ziemi za pomocą entera. Esc = wyjście. Można też grać za pomocą dżojpada (pisałem to pod pada do PS3, więc zachęcam do eksperymentów).

Gra jest generalnie w wersji alfa, więc niedoskonałym zaczątkiem nawet bez menu głównego, ale główny silnik gry jest już funkcjonalny - mam tu na myśli przede wszystkim grawitację. Byłbym wdzięczny za jakieś komentarze i wytykanie bugów, bo skłoni mnie to do poprawy kodu.

Aha, nic nie prowokuje tak do pracy jak zazdrość, więc wrzucajcie cokolwiek kiedyś napisaliście. Niechże to będzie i turbopascal. ; p
"Był to chłopak tak piękny, że nie musiał się nawet myć" - T. Konwicki, "Dziura w niebie"

Offline DARKMAN

Odp: Piszemy gry
« Odpowiedź #1 dnia: Styczeń 02, 2014, 09:11:45 pm »
Spoko. Zawsze sobie mowie ze jak bede mial urlop to zaczne cos grzebac przy XNA (albo XCode)... jednak poki co wszystko konczy sie na checiach...

Offline Piekarz

Odp: Piszemy gry
« Odpowiedź #2 dnia: Styczeń 02, 2014, 09:21:58 pm »
Sam niedawno stworzyłem w C side scroll shootera pod Windows. Przynajmniej 1 poziom. :D Ale objawiły się pewne problemy, które część osób zrozumie:
- BitBlt tak naprawdę działa przeraźliwie wolno, bez użycia DirectX nie ma co myśleć o czymś dynamicznym
- nie myśl, że nie mając talentów graficznych uda ci się stworzyć coś pięknego, zasada "jakoś to będzie" nie działa
- najpierw zaprojektuj poziomy, przeciwników i określ mechanikę gry dopiero potem programuj, niestety zrobiłem na odwrót
- trzymaj się planu, zrób prostą grę, jeżeli zaczniesz dodawać w trakcie dodatkowe funkcjonalność to już po tobie
Discord dla uchodźców z Gildii:
https://discord.gg/23j5vhf

Offline Sajuuk'

  • Szafarz bracki
  • *****
  • Wiadomości: 3 018
  • Total likes: 0
  • Płeć: Mężczyzna
  • z'; DROP TABLE profile; --
    • sireliah.com
Odp: Piszemy gry
« Odpowiedź #3 dnia: Styczeń 02, 2014, 09:26:00 pm »
Co do ostatniego punktu: lepiej bym tego nie ujął.


Wrzucaj Piekarzu gierę, chcę zagrać.  :eek:
"Był to chłopak tak piękny, że nie musiał się nawet myć" - T. Konwicki, "Dziura w niebie"

Offline Piekarz

Odp: Piszemy gry
« Odpowiedź #4 dnia: Styczeń 02, 2014, 09:45:06 pm »
Zostawiłem w formie rozgrzebanej. Działa wolniej niż zwykle. Grafika i muzyka "pożyczone" (na przykład feniks z HoMM 2). Nie chcę, żeby taki półprodukt zaśmiecał Internet. Zamieszczę jedynie screena.
http://postimg.org/image/ckbg9f60h/
Discord dla uchodźców z Gildii:
https://discord.gg/23j5vhf

Offline Sajuuk'

  • Szafarz bracki
  • *****
  • Wiadomości: 3 018
  • Total likes: 0
  • Płeć: Mężczyzna
  • z'; DROP TABLE profile; --
    • sireliah.com
Odp: Piszemy gry
« Odpowiedź #5 dnia: Styczeń 04, 2014, 05:57:08 pm »
Nie no, nie wygląda tak źle. Jest barwnie i trochę fantastycznie, do tego stopnia, że wygląda to na fantazję twórczą wspomaganą chemicznie.  :smile:


Btw. ile czasu pisze się coś takiego w C?
"Był to chłopak tak piękny, że nie musiał się nawet myć" - T. Konwicki, "Dziura w niebie"

Offline Piekarz

Odp: Piszemy gry
« Odpowiedź #6 dnia: Styczeń 04, 2014, 07:59:12 pm »

Pół roku różnorakich prób z wykorzystaniem API Windows.

Właściwe programowanie jak już masz doświadczenie z pisaniem - powiedzmy 2 miesiące, potem dowolna ilość czasu na wieczne przeróbki po których jest tylko gorzej. Na tym etapie uświadamiasz sobie, że trzeba było zacząć od projektowania, założyć że zrobi się jak najmniej i sztywno tego trzymać.

Niejako poza C. Szukanie grafik po necie i przerabianie. Dodatkowy miesiąc. Na tym etapie dochodzisz do wniosku, że bez talentu graficznego to wszystko nie ma sensu. Muzykę i efekty pożyczyłem z innych gier/netu więc tutaj było szybko. :biggrin: Nauka API do dźwięku (xact3) była bardzo ciężka.
« Ostatnia zmiana: Styczeń 04, 2014, 08:15:15 pm wysłana przez Piekarz »
Discord dla uchodźców z Gildii:
https://discord.gg/23j5vhf

Offline Sajuuk'

  • Szafarz bracki
  • *****
  • Wiadomości: 3 018
  • Total likes: 0
  • Płeć: Mężczyzna
  • z'; DROP TABLE profile; --
    • sireliah.com
Odp: Piszemy gry
« Odpowiedź #7 dnia: Styczeń 04, 2014, 09:07:55 pm »
Ja staram się na razie trzymać grafiki wektorowej, co znacznie mi ułatwia obsługę granic i kolizji, ale później mam zamiar przerobić wszystko na sprajty. Co do dźwięku, to python jest pod tym względem dość intuicyjny, problem jest natomiast z prawami autorskimi. Otóż zrobić grafikę to względnie prosta sprawa i tu tolerancja gracza jest spora, w przeciwieństwie niestety do muzyki. Nie wykorzystam żadnego istniejącego utworu, bo spotka mnie Słuszna Kara ze strony Właściciela Praw Autorskich, a z kolei komponowanie znośnej dla ucha muzyki np. jakiegoś ambientu, to dla wzrokowca trudna sprawa.


Swoją drogą utyskiwałeś na prędkość działania gry, a C bije pod tym względem pythona na głowę (jest do kilkunastu razy szybsze). Podeślj mi tą gierkę na maila z profilu, bo chętnie bym zobaczył jak to śmiga.
"Był to chłopak tak piękny, że nie musiał się nawet myć" - T. Konwicki, "Dziura w niebie"

Offline Piekarz

Odp: Piszemy gry
« Odpowiedź #8 dnia: Styczeń 04, 2014, 09:56:44 pm »
Ani myślę.  :razz:  Niektóre rzeczy muszą pozostać w grobie. Jeżeli chcesz mieć coś dynamicznego pod Windows naucz się DirectX. Od tego nie ma odwrotu.
Discord dla uchodźców z Gildii:
https://discord.gg/23j5vhf

Offline Ijon Tichy

  • Słynny gwiazdokrążca.
  • Moderatorzy
  • Radca bracki
  • *
  • Wiadomości: 3 730
  • Total likes: 0
  • Płeć: Mężczyzna
Odp: Piszemy gry
« Odpowiedź #9 dnia: Styczeń 05, 2014, 10:53:31 am »
Ciekawy temat. Marzy mi się zrobienie giery z dowodzeniem flotą kosmiczną, ale z realistyczną fizyką. Problem że musiałbym to robić hobbistycznie po pracy, a zdaję sobie sprawę ile zgrubsza to byłoby godzin żeby działało (a gdzie żeby było grywalne...)

Choć jak macie jeszcze jakieś rady to chętnie przeczytam. :)

Sam gry do pokazania nie mam, Sajuuk'owej - jeszcze - nie sprawdziłem, ale obiecuję rzucić okiem.
A skrin Piekarza wygląda... psychodelicznie. :) Giera bankowo miałaby klimat.
Uśmiechaj się, zawsze! ;)

Offline Sajuuk'

  • Szafarz bracki
  • *****
  • Wiadomości: 3 018
  • Total likes: 0
  • Płeć: Mężczyzna
  • z'; DROP TABLE profile; --
    • sireliah.com
Odp: Piszemy gry
« Odpowiedź #10 dnia: Styczeń 15, 2014, 09:44:48 pm »
A w czym chcesz pisać tą grę? Co do realistycznej fizyki to zapomnij. Próbowałem wchodzić w takie mrzonki i faktycznie, w grze zaszyłem wzór F=G*m1m2/r^2, który czyni niesamowite rzeczy. Planety orbitują same wokół ośrodków masy i wręcz nie można się oderwać od obserwowania niesamowitego procesu ewolucji takich układów.


Niestety powoduje to, że przy względnie małych odległościach siły są gigantyczne, co skutkuje spektakularnymi kolizjami układów planetarnych i katapultowaniu księżyców w przestrzeń kosmiczną. Nie da się tak grać, trzeba oszukiwać zmiennymi. ;p


Swoją drogą wrzucam najnowszy release gry - 0.3!


Windows:
http://sourceforge.net/projects/adsidera/files/windows/Adsidera%200.3%20Windows/Adsidera_win_03.zip/download
Źródło:
https://sourceforge.net/projects/adsidera/files/source%20%28linux%29/

Co dodałem:


- proste menu główne
- losowe generowanie układów planetarnych (niektóre mogą być niestabilne na dłuższą metę)
- ulepszony grawimetr, który pozwala wykryć duże skupiska mas i nawigować


Ściągajcie!
« Ostatnia zmiana: Styczeń 15, 2014, 09:51:42 pm wysłana przez Sajuuk' »
"Był to chłopak tak piękny, że nie musiał się nawet myć" - T. Konwicki, "Dziura w niebie"

Offline Ijon Tichy

  • Słynny gwiazdokrążca.
  • Moderatorzy
  • Radca bracki
  • *
  • Wiadomości: 3 730
  • Total likes: 0
  • Płeć: Mężczyzna
Odp: Piszemy gry
« Odpowiedź #11 dnia: Styczeń 16, 2014, 07:58:47 am »
Nie no - nie wierzę w statki kosmiczne rozmiarów (o masie) takich, że trzeba by liczyć ich oddziaływania grawitacyjne.
Chodziło mi głównie o nawigowanie w kosmosie, to jest w próżni przy "0G". (Plus jakies strzelanie na "sensowny" dystans - a nie jak zwykle jest w grach ~5 długości staku...)
Potem, jak już bym to miał, to można by mysleć nad "bitwą na orbicie" - jakaś planeta (masa) dodawała by pole grawitacyjne.
Odpowiadając wprost: C++.
Rozwijając wypowiedź: od jakiegoś czasu chodziło mi pogłowie zabranie się za pisanie czegoś, ale potem znalazłem pracę i jest mniej czasu (ale za to jakaś kasa wpada do portfela), więc odesżło to na dalszy plan. Choć niedawno kilka elementów się złożyło (między innymi ten temat) i stwiedziłem że nie ma co czekać tylko trzeba się brać, odkopałem stare zapisane linki z jakimiś tutkami / pomocami / itp do C++ i postanowiłem że przynajmniej jeden wieczór w tygodniu będę coś tworzył.
Zacznę, ofc, od czegoś prostrzego, a może kiedyś dojdę do takiej wprawy, że uznam za możliwe do wykonania w sensownym czasie i przy rozsądnym nakładzie sił czegoś ambitniejszego (może i tego mojego marzenia).
Czemu C++? To trochę znam ze studiów no i da się znaleść do tego jakąś pomoc.

Co do symulowania grawitacji:
gdzieś już się chwaliłrm na tym forum, że robiłem inżynierkę w fortranie. W programie symulowany był przelot, w 2D, sondy z napędem z Ziemi na Marsa.
Więc uznajmy że wiem iż grawitacja nie jest banalnie symulowalna.
Nie wiem jak u siebie symulujesz, ale ja używałem "RKF45", RK4 było za słabe - co zademonstrował mi promotor symulując (2D) Księżyc na orbicie Ziemi - Księżyc odleciał nie zrobiwszy nawet 1/3 obiegu.
Uśmiechaj się, zawsze! ;)

Offline Sajuuk'

  • Szafarz bracki
  • *****
  • Wiadomości: 3 018
  • Total likes: 0
  • Płeć: Mężczyzna
  • z'; DROP TABLE profile; --
    • sireliah.com
Odp: Piszemy gry
« Odpowiedź #12 dnia: Styczeń 26, 2014, 07:51:41 pm »
RK4, RKF45, srsly, man, nie mam pojęcia o czym mówisz. ; p


Ale poważnie, to fragment kodu, który odpowiada za grawitację w Adsiderze:



     
for cialo1 in ciala:
   for cialo2 in ciala:
      if cialo1 != cialo2: # Pętla leci przez wszystkie ciała w liście
 
(...)


                g = G * (cialo1.masa*cialo2.masa/(odleglosc*odleglosc)) # Newton
                roznicax = cialo1.x - cialo2.x     #Odległość między ciałami w x
      roznicay = cialo1.y - cialo2.y     #Odległość w y
    a = g / cialo1.masa                   # Przyśpieszenie
        skladnikx = a * roznicax / odleglosc
        skladniky = a * roznicay / odleglosc


(...)


       if odleglosc < 1500: # Tu ograniczam zasięg grawitacji, żeby gwiazdy nie przyciągały się nawzajem
        cialo1.predkoscx -= skladnikx     # odjęcie składnika od aktualnej prędkości
        cialo1.predkoscy -= skladniky     #


(...)
             # Poniższy fragment jest wykonywany dla każdego ciała:

     cialo.x += cialo.predkoscx / opoznienie    # położenie w x oraz w y jest powiększona o prędkość i podzielona przez *arbitralnie dodane* opóźnienie 
             cialo.y += cialo.predkoscy / opoznienie




To jest dość mało wyrafinowana metoda na emulowanie grawitacji, ale dzięki temu pozostaje w miarę prosta. Wadą jest wydajność, ponieważ przy +15 ciał pętla gry staje się tak długa, że nie da się już grać. Powodem jest oczywiście to, że skrypt kalkuluje oddziaływanie grawitacyjne każdego ciała1 z każdym ciałem2. Twoja metoda jest znacznie bardziej złożona i zgaduję, że w jakiś sposób przelicza gradient pola grawitacyjnego, tak? Strzelam w ciemno. ; p


Być może taki sposób zwolniłby cpu z konieczności powtarzania x! gdzie x to liczba ciał. Przy każdym obrocie pętli można by zbierać "snapshot" położeń wszystkich ciał i na jego podstawie wyliczyć wartość pola. Następnie wektory ciał były by kalkulowane zgodnie z miejscowymi wartościami tego pola. Nie za bardzo mam jednak pomysł jak wygląda obsługa pól w pythonie.
"Był to chłopak tak piękny, że nie musiał się nawet myć" - T. Konwicki, "Dziura w niebie"

Offline Sajuuk'

  • Szafarz bracki
  • *****
  • Wiadomości: 3 018
  • Total likes: 0
  • Płeć: Mężczyzna
  • z'; DROP TABLE profile; --
    • sireliah.com
Odp: Piszemy gry
« Odpowiedź #13 dnia: Luty 21, 2014, 10:09:34 am »

Nowy release! 0.4


Źródło (Linuks): http://sourceforge.net/projects/adsidera/files/source%20%28linux%29/adsidera_source_0.4.tar.gz/download


Windows: http://sourceforge.net/projects/adsidera/files/windows/Adsidera%200.4%20Windows/Adsidera_win_0.4.zip/download


Co się zmieniło?


- są sprajty!
- można randomizować układy gwiezdne z poziomu menu
- zmieniać rozdzielczość ( ;p )
- zakładać kolonie za pomocą lądownika (pojazd wypuszczamy enterem)
- uzupełniać paliwo na orbitach planet


Zapraszam do testowania.
"Był to chłopak tak piękny, że nie musiał się nawet myć" - T. Konwicki, "Dziura w niebie"

Offline Beczka

Odp: Piszemy gry
« Odpowiedź #14 dnia: Marzec 28, 2014, 09:24:20 pm »
Bardzo fajny projekt, już się  biorę za testowanie. :biggrin: