2012-08-13 55 views
-1

我對C++相當陌生,想知道爲什麼我的數組不斷被破壞。在破壞ammo_bank之前,它經歷了兩次for循環,儘管它在該行之前被正確賦值。然後它給我寫錯誤的錯誤腐敗而不提陣列

class bullet{ 
public: 
    int x, y, damage, speed; 
    char direction; 
}; 

bullet * ammo_bank[100]; 
void render(player avatar, riflemen enemy){ 
    bullet projectile; 
    int counter1, counter2, icurrentammo; 
    icurrentammo = current_ammo -1; 
    for (counter1 = 0; counter1 <=SCREEN_HEIGHT; counter1++){ 
     for (counter2 = 0; counter2 <=SCREEN_WIDTH; counter2++){  // corruption occurs a few times before here 
      screen[counter1][counter2] = '.'; 
     } 
    } 
    system("cls"); 
    screen [avatar.y][avatar.x] = AVATAR_SYMBOL; 
    screen [enemy.y][enemy.x] = RIFLEMEN_SYMBOL; 
    while (icurrentammo >= 0){ 
     projectile = *ammo_bank[icurrentammo];     // Writing error 
     screen[projectile.x][projectile.y] = BULLET_SYMBOL; 
     projectile.x ++; 
     icurrentammo --; 
    } 

    for (counter1 = 0; counter1 <=SCREEN_HEIGHT; counter1++){ 
     cout << endl; 
     for (counter2 = 0; counter2 <=SCREEN_WIDTH; counter2++){ 
      cout << screen[counter1][counter2]; 
     } 
    } 


void playerShoot(player avatar){ 
    ammo_bank[current_ammo] = new bullet(); // Create the MyClass here. 
    bullet projectile = *ammo_bank[current_ammo]; 
    projectile.x = avatar.x + 1; 
    projectile.y = avatar.y; 
    projectile.speed = 2; 
    projectile.direction = 'f'; 
    projectile.damage = 1; 
    *ammo_bank[current_ammo] = projectile; 
    current_ammo++; 
} 
+0

我今天買了一本書,叫做'Accelerated C++';) – 2012-08-13 21:35:11

+0

這跟什麼有關 – TheLivingForce 2012-08-13 21:44:09

+1

更新你的例子來展示你如何聲明屏幕。 – Les 2012-08-13 21:53:40

回答

2

如何聲明screen [] []。如果它是屏幕[SCREEN_HEIGHT] [SCREEN_WIDTH],那麼你的問題是你正在使用< =當你只使用<。

+3

此外,你可能會想'screen [projectile.x] [projectile.y] = BULLET_SYMBOL'檢查'projectile.x = 0 && projectile.y = 0' – MartyE 2012-08-13 21:42:01

+0

這有效,但它使這些奇怪的ASCII字符在底部如果我這樣做 – TheLivingForce 2012-08-13 21:47:51

+1

如何定義屏幕? – 2012-08-13 21:50:09