Autor Wątek: [done] Space destroyer  (Przeczytany 6336 razy)

Offline stecboss

  • Użytkownik

# Sierpień 15, 2010, 21:10:23
Jestem początkującym programistą i zamierzam stworzyć grę 2D w C++ w oparciu o bibliotekę Allegro. Może to nie jest coś bardzo ambitnego, lecz dla mnie praktycznie początkującego (programuję strukturalnie w C++ ok. 6 miesięcy i uczę sięobiektowości) to małe wyzwanie :)
Gra ma będzie miałą nazwę: "Space Destroyer".
Gra będzie podobna do gry Chicken Invaders. Z góry będą spadały w naszą stronę wrogie statki, a naszym zadaniem będzie strzelanie do nich i przetrwanie jak najdłużej.
Gra będzie podzielona na etapy(zobaczymy ile ich będzie)
-będą 4 rodzaje broni (jak gra się spodoba i będą jakieś propozycje to będzie więcej broni)
-kilka rodzajów wrogich statków (będą się od siebie różniły wytrzymałością, trajektorią lotu i... zobaczymy czym jeszcze :p)
-ważnym elementem w grze będzie "wyskakująca" amunicja po zestrzeleniu statku, którą trzeba będzie zbierać aby móc jak najdłużej przetrwać, ponieważ amunicja będzie ograniczona i trzeba będzie ją uzupełniać.
-planuję zrobić bonusy: apteczki z życiami, przyśpieszacze ruchu statku i... zobaczymy w trakcie pracy nad projektem.
-no i... tutaj zostawiam miejsce na Wasze propozycje, które rozważę i być może wdrożę do projektu :)

oto "zalążek gry" ver.1.00

Polecam  mojego bloga gdzie można pobrać kod źródłowy i wszystkie pliki potrzebne do uruchomienia gry. Na blogu opisuję co robię po kolei i mam nadzieję, że komuś kto także bawi się z allegro pomogę :) Zachęcam do komentowania i własnych sugestii na forum jak i blogu

http://stecboss.blogspot.com/
« Ostatnia zmiana: Listopad 14, 2010, 17:00:54 wysłana przez stecboss »

Offline Mr. Spam

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

Offline Liosan

  • Redaktor

# Sierpień 15, 2010, 23:48:58
Wiesz czym zrobiłeś na mnie wrażenie? Tym, że jesteś początkujący, a wybrałeś dobry projekt na początek :) Nie żadne MMO, RPG, czy whatever. Skończona gra tej klasy jest znacznie cenniejsza (dla Ciebie) niż projekt zaawansowany, ale rozgrzebany. I w dodatku w kilku punktach spisałeś to, co zamierzasz zrobić :) Generalnie, trzymam kciuki :)

Jakbyś potrzebował darmowych grafik w klimacie strzelamy-w-kosmosie, może ta strona pomoże: http://www.lostgarden.com/2007/04/free-game-graphics-tyrian-ships-and.html

Liosan

Offline Super Mario

  • Użytkownik

# Sierpień 16, 2010, 00:13:40
Trzymam kciuki jak wyzej ;).
Zapisuje sie do obserwatorow i postaram sie byc na biezaco ;).

Powodzenia !

Offline Oti

  • Użytkownik

