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

Offline stecboss

  • Użytkownik

# Sierpień 30, 2010, 16:23:46
Dziękuję mar-ek1 i innym za pomoc :) Napewno skorzystam z Waszych rad, a szczególnie tej z tablicą obiektów Cshots.
Teraz jak już coś tam umiem z obiektowości sam widzę, że można więcej rzeczy "upchnąć" do klas i dzięki temu main() jest bardziej czytelny. Idea stworzenia gry powstała z myślą o nauce obiektowości. Równorzędnie do pisania programu czytam symfonię Grębosza, więc w miarę czasu klasy będą ulepszane tak aby przypominały rzeczywistośc :P
Dzięki za rady  :)
P.S. Jak zobaczycie, że coś źle robię to krytykujcie :P

Edit: jest już wersja 1.03 http://stecboss.blogspot.com/
« Ostatnia zmiana: Wrzesień 02, 2010, 19:34:26 wysłana przez stecboss »

Offline Mr. Spam

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

Offline stecboss

  • Użytkownik

# Wrzesień 06, 2010, 15:29:51
Jest już nowa wersja 1.04
Dodałem:
- kolizję pocisków z 4 rodzaji broni
- aktualny stan amunicji
- paski przedstawiające stan amunicji
- kolizję miotacza ognia z wrogimi pociskami po to aby umożliwić jakąś obrojnę robocikowi (inne pociski nie kolidują z wrogimi)
Oczywiście przy wystrzale z każdej broni jest inny dźwięk, inne zachowanie pocisków...
Narazie nie miałem czasu aby przerobić kod jak radziliście ale niedługo się zmobilizuję  :)

oto screen z gry:


Gra wraz z kodem źródłowym, opisami klas, funkcji i ogólnie całej gry jest do obejrzenia i pobrania z mojego bloga
http://stecboss.blogspot.com/
« Ostatnia zmiana: Wrzesień 06, 2010, 15:31:46 wysłana przez stecboss »

Offline stecboss

  • Użytkownik

# Wrzesień 17, 2010, 11:48:58
Praca nad projektem trochę zwolniła lecz cały czas trwa oto efekty:
do tej pory zrobiłem klasę bazową wroga i z niej dziedziczymy narazie(będzie ich kilka rodzajów) 2 wrogów

-ruchy wrogiego statku easy: statek opada w dół aż wyjdzie za planszę lub zostanie zestrzelony, wtedy pojawia się znowu u samej góry i znowu opada...



-ruchy wrogiego statku medium: statek opada w dół, jednocześnie poruszając się w lewo lub prawo zależnie od wartości zmiennej bool, aż wyjdzie za planszę lub zostanie zestrzelony, wtedy pojawia się znowu u samej góry i znowu opada...



Nie zamieszczam kodu bo by się zrobił mały bałagan do tego jest mój blog http://stecboss.blogspot.com/ gdzie jest wszystko zamieszczone i opisane. Oczywiście jak skończę kodowanie to do odpowiedniego statku dobiorę odpowiednią grafikę, narazie do testowania ludzik ;p
« Ostatnia zmiana: Wrzesień 17, 2010, 11:50:46 wysłana przez stecboss »

Offline Barthap

  • Użytkownik
    • Mój blog

# Wrzesień 17, 2010, 16:04:46
Dobra robota! Może wyjść z tego niezła gra, dodatkowy + za udostępnianie kodu i bieżące postępy na blogu ;)

Offline Avaj

  • Użytkownik

# Wrzesień 17, 2010, 17:01:56
btw, zamiast kombinować z przestawianiem boola nie lepiej dać "statek.X = polowa_ekranu + sin(timer)*polowa_ekranu"? wtedy będzie też taki fajny efekt że przyśpiesza i hamuje ;]

Offline Barthap

  • Użytkownik
    • Mój blog

# Wrzesień 17, 2010, 17:04:11
@up: ten efekt to raczej do poziomu hard czy difficult jak kto woli. Chyba że na trudny poziom masz lepszy pomysł.

Offline Xirdus

  • Redaktor

# Wrzesień 17, 2010, 17:09:06
btw, zamiast kombinować z przestawianiem boola nie lepiej dać "statek.X = polowa_ekranu + sin(timer)*polowa_ekranu"? wtedy będzie też taki fajny efekt że przyśpiesza i hamuje ;]
W invadersach raczej się zwyczajnie przeciwnicy odbijają; jakby zwalniali i przyśpieszali to gra byłaby za łatwa (kampienie z brzegu)

Offline stecboss

  • Użytkownik

# Wrzesień 18, 2010, 11:22:05
Zaczynając prace nad gierką miałem problemy ze znalezieniem kodów źródłowych z innych gierek i nie miałem się na czym wzorować... Według mnie taka gierka nie ma żadnych szans na rynku komercyjnym, więc bezsensowne byłoby ukrywanie kodu i zamieszczanie tylko pliku .exe. Chcę się podzielić z innymi użytkownikami kodem, swoimi przemyśleniami z dwóch powodów:
- zawsze ktoś mi doradzi na blogu jak można było to zrobić inaczej i lepiej pod względem obiektowości (po to powstał blog)
- i zapewne jak ktoś będzie robił podobną grę może sobie podpatrzeć jak moja gierka powstawała od podstaw

P.S. Avaj dzięki za pomysł tylko jeszcze nie piłem kawy i do końca nie wiem o co w tym chodzi  "polowa_ekranu" ?
statek.X = polowa_ekranu + sin(timer)*polowa_ekranu

Offline Avaj

  • Użytkownik

