Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

tworzenie pojemników

Ostatnio zmodyfikowano 2015-07-16 15:37
Autor Wiadomość
aaadam
Temat założony przez niniejszego użytkownika
tworzenie pojemników
» 2015-07-11 16:32:34
Witam:)
Więc mam dylemat,tworzę grę typu space invaders, jeżeli mam kilka rodzajów obiektu enemy np. :
 
C/C++
class enemy
{
    float x, y;
    int hp;
   
    float r;
public:
    void move();
    enemy( int X, int Y, int HP, int type );
    enemy( void );
    ~enemy( void );
};
to lepiej je trzymać wszystkie obiekty typu enemy w pojedyńczym pojemniku np vektorze i tworzyć bardziej skomplikowane funkcje do obsługi
np
C/C++
move()
{
    if( rodzaj enemy == 1 )
    //obsluga
    else if( rodzaj enemy == 2 )
    obsluga
    else if( rodzaj enemy == 3 )
    obsluga
    else if( rodzaj enemy == 4 )
    obsluga
    else if( rodzaj enemy == 5 )
    obsluga
    .
    .
    .
         }

czy tworzyć osobne pojemniki np vektor_enemy_type1,vektor_enemy_type2,vektor_enemy_type3
C/C++
move()
{
    //
}
P-134572
notabigthreat
» 2015-07-11 18:03:51
http://cpp0x.pl/kursy​/Programowanie-obiektowe-C++​/Polimorfizm/Dziedziczenie/494
http://cpp0x.pl/kursy​/Programowanie-obiektowe-C++​/Polimorfizm/Metody-wirtualne​/495
http://miroslawzelent.pl​/kurs-obiektowy-c++​/dziedziczenie-klasy-pochodne/
http://miroslawzelent.pl​/kurs-obiektowy-c++​/funkcje-wirtualne-polimorfizm/

Odziedzicz z klasy od przeciwników kilka klas, reprezentujących różne ich typy. Zrób jeden wektor wskaźników (albo unique_ptr itp. - byle nie samych obiektów) na klasę podstawową i wywołuj wirtualną funkcję od poruszania się.
P-134573
pekfos
» 2015-07-12 12:38:03
czy tworzyć osobne pojemniki np vektor_enemy_type1,vektor_enemy_type2,vektor_enemy_type3
Od tego są szablony.
P-134588
aaadam
Temat założony przez niniejszego użytkownika
» 2015-07-15 00:00:44
dzięki za pomoc zapomniałem o metodach virtualnych:)
jeszcze jedna sprawa:
jak np. mam EnemyTyp1,EnemyTyp2,EnemyTyp3 i trzymam je w jednym wektorze a chcę losować obiekty tylko z określonego typu np tylko EnemyTyp1. Bo ten Typ wystrzeliwuje regularnie co sekundę pocisk w stronę playera ale obiekty EnemyTyp2 i 3 mają inne zachowanie i 'strzelają' inaczej, mogę zapętlać losowanie aż w końcu trafię odpowieni typ ale czy to ma sens?
P-134679
notabigthreat
» 2015-07-15 19:10:26
Troche kodu? A ta sekunde odmierzasz w klasie czy na zewnatrz? Bo (wlasciwie bez kodu trudno stwierdzic, tak tylko glosno mysle) moglbys napisac metode (tez raczej virtual) dzialajaca tak, ze obiekt sam sprawdza czas i strzela lub nie. Potrzebnych byloby mniej manipulacji.
P-134719
aaadam
Temat założony przez niniejszego użytkownika
» 2015-07-15 21:09:45
sam nie wiem jak do tego problemu dobrze podejść więc nie mam zaimplementowanego tego jeszcze postaram się to wyjaśnić :

mam klasę, służy ona do dziedziczenia
C/C++
#pragma once
class basic_part_model
{
    //
public:
    //
    float x, y;
    int hp;
    virtual void move() = 0;
    basic_part_model( void );
   
    ~basic_part_model( void );
};
 
C/C++
enemy.h

#pragma once
#include <ctime>
#include "basic_part_model.h"
#include <math.h>

class enemy
    : public basic_part_model
{
   
   
    int BlueMovementStatus;
    float r, kat;
   
public:
    enum e_EnemyType { EnemyType_RedStandard, EnemyType_None, EnemyType_RedSinMovement, EnemyType_Blue };
    int i_Enemy_Type_Status;
    static int EnemyNextDisp;
    static int EnemyShootCurent;
    clock_t EnemyShootTime;
    int getHp();
    void setHp( int );
    int getX();
    int getY();
    void setX( int );
    void setY( int );
    void move();
    enemy( int X, int Y, int HP, int Status );
    enemy( void );
    ~enemy( void );
};

