TKINTER DANS PYTHONComment réparer un problème de double mouvement?
Ok, donc j'essaye de faire un jeu de pong à 2 joueurs, et jusqu'ici, j'ai rencontré 3 problèmes. C'est le 3ème que je ne peux honnêtement obtenir ma tête autour (si vous voulez voir où la question se pose, trouver la logique de mouvement #Ball )
#Setting up the window
from tkinter import *
HEIGHT=500
WIDTH=800
window=Tk()
window.title('PONG!')
c=Canvas(window,width=WIDTH,height=HEIGHT,bg='black')
c.pack()
MID_X=WIDTH/2
MID_Y=HEIGHT/2
def pongstick():
return c.create_polygon(0,0, 10,0, 10,70, 0,70, fill='white')
def ball():
return c.create_oval(MID_X-10,MID_Y-10, MID_X+10,MID_Y+10, fill='white')
pong1=pongstick()
pong2=pongstick()
ballplay=ball()
MID_Y=MID_Y-35
c.move(pong1, 40, MID_Y)
c.move(pong2, WIDTH-40, MID_Y)
#Scores
player1p=0
player2p=0
#Movement of the paddles
stickspeed=10
def move_stick(event):
if event.keysym == 'w':
c.move(pong1, 0, -stickspeed)
elif event.keysym == 's':
c.move(pong1, 0, stickspeed)
if event.keysym == 'Up':
c.move(pong2, 0, -stickspeed)
elif event.keysym == 'Down':
c.move(pong2, 0, stickspeed)
#Ball movement logic
ballspeed=10
ballY=ballspeed
ballX=ballspeed
ballXadd=WIDTH/2
ballYadd=HEIGHT/2
def move_ball():
c.move(ballplay, ballX, ballY)
ballXadd=ballXadd+ballX
ballYadd=ballYadd+ballY
if ballXadd > WIDTH:
player2p=player2p+1
c.move(ball,MID_X-10,MID_Y-10)
ballXadd=0
ballYadd=0
elif ballXadd < WIDTH:
player1p=player1p+1
c.move(ball,MID_X-10,MID_Y-10)
ballXadd=0
ballYadd=0
elif ballYadd > HEIGHT:
if ballX == ballspeed:
ballY = -ballspeed
elif ballX == -ballspeed:
ballY = ballspeed
elif ballYadd < HEIGHT:
if ballX == ballspeed:
ballY = ballspeed
elif ballX == -ballspeed:
ballY = -ballspeed
#GAME!
c.bind_all('<Key>',move_stick)
move_ball()
problème est, je reçois le message d'erreur suivant chaque fois que je exécutez ceci:
Traceback (most recent call last):
File "/Users/jackstrange/Documents/Untitled.py", line 79, in <module>
move_ball()
File "/Users/jackstrange/Documents/Untitled.py", line 50, in move_ball
c.move(ballplay, ballX, ballY)
UnboundLocalError: local variable 'ballY' referenced before assignment
Il y a probablement quelque chose que je suis absent qui est sérieusement base que tout l'enfer, comme l'aide d'une commande de retour ou quelque chose, mais ce qui me confond pourquoi fonctionne ballX mais BALLY ne fonctionne pas. Une aide serait bien: D
Pouvez-vous me donner quelques conseils pour le régler? Est-ce que je le mets juste littéralement dans la fonction? Cuz c'est irritant – gamegladiator123
Juste découvert que c'était correct. Maintenant, j'ai rencontré un autre problème: comment est-ce que je boucle une partie de la fonction sans boucler l'autre tout en gardant tout le reste mobile? Fondamentalement, comment faire bouger la balle, avec détection de coup, tout en permettant aux pagaies de bouger? – gamegladiator123
(1) C'est un problème distinct; veuillez poster une nouvelle question, selon les directives de StackOverflow. (2) Comme donnée, cette question est beaucoup trop large pour être qualifiée sur StackOverflow; c'est essentiellement nous demander de concevoir une grande partie de votre jeu. – Prune