Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2011, 17:38   #1
Dmitry96
Пользователь
 
Аватар для Dmitry96
 
Регистрация: 09.06.2010
Сообщений: 35
Вопрос Pacman. Препятствия.

Делаю Пакмена. Возникли проблемы с реализацией препятствия. Весь день лазаю по форуму, пробую разные решения, но не получается. Пожалуйста объясните по подробней, как с моим кодом сделать препятствия. Код во вложении.
PS: Я не хочу пользоваться своими классами.
Вложения
Тип файла: rar Пакмен.rar (350.7 Кб, 22 просмотров)
Совсем неважно как ты ударишь, важно как держишь удар....

Последний раз редактировалось Dmitry96; 17.06.2011 в 17:42.
Dmitry96 вне форума Ответить с цитированием
Старый 19.06.2011, 20:48   #2
DenTiSt
Пользователь
 
Регистрация: 08.04.2010
Сообщений: 19
По умолчанию

Ну это просто в данном случае. У тебя карта хранится и прорисовывается в виде двумерного массива. Пусть тогда "Пакмен" ходит "по клеткам", т.е. он не сможет пройти между двумя клетками и т.п. Как реализовать? Вот вариант:
1.) позиция Пакмена отмечается в массиве числом (например, 255);
2.) если игрок нажал кнопку (влево или вправо), ставим флаг поворота в нужную сторону;
3.) когда Пакмен доходит до очередной клетки карты (т.е. стоит точно в этой клетке), проверяется флаг, и если он есть, Пакмен проверяет, возможен ли поворот (т.е. если нажата кнопка влево - смотрим, если слева клетка с индексом 1 - стена, свернуть нельзя, идём дальше вперёд, если 0 - сворачиваем) и если да, поворачивает;
4.) если пользователь нажимает другую кнопку до того момента, когда Пакмен дошёл до следующей клетки, меняем флаг на другой;
5.) если дошли до следующей клетки, но клетка за ней имеет индекс 1 (стена) - останавливаем движение;
6.) если нажата кнопка "назад", меняем движение на обратное.
Вместо (1) можно запоминать в переменной типа TPoint координаты Пакмена в данный момент - как тебе больше понравится.
Монстров можно так же отмечать и также двигать, только вместо кнопок будет функция random(3).
Надеюсь, всё пояснил на этот счёт.
P.S. Классов, как видишь, нет. Не понимаю, что ты их так не любишь...
DenTiSt вне форума Ответить с цитированием
Старый 19.06.2011, 21:14   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Блин )) только с бендером всё рассусолили , ан на тебе ) появилась новая тема аналогичная.
Сейчас закину в неё последний вариант, смотри туда, как организовано перемещение по клеткам и препятствия (код я доводил до работоспособности, после бендера, но сам так не писал бы ))), хотя всё в целом так, как описывает DenTiSt
http://programmersforum.ru/showthrea...=153883&page=4 тема

Классы это вещь, жалко , что ты не хочешь с ними связываться (как я понял)
phomm на форуме Ответить с цитированием
Старый 19.06.2011, 23:26   #4
Dmitry96
Пользователь
 
Аватар для Dmitry96
 
Регистрация: 09.06.2010
Сообщений: 35
По умолчанию

Цитата:
Сообщение от DenTiSt Посмотреть сообщение
P.S. Классов, как видишь, нет. Не понимаю, что ты их так не любишь...
Цитата:
Классы это вещь, жалко , что ты не хочешь с ними связываться (как я понял)
Серьезно я начал заниматься программированием в начале этого месяца,
по этому хочу организовать все без классов ради интереса. Потом конечно же буду их использовать. За примеры спасибо, завтра буду разбираться. Если что то будет не понятно, то спрошу.
Совсем неважно как ты ударишь, важно как держишь удар....
Dmitry96 вне форума Ответить с цитированием
Старый 20.06.2011, 21:58   #5
Dmitry96
Пользователь
 
Аватар для Dmitry96
 
Регистрация: 09.06.2010
Сообщений: 35
Печаль Что то не получается у меня...

Я решил сделать, как посоветовал DenTiSt. Но не получилось. Работает очень глючно. Вот код:

Код:
procedure Collision(); // Столкновение
begin

 if ((yPos mod KLsize)=0)and((xPos mod KLsize)=0) then //Если гг в "клетке"     
  begin

   if FLdown=true then                                              // Движение вниз
    if map[xPos div KLsize,(yPos+KLsize) div KLsize]='1' then
     go:=false
    else
     go:=true;

   if FLUp=true then                                                  // Движение вверх
    if map[xPos div KLsize,(yPos-KLsize) div KLsize]='1' then
     go:=false
    else
     go:=true;

   if FLleft=true then                                                 // Движение влево                                                
    if map[(xPos-KLsize) div KLsize,yPos div KLsize]='1' then
     go:=false
    else
     go:=true;

   if FLright=true then                                               // Движение вправо
    if map[(xPos+KLsize) div KLsize,yPos div KLsize]='1' then
     go:=false
    else
     go:=true;

   end;
end;

xPos : Координаты по X
yPos : Координаты по Y
KLsize : Размер клетки.

Если где то ошибся, покажите пожалуйста.

Вот полный код:
Вложения
Тип файла: rar Пакмен.rar (351.0 Кб, 9 просмотров)
Совсем неважно как ты ударишь, важно как держишь удар....

Последний раз редактировалось Dmitry96; 20.06.2011 в 22:01.
Dmitry96 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация препятствия [BeNdeR] Gamedev - cоздание игр: Unity, OpenGL, DirectX 36 19.06.2011 21:14
Pacman Merkator Gamedev - cоздание игр: Unity, OpenGL, DirectX 13 12.02.2011 13:58
Pacman Roll1n C++ Builder 1 28.05.2010 20:57
Препятствия! anton14 Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 01.02.2009 12:50
Препятствия в игре. Манжосов Денис :) Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 07.06.2008 14:14