Ursprungsmitteilung
Thema Pong mit Turtlegrafik 
Autor N.N 
Eingangsdatum 2018-05-14 21:39:39.0 
Mitteilung Guten Abend Sehr geehrte Damen und Herren!

Mein Freund und ich sitzen seit langem an einem kleinen Projekt, wo wir probieren unser eigenes Spiel zu programmieren.

In unserem Fall handelt es sich um das Spiel "Pong" (ein Ball der an den Wänden abprallt und mit einem Balken davon abgehalten werden soll die untere Seite des Spielfeldes zu verlassen).

Nun haben wir bereits herausgefunden, wie wir den Ball programmieren müssen, aber wir wissen nicht, wie wir den Balken als Objekt festlegen können und als Ganzes verschieben und können damit auch nicht sagen, dass der Ball immer am Balken abprallt.

Das Problem beschäftigt uns bereits einige Wochen, aber es kann uns niemand helfen, der weiss, wie der Balken als Objekt definiert wird.

Möglicherweise erscheint das als sehr simples Problem aber wir beide haben noch sehr Mühe uns in der ganzen neuen Programmiersprache zurechtzufinden und wären Ihrer Hilfe sehr dankbar!

Vielen Dank im Voraus und herzliche Grüsse!

(Programm als Mail an help@tigerjython.ch versendet.)

P.S. Im Anhang schicke ich Ihnen noch das Dokument, falls es Ihnen hilft unseren Fehler zu entdecken! 
 
      
Antworten
Thema Pong mit Turtlegrafik 
Autor Aegidius Plüss 
Eingangsdatum 2018-05-15 07:42:35.0 
Mitteilung Besten Dank für die Anfrage. Es freut uns, dass Sie sich in das Programmieren mit Python einarbeiten. Das Spiel "Pong" ist dazu hervorragend geeignet und wir werden es wohl irgendwo in eines unserer Tutorials aufnehmen.

Ich möchte vorausschicken, dass Sie das Problem richtig angpackt haben und sich der Ball ja auch schon gut bewegt.
Es handelt sich um eine Animation. Die Grundlagen dazu können Sie in unserem Tutorial tigerjython4kids.ch unter Turtlegrafik | Computeranimation finden.

Hier einige Tips zum weiteren Vorgehen:

- Sie sollten enableRepaint(False) verwenden, damit es kein Flackern gibt
- Sie behandeln den Balken wie die Kugel, nur dass seine x-Position mit den Cursortasten verändert werden kann
- Sie bauen noch weitere Gags ein: Ende des Programms, Ausschreiben von Resultaten, usw.

Nachfolgend eine Erweiterung Ihres Programms, die schon recht gut funktioniert.
Viel Spass!
A.P.
TJ Group


from gturtle import *
from time import sleep

def paintBall(color):
setPenColor(color)
setPos(posX,posY)
dot(20)

def updateBar(barX):
setPenWidth(barHeight)
setPenColor("black")
setPos(barX - barLength / 2, barY)
heading(90)
fd(barLength)

def updateBall(xBar):
# returns True at eno of game; otherwise False
global posY, posX , speedY , speedX

if hitBar():
speedY *= -1
elif posY >= 300:
speedY *= -1
elif posX >= 400:
speedX *= -1
elif posX <= -400:
speedX *= -1
elif posY <= -300:
return True # end of game

posY += speedY
posX += speedX
paintBall("red")
return False

def hitBar():
if barX - barLength / 2 < posX < barX + barLength / 2 and
barY - barHeight / 2 < posY < barY + barHeight / 2:
return True
return False

# ------------------ main ----------------------
makeTurtle()
ht()

posX = 0
posY = 0
speedX = 3
speedY = 3

barX = 0 # center of bar
barLength = 200
barHeight = 20
barY = -290

enableRepaint(False)
endOfGame = False
while not endOfGame:
keyCode = getKeyCode()
if keyCode == 37: # left cursor
barX -= 10
elif keyCode == 39: # right cursor
barX += 10
elif keyCode == 27: # escape
break

clear()
updateBar(barX)
endOfGame = updateBall(barY)
repaint()
sleep(0.01)
setPos(0, 0)
setPenColor("green")
label("End of Game", adjust = 'c')
repaint()