Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "живой объект", как сделать самостоятельным 
:(
    Опции темы
powerfox
Дата 24.1.2006, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 97



У меня есть игра "змейка", можно ли сделать так, чтобы каждый новый сегмент двигался самостоятельно, не добавляя указателей, счётчиков, просто связать событие его образование с какой-то функцией?


--------------------
user posted image
PM WWW   Вверх
_hunter
Дата 24.1.2006, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



Цитата(powerfox @ 24.1.2006, 13:07 Найти цитируемый пост)

событие его образование с какой-то функцией

а теперь еще раз, только медленнее...

вообще-то у тебя все сегменты и так где-то должны храниться. поэтому дополнительных указателей вводить не нужно. смысла введения счетчиков я не вижу...
может вопрос стоит в том, на ка реализовать движение?



--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Fixin
Дата 24.1.2006, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 2
Всего: 18



Обычно при создании и передвижении каждый сегмент коприует инфу о направлении движения от предыдущего элемента с хвоста до головы, и никаких счетчиков и указателей не нужно, если ты конечно не строишь змею по принципу связного списка, тк смысла нет, ну только если поле не ограничено.
PM MAIL ICQ   Вверх
powerfox
Дата 25.1.2006, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 97



У меня есть вектор точек поворота, Идёт проверка координат первого и последнего сегментов, в зависимости от этого изменяется коэффициент движения. Движение происходит по формуле
Код

struct Snake{    
        int xpos;    
        int ypos;    
        int x_direct;    
        int y_direct;    
        Snake(int xpos_=0, int ypos_=0, int x_d=1, int y_d=0) :    
            xpos(xpos_), ypos(ypos_), x_direct(x_d), y_direct(y_d) { }
    };
...
const int width = 50;        //width of the each segment of the snake
Snake first = Snake(150, 0, 1, 0);   //first part of the snake
...
first.xpos += first.x_direct*width;
first.ypos += first.y_direct*width;
...
std::vector<Snake>point_of_reverce(500);
int i=0;                //count_of_points;
int curr_point=0;            //the nearest point of reverce
...        
case SDLK_UP:{
            first.y_direct = -1;
            first.x_direct = 0;
            point_of_reverce[i] = Snake(first.xpos, first.ypos, 0, -1);
            i++;
            break;}

Движение работает, теперь мне надо сделать "game over", если змейка таранит себя. Пока я вижу два пути:
1. Хранить все сегменты.
2. Восстанавливать их координаты из точек поворота, конца и начала.


--------------------
user posted image
PM WWW   Вверх
_hunter
Дата 25.1.2006, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



дык ясен пень -- все сегменты хранить нужно.
потому как при серии поворотов ты все сегменты не востановиш


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
powerfox
Дата 25.1.2006, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 97



Восстановить можно, но долго будет выполняться(по сравнению с хранением координат), а хранить - слишком просто, хочется что-то пооригинальнее.


--------------------
user posted image
PM WWW   Вверх
_hunter
Дата 25.1.2006, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



зачем оригинального? ( и чем тогда восстаноновление смущает? -- оригинальнее некуда... )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
powerfox
Дата 25.1.2006, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 97



Восстановление будет работать похуже(испортит ясность кода, дольше будет работать, сложнее будет добавлять потом что-нибудь). Наверное, лучше не заморачиваться и добавить переменные для хранения координат.


--------------------
user posted image
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0487 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.