Betreffs Drehung des Panzers:
Gehe ich richtig in der Annahme, dass dies in 60 Grad-Schritten erfolgen wird?
Gruss wuf

Code: Alles auswählen
Python 2.5 (r25:51918, Sep 19 2006, 08:49:13)
[GCC 4.0.1 (Apple Computer, Inc. build 5341)] on darwin
Type "copyright", "credits" or "license()" for more information.
****************************************************************
Personal firewall software may warn about the connection IDLE
makes to its subprocess using this computer's internal loopback
interface. This connection is not visible on any external
interface and no data is sent to or received from the Internet.
****************************************************************
IDLE 1.2
>>> ================================ RESTART ================================
>>>
(3, [(2, 1), (3, 2), (4, 2)])
2
>>>
Naja, wie ich schon weiter oben geschrieben habe, hängt das auch davon ab, ob fertige Panzer-Images als Grafikdateien verwendet werden sollen (für den Fall trifft deine Aussage zu) oder eben innerhalb des Canvas selbst gezeichnet werden (dann trifft sie nicht zu - dann lässt sich das alles berechnen).wuf hat geschrieben:Da es bei Tkinter keine Grafik-Methode gib die ein Bildobjekt drehen kann braucht es für jede Richtung ein eigenes Image also insgesamt sechs Images pro Panzer!
Ja, "macht Sinn". Ein Panzer ist ja ein Objekt mit verschiedenen Eigenschaften (Position, Ausrichtung, evtl. Geschwindigkeit etc.) und Fähigkeiten (sich drehen, fahren, schießen etc). Da bietet es sich geradezu an, mit Panzer-Objekten zu arbeiten.derkai hat geschrieben:Würde denn jemand noch mal Stellung dazu beziehen, ob die
Einführung einer Klasse Panzer jetzt Sinn machen würde ?
Code: Alles auswählen
from funktionen import nachbardic
class Panzer (object) :
def __init__ (self,name, gehen, laufen, position, ausrichtung) :
self.name = name
self.gehen = gehen
self.laufen = laufen
self.position = position
self.ausrichtung = ausrichtung
position = (1,1)
ausrichtung = 1
print name, gehen, laufen
def eigene_bewegung (self) :
""" Aktion 1 = Drehung nach links
Aktion 2 = Drehung nach rechts
Aktion 3 = Feld vor """
abschlusswunsch = 0
aktion = 0
zwsp_aus = self.ausrichtung
zwsp_pos = self.position
while True :
while aktion != 100 :
aktion = input()
if aktion == 1 :
self.ausrichtung -= 1
if self.ausrichtung < 0 : self.ausrichtung = 5
elif aktion == 2 :
self.ausrichtung += 1
if self.ausrichtung > 5 : self.ausrichtung = 0
elif aktion == 3 :
zwischenspeicher = self.position
self.position = nachbardic[self.position][self.ausrichtung]
x = self.position[0]
y = self.position[1]
if x == 0 or y == 0 :
print "ungueltig"
self.position = zwischenspeicher
else :
if aktion == 100 :
break
else :
print "ungueltig"
continue
print self.position, self.ausrichtung
abschlusswunsch = input("zufrieden ? : ")
if abschlusswunsch == 1 : return self.position, self.ausrichtung
else :
print "sie waren nicht zufrieden, bitte ziehen Sie erneut"
self.positon = zwsp_pos
self.ausrichtug = zwsp_aus
break
Code: Alles auswählen
# Scriptname : panzer_logic_01.py
# Autor : Kai the Commander
# Erstellt : 12.08.2008
# Geaendert : 12.08.2008
import sys
from funktionen import nachbardic
class Panzer (object) :
def __init__ (self, name, gehen, laufen, position, ausrichtung) :
self.name = name
self.gehen = gehen
self.laufen = laufen
self.position = position
self.ausrichtung = ausrichtung
def eigene_bewegung(self, aktion) :
if aktion == 1 :
self.ausrichtung -= 1
if self.ausrichtung < 0 : self.ausrichtung = 5
elif aktion == 2 :
self.ausrichtung += 1
if self.ausrichtung > 5 : self.ausrichtung = 0
elif aktion == 3 :
zwischenspeicher = self.position
self.position = nachbardic[self.position][self.ausrichtung]
x = self.position[0]
y = self.position[1]
if x == 0 or y == 0 :
print "ungueltig"
self.position = zwischenspeicher
#--- MODUL-TEST --------------------------------------------------------------#
if __name__ == "__main__":
#~~ Prolog
print
print "****** Modul-Test (panzer_logic.py) ******"
print
#---- Test-Funktionen ----#
def test_ausgabe():
"""Ausgabe der Modul-Attribute"""
print
print "----------- Test-Ausgabe -------------------"
print "Panzername :", panzer.name
print "Ausrichtung :", panzer.ausrichtung
print "Position :", panzer.position
print "Gehen :", panzer.gehen
print "Laufen :", panzer.laufen
print "--------------------------------------------"
print
#---- Test ----#
#~~ Ausgangswerte
position = (1,1)
ausrichtung = 1
# Instanz Panzer
panzer = Panzer(name="Rasputin", gehen="schnell", laufen='Vorwaerts Marsch',
position=position, ausrichtung=ausrichtung)
while True :
aktion = input("Aktionen: 1,2,3 und 100 ? ")
if aktion == 100:
#~~ Abbruch oder Neubanfang
abschlusswunsch = input("zufrieden ? : ")
if abschlusswunsch:
#~~ Ausgabe der Modul-Attribute
test_ausgabe()
print "Ende der Modultest's"
print
#~~ Beende Modultest
sys.exit(0)
else:
print "Sie waren nicht zufrieden, bitte ziehen Sie erneut"
#~~ Setze Panzer auf Anfangsposition
panzer.positon = position
panzer.ausrichtug = ausrichtung
if 0 < aktion <= 3:
# Modul-Test Bewegung
panzer.eigene_bewegung(aktion)
#~~ Ausgabe der Modul-Attribute
test_ausgabe()
Nichts. Die letzte Zeile ist überflüssig bzw. sie verhindert gerade, dass "der wieder nach oben springt", weil die Schleife damit verlassen wird. An der Stelle endet ja der Schleifenrumpf - schreibst du da nichts hin, dreht die Schleife ihre nächste Runde ...derkai hat geschrieben:ja, aber was kommt da sonst hin. Wie geht es sonst ?
mit break geht es nicht, mit continue geht es nicht.
ohne etwas geht es noch viel weniger.
Was muss man denn schreiben, damit der wieder nach oben sprint ?