# Sierpień 16, 2010, 01:24:51
Również trzymam kciuki. Zrobiłem podobną gierkę na jedno compo(http://www.warsztat.gd/projects.php?x=view&id=537), jakbyś chciał, to mogę podrzucić kod, lub pomóc, napisz na gg(3957147). Pozdrawiam.

Offline stecboss

  • Użytkownik

# Sierpień 24, 2010, 12:38:16
Narazie zrobiłem
-poruszanie się robocikiem
-strzelanie 1 rodzajem broni
-"coś" spada z góry, strzela tracąc nam życia i możemy to zestrzelić (narazie do testowania)
-jakiś interfejs gry z poziomem żyć i robocikiem pokazującym swe zniszczenia
- i jakieś dźwięki w tle :P
oto screen z "gry"



Kod źródłowy oraz wszystkie pliki potrzebne do odpalenia gry wraz z biblioteczką allegro, a także opis tworzenia gry od podstaw do pobrania na moim blogu http://stecboss.blogspot.com/
« Ostatnia zmiana: Sierpień 24, 2010, 17:35:19 wysłana przez stecboss »

Offline Barthap

  • Użytkownik
    • Mój blog

# Sierpień 24, 2010, 13:09:12
hmm niech zgadnę, ten zalążek gry jest częściowo zrobiony w allegro 4 na podstawie tej strony: http://www.easykoder.vot.pl/
Przykład: http://www.easykoder.vot.pl/get/artykulyallegro/kolizja.rar

Ale trzymam kciuki jak inni, jeśli Ci się uda, to może być ciekawa gierka.

Offline stecboss

  • Użytkownik

# Sierpień 24, 2010, 14:22:39
tak kolizję wziąłem z tej strony :) Próbowałem sam coś wykombinować ale nie do końca wychodziło, a ta kolizja się sprawdza :)

Offline stecboss

  • Użytkownik

# Sierpień 29, 2010, 13:05:18
Pojawiła się wersja 1.02
dodałem 4 rodzaje broni: narazie nie zrobiłem kolizji ale niedługo dorobię...
               

W grze bronie zmieniamy klawiszami na klawiaturze:
1-bazooka
2-karabin maszynowy
3-laser
4-miotacz ognia
i strzelamy spacją.

To by było na tyle. Wszystko opisałem na moim blogu gdzie jest do ściągnięcia kod źródłowy i inne pliki potrzebne do uruchomienia gry.
http://stecboss.blogspot.com/
Jeżeli macie jakieś spostrzeżenia, uwagi, pomysły to piszcie :)
Na tym etapie gierka wygląda tak:

Offline mar-ek1

  • Użytkownik
    • Wiejskie życie

# Sierpień 29, 2010, 20:40:17
Zerknąłem na twojego bloga i na początek proponuję zmienić ten fragment:
Cshots strzal_bazooka;
Cshots strzal_machinegun;
Cshots strzal_laser;
Cshots strzal_flamethrower;
na taki:
Cshots weapon[4]; //wtedy np. weapon[0] to bazooka, weapon[1] to machinegun itd.I wtedy bardzo upraszcza ci się kod odpowiedzialny za strzał (sprawdzanie czy naciśnięta spacja):
if(key[KEY_SPACE])
{
   if((weapon[wybranaBron].pozpoc_y<0) || (weapon[wybranaBron].pozpoc_y == 0))
   {
       weapon[wybranaBron].strzelaniee(ludek.pozs_x,ludek.pozs_y);
       play_sample(weapon[wybranaBron].dzwiek,200,200,1000,0);  //tylko musisz przenieść sample do klasy broni
   }
}
I jest mniej pisania przy dodawaniu nowej broni.
//=========================================
Zainteresował mnie ten fragment z bloga:
Cytuj
Klasa sama w sobie nic nie robi ustawia tylko początkową pozycję pocisku (x i y) dopiero w main zabawa się zaczyna :P
Jeśli to oznasza, że kod odpowiedzialny za poruszanie pocisków masz w main() to radzę przenieść go przenieść do jakiejś klasy (chociażby do Cshots), a w pętli głównej dać tylko pociski.update(), ale to temat na dłuższego posta, a takich nie lubię pisać :P, może zrozumiesz o co mi chodzi.

To tyle na początek, kiedy przeczytam bloga do końca to może jeszcze coś napiszę. Gdybyś miał jakieś wątpliwości dot. moich wskazówek to pisz tutaj albo na priv.

