Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Закон отражения в ограниченой зоне на консольном приложении - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Мировые координаты и координаты устройства http://www.cyberforum.ru/cpp-beginners/thread636616.html
Пишу программу с интерфейсом напоминающем Autocad. А точнее ту часть в которой происходит черчение. Т.е. хочу создать поле которое отображало объекты хранящиеся в памяти в мировых координатах с...
C++ Как преобразовать string в int ? С++ Здравствуйте, можете объяснить как преобразовать string в int ? С++. Объясните как можно проще, так-как я недавно начал изучать программирование. Допустим: #include <iostream> using namespace... http://www.cyberforum.ru/cpp-beginners/thread636607.html
static_cast<char>() не выводит некоторые символы C++
Редактор geany, компилятор gcc. cout<< static_cast<char>(4) заместо ожидаемого знака бубей ничего не выводится. При этом cout<< static_cast<char>(100) например, работает коректно.
C++ Ошибка типов данных
У меня возник вопрос: Запускаю программу Я должен ввести число от одного до трех, после значение записывается в переменную типа int Если мое число не подходит под это описание(меньше 0 или больше...
C++ Объявление функций внутри других функций http://www.cyberforum.ru/cpp-beginners/thread636558.html
Иногда вижу в некоторых исходниках на c объявление функций, внутри main. Например: main(){ double sum(int max_num); } Так вот, хотел спросить зачем это делают?
C++ Закрытый файл У меня программа использует обычный текстовой файл для хранения различный параметров. Мне нужно сделать так, чтобы никакой пользователь не смог изменить их, иначе могут повредить программу. Как можно... подробнее

Показать сообщение отдельно
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
13.08.2012, 19:23
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void ProcessObject(int screenWidth, int screenHeight, Object& obj)
{
  obj.x += obj.xSpeed;
  obj.y += obj.ySpeed;
 
  if (obj.x >= screenWidth)
  {
    obj.xSpeed = -obj.xSpeed;
    obj.x = screen.GetWidth - 1 - (obj.x - screenWidth);
  }
  else if (obj.x < 0)
  {
    obj.xSpeed = -obj.xSpeed;
    obj.x = -obj.x;
  }
 
  if (obj.y >= screenHeight)
  {
    obj.ySpeed = -obj.ySpeed;
    obj.y = screenHeight - 1 - (obj.y - screenHeight);
  }
  else if (obj.y < 0)
  {
    obj.ySpeed = -obj.ySpeed;
    obj.y = -obj.y;
  }
}

AddObject - просто добавляет объект в массив объектов. Потом они все обрабатываются в цикле.
тело цикло состоит из таких частей:


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for (;;)
  {
    screen.Clear(); // отчищаем буфер от всего вообще
    DrawBorder(screen); // рисуем в буфере границу
 
    // далее идет обработка каждого объекта из вектора объектов:
    for (std::vector<Object>::iterator it = objs.begin(), end = objs.end(); it != end; ++it)
    {
      Object& obj = *it;
      ProcessObject(screen, *it); // изменяем координаты и скорость объекта
      screen.Draw(obj.x, obj.y, obj.symbol); // рисуем объект в буфере
    }
 
    screen.DrawToScreen(); // сливаем все, что оказалось в буфере на экран
 
    Sleep(10); // ждем 10 миллисекунд и повторяем итерацию снова
  }
т.е. тут нет мороки с затиранием предыдущего положения. Стирается все и рисуется по новой текущее состояние
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru