2015-04-03 5 views
0
void Draw() { 
int c1; 
int x = 59; 
int y = 500; 
int temp = x; 
for (int i = 0; i < 13; ++i){ 
    for (int j = 0; j < 10; ++j){ 
     x_coordinates[i][j] = x; 
     y_coordinates[i][j] = y; 

    c1 = temp_color[i][j]; 
    DrawRectangle(x, y, 65, 25, colors[c1]); 
      x += 67; 
     } 
     x = temp; 
     y -= 28; 
} 
DrawRectangle(tempx, 0, 85, 12, colors[5]); 
DrawCircle(templx, temply, 10, colors[7]); 
    } 
    // This function will be called automatically by this frequency 1000.0/FPS 
    void Animate() { 
     //if (temply < - 10) 
     //exit(1); 
     Brick_collision(); 
     glutPostRedisplay(); // Once again call the Draw member function 
    } 
    int Brick_collision(){ 
    for (int i=0; i<13; ++i){ 
     for (int j=0; j<10; ++j){ 
      if (((templx >= x_coordinates[i][j]) && (templx <= x_coordinates[i][j] + 65)) && ((temply + 5 >= y_coordinates[i][j]) && (temply + 5 <= y_coordinates[i][j] + 35 ))){ 
       vy = -vy; 

       temp_color[i][j] = 2; 
       // x_coordinates[i][j] -= 300; 
       // y_coordinates[i][j] -= 300; 
       // I HAVE USED THESE VALUES BECAUSE NOW THE BRICK WOULD BE OUTSIDE THE SCREEN AND THE BALL WILL NOT COLLIDE WITH IT AGAIN BUT THIS DOESN'T WORK. 

       return 1; 
       } 
      } 
     } 
    } 

Я пытаюсь создать игру BrickSlayer с использованием OpenGL. В функции Draw() я рисую структуру игры: кирпичи, педаль и шар. Теперь я сохраняю координаты x и y кирпичей в двумерном массиве. И в функции Animate() я вызываю функцию Brick_collision() В которой я применил условие для обнаружения кирпичей. Когда шар сталкивается с кирпичом, я делаю его незаменимым, и я меняю его цвет на белый, а также я должен удалить его координаты из двухмерного массива, чтобы шар не обнаружил его снова. Как я могу добиться этого? Все методы, которые я использовал для удаления координат, не сработали.Удаление значений из 2D-массива в C++

+2

Что значит _remove_? Вы не можете удалить элементы из массивов с фиксированным размером. Вы имели в виду, что вам нужно сбросить эти значения? В противном случае я бы рекомендовал использовать что-то вроде 'std :: vector >'. –

+0

Убрав, я имею в виду, могу ли я изменить значение для координаты «x» и «y» конкретного кирпича в массиве. –

+1

FYI: это * не * 2D-массив, это зубчатый массив –

ответ

0

Я думаю, что ваше решение «Magic Number» может работать. Просто добавьте некоторую логику в свое обнаружение столкновения, чтобы посмотреть на это волшебное число и проигнорировать его, если это совпадение. I.E .:

int Brick_collision(){ 
    for (int i=0; i<13; ++i){ 
     for (int j=0; j<10; ++j){ 
      if (((x_coordinates[i][j] != -300) && 
       (y_coordinates[i][j] != -300) && 
       (templx >= x_coordinates[i][j]) && 
       (templx <= x_coordinates[i][j] + 65)) && 
       ((temply + 5 >= y_coordinates[i][j]) && 
       (temply + 5 <= y_coordinates[i][j] + 35))){ 

       vy = -vy; 

       temp_color[i][j] = 2; 

       // x_coordinates[i][j] -= 300; 
       // y_coordinates[i][j] -= 300; 
       // I HAVE USED THESE VALUES BECAUSE NOW THE BRICK 
       // WOULD BE OUTSIDE THE SCREEN AND THE BALL WILL NOT 
       // COLLIDE WITH IT AGAIN BUT THIS DOESN'T WORK. 

Удачи вам!

+0

Не думаю, что у вас есть мой вопрос полностью. Просто добавление этого нового условия ничего не изменит. Это просто проверит, не превышают ли значения координаты -300. –

+0

Я думал, что добавление этой проверки гарантирует, что после того, как вы установите их на -300 во время успешного столкновения. Любые последующие действия с этими координатами будут НЕИСПРАВИТЬ блок IF. Я, возможно, неправильно истолковываю, как работает эта игра, но кажется, что какая-то версия набора и проверка с помощью магического номера должны позволить вам избежать логики столкновения. –

Смежные вопросы