EDIT:
Pobrałem paczkę z kodem i oto moje uwagi:
- wszystkie klasy dałeś do jednego pliku, radzę jednak trzymać się zasady 1 klasa = 1 plik (no dwa bo .h i .cpp), uwierz to cholernie ułatwia organizację kodu i ewentualne poprawki

- wskaźniki na bitmapy przenieś do klas

- na jedną bitmapę dawaj kilka obrazków, np zamiast czegoś takiego:
Statek_HP100=load_bmp("BMP/Statek_HP/Statek_HP100.bmp",default_palette);
     Statek_HP90=load_bmp("BMP/Statek_HP/Statek_HP90.bmp",default_palette);
     Statek_HP80=load_bmp("BMP/Statek_HP/Statek_HP80.bmp",default_palette);
     Statek_HP70=load_bmp("BMP/Statek_HP/Statek_HP70.bmp",default_palette);
     Statek_HP60=load_bmp("BMP/Statek_HP/Statek_HP60.bmp",default_palette);
     Statek_HP50=load_bmp("BMP/Statek_HP/Statek_HP50.bmp",default_palette);
     Statek_HP40=load_bmp("BMP/Statek_HP/Statek_HP40.bmp",default_palette);
     Statek_HP30=load_bmp("BMP/Statek_HP/Statek_HP30.bmp",default_palette);
     Statek_HP20=load_bmp("BMP/Statek_HP/Statek_HP20.bmp",default_palette);
     Statek_HP10=load_bmp("BMP/Statek_HP/Statek_HP10.bmp",default_palette);
     Statek_HP0=load_bmp("BMP/Statek_HP/Statek_HP0.bmp",default_palette);
Będziesz miał:
Statek_HP=load_bmp("BMP/Statek_HP.bmp",default_pallete);I po prostu zamiast rysować całą bitmapę rysujesz odpowiedni kawałek (dalej kombinuj jak to rozegrać ;) )

- Jak najwięcej rzeczy pakuj do klas, a jak najmniej rób zmiennych globalnych, podpowiem, że cały twój kod da się upchnąć do klas (no może nie trzeba tego robić z pętlą główną)

- koniecznie dodaj do klas postaci, broni itd. funkcje rysujące, wtedy wystarczy, że masz w pętli głównej np. statek.draw(); i jeśli coś chcesz w niej zmienić to robisz to w pliku klasy i nie rozwalasz kodu reszty gry to samo tyczy się funkcji wczytującej bitmapę itd. A jeśli nie chcesz tego przepisywać kilka razy (bo w gruncie rzeczy to niektóre funkcje będą się powtarzać w kilku klasach) to radzę poczytać o dziedziczeniu, ale tu już trzeba chwilę pomyśleć nad rozplanowaniem struktury klas żeby się nie pogubić więc na początek może nie zagłębiaj się w to.

EDIT2: Proponuję zrobić poruszanie postacią za pomocą myszki (np. postac.x = mouse.x) i strzelanie lewym przyciskiem myszy. Jeśli projekt się rozwinie to możesz zrobić coś w rodzaju magazynków tak żeby trzeba było przeładować broń co określoną ilość strzałów (można to dać pod prawy przycisk mychy). Zmiana broni może zostać pod cyferkami, ale radzę dodać przyciski następna/poprzednia broń np. pod klawiszami Q i W.
Heh ale się rozpisałem :D

Jeśli czegoś nie zrozumiałeś to prawdopodobnie moja wina, bo mam spore problemy z przekazywaniem informacji :P

Życzę powodzenie przy projekcie :)

PS: To pewnie nie koniec moich wskazówek więc przygotuj się na kolejną lawinę tekstu ^^ bo czuję wewnętrzną potrzebę pomagania i lubię to ;)
« Ostatnia zmiana: Marzec 27, 2014, 16:09:23 wysłana przez mar-ek1 »

Offline Avaj

  • Użytkownik

# Sierpień 30, 2010, 11:34:07
@mar-ek1: Dziedziczenia nie używasz po to, żeby "nie pisać kilka razy kodu". Lepiej wtedy zwykłą kompozycję zastosować.

