полосу и столкновение мяча с полосой, теперь я написал код таким образом, что если мяч опускается
в низ холста, счет вычитается и мяч удаляется и снова появляется
в предыдущей исходной позиции во время игры, дело в том, что скорость фиксирована
для мяча но при другом его появлении после падения на холст его скорость меняется
или можно сказать, что его скорость увеличивается и выдает ошибку индекса списка, я не мог понять
ошибку или путь мяча ведет себя, я публикую код ниже, поэтому, пожалуйста, взгляните на него
и мне также нужна помощь, чтобы сделать движение мяча более последовательным, как в реальной игре
код:
Код: Выделить всё
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