2015-05-25 1 views
1

Я пытаюсь воссоздать кирпичный кластер с помощью C и портативной библиотеки Stanford (SPL). Цель моей функции initBricks - добавить 5 ROWS из кирпичей с 10 COLUMNS в каждой строке (всего 50 штук). Когда я запускаю этот код, мое окно имеет только 1 ROW из 10 кирпичей. По какой-то причине он не выведет 4 других строки. Я не вижу, где я ошибся в своем коде. Я увеличиваю координату y (0, 0 вверху слева от окна) на 40 после каждой строки.Brick-Breaker in C - увеличение строк кирпича выпуск

// number of rows of bricks 
#define ROWS 5 

// number of columns of bricks 
#define COLS 10 

// height and width of bricks 
#define BRICK_H 7.5 
#define BRICK_W 35 

// initializes window with grid of bricks 
void initBricks(GWindow window) 
{ 
    // set initial brick coordinates 
    int x_coord = 2; 
    int y_coord = 10; 

    for (int i = 0; i < ROWS; i++) 
    { 
     // Create 10 columns of bricks 
     for (int j = 0; j < COLS; j++) 
     { 
      // create a brick 
      GRect brick = newGRect(x_coord, y_coord, BRICK_W, BRICK_H); 
      setFilled(brick, true); 
      setColor(brick, "RED"); 
      add(window, brick); 

      // increment x coordinate for column spacing 
      x_coord += 40; 
     } 
     // increment y coordinate for row spacing 
     y_coord += 40; 
    } 
} 

Любая помощь была бы принята с благодарностью!

+0

Я понимаю, 'x_coord + = 40;' '(в идеале x_coord + = BRICK_W + MORTAR_T;'), но не 'y_coord + = 40;'. –

+1

Вы никогда не перезагружаете свой xcord, я подозреваю, что все кирпичи на оставшихся слоях находятся за пределами вашего порта просмотра. – RyanS

+0

@RyanS жаль, что я ответил в то же время. –

ответ

2

Вы не сбрасываете вам x_coord переменных в вашем внешнем для цикла так что в конце первого ряда, ваш x_coord 202 и где он начинает писать следующую строку, которая может быть из вашего окна. просто добавив x_coord = 2; после y_coord += 40;, должен исправить это.

for (int i = 0; i < ROWS; i++) 
    { 


     for (int j = 0; j < COLS; j++) 
     { 
      // create a brick 
      GRect brick = newGRect(x_coord, y_coord, BRICK_W, BRICK_H); 
      setFilled(brick, true); 
      setColor(brick, "RED"); 
      add(window, brick); 

      // increment x coordinate for column spacing 
      x_coord += 40; 
     } 
     // increment y coordinate for row spacing 
     y_coord += 40; 
     //reset c coordinate 
     x_coord = 2; 

    } 
+0

такая маленькая ошибка, но я не мог ее увидеть! Перерывы недооценены. спасибо @Dom высоко оценил – jakewies

2

Вам необходимо сбросить координату X для каждой строки.

for (int i = 0; i < ROWS; i++) 
{ 
    // Create 10 columns of bricks 
    int x_coord = 2;     // <---- move line down to here 
    for (int j = 0; j < COLS; j++) 
    { 
     ... 
1

Как уже упоминалось, проблема заключается в координате X. Вы можете это исправить путем перемещения X, Y расчеты в for на петлю

void initBricks(GWindow window) 
{ 
    int row, col, x, y; 

    for (y = 10, row = 0; row < ROWS; row++, y += 40) 
     for (x = 2, col = 0; col < COLS; col++, x += 40) 
     { 
      GRect brick = newGRect(x, y, BRICK_W, BRICK_H); 
      setFilled(brick, true); 
      setColor(brick, "RED"); 
      add(window, brick); 
     } 
} 
0

Вы должны инициализировать у координаты в теле внешнего цикла. Потому что каждый раз, когда вы достигаете следующей строки, координата y должна возвращать свое исходное положение.

// number of rows of bricks 
#define ROWS 5 

// number of columns of bricks 
#define COLS 10 

// height and width of bricks 
#define BRICK_H 7.5 
#define BRICK_W 35 

    // initializes window with grid of bricks 
    void initBricks(GWindow window) 
    { 
     // set initial brick coordinates 
     int x_coord = 2; 

     for (int i = 0; i < ROWS; i++) 
     { 
     int y_coord = 10; 
      // Create 10 columns of bricks 
      for (int j = 0; j < COLS; j++) 
      { 
       // create a brick 
       GRect brick = newGRect(x_coord, y_coord, BRICK_W, BRICK_H); 
       setFilled(brick, true); 
       setColor(brick, "RED"); 
       add(window, brick); 

       // increment x coordinate for column spacing 
       x_coord += 40; 
      } 
      // increment y coordinate for row spacing 
      y_coord += 40; 
     } 
    } 
+2

, это было бы наоборот. запустите x_coord внутри первого цикла for и запустите y_coord за пределами обоих циклов – jakewies

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