enemy.cpp

C/C++
#include "enemy.h"

int enemy::EnemyNextDisp = 0;
int enemy::EnemyShootCurent = 0;
enemy::enemy( int XX, int YY, int HP, int SStatus )
{
    this->BlueMovementStatus = 0;
    this->EnemyShootTime = clock() + 1 * CLOCKS_PER_SEC;
    this->x = XX;
    this->y = YY;
    this->hp = HP;
    this->kat = 0;
    this->i_Enemy_Type_Status = SStatus;
}

enemy::enemy( void )
{
   
}

enemy::~enemy( void )
{
}
int enemy::getHp()
{
    return this->hp;
}
int enemy::getX()
{
    return this->x;
}
int enemy::getY()
{
    return this->y;
}
void enemy::setX( int XX )
{
    this->x = XX;
}
void enemy::setY( int YY )
{
    this->x = YY;
}
void enemy::move()
{
    ////player.getX() + r * sin(kat);
    kat += 0.2;
    if( kat == 10 ) kat = 0;
   
    if( this->i_Enemy_Type_Status == this->EnemyType_RedSinMovement )
         this->y =( this->y + 10 * cos( kat ) );
    else if( this->i_Enemy_Type_Status == this->EnemyType_Blue )
    {
        if( this->BlueMovementStatus++< 50 )
             x -= 2;
        else if( this->BlueMovementStatus++> 50 && this->BlueMovementStatus++< 300 )
            ;
        else
             x -= 2;
       
    }
    else if( this->i_Enemy_Type_Status == this->EnemyType_RedStandard )
         this->y =( - 0.000307857421019121 * pow( x, 2 ) ) -( 0.016297215892986 * pow( x, 1 ) ) +( 404.995899664151 * pow( x, 0 ) );
    else
         this->y =( 0.000307857421019121 * pow( x, 2 ) ) -( 0.216297215892986 * pow( x, 1 ) ) +( 174.995899664151 * pow( x, 0 ) );
    //this->y=this->y+10*cos(kat);
   
   
    //this->y=(-0.000307857421019121*pow(x,2))-(0.216297215892986*pow(x,1))+(174.995899664151*pow(x,0)); cos tam
    x -= 2;
    //this->x=this->x+10*sin(kat);
    //this->x-=1;
}


wydaje mi się że obiekty typu enemy, bullet, missle powinny mieścić się  w jednym kontenerze np wektor
jak bym zrobił vecotr_enemy_typ1,vecotr_enemy_typ2,vecotr_enemy_typ3 to nie ma tematu robie kilka forów więcej do obsługi tych wektorów i nie ma problemu ale takie podejscie chyba nie jest dobre.
z tym, że enemy_typ1,enemy_typ2,enemy_typ3 różnią się od siebie zachowaniem, i z pośród istniejących na ekranie obiektów
chcę wybierać losowo z enemy_typ1 ale te wszystikie 3 typy chcę zawierać w jednym kontenerze np. wektorze

vector <enemy> v_enemy;

przykladowy vector v_enemy : [typ1,typ3,typ1,typ2,typ1,typ3,typ2]
mogę zliczać do tablicy intów które typy odpowiadają typowi 1   i mieć tablicę np  [0,2,4]
i potem do tej tablicy się odoływać dobre jest to podejście ?
lub dodać zmienną np int type; i odwoływać się poprzez składnik klasy i tworzyć tablicę do lozsowania którą opisałem wyżej czyli [0,2,4]
sama funkcja mmove z pliku enemy.cpp zostanie zmieniona to stare podejscie bez dziedziczenia
P-134722
michal11
» 2015-07-16 08:16:40
Ale po co chcesz losować obiekty określonego typu ?
P-134733
aaadam
Temat założony przez niniejszego użytkownika
» 2015-07-16 10:40:10
każdy rodzaj zachowuje się trochę inaczej od pozostałych, i chcę rozróżnić strzelanie obiektów bo jak bym losował ze wszystkich to czasami czerwony enemy by strzelał jak niebieski a tak ma nie być
P-134735
« 1 » 2
  Strona 1 z 2 Następna strona