2013-12-14 7 views
0

Я пытаюсь сделать программу, которая делает картезианский самолет; вы вводите основную информацию о линии, и он рисует линию.Картезианская плоская бесконечная линия?

Слишком плохо, что он не работает. В основном это цикл, который помещает X символ в каждой точке линии:

for(int x=0;x<MAP_HEIGHT;x++) 
{ 
    piano.griglia[x][a*x+b]='X'; 
} 

Но это не очень хорошо работает! вот результат: http://i.imgur.com/u01Bdk7.jpg Обратите внимание, что есть 3 строки, где должно быть только одно. Вот код самолета, это может помочь:

class Cartesiano 
{ 
public: 
char griglia[MAP_LENGHT+1][MAP_HEIGHT+1]; 
Cartesiano(void) 
{ 
    for(int y=0;y<=MAP_HEIGHT;y++) 
    { 
     for(int x=0;x<=MAP_LENGHT;x++) 
     { 
      if (y==0)griglia[x][y]='_'; 
      else 
      { 
       if(x==0)griglia[x][y]='|'; 
       else griglia[x][y]=' '; 
      } 
     } 
    } 
} 
void Draw(void) 
{ 
    for(int y=MAP_HEIGHT;y>=0;y--) 
    { 
     for(int x=0;x<=MAP_LENGHT;x++)cout<<griglia[x][y]; 
     cout<<"\n"; 
    } 
} 
}piano; 

Любые идеи?

+0

Что значения '' MAP_HEIGHT' и MAP_LENGTH'? И при инициализации, зачем использовать один цикл, когда вы используете правильный вложенный цикл при «рисовании»? –

+0

Я определил те с #define в начале, они оба равны 50. Кроме того, я не получил часть цикла. Я использовал вложенный цикл, что случилось? – NetHacker

ответ

2

Когда ваши значения y превышают 49 (MAP_HEIGHT - 1), вы переполняете свой массив. Если в цикле дро рассчитать y=a*x+b и печать Z вместо X вы увидите в первой строке иксов и переполненные ошибки все Заболоцкога

for(int x=0;x<MAP_LENGTH;x++) 
{ 
    int y = a*x+b; 
    if(y<MAP_HEIGHT) { 
     piano.griglia[x][y]='X'; 
    } else { 
     piano.griglia[x][y]='Z'; 
    } 
} 

Это связанно с тем, как памятью для массивов хранятся в C++, просто случается, что запись за пределами одного массива приводит к записи в следующую. В общем, это приведет к сбою вашей программы.

Также обратите внимание, что здесь цикл x должен быть более MAP_LENGTH.

Я также настоятельно рекомендую получить надлежащую графическую библиотеку

+0

Обратите внимание, что кто-то «помог» исправил вашу орфографическую ошибку «MAP_LENGHT» до «MAP_LENGTH» и удалил мою ссылку на это в моем ответе, поэтому, если вы просто скопируете вставить то, что я поставил, теперь это не сработает. Исправьте длину орфографии, чтобы использовать это. – user2711915

+0

Спасибо. Правильная графическая библиотека? вы могли бы предложить его? Также, извините за вещь MAP_LENGHT! английский не мой первый язык! :) Также размер массива на самом деле MAP_HEIGHT + 1, а не -1 ... – NetHacker

+0

Простая библиотека, которая может использоваться с C++, это [allegro] (https://www.allegro.cc/) Есть много настроек руководства и учебные пособия. Я не лучший человек, чтобы спросить об этом, и если все, что вы хотите сделать, это графики графика, то для этого существуют конкретные библиотеки, и другой язык, такой как R, будет намного проще в использовании. – user2711915

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