Python ping-pong, ускорение мяча после удара веслом

Я уверен, что этого не сделать.

Просматривая исходный код , есть комментарий, в котором упоминается, что оригинальный метод полностью заменен.

# The original implementation of the method is replaced during the test and then restored at the end of the test. The temporary replacement method has the same visibility as the original method.

0
задан ledinos1 20 February 2019 в 22:17
поделиться

1 ответ

Итак, после небольшого обзора вашей игры я обнаружил ошибку, что мяч «прилипнет» к лопатке с левой стороны, и, как вы сказали, скорость не сбрасывает каждый счет. Я исправил это в нескольких местах, и это, кажется, значительно улучшилось.

Сначала я сбрасывал скорость каждый раз, когда набирался счет:

if ball.xcor() > 390:
    ball.goto(0, 0)
    ball.dx = 1 / 5 # reset to initial speed
    score_a += 1
    pen.clear()
    pen.write("Player A: {}  Player B: {}".format(score_a, score_b), align="center", font=("Courier", 24, "normal"))

if ball.xcor() < -390:
    ball.goto(0, 0)
    ball.dx = 1 / 5 # reset to initial speed
    ball.dx *= -1
    score_b += 1
    pen.clear()
    pen.write("Player A: {}  Player B: {}".format(score_a, score_b), align="center", font=("Courier", 24, "normal"))

Я думаю, что это можно улучшить, если иметь переменную вверху, например initial_speed = 1/5, а затем вы можете поставить ball.dx = initial_speed везде это сбрасывает. Это позволяет вам изменять только один номер в верхней части вашей программы, и он будет регулировать скорость повсюду, предотвращая необходимость выслеживать везде, где вы сбрасываете его каждый раз! бит

if (ball.xcor() > 340 and ball.xcor() < 350) and (ball.ycor() < paddle_b.ycor() + 50 and ball.ycor() > paddle_b.ycor() -40):
    ball.setx(340)
    ball.dx *= -1 # flip direction first
    ball.dx -=1 # speed it up

if (ball.xcor() < -340 and ball.xcor() > -350) and (ball.ycor() < paddle_a.ycor() + 50 and ball.ycor() > paddle_a.ycor() -40):
    ball.setx(-340)
    ball.dx *= -1
    ball.dx +=1

Опять же, это можно улучшить, создав переменную speed_up_by = 1, а затем используя ball.dx += speed_up_by, чтобы легко настроить ее. Я думаю, что 1 - слишком большое число, и вы не сможете получить более 5 попаданий (если вам повезет). Чтобы ответить на ваш комментарий о том, почему один ball.dx +=1, а другой - ball.dx -=1, я призываю вас подумать об этом в цифрах. Начальная скорость равна .2 (или 1/5), а затем после того, как она ударяет по правой стороне, вы должны повернуть ее вспять (до -2 и теперь она движется влево), а затем увеличить ее скорость (минус 1 -> - 1.2). Теперь, когда он попадает на другую сторону, вы снова поворачиваете его (до 1,2), а затем увеличиваете его скорость (добавляя 1 -> 2,2). Вы можете видеть, что, хотя мы вычитаем из скорости, она на самом деле увеличивает величину скорости !! Я думаю, это также показывает, что увеличение скорости на 1 при каждом ударе безумно велико. После первого удара мяч движется в 6 раз с начальной скоростью !!! После 2 попаданий он будет 11 раз начальной скорости !!! Вы, вероятно, хотите увеличить величину скорости на 0,1 каждый раз. Это делает так, что после 1 удара скорость только в 1,5 раза превышает начальную скорость. После 2 попаданий скорость вдвое превышает начальную скорость ... и т. Д.

0
ответ дан Reedinationer 20 February 2019 в 22:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: