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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Змейка, движение змейки 
:(
    Опции темы
fellix
Дата 5.12.2005, 20:27 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











всех здравствуйте...
есть задача: нарисовать (желательно на С++ Builder) змейку, которая сначала появляется из одной клетки, потом растет на длину 4-ех клеток, затем начинает двигать. Затем на поле произвольным образом появляется пища, она ее ест и растет...
так вот ворос: с чего начать, какой способ решения можно здесь применить и => какой алгоритм придумать?
всем спасибо заранее...
  Вверх
mr.DUDA
Дата 5.12.2005, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 7
Всего: 232



Что такое змейка: это массив из координат сегментов змейки, плюс координаты головы змейки и направление движение головы. Координаты выражаются в целых числах. Например, лабиринт у нас состоит из 16 столбиков на 16 строк, тогда змейка может состоять, к примеру, из 4-х сегментов, каждый из которых имеет координаты (x,y). При передвижении змейки с предыдущего положения на следующее, достаточно просто взять положение "головы" и сместить на 1 в сторону, в которую повёрнута "голова". Все предыдущие сегменты нужно переместить на 1 вперёд, т.е. тот сегмент, который был сразу перед головой, становится вместо головы; сегмент перед ним - становится на его позицию, и т.д., до самого последнего сегмента. Собственно, сегмент можно рассматривать как "кусок змеи", занимающий участок свободного пространства 1x1. Всё просто, и всё логично.


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


I wanna fork()
****


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

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



Я использовал другой алгоритм: требуется только знать про первый сегмент и последний. При передвижении первый передвигается(new coord += direct*width, где direct -1, 0 или 1), а последний сегмент затирается. В итоге происходит движение. Единственно, что следует сохранять - точки поворота головы, чтобы хвост знал, где повернуть.
Движок:
Код

void check_for_reverce();
const int width = 60;        //width of the each segment of the snake
Snake first = Snake(180, 0, 1, 0);   //first part of the snake
Snake lost = Snake(60,0, 1, 0);     //the lost part of the snake    
std::vector<Snake>point_of_reverce(500);
int i=0;                //count_of_points;
int curr_point=0;            //the nearest point of reverce
/*=============================================================================================
check vor reverce, make direction of moving of the lost part
*/
void check_for_reverce(){
            // check vor reverce, make direction of moving of the lost part
 if(lost.xpos == point_of_reverce[curr_point].xpos && lost.ypos == point_of_reverce[curr_point].ypos){
    lost.x_direct = point_of_reverce[curr_point].x_direct;
    lost.y_direct = point_of_reverce[curr_point].y_direct;
    curr_point++;
    //std::cout<<"Reverced!\n";
        }
}
//////////////////////////////////////////////////////////////////////////////////////////////////
        case SDLK_UP:{
            first.y_direct = -1;
            first.x_direct = 0;
            point_of_reverce[i] = Snake(first.xpos, first.ypos, 0, -1);
            i++;
            break;}
        case SDLK_DOWN:{
            first.y_direct = 1;
            first.x_direct = 0;
            point_of_reverce[i] = Snake(first.xpos, first.ypos, 0, 1);
            i++;
            break;}
        case SDLK_LEFT:{
            first.x_direct = -1;
            first.y_direct = 0;
            point_of_reverce[i] = Snake(first.xpos, first.ypos, -1, 0);
            i++;
            break;}
        case SDLK_RIGHT:{
            first.x_direct = 1;
            first.y_direct = 0;
            point_of_reverce[i] = Snake(first.xpos, first.ypos, 1, 0);
            i++;
            break;}
 first.xpos += first.x_direct*width;
 first.ypos += first.y_direct*width;
 DrawMove(&first,&lost); 
 check_for_reverce();
 lost.xpos += lost.x_direct*width;
 lost.ypos += lost.y_direct*width;
 



--------------------
user posted image
PM WWW   Вверх
UnDe@D
Дата 6.10.2007, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 5.10.2007

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



а можна ту же змейку тока в коде на C#???
PM MAIL   Вверх
powerfox
Дата 6.10.2007, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


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

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



Цитата(UnDe@D @  6.10.2007,  17:09 Найти цитируемый пост)
а можна ту же змейку тока в коде на C#??? 

А что там переписывать то? Совсем чуть чуть - и будет на С#.


--------------------
user posted image
PM WWW   Вверх
UnDe@D
Дата 7.10.2007, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 5.10.2007

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



Цитата(powerfox @  6.10.2007,  17:03 Найти цитируемый пост)
А что там переписывать то? Совсем чуть чуть - и будет на С#. 

проблема в том что я С++ впервые вижу!
PM MAIL   Вверх
Trojian
Дата 18.10.2007, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 30.5.2007
Где: Voronezh

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



Уважаемый powerfox
А можно выложить весь исходник змейки. Желательно с комментариями какой код и что он делает. Заранее спасибо  smile  smile 


Это сообщение отредактировал(а) Trojian - 18.10.2007, 10:37
PM MAIL ICQ   Вверх
powerfox
Дата 18.10.2007, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


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

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



Цитата(Trojian @  18.10.2007,  11:33 Найти цитируемый пост)
А можно выложить весь исходник змейки. Желательно с комментариями какой код и что он делает. Заранее спасибо  smile  smile 

Выкладываю (в этом посте полная версия, в следующем будет без фоновой картинки, чтобы уменьшить размер архива).
Качество кода не особо. По сути, обычный С, а не С++. Но писал я, когда практически не умел программировать. 

Присоединённый файл ( Кол-во скачиваний: 165 )
Присоединённый файл  powersnake_0.9pre1try4.tar.bz2.txt 326,56 Kb


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


I wanna fork()
****


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

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



С пустым фоном.

Присоединённый файл ( Кол-во скачиваний: 122 )
Присоединённый файл  powersnake_0.9pre1try4_lite.tar.bz2.txt 70,22 Kb


--------------------
user posted image
PM WWW   Вверх
arilou
Дата 18.10.2007, 16:58 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



powerfox, спасибо  smile 




--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
powerfox
Дата 18.10.2007, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


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

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



Цитата(arilou @  18.10.2007,  17:58 Найти цитируемый пост)
powerfox, спасибо  smile 

Не за что. Может скоро выложу powersnake-1.0 smile На нормальном С++.


Чтобы скачать архив, нужно сохранить ту кракозябру, что открывается в браузере, отбросив ".txt". Потом разархивировать.

Добавлено через 1 минуту и 20 секунд
В zip. Чтобы без хитростей с сохранением.

Присоединённый файл ( Кол-во скачиваний: 138 )
Присоединённый файл  powersnake_0.9pre1try4_lite.zip 70,59 Kb


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


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 30.5.2007
Где: Voronezh

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



 powerfoxспасибо
PM MAIL ICQ   Вверх
T0ohtik
Дата 3.11.2008, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 9.2.2008

Репутация: нет
Всего: 1



Подскажите, а как лучше рисовать саму змейку имеется в виду, полигоны, просто выводить картинками или как то по другом. Возможно применение OpenGL
PM MAIL   Вверх
powerfox
Дата 3.11.2008, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


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

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



Цитата(T0ohtik @  3.11.2008,  17:08 Найти цитируемый пост)
Подскажите, а как лучше рисовать саму змейку имеется в виду, полигоны, просто выводить картинками или как то по другом. Возможно применение OpenGL 

Разницы принципиальной нет: сделайте и так, и так smile


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


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 5.6.2009

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



Привет всем! Помогите плиз с запиской по курсовому "Змейка"
PM MAIL   Вверх
arilou
Дата 5.6.2009, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



fil88, вам в раздел "центр помощи"


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Disa15031992
Дата 22.11.2011, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 22.11.2011

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



мой вариант змейки на c#

http://depositfiles.com/files/6ijs5om34?redirect
PM MAIL   Вверх
Alex33R
Дата 23.5.2012, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 23.5.2012

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



Disa15031992, ссылка не работает=(
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

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

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




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


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

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