Estoy tratando de diseñar una clase de armas para un juego. Esta es una parte del código que he llegado con para adaptarse a mis necesidades:¿Es posible tener una matriz de diferentes objetos que provienen de la misma clase base?
class weapon {
public:
int fireRate;
int bulletDamage;
int range;
ofImage sprite;
ofImage bulletSprite;
bullet bullets[50];
int activeBullet;
public:
void fire();
};
class machineGun: public weapon {
public:
void fire();
};
class flamer: public weapon {
public:
void fire();
};
Y entonces me gustaría definir una matriz armas de este modo:
//Weapon variables
const int totalWeapons = 2;
int currentWeapon = 1;
weapon weapons[totalWeapons];
me gustaría elemento [0] para representar la clase y elemento MachineGun [1] para representar la clase flamer. ¿Estoy abordando este problema de la manera correcta? ¿Debería refactorizar esto de alguna manera? ¿Cómo logro una matriz que contenga estas dos armas diferentes?
La idea es que cuando llamo al weapons[0].fire();
obtengo una clase de MachineGun y cuando llamo al weapons[1].fire();
recibo un incendio de flamer.
Editar: Gracias por ayudar a los chicos. Tengo algunos problemas con el uso de "armas [0] = new machineGun;". Aparece el error "no puedo asignar una matriz de tamaño constante 0" cuando intento ejecutar este código.
¿Alguien ha tenido alguna idea de por qué esto no funciona? Mi código actualizado es como la siguiente:
//Weapon variables
const int totalWeapons = 2;
int currentWeapon = 1;
weapon weapons[totalWeapons];
weapons[0] = new machineGun;
weapons[1] = new flamer;
pero me da un montón de errores:
1>gameplay.cpp(49) : error C2466: cannot allocate an array of constant size 0
1>gameplay.cpp(49) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>gameplay.cpp(49) : error C2371: 'weapons' : redefinition; different basic types
1> gameplay.cpp(48) : see declaration of 'weapons'
1>gameplay.cpp(49) : error C2440: 'initializing' : cannot convert from 'machineGun *' to 'int []'
1> There are no conversions to array types, although there are conversions to references or pointers to arrays
1>gameplay.cpp(50) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>gameplay.cpp(50) : error C2369: 'weapons' : redefinition; different subscripts
1> gameplay.cpp(48) : see declaration of 'weapons'
1>gameplay.cpp(50) : error C2440: 'initializing' : cannot convert from 'flamer *' to 'int [1]'
1> There are no conversions to array types, although there are conversions to references or pointers to arrays
que he tomado otro enfoque diferente y conseguido algunos errores diferentes . Todavía estoy bastante inseguro de cómo todo esto debe unirse.
//Weapon variables
const int totalWeapons = 2;
int currentWeapon = 1;
weapon weapons[totalWeapons] = {new machineGun, new flamer};
Con errores:
1>gameplay.cpp(48) : error C2275: 'machineGun' : illegal use of this type as an expression
1> gameplay.h(36) : see declaration of 'machineGun'
1>gameplay.cpp(48) : error C2275: 'flamer' : illegal use of this type as an expression
1> gameplay.h(41) : see declaration of 'flamer'
La respuesta terminó siendo algo como esto:
//Weapon variables
const int totalWeapons = 2;
int currentWeapon = 1;
weapon *weapons[totalWeapons] = {new machineGun, new flamer};
¡Gracias a todos los que me ayudaron a entender esto!
Esto está bien si solo planeas tener un número constante de tipos de armas; entonces tendrías algo como 'weapons [0] = new machineGun; armas [1] = flamer nuevo; ' –
Has declarado una serie de armas, y tanto tu máquina como tu lanzallamas son armas. ¿Esto no funciona? – Narveson
@isbadawi, ¿puedes echar un vistazo a mi edición? Parece que no puedo hacerlo funcionar. – Sam152