2014-09-12 4 views
-1

Проблема в том, что я хочу «o», а не повторять ... Я пытался найти, но я провалился! Также объясните мне, как это происходит. Я новый программист!Ошибка с массивами в C++

#include <iostream> 
#include <string> 
#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 
#include <time.h> 

using namespace std; 

int main() 
{ 
    //all in-game variables here 
    string o = "o"; 
    int oH = 0; 
    int oW = 0; 
    //variables ending point... 

    bool run = true; 
    bool frameShow = true; 
    char input; 
    int width = 53; 
    int height = 22; 

    string px[width][height]; 

    while (run) 
    { 
     for (int xEmp=0; xEmp<height; xEmp++){ 
      for (int yEmp=0; yEmp<width; yEmp++) 
      { 
       px[xEmp][yEmp]= " "; 
      } 

      if (frameShow) 
      { 
       clrscr();   // Must be at start 

       px[oH][oW] = o; 

       for (int x=0; x<height; x++) 
       { 
        for (int y=0; y<width; y++) 
        { 
         cout << px[x][y]; 
        } 
        cout << "\n"; 

        frameShow = false; // Must be at end 
       } 
      } 

      if (kbhit()) 
      { 
       input = getch(); 

       // Most Used ones are: 
       // char 119 for "w" 
       // char 97 for "a" 
       // char 115 for "s" 
       // char 100 for "d" 
       // char 32 for "space" 
       // char 27 for ESC 

       if (input == 119) 
       { 
        oH--; 
        frameShow = true; 
       } 
       else if (input == 115) 
       { 
        oH++; 
        frameShow = true; 
       } 
       else if (input == 97) 
       { 
        oW--; 
        frameShow = true; 
       } 
       else if (input == 100) 
       { 
        oW++; 
        frameShow = true; 
       } 
       else if (input == 27) 
       { 
        // Game exits... 

        // To terminate, use: 
        run = false; 
       } 

       if(oH > height) 
       { 
        oH = height; 
       } 
       else if(oH < 0) 
       { 
        oH = 0; 
       } 

       if(oW > width - 1) 
       { 
        oW = width - 1; 
       } 
       else if(oW < 0) 
       { 
        oW = 0; 
       } 

      } 
     } 
    } 

    // Output for confiming program termination 
    clrscr(); 
    cout << "\n - Terminated! - \n"; 
    return 0; 
} 
+6

Отформатируйте свой код правильно - в настоящее время он практически не читается. –

+0

Хорошо! Но, пожалуйста, помогите мне, затем ... – user3820248

+8

Нет. Нет, нет, нет. Сожгите код (солей земли), пожарите своего учителя C++ (или автора учебника), возьмите современную книгу и начните сначала. –

ответ

1

В начале, width и height использование изменяется. px[width][height];, px[xEmp][yEmp], xEmp<height, yEmp<width. Один раз вы используете его как px[width][height];, затем px[height][width];. держите свой код согласованным!

Также if(oH > height) { oH = height; } неправ. вычесть один из высоты.

Это также, вероятно, не делать то, что вы хотите:

for (int x=0; x<height; x++) 
    for (int y=0; y<width; y++) 
    { 
     cout << px[x][y]; 
    } 
    cout << "\n"; 

Используйте скобки правильно, если вы не знаете, как использовать их, положить их ВСЕГДА!

Опять же, я думаю, что вы не используете скобки правильно:

for (int xEmp=0; xEmp<height; xEmp++){ 
    for (int yEmp=0; yEmp<width; yEmp++) 
    { 
     px[xEmp][yEmp]= " "; 
    } 
... // do other things 
} 

Я думаю, что вы хотите, чтобы закрыть его сразу установить все обратно в космос и их делать другие работы. Как и сейчас, он вернет одну строку в пробелы, распечатает все и запустит ваш код и только после пустой следующей строки.

for (int xEmp=0; xEmp<height; xEmp++){ 
    for (int yEmp=0; yEmp<width; yEmp++) 
    { 
     px[xEmp][yEmp]= " "; 
    } 
} 
... // do other things 

Ps: clrscr() не является стандартной функцией, работает только в Windows, я думаю, для Linux использовать system('clr');

Ps2: Почему вы используете std::string вместо полукокса, если вы только хранить символьные?

+0

Wow! Он исправил все ... Чрезвычайно спасибо! Мои родственники критикуют меня, что ваши коды - всего лишь мусор, и я очень подавлен! Теперь, похоже, ответ t.pimentel разбудил меня ... Простых ошибок иногда трудно найти, поскольку я обдумываю это более 1 часа! Урок здесь: «Держите заказ!». Благодаря! – user3820248

+0

Нет проблем. Чтобы упростить отладку, попробуйте распечатать некоторые переменные здесь и там, чтобы проанализировать, что происходит. Ps: Пожалуйста, ответьте правильно. Ps2: Продвиньте это. Ps3: Попробуйте использовать лучшие имена переменных 'px' ничего не значит, может быть,' gameMap', а не 'o', может быть' oSymbol'. –

+0

да! Ты прав! На самом деле, я программирую в своем телефоне, используя приложение C4droid (andriod OS).53 и 22 символа полностью заполнили мой экран в правильном порядке, и когда мы нажимаем «w» или «s», это выглядит так, как будто o перемещается в правильном направлении ... Для других ОС просто добавьте новую строку после каждого 53 символа. Вот почему он выглядит дерьмовым. Также, как я могу это сделать? И да, я хочу сделать «пространство» именно после каждого «кадра», чтобы не увеличивать количество. Я не использую Linux, как я уже упоминал ранее. Ответ Ps2: Пользователь также должен ввести имя в какой-то части (будущее) – user3820248

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