|
0 / 0 / 0
Регистрация: 14.04.2018
Сообщений: 26
|
|
Передвижение пакмана в игре16.07.2018, 11:50. Показов 5179. Ответов 37
Метки нет (Все метки)
Здраствуйте,нужна помощь!Я програмирую игру пакман в питоне.Не знаю как реализовать управление пакманом как в оригинальной части.Саму логику понять не могу...
0
|
|
| 16.07.2018, 11:50 | |
|
Ответы с готовыми решениями:
37
Передвижение объекта в игре Передвижение объектов в игре одновременно Нахождение кратчайшего пути по матрице, или передвижение привидений в игре Пакмен |
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,910
|
|||
| 25.07.2018, 13:31 | |||
|
0
|
|||
|
0 / 0 / 0
Регистрация: 14.04.2018
Сообщений: 26
|
||
| 25.07.2018, 14:13 [ТС] | ||
0
|
||
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,910
|
|
| 25.07.2018, 14:43 | |
|
Пусть Пакман находится в двух соседних по горизонтали клетках. Если нажата клавиша вверх, то проверять клетки над обеими.
0
|
|
|
0 / 0 / 0
Регистрация: 14.04.2018
Сообщений: 26
|
|
| 25.07.2018, 15:20 [ТС] | |
|
Shamil1, а как исправить проблему что когда пакман находиться в двух соседних клетках по горизонтали и считает что он находиться в левой клетке еще левее которой стена, и из-за этого он влево больше не передвигаеться
0
|
|
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,910
|
||
| 25.07.2018, 15:48 | ||
|
0
|
||
|
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
|
|
| 25.07.2018, 20:36 | |
|
Сейчас специально скачал и потыкал NES версию пакмена
Пакмен движется в заданном направлении пока ему не скажут двигается в противоположном либо если нажали на кнопку движения в перпендикулярном направлении и в то же время пакмен находится в центре клетки и в заданном направлении есть проход. Т.е. если, например, движемся влево, а нажали вверх, и пакмен находится между клетками, и в одной из верхних клеток стена - то игнорим кнопку и продолжаем двигаться куда двигались. Таким образом должна быть следующая модель поведения пакмена: - у него есть вектор движения который каждый шаг изменяет координаты, если только пакмен не уперся в стенку - изменение вектора движения возможно только на противоположный, либо на перпендикулярный если в момент прохода через центр клетки (1) нажата соответствующая клавиша и (2) в соответствующей соседней клетке есть проход Добавлено через 29 минут Признаки прохода через центр клетки: а) остаток от деления координат top-left на 25 ровно равен 0 б) перед совершением шага число (top-left / 25) отличается от того что будет после совершения шага
0
|
|
|
0 / 0 / 0
Регистрация: 14.04.2018
Сообщений: 26
|
||
| 25.07.2018, 22:17 [ТС] | ||
|
wingblack, это я уже понял,прошу почитай мое прошлое сообщение со скрином и..
0
|
||
|
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
|
||
| 26.07.2018, 09:07 | ||
|
Впрочем, в своей версии ты можешь делать как захочешь
0
|
||
|
0 / 0 / 0
Регистрация: 14.04.2018
Сообщений: 26
|
|
| 26.07.2018, 12:08 [ТС] | |
|
wingblack, почитай мой комент со скрином который я писал раньше,
0
|
|
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,910
|
|
| 26.07.2018, 14:13 | |
|
Ruslan_Glazkov,
Вы напишите, что конкретно вызывает проблему. Вы не можете определить положение пакмана на поле? Или не можете определить, есть ли препятствие в заданном направлении? Или не можете определить, где будет пакман, если сдвинется на 4 пикселя? Или что-то другое не можете определить?
0
|
|
|
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
|
||||||||||||
| 27.07.2018, 09:53 | ||||||||||||
|
Например, если коордианата пакмана будет 5.25, это значит что он стоит между 5 и 6 клетками на карте. 2. Обозначьте скорость пакмана тоже через вещественные числа, а не пиксели. Например, если пакман проходит полную клетку за 6 тиков, то скорость будет 1/6. 3. В любой момент для пакмана храните: направление (вертикальное/горизонтальное), текущие координаты X,Y и текущее изменение координат dx, dy (зависит от направления и скорости) 4. Каждый тик вычисляется новое положение пакмана. Сразу после этого, определяете находится ли уже пакман в центре клетки или еще не дошел. Не забывайте, что работаете с вещественными числами, поэтому пакман не попадет прямо в центр клетки. Например, если скорость 1/3 = 0,3333333333, то через три тика его координата будет 0,9999999999, а не ровно единица. Поэтому вещественные числа сравниваем через допустимую погрешность eps (достаточно маленькой должна быть, например 1e-5).
5. Если пакман еще не дошел до центра клетки, просто двигаемся дальше (переходим к следующему тику). А вот если дошел, то в этот момент пытаемся как раз и пытаемся поменять его направление движения. Новое направление будет зависеть от хотелок пользователя (например, идти вверх) и от возможностей пакмана (есть ли на карте свободная клетка в данном направлении). 6. Как видно, хотелки пользователя срабатывают не сразу, а только когда пакман дошел до центра какой-нибудь клетки. Значит нам надо куда-то сохранить команду пользователя - последнюю нажатую кнопку для направления пакмана. Поэтому, при обработке тика, проверяешь: - пользователь нажал кнопку в том же направлении в каком идет пакман - ничего не делаешь - пользователь нажал кнопку в противоположном направлении - сразу разворачиваешь пакмана - пользователь нажал кнопку в перпендикулярном направлении - запоминаешь выбор для последующего анализа (когда пакман придет в центр следующей клетки) 7. Превращение вещественных координат в пиксели должно происходить в самом конец обработки тика, только при непосредственном рисовании. Координаты пикселей будут вычисляться очень лекго, если координаты карты и координаты пакмана считать с 0:
0
|
||||||||||||
|
0 / 0 / 0
Регистрация: 14.04.2018
Сообщений: 26
|
|
| 27.07.2018, 18:30 [ТС] | |
|
vrm2, спасибо, а таймер делать через pygame.time.set_timer ()? И можно по подробнее про тики?
Добавлено через 11 минут Shamil1, припустим скорость пакмана 5пикс.Считать глобальные коорды пакмана будем в левой верхней точке.Припустим что стена стоит на глобальной координате по Х 0 (на координате в матрице тоже 0), а пакман 45 (в матрице 1).Он сможет пойти влево только если левее от него клетка в матрице на равна '1'(стена), но так как (45/25) округляеться к 1 (в сторону к 0), то пакман думает что его соседняя клетка слева от него стена,поэтому не ходит туда,хоть места там еще есть для хода.Думаю может окгруглять в таких моментах в сторону противоположную от 0, или можна как-то по лучше сделать?
0
|
|
|
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
|
||
| 27.07.2018, 19:38 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 14.04.2018
Сообщений: 26
|
|
| 28.07.2018, 12:22 [ТС] | |
|
vrm2, ну к примеру каждую 1 секунду считать координаты пакмана и перемещать его на 1 ход?Тогда это поидее таймер должен быть.И возмодно ли в питоне перемещать спрайт на вещественное колво пикселей?
0
|
|
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,910
|
||
| 28.07.2018, 13:34 | ||
|
0
|
||
|
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
|
||
| 28.07.2018, 14:46 | ||
|
Как работает все в pygame - таймеры, спрайты - я не знаю. Думаю, что координаты пикселей должны быть все де целочисленными. Поэтому внутренние вещественные координаты на сетке надо будет преобразовать в целочисленные координаты на экране, но делать нужно это только непосредственно при выводе картинки (спрайтов) на экран.
0
|
||
|
0 / 0 / 0
Регистрация: 14.04.2018
Сообщений: 26
|
|
| 28.07.2018, 15:27 [ТС] | |
|
vrm2, только что попробовал рисовать спрайт по вещественным координатам, работает
0
|
|
|
0 / 0 / 0
Регистрация: 14.04.2018
Сообщений: 26
|
|
| 29.07.2018, 13:19 [ТС] | |
|
Все, победа! Всем спасибо, работает отлично🎉🎉
0
|
|
| 29.07.2018, 13:19 | |
|
[LibGDX] Передвижение камешков в игре "три в ряд" Ошибка 0x000000101 , при игре 10 минутной игре в Dota 2, CS:GO Как отлавливать нажатия клавиш в игре? Как их виртуально нажимать в игре? Передвижение Передвижение Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
|