# Wrzesień 18, 2010, 11:45:17
w sensie połowa rozdzielczości ekranu ;] jak masz 1024x768 to polowa_ekranu = 512, bo sinus zwraca od -1 do 1, więc polowa_ekranu + sin() * polowa_ekranu zwroci od 0 do 1024

Offline stecboss

  • Użytkownik

# Wrzesień 28, 2010, 13:33:42
-ruchy wrogiego statku hard:
-statek opada w dół, jednocześnie poruszając się w prawo. Jak dojdzie do prawej krawędzi to "teleportuje się" na tej samej wysokości ale z lewej strony ekranu aż wydzie poza dolną część ekranu.


-ruchy wrogiego statku boss1:
-statek zwany matką lub bossem porusza się w podobnie jak medium ale nie opada, a na dodatek strzela 5 pociskami na raz i ma bardzo dużo żyć.


Dodałem też klasy odpowiedzialne za losowe wypadanie amunicji po trafieniu odpowiedziego wroga (z każdego wroga wypada inna amunicja). Zapewne dojdzie jeszcze jakiś wróg veryhard ale to w przyszłości :P

Narazie nie umieszczam BMP obrazujących poszczególne obiekty jak wrogowie, boss, bonusy itp, ponieważ cały czas szukam takowych bitmap. Jeżeli znacie stronki z darmowymi bitmapami związanymi z kosmicznymi statkami to zapodajcie linka :)
jakby kogoś interesowały szczegóły to od tego jest blog http://stecboss.blogspot.com/

Offline Yuko

  • Użytkownik

# Wrzesień 28, 2010, 17:42:15
No coraz lepiej i lepiej trzymam kciuki :)

Offline Barthap

  • Użytkownik
    • Mój blog

# Wrzesień 29, 2010, 20:57:28
No muszę po raz kolejny przyznać, że świetnie Ci idzie. Na podstawie Twojej gierki wpadłem na pomysł stworzenia podobnej, może też pójdę Twoim śladem...

Offline stecboss

  • Użytkownik

# Październik 03, 2010, 14:45:12
Od poprzedniego posta dodałem 2 klasy bonusów w postaci przyśpieszacza i apteczki z życiami.
Teraz kolej na etapy w grze. Odpowiadać za to będzie ta funkcja wywoływana oczywiście w main:

void etapy(int pkt)
{
   if(pkt<=35) { etap=1; }
   else if( (pkt>36) && (pkt<=60) ) { etap=2; }
   else if( (pkt>61) && (pkt<=120) ) { etap=3; }
  //itd

   switch(etap)
   {

      case 1:
      max_easy=3;
      max_medium=0;
      max_hard=0;
      max_vhard=0;
      max_b1=0;
      break;

      case 2:
      max_easy=1;
      max_medium=2;
      max_hard=0;
      max_vhard=0;
      max_b1=0;
      break;

   //itd
   }


Oto wyjaśnienie tajemniczych nazw

 case 1: 
 max_easy=3; - tylu wrogów Cwrog_easy wystąpi w 1 etapie czyli 3
 max_medium=0; - tylu wrogów Cwrog_medium wystąpi w 1 etapie czyli 0
 max_hard=0; - tylu wrogów Cwrog_hard wystąpi w 1 etapie
 max_vhard=0; - tylu wrogów Cwrog_vhard wystąpi w 1 etapie (narazie go nie ma ale trwwaja prace nad wymyśleniem ruchów dla niego)
 max_b1=0; - tylu bossów Cboss1 wystąpi w 1 etapie

Po nadaniu wartości w poszczególnym etapie dla:
np. max_easy w 1 etapie wystąpi 3 wrogów, bo pętla wykona się 3 razy.
for(int e=0; e<max_easy; e++)
{}


max_medium w 1 etapie wystąpi 0 wrogów, bo pętla wykona się 0 razy.
for(int m=0; m<max_medium; m++)
{}

W każdej pętli będą funkcje z kolizjami, animacją dla odpowiednich wrogów. Postaram sie w ciągu 2 tyg doprowadzić wszystko do ładu i składu :P i wypuścić pierwsze demko gry :)
Jakby kogoś interesowało więcej szczegółów to od tego jest blog http://stecboss.blogspot.com/
« Ostatnia zmiana: Październik 05, 2010, 14:01:07 wysłana przez stecboss »

Offline Xirdus

  • Redaktor

# Październik 03, 2010, 18:09:33
OK, ale po co nam tu dajesz ten kod? I czemu nie zamykasz go w tagi code?

W ogóle coś mi śmierdzą wyrażenia etap=

Offline stecboss

  • Użytkownik

# Październik 08, 2010, 21:14:57
W grze dodałem ruchome tło i pokazałem kawałek kodu odpowiedzialny za wroga_easy.
Jak na mój gust trochę za dużo kolizji w tej funkcji i pewnie można to upchać do klas. Naskrobałem trochę tego kodu i wrzuciłem na bloga. Miało być pięknie obiektowo ale nie do końca jest. Jak macie jakiś sprytny pomysł jak "odchudzić" main z tych kolizji to piszcie. W następnym poście chcę już umieścić wersję demo, więc jak macie jakieś uwagi w jakiejkolwiek sprawie to proszę o wyrażenie opini, które napewno wezmę pod uwagę :)
Kod i więcej mojego kazania na blogu http://stecboss.blogspot.com/

Funkcja poruszająca bitampą działa w taki sposób:
Po każdym obiegu pętli gry wycina "pasek" z góry ekranu, na jego miejsce przesuwa całą bitmapę czyli o 1 piksel do góry, po przesunięciu bitmapy o 1 piksel w górę zostaje nam pusty  pasek u samego dołu i owa funkcja wstawia wycięty pasek na sam dół ekranu.