Hallo !
Naechster Versuch mit einem actiongeladenen Spaceshooter - nichts fuer schwache Nerven.
http://paste.pocoo.org/show/50713/
gruss frank
Invader zum ersten Mal
Code: Alles auswählen
def move_cannon(self, event):
if event.keysym_num == 65363 :
self.invader.set_cannon_move_direction(5)
elif event.keysym_num == 65361:
self.invader.set_cannon_move_direction(-5)
elif event.keysym_num == 65364 :
self.invader.set_cannon_move_direction(0)
elif event.keysym_num == 32:
self.invader.set_cannon_fire()
# würde ich lieber so schreiben:
def move_cannon(self, event):
try:
{
65363 : lambda: self.invader.set_cannon_move_direction(5),
65361 : lambda: self.invader.set_cannon_move_direction(-5),
65364 : lambda: self.invader.set_cannon_move_direction(0),
32 : self.invader.set_cannon_fire
}[event.keysym_num].__call__()
except KeyError:
pass
Sollte aber eigentlich nicht ernsthaft ins Gewicht fallen

Code: Alles auswählen
for invader in self.invaders:
if invader[0] < 0:
invader[4] = invader[4] * - 1
invader[1] += 10
elif invader[0] > self.WIDTH - 15:
invader[4] = invader[4] * - 1
invader[1] += 10
elif invader[1] > self.HEIGHT - 30:
self.player_alive = False
invader[0] += invader[4]

Erstmal könntest du `invader` entpacken:
Code: Alles auswählen
a,b,c,d = invader

Außerdem wären so insgesamt im Quellcode Kommentare nicht fehl am Platz.
Wie schon beim "Snake" möchte ich noch mal anmerken, dass ich nicht weiss, ob die `keysym_num`-Werte plattformunabhängig sind, oder gar von Tk-Version zu Tk-Version unterschiedlich sein können. Wenn es dafür nicht irgend wo symbolische Konstanten gibt, würde ich dass eher mit dem Binden von einzelnen Tasten-Events an Callbacks lösen.
Hallo BlackJack !
Das mit den keysym_num - Werten habe ich aus einem Buch und dort war es fuer WinXP. Meine Freundin hat Vista und ich Ubuntu - Werde es noch aendern, denn mit dem "Dauerfeuer" kommt nicht so Spielspass auf - falls man davon ueberhaupt reden kann.
gruss frank
Das mit den keysym_num - Werten habe ich aus einem Buch und dort war es fuer WinXP. Meine Freundin hat Vista und ich Ubuntu - Werde es noch aendern, denn mit dem "Dauerfeuer" kommt nicht so Spielspass auf - falls man davon ueberhaupt reden kann.
gruss frank
Code: Alles auswählen
65363 : lambda: self.invader.set_cannon_move_direction(5)
Code: Alles auswählen
from functools import partial
65363 : partial(self.invader.set_cannon_move_direction, 5)
Danke an alle Antworter !
Jetzt kann ich meinen Code noch zuckern, doch wie viel Zucker ist noetig ? Eine Kopie der Werte von "invader" zu erstellen wuerde die Lesbarkeit erhoehen, nur am Ende des Zugriffes muesste ich sie wieder uebergeben "invader = a, b, c, d" ? Konnte nicht so ganz beurteilen, ob es irgendwie die Performance beintraechtigt oder die Werte ueber den Index zu veraendern besser ist. Auf die Dokumentation wurde ich schon oefters hingewiesen, doch man sollte nur wichtige bzw. komplexe Sachverhalte dokumentieren ?! Da ich ja ein "Nonprofi" bin, ist fuer mich dies schwer zu beurteilen.
gruss frank
Jetzt kann ich meinen Code noch zuckern, doch wie viel Zucker ist noetig ? Eine Kopie der Werte von "invader" zu erstellen wuerde die Lesbarkeit erhoehen, nur am Ende des Zugriffes muesste ich sie wieder uebergeben "invader = a, b, c, d" ? Konnte nicht so ganz beurteilen, ob es irgendwie die Performance beintraechtigt oder die Werte ueber den Index zu veraendern besser ist. Auf die Dokumentation wurde ich schon oefters hingewiesen, doch man sollte nur wichtige bzw. komplexe Sachverhalte dokumentieren ?! Da ich ja ein "Nonprofi" bin, ist fuer mich dies schwer zu beurteilen.
gruss frank
Wieso benutzt du kein Exemplar einer Klasse statt deines 4-elementigen Arrays. Gleiches gilt auch für die Schüsse. Mann kann auch Programm schreiben, die aus mehr als zwei Klassen bestehen :)kaytec hat geschrieben:Eine Kopie der Werte von "invader" zu erstellen wuerde die Lesbarkeit erhoehen, nur am Ende des Zugriffes muesste ich sie wieder uebergeben "invader = a, b, c, d" ?
Stefan
- nkoehring
- User
- Beiträge: 543
- Registriert: Mittwoch 7. Februar 2007, 17:37
- Wohnort: naehe Halle/Saale
- Kontaktdaten:
Das Treffen der UFOs ist garnicht so einfach... ich glaube da solltest du ein wenig mehr Toleranz einbauen, so dass man ein UFO nicht gefuehlte 1000x treffen muss, bevor es wirklich weg ist ^^
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
@ sma - Das es mehr als zwei Klassen geben darf ist mir auch schon aufgefallen. Wuerde ich den speziellen Nutzen bei meinem Programm wissen, dann wuerde ich es auch einbauen.Was ist ein Exemplar einer Klasse ?
@ nkoehring - Krieg ist Krieg
Da die Bewegung immer in 5er - Schritten geht, kann man es nur an drei Stellen treffen - Das Problem ist mir auch schon aufgefallen, doch werden die Schritte kleiner, dann muss "after" schneller wiederholt werden. Das geht auf die Performance.
gruss frank
@ nkoehring - Krieg ist Krieg

gruss frank
Die Variable `Foo` enthält ein Klasse, die man daher "Foo" nennt:
Die Variable `foo` enthält ein Exemplar der Klasse "Foo":
Stefan
Code: Alles auswählen
class Foo:
pass
Code: Alles auswählen
foo = Foo()
Versuch mal, die Magic-Numbers aus dem Programm zu bekommen.
Beispiel:
Was soll dort die 5? Und was die 65?
Ab damit in eine selbst erklärende Konstante!
btw:
Und dort noch die Magic Numbers raus 
Beispiel:
Code: Alles auswählen
self.walls.append([pos_wall + 5 * pos_brick, self.HEIGHT - 65,
pos_wall + 5 * pos_brick + 5, self.HEIGHT - 60, 0,
Ab damit in eine selbst erklärende Konstante!
btw:
Code: Alles auswählen
self.cannon = [(self.WIDTH/2 + x, self.HEIGHT - y) for x, y in [
- 10, 15,
10, 15,
10, 20,
8, 20,
4, 25,
1, 25,
1, 27,
- 1, 27,
- 1, 25,
- 4, 25,
- 9, 20,
- 10, 20]]

-
- User
- Beiträge: 11
- Registriert: Montag 16. Juni 2008, 16:45
- Wohnort: Bedburg
Wie sieht das aus mit einer Highscore oder zumindest einer Punkteanzeige?
Sonst hat man ja gar keinen Ansporn
Gruß Martin
Sonst hat man ja gar keinen Ansporn

Gruß Martin
LINUX - May the source be with you!