Anfänger: Was mache ich richtig, was falsch?

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
drxt
User
Beiträge: 19
Registriert: Samstag 26. Januar 2008, 17:12

Hi,

Es ist zwar noch kein Doom 4 , aber zumindest mein erstes spielähnliches Programm in Python.
Kann sich bitte jemand die Mühe machen und sich den Code angucken?
Ich fange gerade erst mit Python an und desto früher ich auf meine Fehler aufmerksam gemacht werde, desto besser.
Seht das als Beitrag an die Community: Wenn ihr mir JETZT helft meinen Code sauberer zu machen und mich auf Fehler hinweist, dann werde ich auch in Zukunft saubereren Code schreiben und damit vielen Menschen (den ich zukünftige Programme zur Begutachtung schicken werde) das entziffern von einem Wirrwar ersparen.
Zum Programm: Ich habe noch keine Klassen, Vererbung usw. gelernt. Das was ich benutzt habe ist auch mein momentaner Wissensstand.
Ich möchte nur wissen, ob ich mit meinem Wissen auch richtig umgehen kann und was ich hätte anders machen müssen.
(scheinbar kann man in diesem Forum keine Dateianhänge machen...Was wäre den der beste weg, um meine Dateien verschicken zu können ohne sie im Thread als Code anzuzeigen?)

Hier der Code:

http://paste.pocoo.org/show/24084/

http://paste.pocoo.org/show/24083/

http://paste.pocoo.org/show/24085/

http://paste.pocoo.org/show/24086/

http://paste.pocoo.org/show/24087/
Zuletzt geändert von drxt am Sonntag 27. Januar 2008, 23:13, insgesamt 1-mal geändert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

drxt hat geschrieben:(scheinbar kann man in diesem Forum keine Dateianhänge machen...Was wäre den der beste weg, um meine Dateien verschicken zu können ohne sie im Thread als Code anzuzeigen?)
Ins LodgeIt auslagern und deinen ursprünglichen Post editieren. Das solltest du machen, weil sonst lange Threads mit viel Code aufgrund von einem seltsamen Bug blockieren.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Das sind zu viele Dateien. Die "eine Klasse pro Datei"-Fixierung von Java-Umsteigern ist ja schon übertrieben, aber eine Datei pro Funktion ist absolut übertrieben. Module sind dazu da zusammengehörige Funktionen und Klassen zu einer Einheit zusammen zu fassen.

`Durchlauf` scheint eigentlich ein Wahrheitswert zu sein, also `True`/`False`. Die Verwendung ist dann ziemlich abenteuerlich. Eine ``while``-Schleife die grundsätzlich nur einmal durchlaufen wird ist ein komplizierter Weg ein ``if`` aus zu drücken. Aber dieser Block sollte sowieso besser *vor* der äusseren ``while``-Schleife stehen weil er nur ein mal im ersten Durchlauf vor jedem anderen Code ausgeführt wird.

`SpielerPosition` und `GegnerPosition` sollten dort auch direkt durch Zuweisung von Koordinaten gesetzt werden. Das Dir das Setzen in der Funktion nicht gefällt, hast Du ja selbst schon geschrieben.

Klammern um die Bedingungen bei ``if``/``while`` sind unnötig.

Was sollen die kleinen `p`\s vor den Parameternamen? Unnötige Tipparbeit und verwirrend.

Wenn man die Liste die `range()` erzeugt nicht braucht, ist `xrange()` speicherschonender. Die 0 als Startwert wird in der Regel nicht explizit angegeben. `Feld` in `SpielfeldErzeugen()` sollte man in der äusseren ``for``-Schleife direkt vor der Inneren an eine leere Liste binden. Dann braucht man das nur einmal schreiben.

Die ``for``-Schleife in `GegnerPosition()` wird nur einmal ausgeführt.

Statt der vier ``if``-Abfragen kommt man auch mit zwei Zeilen aus, die den Umstand nutzen, dass die `cmp()`-Funktion 1, 0, oder -1 liefert.

Über Listen kann man in Python auch direkt iterieren, ohne den Umweg über Indizes zu gehen. `i` und `j` in `SpielfeldZeichnen()` sind also überflüssig.

Wirf mal einen Blick in den Style Guide.
drxt
User
Beiträge: 19
Registriert: Samstag 26. Januar 2008, 17:12

Danke, dass du dir diese Mühe gemacht hast BlackJack!
Antworten