Как остановить колебания в вычислениях pygame ⇐ Python
Как остановить колебания в вычислениях pygame
Я делаю игру, и у меня возникла проблема с кодом: одна математическая функция скорости мяча имеет некоторые колебания, поскольку Python не может рассчитывать со 100% точностью.
В обычном коде это не проблема, но поскольку у меня есть условие изменения типа движения с подъема на падение, оно установлено на какое-то интересное значение.
Если я изменю это число на 300, оно будет совершать только один цикл падения и роста, но если я изменю его на 320, оно сделает несколько циклов.
Проблема в том, что координация мяча по y настолько случайна. ChatGPT сказал мне, что это потому, что это колебание будет накапливаться, но последний ball_y настолько случайен, что иногда это 319, следующий 317, 320, но если он прыгает на 322 или что-то большее, чем 320, оно остановится
Я знаю, что самый простой способ — использовать некоторый диапазон, но он не работает, потому что всегда будет переходить на какое-то нехорошее значение. Можете ли вы рассказать мне, как устранить эту проблему с моим кодом?
импортировать pygame как pg импортировать случайный пг.инит() # Константы BACKGROUND_COLOR = pg.Color('черный') ШАР_Х = 240 # Инициализируем окно игры экран = pg.display.set_mode((500, 800)) часы = pg.time.Clock() # Загрузите фоновое изображение background_image = pg.image.load("bg.png") # Нарисуйте форму ромба def draw_rhombus(экран, цвет, x, пробел): точка1 = (170 + х, 740 – пробел) точка2 = (350 + х, 740 – пробел) точка3 = (300 + х, 790 – пробел) точка4 = (120 + х, 790 – пробел) точки = [точка1, точка2, точка3, точка4] вернуть pg.draw.polygon(экран, цвет, точки) # Генерируем список уникальных цветов защита генерировать_color_list(): цвета = ["КРАСНЫЙ", "ОРАНЖЕВЫЙ", "СИНИЙ", "БЕЛЫЙ"] доступные_цвета = цвета.копия() список_цветов = [] в то время как len(color_list) < 43: если недоступны_цвета: доступные_цвета = цвета.копия() цвет = случайный.выбор(доступные_цвета) если список_цветов и цвет == список_цветов[-1]: продолжать color_list.append(цвет) доступные_цвета.удалить(цвет) вернуть список цветов # Нарисуйте стопку ромбов защита draw_rhombus_stack (color_list, пробел, x): позиции = [] для меня в диапазоне (43): x_position = x, если я == 42, иначе 0 позиция = draw_rhombus(экран, список_цветов, позиция_x, пробел + я * 8) позиции.append(позиция) возврат позиций # Перемещаем стопку ромбов влево или вправо защита move_rhombus_stack (x, ключи): x_coor = x # Определить переменную x_coor если ключи[pg.K_LEFT] и x_coor > -500: х_коор -= 5 если ключи[pg.K_RIGHT] и x_coor < 500: х_коор += 5 вернуть x_coor # Функции для работы с мячом защита draw_ball(цвет, x, y): pg.draw.circle(экран, цвет, (x, y), 15) def move_ball_down(y, скорость, ускорение, направление): если направление == «вниз»: скорость += ускорение y += int(скорость) если у >= 415: направление = «вверх» вернуть y, скорость, направление def move_ball_up(y, скорость, ускорение, направление): если направление == «вверх»: скорость = ускорение если скорость
Я делаю игру, и у меня возникла проблема с кодом: одна математическая функция скорости мяча имеет некоторые колебания, поскольку Python не может рассчитывать со 100% точностью.
В обычном коде это не проблема, но поскольку у меня есть условие изменения типа движения с подъема на падение, оно установлено на какое-то интересное значение.
Если я изменю это число на 300, оно будет совершать только один цикл падения и роста, но если я изменю его на 320, оно сделает несколько циклов.
Проблема в том, что координация мяча по y настолько случайна. ChatGPT сказал мне, что это потому, что это колебание будет накапливаться, но последний ball_y настолько случайен, что иногда это 319, следующий 317, 320, но если он прыгает на 322 или что-то большее, чем 320, оно остановится
Я знаю, что самый простой способ — использовать некоторый диапазон, но он не работает, потому что всегда будет переходить на какое-то нехорошее значение. Можете ли вы рассказать мне, как устранить эту проблему с моим кодом?
импортировать pygame как pg импортировать случайный пг.инит() # Константы BACKGROUND_COLOR = pg.Color('черный') ШАР_Х = 240 # Инициализируем окно игры экран = pg.display.set_mode((500, 800)) часы = pg.time.Clock() # Загрузите фоновое изображение background_image = pg.image.load("bg.png") # Нарисуйте форму ромба def draw_rhombus(экран, цвет, x, пробел): точка1 = (170 + х, 740 – пробел) точка2 = (350 + х, 740 – пробел) точка3 = (300 + х, 790 – пробел) точка4 = (120 + х, 790 – пробел) точки = [точка1, точка2, точка3, точка4] вернуть pg.draw.polygon(экран, цвет, точки) # Генерируем список уникальных цветов защита генерировать_color_list(): цвета = ["КРАСНЫЙ", "ОРАНЖЕВЫЙ", "СИНИЙ", "БЕЛЫЙ"] доступные_цвета = цвета.копия() список_цветов = [] в то время как len(color_list) < 43: если недоступны_цвета: доступные_цвета = цвета.копия() цвет = случайный.выбор(доступные_цвета) если список_цветов и цвет == список_цветов[-1]: продолжать color_list.append(цвет) доступные_цвета.удалить(цвет) вернуть список цветов # Нарисуйте стопку ромбов защита draw_rhombus_stack (color_list, пробел, x): позиции = [] для меня в диапазоне (43): x_position = x, если я == 42, иначе 0 позиция = draw_rhombus(экран, список_цветов, позиция_x, пробел + я * 8) позиции.append(позиция) возврат позиций # Перемещаем стопку ромбов влево или вправо защита move_rhombus_stack (x, ключи): x_coor = x # Определить переменную x_coor если ключи[pg.K_LEFT] и x_coor > -500: х_коор -= 5 если ключи[pg.K_RIGHT] и x_coor < 500: х_коор += 5 вернуть x_coor # Функции для работы с мячом защита draw_ball(цвет, x, y): pg.draw.circle(экран, цвет, (x, y), 15) def move_ball_down(y, скорость, ускорение, направление): если направление == «вниз»: скорость += ускорение y += int(скорость) если у >= 415: направление = «вверх» вернуть y, скорость, направление def move_ball_up(y, скорость, ускорение, направление): если направление == «вверх»: скорость = ускорение если скорость
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как заставить Python использовать в вычислениях более 15 десятичных знаков?
Anonymous » » в форуме Python - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-