2014-07-03 3 views
-2

Comment puis-je créer un tableau de taille 5 complet avec des structures dynamiques de manière à pouvoir supprimer l'élément tableau [2] par exemple sans détruire le tableau [4]?C++ tableau complet avec structures dynamiques

Struct Bullet 
{ 
int x, y, width, height, velocity; 
}; 

Struct Shooting 
{ 
Bullet charger[MAX_SHOT]; 
Bullet *shoot; 
}; 

int main() 
{ 
for(int i = 0; i<MAX_SHOT; i++) 
{ 
shoot = new Bullet; 
charger[i] = shoot; 
} 

Ce que je veux est une façon où, par exemple quand une balle frappe quelque chose ou en va je pouvais détruire mais pas détruire le chargeur. Merci.

+1

Oui, honnêtement, votre question n'est pas claire et assez approximative. Le code que vous avez n'a pas beaucoup de sens non plus. J'offre des conseils décents, mais je regarde votre code de plus près et il ne compilerait pas du tout. Si vous voulez poser cette question, je vous suggère fortement de reformuler votre question et de passer plus de temps à réfléchir au problème et à ce que vous voulez vraiment résoudre à un niveau supérieur (vous ne semblez pas comprendre le code assez bien pour décrire d'une manière réalisable.) – M2tM

Répondre

0
/* 
    Your friends here are vector, remove_if, and erase. 
*/ 

#include<vector> // where vector lives. 
#include<algorithm> // where remove_if lives. 

using std::vector; 
using std::remove_if; 

struct Bullet 
{ 
    int x, y, velocity; 
    // Note: I left out width and height because I did not use them at all. 
}; 

struct Ship 
{ 
    int x, y, velocity; 
}; 

int const max_shots_in_air= 10; 
vector<Bullet> shots_in_air; 

// I'm just using a fixed-place Ship as a place to get the starting x and y for each Bullet. 
Ship ship{10,10,0}; 
int const max_bullet_height= 100; 
int const bullet_velocity= 5; 

void fire_shot() 
{ 
    if(shots_in_air.size() < max_shots_in_air) 
    { 
     Bullet new_bullet{ship.x, ship.y, bullet_velocity}; 
     shots_in_air.push_back(new_bullet); 
    } 
} 

void move_bullets() 
{ 
    //First move all the bullets. 
    for(auto& current_bullet : shots_in_air) 
    { 
     current_bullet.y+= current_bullet.velocity; 
    } 
    //Next check for bullets that need removal 
    shots_in_air.erase(remove_if(shots_in_air.begin() 
      , shots_in_air.end() 
      , [] (Bullet const& b) 
      {return b.y > max_bullet_height;})) 
     ; 
} 


void game_loop() 
{ 
    bool in_game= true; 
    while(in_game) 
    { 
     fire_shot(); 
     move_bullets(); 
     // do whatever else 
    } 
} 


int main() 
{ 
    game_loop(); 
}