| 
				
				опять ООП
				 |   |  
| Raf_Tank | Дата: Суббота, 04 Февраля 2017, 16:21 | Сообщение # 1 |  
| 
 был не раз 
Сейчас нет на сайте 
 
 | А вот и я. Новый день - новая проблема. Думал что уже почти доделал свой проект, но не тут то было. В общем есть класс врага, на основе которого создаются, собственно, сами враги. И логика их движения такова, что каждые 2 секунды меняется их направление, от 1 до 4 включительно. А проблема такая: есть несколько объектов e1 e2 e3 класса Enemy , и когда проходит 2 секунды (p.s. время отсчитываю через sfml таймер) то переменной, которая отвечает за направление задаётся значение которое одинаково для всех объектов данного класса, из-за чего мои мобы ходят так синхронно, как-будто занимались строевой подготовкой 20+ лет. Как сделать чтобы для каждого объекта класса рандомилось своё значение, а не общее для всех. Обрезанный кусочек кода:
 Код  class Enemy{ private:           public:     bool cdir = 0;     Clock dir_clock;     float change_time;     int dir;     int *ptrdir = &dir; Enemy(...... int dir){....} void move(float game_time){   change_time = dir_clock.getElapsedTime().asMilliseconds();   if (change_time >= 2000) cdir = 1;   srand(time(NULL));   while (cdir == 1){    dir = 1 + rand() % 4;    dir_clock.restart();    cdir = 0;   }      if (dir == 1){}   if (dir == 2){}   if (dir == 3){}   if (dir == 4){}        } int main() { Enemy e1(....,   2); // как видно я им даже изначально задаю разные направления, с которыми они появятся Enemy e2(......, 1); Enemy e3(......, 4); e1.move(game_time); e2.move(game_time); e3.move(game_time);
  return 0; }
 
 
  Как-то так, надеюсь всё понятно p.s. все нужные библиотеки подключены
 Код #include <iostream> #include <sstream> #include <cstdlib> #include <ctime>
   
 
 Сообщение отредактировал Raf_Tank - Суббота, 04 Февраля 2017, 16:22  |  
| 
 | 
 |    |  
| Gudleifr | Дата: Суббота, 04 Февраля 2017, 16:36 | Сообщение # 2 |  
 
почти ветеран 
Сейчас нет на сайте 
 
 | C++ тут не при чем. Попробуйте перечислить то, что делает move, обычными человеческими словами.
  Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
 |  
| 
 | 
 |    |  
| Raf_Tank | Дата: Суббота, 04 Февраля 2017, 16:39 | Сообщение # 3 |  
| 
 был не раз 
Сейчас нет на сайте 
 
 | Цитата Gudleifr (  )   Попробуйте перечислить то, что делает move, обычными человеческими словами.   Что-то я вообще ни одного слова не понял...
 |  
| 
 | 
 |    |  
| Gudleifr | Дата: Суббота, 04 Февраля 2017, 16:43 | Сообщение # 4 |  
 
почти ветеран 
Сейчас нет на сайте 
 
 | Цитата Raf_Tank (  )   Что-то я вообще ни одного слова не понял...  В этом и проблема. Давайте по порядку: 1. move получает на вход ... 2. Считает ...., обращаясь к методу ..., который делает ... 3. Если ... и. т.д.
  Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
 |  
| 
 | 
 |    |  
| Raf_Tank | Дата: Суббота, 04 Февраля 2017, 17:02 | Сообщение # 5 |  
| 
 был не раз 
Сейчас нет на сайте 
 
 | Цитата Gudleifr (  )   В этом и проблема. Давайте по порядку: 1. move получает на вход ... 2. Считает ...., обращаясь к методу ..., который делает ... 3. Если ... и. т.д. 
   АА, понял, вот: move на вход получает время, которое постоянно сбрасывается  дальше инициализирую переменную, которая будет хранить в себе время таймера dir_clock в миллисекундах, т.е. если прошло 2 секунды то change_time eltn hfdyj 2000 миллисекунд.  Дальше проверяется прошли ли эти самые 2 секунды , и если да то переменная cdir (change dir скор.) становится true. Далее идёт генерация случ. числа, я не понимаю как он работает, просто скопипастил его, и после того как мы перерандомим dir мы перезапускаем таймер, т.е. те самые 2 секунды сбрасываются и переменная cdir снова становится false чтобы дальше не поменять dir раньше времени. P.S. почему-то этот генератор у меня работает только в цикле while при условии не катит, а выбрал его потому, что в интернете читал что обычная команда rand зависит от чего-то на компьютере, поэтому она будет одну и ту же цифру выдавать, а этот генератор зависит от этого неизвестного time(NULL) и поэтому каждый раз разные значения.
 |  
| 
 | 
 |    |  
| Gudleifr | Дата: Суббота, 04 Февраля 2017, 17:25 | Сообщение # 6 |  
 
почти ветеран 
Сейчас нет на сайте 
 
 | Цитата Raf_Tank (  )   move на вход получает время, которое постоянно сбрасывается   Зачем, если в функции оно не используется?
 Цитата Raf_Tank (  )   инициализирую переменную, которая будет хранить  Это хорошо, а кто будет инициализировать другие переменные?
 Цитата Raf_Tank (  )   Далее идёт генерация случ. числа, я не понимаю как он работает  Попробуйте разобраться, иначе результат так и будет обратный требуемому. (Подсказка: srand обычно бывает один на программу).
 Цитата Raf_Tank (  )   почему-то этот генератор у меня работает только в цикле while  Придется Вам разобраться, впрочем, когда уберете srand, станет полегче.
 Цитата Raf_Tank (  )   от этого неизвестного time  А не настораживает, что в этой ф-ии целых три независимых переменных для "текущего времени"?
  Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
 
 Сообщение отредактировал Gudleifr - Суббота, 04 Февраля 2017, 17:28  |  
| 
 | 
 |    |     
		
		 
 |