Miért nem működik ez a Python3 pingpong program?
import turtle
#Ablak
ablak = turtle.Screen()
ablak.setup(width=800, height=600)
ablak.bgcolor('black')
ablak.title('PONG')
ablak.tracer(0)
# Bal oldali ütő
bal_uto = turtle.Turtle()
bal_uto.speed(0)
bal_uto.shape('square')
bal_uto.shapesize(stretch_wid=5, stretch_len=1)
bal_uto.color('blue')
bal_uto.penup()
bal_uto.goto(-350, 0)
# Jobb oldali ütő
jobb_uto = turtle.Turtle()
jobb_uto.speed(0)
jobb_uto.shape('square')
jobb_uto.shapesize(stretch_wid=5, stretch_len=1)
jobb_uto.color('red')
jobb_uto.penup()
jobb_uto.goto(350, 0)
# Labda
labda = turtle.Turtle()
labda.speed(0)
labda.shape('circle')
labda.color('yellow')
labda.penup()
labda.goto(0, 0)
labda.változásX = 2
labda.változásY = -2
#pontszám
jobb_pontszam = 0
bal_pontszam = 0
pontszam = turtle.Turtle()
pontszam.speed(0)
pontszam.color('white')
pontszam.penup()
pontszam.hideturtle
pontszam.goto(0, 260)
pontszam.write(f'Jobb játékos: {jobb_pontszam} Bal játékos: {bal_pontszam}', align='center', font=('Curier', 24, 'normal'))
#billentyűzet kezelő
def bal_uto_fel():
y = bal_uto.ycor()
y += 30
bal_uto.sety(y)
def bal_uto_le():
y = bal_uto.ycor()
y -= 30
bal_uto.sety(y)
def jobb_uto_fel():
y = jobb_uto.ycor()
y += 30
jobb_uto.sety(y)
def jobb_uto_le():
y = jobb_uto.ycor()
y -= 30
jobb_uto.sety(y)
#billenyűzet olvasó
ablak.onkey(bal_uto_fel, 'w')
ablak.onkey(bal_uto_le, 's')
ablak.onkey(jobb_uto_fel, 'Up')
ablak.onkey(jobb_uto_le, 'Down')
ablak.listen()
while True:
ablak.update()
labda.setx(labda.xcor() + labda.változásX)
labda.sety(labda.ycor() + labda.változásY)
#tetejéről pattanjon vissza
if labda.ycor() > 288:
labda.sety(288)
labda.változásY *= -1
#aljárol pattanjon vissza
if labda.ycor() < -288:
labda.sety(-288)
labda.változásY *= -1
#jobb oldal érintése
if labda.xcor() > 388:
labda.goto(0, 0)
labda.változásX *= -1
bal_pontszam += 1
pontszam.clear()
pontszam.write(f'Jobb játékos: {jobb_pontszam} Bal játékos: {bal_pontszam}', align='center', font=('Curier', 24, 'normal'))
#bal oldal érintése
if labda.xcor() < -388:
labda.goto(0, 0)
labda.változásX *= -1
jobb_pontszam += 1
pontszam.clear()
pontszam.write(f'Jobb játékos: {jobb_pontszam} Bal játékos: {bal_pontszam}', align='center', font=('Curier', 24, 'normal'))
#jobb oldali ütőről visszapattan
if jobb_uto.xcor()-20 < labda.xcor() < jobb_uto.xcor() and jobb_uto.ycor()-40 < labda.ycor < jobb_uto.ycor()+40:
labda.setx(jobb_uto.xcor()-20)
labda.változásX *= -1
#bal oldali ütőről visszapattan
if bal_uto.xcor()+20 > labda.xcor() > bal_uto.xcor() and bal_uto.ycor()-40 < labda.ycor < bal_uto.ycor()+40:
labda.setx(bal_uto.xcor()+20)
labda.változásX *= -1
Elindul a program ezután egyszer pattan alul jobbra majd bezár a program.
Nem tudom mi lehet a gond!
Köszi előre a válaszokat!
0. Forráskódot - pláne Python esetén, ahol az indentálás egy fontos dolog - tessék kódmegosztó oldalon (Pastebin, Ghostbin, Hastebin) keresztül megosztani. Átláthatóbb, mint ide beömlesztve
1. Ékezetes változónevekről tessék leszokni.
Illetőleg ha már ékezeteket használsz a forráskódban javallott az első sorba az alábbit berakni:
# -*- coding: utf-8 -*-
így nem fog nyafogni az interpreter.
2. A betűtípus neve Courier - mint a futár angolul - és nem Curier.
3. Tessék elolvasni és értelmezni a fordító által visszadobott hibakódot:
"if jobb_uto.xcor()-20 < labda.xcor() < jobb_uto.xcor() and jobb_uto.ycor()-40 < labda.ycor < jobb_uto.ycor()+40:
TypeError: '<' not supported between instances of 'int' and 'method'"
A problémát a
jobb_uto.ycor()-40 < labda.ycor
kifejezés okozza: a
jobb_uto.ycor() - 40
kifejezés visszatérési értéke egy szám, a
labda.ycor
kifejezésé pedig egy metódus - a kettő nem összehasonlítható.
Helyesen így nézne ki:
jobb_uto.ycor() - 40 < labda.ycor()
ugyanez a bal_uto esetén is.
Szóval minimum így:
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!