Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Подскажите нубу :)

Подскажите нубу :)

Поделиться
Страницы: 1 2 Следующая »
Ilyas610Постоялецwww28 июня 20101:30#0
На днях начал изучать С++ и наткнулся на интересный сайт по созданию игр на этом языке.
Вот собственно сам сайт http://shatalov.su/
Вот урок о массивах http://shatalov.su/cpp_primer/array.php В уроке рассказывается о создании игровой карты при помощи массивов. По нажатию клавиш по карте перемещается некий символ "T".
Листинг прграммы http://shatalov.su/code/cpp_primer/pseudo_game_v0.2.txt
В конце урока приводятся упражнения.  Вопрос по 2 упражнению.
"2. Сейчас в программе возможна запись в несуществующие элементы массива. Сделайте проверку на выход за пределы карты."
Никак не получается :((((((. Подскажите как это сделать.
а если можно то и сам код 8)
Заранее извеняюсь за засорение сайта нубской темой и заранее СПАСИБО за ответ!
SergioУдалёнwww28 июня 20101:41#1
Название темы не отображает сути вопроса.
RmzVoidПостоялецwww28 июня 20101:51#2
проверяй индекс массива, если он больше или равен кол-ву елементов в массиве, тогда ты вышел за пределы массива
так же проверяй отрицателен ли индекс
PokimonПостоялецwww28 июня 20102:45#3
switch (static_cast<int>(act))
  {
    case -32:
    break;
    case 27:
      exit(0);
    break;
    case 75:
      map[x][y--] = ' '; // "Убираем" объект со старой координаты
      map[x][y < 0 ? ++y : y] = 'Т'; // "рисуем" объект на новом месте
    break;
    case 77:
      map[x][y++] = ' ';
      map[x][y == 20 ? --y : y] = 'Т';
    break;
    case 80:
      map[x++][y] = ' ';
      map[x == 15 ? --x : x][y] = 'Т';
    break;
    case 72:
      map[x--][y] = ' ';
      map[x < 0 ? ++x : x][y] = 'Т';
    break;
  }
В общем вот этот кусок кода я подкорректировал.
Теперь выход за пределы должен стать невозможным.
kvakvsПостоялецwww28 июня 20104:14#4
Покимон, ты или на С принципиально пишешь, или на С++, зачем смешивать языки-то.
По сишному будет (int)act, а не статик каст.
Ещё твой стиль кода мне не нравится, но это мои личные проблемы ;) не обращай внимания
Ilyas610Постоялецwww28 июня 20108:24#5
Sergio
Изменяюсь. Я тут новенький. В следующий раз буду читать правила.
Ramzes, Pokimon
Спасибо огромное!
PokimonПостоялецwww28 июня 201014:59#6
kvakvs
> Покимон, ты или на С принципиально пишешь, или на С++, зачем смешивать
> языки-то.
> По сишному будет (int)act, а не статик каст.
> Ещё твой стиль кода мне не нравится, но это мои личные проблемы ;) не обращай
> внимания
Настоящий Си программист должен знать все остальные языки, чтобы познать все величие Си.

Код изначально был на С++, я лишь исправил несколько строк, да и подсократил код.
Или вас смущает Тернарная_условная_операция

kvakvsПостоялецwww28 июня 201015:17#7
Pokimon
> Или вас смущает Тернарная_условная_операция
Меня смущает плотность операций на символ.
Присвоить в мап по индексу (который если х меньше 0, то ++х, иначе х; у) символ Т, это, простите, п*дец.
Код должен читаться легко на одном дыхании, не напрягая мозг, для мозга есть более ценные занятия, чем вкуривать, что имел в виду автор такой "тернарной операции".
PokimonПостоялецwww28 июня 201015:32#8
kvakvs
> Присвоить в мап по индексу (который если х меньше 0, то ++х, иначе х; у) символ
> Т, это, простите, п*дец.
Хе-хе узнаю убежденного паскалиста.
Ау ау это реальный мир. Это мир Си.
Научитесь уже интуитивно различать префиксный\постфиксный инкремент\декремент.
kvakvsПостоялецwww28 июня 201015:38#9
Pokimon
> Хе-хе узнаю убежденного паскалиста.
Угу, только паскаль я забросил лет 10 назад (потому что гов^H^H^Hязык не нравился жутко), и пишу на С++ и питоне.
Сама по себе тернарная операция это нормально.
Я про комбинацию трёх (!) операций в одной строке, а это уже ненормально.
PokimonПостоялецwww28 июня 201015:45#10
kvakvs
> и пишу на С++
Значит вы плохой программист.
С++ позволяет писать еще больше операций в одной строке, потому как позволяет объявлять и инициализировать переменные где угодно.
3 операции для хорошего С++ программиста, это смех.

ashujonПостоялецwww28 июня 201016:03#11
посмотрел на 3 пост, и на то как автор его отстаивает (это главное), и замер в раздумьях, понял я код за 6 сек, и еще 4 минуты думал как бы с острить, но я так и не смог выбрать из ста вариантов подходящий, и решил просто посмеяться в сторонке
однако это исключительно моя вина, т.к. каждый пишет как хочет=)
VolttПостоялецwww28 июня 201016:06#12
Без тернарной операции:
switch (static_cast<int>(act))
{
    case 32:
    break;
    case 27:
      exit(0);
    break;
    case 75:
      if (y == 0) break;
      map[x][y] = ' '; // "Убираем" объект со старой координаты
      y--;             // изменяем координаты
      map[x][y] = 'Т'; // "рисуем" объект на новом месте
    break;
    case 77:
      if (y == 19) break;
      map[x][y] = ' ';
      y++;
      map[x][y] = 'Т';
    break;
    case 80:
      if (x == 14) break;
      map[x][y] = ' ';
      x++;
      map[x][y] = 'Т';
    break;
    case 72:
      if (x == 0) break;
      map[x][y] = ' ';
      x--;
      map[x][y] = 'Т';
    break;
}
-fixed-
PokimonПостоялецwww28 июня 201016:22#13
Voltt
> Без тернарной операции:
Я конечно понимаю, что вы считаете себя очень крутым программистов и любите поучать всех, кто ниже рангом.
Но я бы вам посоветовал для начала самому научиться программировать. Это просто. Начните с K&R

Почему мой код лучше:
1) Мой код короче.
2) Мой код красив.
3) Мой код показывает глубокое знание языка.
2) Мой код выполняет условия задачи и не портит память, а ваш...
err | Подскажите нубу :)

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

kvakvsПостоялецwww28 июня 201016:24#14
Voltt
Уже лучше ;) Как на мой вкус, конечно.
А ещё магические числа в кейсах надо заменить на понятные константы, или символы:
case ' ':
case 'M':
case 'P':
...
ба, да это же сканкоды клавиш курсора! Перед ними всегда идёт нулевой код, надо проверку на него тоже добавить в виде IF или ещё как нибудь. Иначе игра будет играться случайно нажатыми буквенными клавишами тоже.
Страницы: 1 2 Следующая »

/ Форум / Программирование игр / Общее

Тема в архиве.

2001—2017 © GameDev.ru — Разработка игр