Wie fliegen die Hühner "huhn03" und "huhn04" nach links?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mister_xyz
User
Beiträge: 21
Registriert: Freitag 6. Oktober 2017, 18:59

Hallo,
Ich habe folgenden Python Code für das Spiel Moorhuhn abschießen. Alle Hühner fliegen von links nach rechts. Kann mir bitte jemand den Code so verändern, dass nur die Hühner "huhn01" und "huhn02" von links nach rechts fliegen, dafür aber die Hühner "huhn03" und "huhn04" von rechts nach links.

from turtle import Screen, Turtle
import random, time, math, pygame
from pygame import mixer

try:
import winsound #Sound Wiedergabe Schnittstelle, bietet Zugriff auf die grundlegende Sound- Spielmaschinerie
_SOUND = True
except:
_SOUND = False
print("KEIN TON!")

SCHÜSSE = 10
GESCHWINDIGKEIT = 0.5
BREITE, HÖHE = 800, 600
TREFFER = "getroffen.wav"
DANEBEN = "daneben.wav"
GUT = "gameover.wav"
APPLAUS = "applaus.wav"

pygame.init()

# Sound
mixer.music.load("hintergrundmusik.wav") #lädt nur die Hintergrundmusik
mixer.music.play(9) #spielt tatsächlich die Hintergrundmusik 9x hintereinander ab

class MHManager(Turtle): #Konfiguration des Bildes
def __init__(self, breite, höhe): #Spezielle Turtle, hat die Aufgabe die Moorhuhn-GUI zu kontrollieren
Turtle.__init__(self, visible=False)
self.screen = Screen()
self.screen.setup(breite, höhe)
self.speed(0)
self.penup()
self.goto(-BREITE//2 + 50, -HÖHE//2 + 20)
self.pencolor("yellow") #Schriftfarbe
def message(self, txt): #Output Text im Graphik Fenster
self.clear()
self.write(txt, font=("Arial", 18, "bold"))

class Huhn(Turtle):
def __init__(self, bilddatei, game):
Turtle.__init__(self, bilddatei)
self.game = game
self.penup()
self.speed(0)
self.onclick(self.hit) #wenn auf das Huhn draufgeklickt wurde, gilt es als 'getroffen'
self.start()
def start(self):
self.hideturtle() #zuerst sind die Hühner noch nicht da.....
self.setpos(-BREITE//2-20, #das ist der Bereich, von wo aus die Hühner starten
random.randint(-HÖHE//3,
HÖHE//3))
self.vx = random.randint(6,11) * GESCHWINDIGKEIT #Zufallsgeschwindigkeit in X-Richtung
self.vy = random.randint(-3,3) * GESCHWINDIGKEIT #Zufallsgeschwindigkeit in Y-Richtung
self.getroffen = False
self.tot = False
self.showturtle() #.....jetzt sind die Hühner da
self.ausdemspiel = False
def hit(self, x, y):
if self.tot or self.game.shots==SCHÜSSE: # game over
return
self.getroffen = True
self.tot = True
self.game.score = self.game.score+1
def step(self):
if self.ausdemspiel:
time.sleep(0.01)
return
if self.tot:
self.vy = self.vy - 0.25 * GESCHWINDIGKEIT #hier fällt das angeschossene Huhn runter
x, y = self.position()
x = x + self.vx #hier die X-Koordinate des herunterfallenden Huhns
y = y + self.vy #hier die Y-Koordinate des herunterfallenden Huhns
self.goto(x,y)
if x > BREITE//2 + 20 or abs(y) > HÖHE//2 + 10:
if self.game.shots != SCHÜSSE:
self.start()
else:
self.ausdemspiel = True

class MoorhuhnGame(object):
def __init__(self): #Kombiniert Elemente des Moorhuhn Spiels.
self.mhm = mhm= MHManager(800, 600) #erzeugt Grafik-Fenster
mhm.screen.bgpic("landschaft800x600.gif")
mhm.message("Leertaste drücken, um Spiel zu beginnen")
mhm.screen.register_shape("huhn01.gif")
mhm.screen.register_shape("huhn02.gif")
mhm.screen.register_shape("huhn03.gif")
mhm.screen.register_shape("huhn04.gif")
self.huehner = [Huhn("huhn01.gif", self),
Huhn("huhn02.gif", self),
Huhn("huhn03.gif", self),
Huhn("huhn04.gif", self)]
self.gameover = True #jetzt kann ein neues Spiel beginnen
mhm.screen.onclick(self.shot, 1)
mhm.screen.onkey(self.game, "space")
mhm.screen.listen()
mhm.screen.getcanvas().config(cursor="X_cursor") #get into Tkinter
def game(self):
if not self.gameover:
return #altes Spiel läuft noch
self.mhm.message("SPIEL LÄUFT!")
self.shots = 0
self.score = 0
self.gameover = False
for huhn in self.huehner:
huhn.start()
while not self.gameover:
for huhn in self.huehner:
huhn.step()
gameover = self.shots == SCHÜSSE
for huhn in self.huehner:
gameover = (gameover and huhn.ausdemspiel)
self.gameover = gameover
trefferrate = self.score/self.shots
self.mhm.message( ("Score: %1.2f" % trefferrate) + " - Leertaste drücken!")
if trefferrate >= 0.7:
self.sound(GUT)
elif 0.4 <= trefferrate < 0.7:
self.sound(APPLAUS)
def shot(self, x, y):
if self.shots == SCHÜSSE:
return #es läuft kein Spiel, also kein Schuß
self.shots = self.shots + 1
klangdatei = DANEBEN
for huhn in self.huehner:
if huhn.getroffen:
klangdatei = TREFFER
huhn.getroffen = False
break
if self.shots == SCHÜSSE:
self.mhm.message("SPIEL VORBEI!")
else:
self.mhm.message("Treffer/Schüsse: %d/%d" %(self.score, self.shots))
self.sound(klangdatei)
def sound(self, soundfile):
if not _SOUND: return
winsound.PlaySound(soundfile, winsound.SND_ASYNC)

def main(): #Hauptfunktion
MoorhuhnGame()
return "EVENTLOOP"

if __name__ == "__main__":
msg = main()
print(msg)
Screen().mainloop() #prüft permanent, ob ein Event auftritt
Sirius3
User
Beiträge: 18265
Registriert: Sonntag 21. Oktober 2012, 17:20

Ob hier jemand einen Programmierauftrag annimmt, bezweifle ich.
Warum machst Du es nichts selbst?
Benutzeravatar
__blackjack__
User
Beiträge: 14030
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@mister_xyz: Wo liegt denn das konkrete Problem? Das Programm wird ja im letzten Kapitel von „Python für Kids“ von Gregor Lingl entwickelt, dass heisst da sollte ja eigentlich das Wissen so etwas zu entwickeln, oder zumindest nachzuvollziehen was in Kapitel 15 gemacht wird, vorhanden sein.

Das Buch ist für komplette Programmieranfänger konzipiert und verwendet durchgehend Turtle-Grafik, also nicht nur in ein oder zwei Kapiteln die sich mit Grafik befassen, wie in vielen anderen Büchern. Und der Autor geht davon aus, dass man das ganze Buch durcharbeitet. Man kann also nicht wirklich direkt beim letzten Kapitel anfangen oder Kapitel in der Mitte auslassen. Zitat aus dem Abschnitt „Wie arbeitest du mit diesem Buch?“ in der Einleitung: „Dieses Buch ist ein Arbeitsbuch. Das heißt, du musst es von vorne bis hinten durcharbeiten. Es ist kein Nachschlagewerk.“
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Antworten