Почему скорость мяча меняется в холстеPython

Программы на Python
Anonymous
Почему скорость мяча меняется в холсте

Сообщение Anonymous »

Итак, я делал игру «Разбивание кирпичей» на Canvas Python, мне удалось создать движущийся мяч, движущуюся
полосу и столкновение мяча с полосой, теперь я написал код таким образом, что если мяч опускается
в низ холста, счет вычитается и мяч удаляется и снова появляется
в предыдущей исходной позиции во время игры, дело в том, что скорость фиксирована
для мяча но при другом его появлении после падения на холст его скорость меняется
или можно сказать, что его скорость увеличивается и выдает ошибку индекса списка, я не мог понять
ошибку или путь мяча ведет себя, я публикую код ниже, поэтому, пожалуйста, взгляните на него
и мне также нужна помощь, чтобы сделать движение мяча более последовательным, как в реальной игре
код:

Код: Выделить всё

import tkinter as tk
from tkinter import *
import time

score = 0
x_velocity = 30
y_velocity = 20

def left(event):

if canvas.coords(paddle)[0] < 0:
canvas.move(paddle, 0,0)
else:
canvas.move(paddle, -10,0)

def right(event):

if canvas.coords(paddle)[2] > 800:
canvas.move(paddle, 0, 0)
else:
canvas.move(paddle, 10,0)

def ball_formation():

global ball
ball = canvas.create_oval(150,150,170,170, fill = 'white')
window.update()
window.after(300,ball_motion())

def ball_motion():

global score

if canvas.coords(ball)[0] = 800:
global x_velocity
x_velocity = - x_velocity

elif canvas.coords(ball)[1] = 500: # this is where the ball gets made again
# and somehow its velocity changes
if score > 200 :
score-= 200

else:
score = 0

score_label.config(text = 'Score : {}'.format(score))

canvas.delete(ball)

window.update()
window.after(300,ball_formation())

elif collision_of_ball_with_paddle() is True:
score += 250
score_label.config(text = 'Score : {}'.format(score))

canvas.move(ball, x_velocity, y_velocity)
window.after(300,ball_motion)

def collision_of_ball_with_paddle():

if canvas.coords(ball)[2] >= canvas.coords(paddle)[0] and canvas.coords(ball)[2] = 395:
global y_velocity
y_velocity = - y_velocity
return True

else:
return False

window = tk.Tk()
window.title('Game')
window.geometry('900x600+135+0')

score_label = Label(window, font = ('consolas',40), text = 'Score : {}'.format(score))
score_label.pack(side = 'top')

canvas = Canvas(window, width = 800, height = 500, bg = 'black')
canvas.pack()

paddle = canvas.create_rectangle(10,400,110,405, fill = 'white')
window.bind('',left)
window.bind('',right)

ball_formation()

window.mainloop()
ошибка -
if Canvas.coords(ball)[0] = 800:
~~ ~~~~~~~~~~~~~~~~~^^^
IndexError: индекс списка выходит за пределы диапазона

Подробнее здесь: https://stackoverflow.com/questions/783 ... -in-canvas

Вернуться в «Python»