Offline ANtY

  • With fury and fire
  • Użytkownik
    • ANtY

  • Zbanowany
# Sierpień 30, 2010, 12:12:21
@mar-ek1: co do jednej klasy - 2 pliki, to lepiej pozostawić każdemu dowolność, przy większych projektach masz 200 plików, myślisz, że łatwiej się po tym poruszać i jest lepsza organizacja? Lepiej się poprawia, gdy dodanie jednej rzeczy powoduje zmiany w 14 plikach zamiast w jednym?

Offline mar-ek1

  • Użytkownik
    • Wiejskie życie

# Sierpień 30, 2010, 14:37:20
@Avaj: Może teraz napiszę jeszcze większe bzdury niż wcześniej, może nie do końca rozumiem dziedziczenia (albo najzwyczajniej w świecie mylę pojęcia  :P), ale chodziło mi o to, że jeśli zrobię np. klasę CObject i w niej będzie funkcja WczytajBitmape(), a następnie będę dziedziczył po tej klasie w klasach pochodnych (CBron, CStatek, itd.) to nie będę musiał pisać tej funkcji w każdej z osobna. Ale tak jak mówiłem, mogę się na tym nie znać (może tylko mi się wydaje, że wiem o co chodzi),ale człowiek całe życie się uczy, więc proszę nie zmieszać mnie z błotem  ;)

@ANtY: Jak dojdę w projekcie do 200 plików to pewnie zmienię zdanie, ale przy np. 20 dobrze mi się pracuje. Zgodzę się, że lepiej pozostawić każdemu dowolność, w końcu to co uważam za wygodne nie musi być wygodne dla kogoś innego,i zamiast:
Cytuj
radzę jednak trzymać się zasady 1 klasa = 1 plik (no dwa bo .h i .cpp), uwierz to cholernie ułatwia organizację kodu i ewentualne poprawki
Mogłem napisać coś w stylu:
Cytuj
Uważam, że rozdzielenie klas na osobne pliki jest wygodniejsze i ułatwia mi pracę, ale nie jest to konieczne więc rób jak tobie wygodnie

Jeśli jeszcze gdzieś popełniłem błąd to wybaczcie, nikt nie jest nieomylny :) Zdarza mi się coś źle wytłumaczyć nawet jeśli wiem o co chodzi dlatego nie będę się kłócił, że tak jak piszę "jest dobrze i koniec" bo to nie zawsze prawda :D

Dzięki za poprawienie mnie

Pozdrawiam  ;D
« Ostatnia zmiana: Marzec 27, 2014, 16:06:51 wysłana przez mar-ek1 »

Offline Oti

  • Użytkownik

# Sierpień 30, 2010, 14:54:46
Lepiej się poprawia, gdy dodanie jednej rzeczy powoduje zmiany w 14 plikach zamiast w jednym?
To zależy. Nawigowanie po jednym pliku który ma kilka tysięcy linii kodu jest trudniejsze niż po 14 mniejszych.

Offline Avaj

  • Użytkownik

# Sierpień 30, 2010, 14:59:16
tzn chodzi mi o to, że takie rzeczy jak wczytywanie bitmapy i jej rysowanie lepiej przerzucić do jakiejś klasy Sprite i niech każdy statek/broń/obiekt przechowuje sobie sprite'a (wskaźnik czy kopia, nie ma praktycznie znaczenia).

Offline ANtY

  • With fury and fire
  • Użytkownik
    • ANtY

  • Zbanowany
# Sierpień 30, 2010, 15:36:32
Lepiej się poprawia, gdy dodanie jednej rzeczy powoduje zmiany w 14 plikach zamiast w jednym?
To zależy. Nawigowanie po jednym pliku który ma kilka tysięcy linii kodu jest trudniejsze niż po 14 mniejszych.
Nie mówię, że wszystko w jednym :)
ale z umiarem