Hallo, ich schon wieder !
ich habe soeben erst begonnen mich mit Python zu beschäftigen und wie schon einmal erwähnt : ich lese und lese und lese.
Jetzt bin ich aber ein einem Punkt, wo alle Bücher das Thema OOP aufgreifen. Und ganz ehrlich gesagt, für den Moment ist mir das einfach too much.
Hintergrund ist, das ich gerne (bin heute 34 Jahre) bis zu meiner Rente ein Brettspiel programmieren möchte. Es drängt mich dabei nichts und wer sagt denn, das man nicht mit seinen Zielen wachsen kann ?!
Ist es möglich, oder sinnvoll das Thema vorerst auszuklammern ?
Kann ich nicht eventuell mit eigenen Funktionen arbeiten ? und diese dann eventuell später zu Klassen verwandeln ?
Trotz intensivem Lesen ist mir bisher der Sinn und Zweck, vor allem in Bezug auf mein geplantes "Programm / Spiel" noch nicht verständlich geworden.
Helft Ihr meinem Spatzenhirn mal ein wenig auf die Sprünge ?
Vorab besten Dank
Kai
OOP für "Dummies" ???
Also _direkt_ mit deinem Ziel anzufangen ist sicher nicht der richtige Weg.
Lerning by doing, also experimentier einfach mal rum Der Pythoninterpreter ist perfekt dafür, da du ja direkt das Ergebnis vor dir hast.
Es wäre vielleicht noch interessant zu wissen, was für ein Brettspiel das ist.
Und willst du eine graphische Oberfläche dafür haben? Eventuell einen Multiplayermodus über Internet? Das alles wären Dinge, die du dir dann nochmal extra anschaun musst.
Aber wenn du das OOP-Konzept nicht verstanden hast, solltest du dir das auf jeden Fall nochmal gut anschaun. Keine Sorge, bei jedem dauert das etwas, bis es Klick macht
Was Klassen sind, usw, erklär ich hier besser mal nicht, da es schon genügend sehr gute Erklärungen zu OOP gibt
Also erarbeite dir am Besten mal das Grundlegende, sofern du das noch nicht gemacht hast: Die Standarddatentypen (list, dict, int, string, ...), Funktionen, Schleifen, IF/Elif/Else, ...
Naja das reicht im Prinzip schon, um dann mit OOP keine Probleme mehr zu haben.
Was für ein Sinn OOP macht wirst du erst erkennen, wenn du's verstanden hast :p
Lerning by doing, also experimentier einfach mal rum Der Pythoninterpreter ist perfekt dafür, da du ja direkt das Ergebnis vor dir hast.
Es wäre vielleicht noch interessant zu wissen, was für ein Brettspiel das ist.
Und willst du eine graphische Oberfläche dafür haben? Eventuell einen Multiplayermodus über Internet? Das alles wären Dinge, die du dir dann nochmal extra anschaun musst.
Aber wenn du das OOP-Konzept nicht verstanden hast, solltest du dir das auf jeden Fall nochmal gut anschaun. Keine Sorge, bei jedem dauert das etwas, bis es Klick macht
Was Klassen sind, usw, erklär ich hier besser mal nicht, da es schon genügend sehr gute Erklärungen zu OOP gibt
Also erarbeite dir am Besten mal das Grundlegende, sofern du das noch nicht gemacht hast: Die Standarddatentypen (list, dict, int, string, ...), Funktionen, Schleifen, IF/Elif/Else, ...
Naja das reicht im Prinzip schon, um dann mit OOP keine Probleme mehr zu haben.
Was für ein Sinn OOP macht wirst du erst erkennen, wenn du's verstanden hast :p
also erst einmal Danke für die Hilfe.
Es gab einmal ein Brettspiel mit dem Namen : BattleTech.
Das wurde bereits mehrfach als ACTION Spiel umgesetzt Leider wohl aber nie so, wie wir es früher "auf dem Brett" spielten.
Ich bin mir sicher, Du wirst es nicht kennen, (klingt für einen Erwachsenen auch ziemlich lächerlich) man steuert praktisch so einen Art Panzer auf zwei Beinen durch eine Landschaft. Bei mir sollen es Panzer werden.
Wie das nun einmal so ist, besitzt jeder Panzer unterschiedliche Eigenschafte, welche bei der Möglichkeiten der Bewegung beginnen und mit unterschiedlicher Bewaffnung aufhören.
Ein Beispiel. Ich kann mit dem Panzer eine kurze, oder lange Strecke fahren.
Wenn ich eine lange Strecke fahre, bzw. schnell fahre ist es für den Gegner schwieriger mich zu treffen, als wenn ich stehen geblieben wäre.
Ausserdem kommt es darauf an, ob ich mich selber auf freiem Feld, oder z.B in einem Wald befinde.
Eine Funktion die dies berücksichtigt habe ich dafür schon erstellt :
def vorgabe (bewegung, feld):
if bewegung == 0: bewegung = 0
elif bewegung <= 4: bewegung = 1
elif bewegung <= 8: bewegung = 2
if feld == 0 : feld = 0
elif feld == 1 : feld = 1
elif feld == 2 : feld = 2
gvgb = bewegung + feld
print bewegung
print feld
print gvgb
return bewegung
return feld
return gvgb
vorgabe(6,2)
# bewegung ist ist die der vorgabe durch die eigene bewegung
# feld ist die vorgabe durch das feld in welchem die figur sich befindet
# gvgb ist die gesamtvorgabe der spielfigur durch bewegung und feld
Und so gibt es eben viele viele Spielregeln, die man hier zu berücksichtigen hat.
Da ich ja bis zur Rente Zeit habe, hatte ich es mir für den Beginn so vorgestellt, dass es zwei oder mehrer Spieler (im privaten Umfeld gibt)
Für´s erste würde es reichen, dass man den Spielstand als Datei speichern und per mail weiterreichen könnte.
Später wäre natürlich eine Spielmöglichkeit übers web, oder vernetzt besser.
Tja, so viel zu meinen Spinnerreien
Kai
Es gab einmal ein Brettspiel mit dem Namen : BattleTech.
Das wurde bereits mehrfach als ACTION Spiel umgesetzt Leider wohl aber nie so, wie wir es früher "auf dem Brett" spielten.
Ich bin mir sicher, Du wirst es nicht kennen, (klingt für einen Erwachsenen auch ziemlich lächerlich) man steuert praktisch so einen Art Panzer auf zwei Beinen durch eine Landschaft. Bei mir sollen es Panzer werden.
Wie das nun einmal so ist, besitzt jeder Panzer unterschiedliche Eigenschafte, welche bei der Möglichkeiten der Bewegung beginnen und mit unterschiedlicher Bewaffnung aufhören.
Ein Beispiel. Ich kann mit dem Panzer eine kurze, oder lange Strecke fahren.
Wenn ich eine lange Strecke fahre, bzw. schnell fahre ist es für den Gegner schwieriger mich zu treffen, als wenn ich stehen geblieben wäre.
Ausserdem kommt es darauf an, ob ich mich selber auf freiem Feld, oder z.B in einem Wald befinde.
Eine Funktion die dies berücksichtigt habe ich dafür schon erstellt :
def vorgabe (bewegung, feld):
if bewegung == 0: bewegung = 0
elif bewegung <= 4: bewegung = 1
elif bewegung <= 8: bewegung = 2
if feld == 0 : feld = 0
elif feld == 1 : feld = 1
elif feld == 2 : feld = 2
gvgb = bewegung + feld
print bewegung
print feld
print gvgb
return bewegung
return feld
return gvgb
vorgabe(6,2)
# bewegung ist ist die der vorgabe durch die eigene bewegung
# feld ist die vorgabe durch das feld in welchem die figur sich befindet
# gvgb ist die gesamtvorgabe der spielfigur durch bewegung und feld
Und so gibt es eben viele viele Spielregeln, die man hier zu berücksichtigen hat.
Da ich ja bis zur Rente Zeit habe, hatte ich es mir für den Beginn so vorgestellt, dass es zwei oder mehrer Spieler (im privaten Umfeld gibt)
Für´s erste würde es reichen, dass man den Spielstand als Datei speichern und per mail weiterreichen könnte.
Später wäre natürlich eine Spielmöglichkeit übers web, oder vernetzt besser.
Tja, so viel zu meinen Spinnerreien
Kai
Zuletzt geändert von derkai am Sonntag 1. Juni 2008, 13:43, insgesamt 1-mal geändert.
imac
20 Zoll
2,4 ghz
20 Zoll
2,4 ghz
gleiches gilt z.b. für den MLASER (also eine der vielen Waffenn)
um den Gegner zu treffen muss man eine bestimmte Zahl würfeln.
Diese ssetzt sich z.b. aus :
- der Vorgabe des Gegners durch dessen Bewegung (schnell / weit gefahren) oder vielleicht stehen geblieben
- und der Reichweite der Waffe zusammen
Dieses ermittelt sich aus der Entfernung in Feldern zum Gegner zusammen.
guckst DU :
def mlaser(range):
mlaserheat=3
mlaserschaden=5
if range <= 3 : range = 4
elif range >= 4 and range <= 6: range = 6
elif range >= 7 and range >= 9: range = 8
print range
return mlaserheat
return mlaserschaden
return range
mlaser(5)
# vorgabegegner
# entfernung
# eigenevorgabe
Danach erzeut diese Waffe eine Wärme, die wieder abgebaut werden muss. ABER so weit bin ich noch nicht
Kai
um den Gegner zu treffen muss man eine bestimmte Zahl würfeln.
Diese ssetzt sich z.b. aus :
- der Vorgabe des Gegners durch dessen Bewegung (schnell / weit gefahren) oder vielleicht stehen geblieben
- und der Reichweite der Waffe zusammen
Dieses ermittelt sich aus der Entfernung in Feldern zum Gegner zusammen.
guckst DU :
def mlaser(range):
mlaserheat=3
mlaserschaden=5
if range <= 3 : range = 4
elif range >= 4 and range <= 6: range = 6
elif range >= 7 and range >= 9: range = 8
print range
return mlaserheat
return mlaserschaden
return range
mlaser(5)
# vorgabegegner
# entfernung
# eigenevorgabe
Danach erzeut diese Waffe eine Wärme, die wieder abgebaut werden muss. ABER so weit bin ich noch nicht
Kai
imac
20 Zoll
2,4 ghz
20 Zoll
2,4 ghz
Ich hab mir den Code jetzt nicht so genau angeschaut, aber primitiv ist er, ja
Es gibt auch eine Highlight-Funktion für Python-Code, wäre gut, wenn du die benutzen würdest
Übrigens: Wenn du Eigenschaften von Objekten beschreiben willst, wie sie sich verhalten, usw, dann ist OOP genau das richtige.
Ich würde vorschlagen, dass du dein Projekt erstmal ein wenig zurücklegst und erstmal die Grundlagen lernst.
Warum hat ``vorgabe()`` eigentlich 3 mal return eingebaut? Nach dem ersten Return wird die Funktion automatisch beendet.
Aber egal, den Code brauchst du eh nicht mehr, sondern schreibst ihn einfach, nachdem du mehr gelernt hast, komplett neu :p
Lies dir Tutorials durch, Bücher, falls vorhanden, ... Fang mit kleinen Dingen an, zum Beispiel das Programmieren von einfachen Dingen wie der Fibonaccifolge, usw.
Du sagst ja selbst, es eilt nicht.
Du kannst ein paar Module ausprobieren, ein wenig im Forum lesen (Zahlreiche hilfreiche Antworten auch wenn man nur mitliest ), wie gesagt im Interpreter rumspielen ...
Aber so macht das ganze keinen Sinn.
VIELLEICHT würdest du's sogar ohne das alles schaffen, aber du willst doch auch, dass der Code einigermaßen akzeptabel ist, oder?
Es gibt auch eine Highlight-Funktion für Python-Code, wäre gut, wenn du die benutzen würdest
Übrigens: Wenn du Eigenschaften von Objekten beschreiben willst, wie sie sich verhalten, usw, dann ist OOP genau das richtige.
Ich würde vorschlagen, dass du dein Projekt erstmal ein wenig zurücklegst und erstmal die Grundlagen lernst.
Warum hat ``vorgabe()`` eigentlich 3 mal return eingebaut? Nach dem ersten Return wird die Funktion automatisch beendet.
Aber egal, den Code brauchst du eh nicht mehr, sondern schreibst ihn einfach, nachdem du mehr gelernt hast, komplett neu :p
Lies dir Tutorials durch, Bücher, falls vorhanden, ... Fang mit kleinen Dingen an, zum Beispiel das Programmieren von einfachen Dingen wie der Fibonaccifolge, usw.
Du sagst ja selbst, es eilt nicht.
Du kannst ein paar Module ausprobieren, ein wenig im Forum lesen (Zahlreiche hilfreiche Antworten auch wenn man nur mitliest ), wie gesagt im Interpreter rumspielen ...
Aber so macht das ganze keinen Sinn.
VIELLEICHT würdest du's sogar ohne das alles schaffen, aber du willst doch auch, dass der Code einigermaßen akzeptabel ist, oder?
- nkoehring
- User
- Beiträge: 543
- Registriert: Mittwoch 7. Februar 2007, 17:37
- Wohnort: naehe Halle/Saale
- Kontaktdaten:
Also ich weiß nicht ob das noch aktuell ist, aber ich wollte zu diesem Code mal was sagen. Ich glaube du hast dir das Ziel derzeit noch viel viel zu hoch gesteckt. Es fehlen dir nicht nur OOP-Kenntnisse sondern auch eine Menge Grundkenntnisse ueber Python selbst.derkai hat geschrieben:Code: Alles auswählen
def mlaser(range): mlaserheat=3 mlaserschaden=5 if range <= 3 : range = 4 elif range >= 4 and range <= 6: range = 6 elif range >= 7 and range >= 9: range = 8 print range return mlaserheat return mlaserschaden return range mlaser(5)
Zum Beispiel ist deine if-elif-Kombi ja schoen und gut, aber was bringt sie? Es wirkt fuer mich nicht logisch. Außerdem ueberschreibst du mit range eine builtin-Funktion. Das mag zwar im Kontext einer einzelnen Funktion nicht schlimm sein, aber allgemein sollte man sich sowas garnicht erst angewoehnen.
Dann kannst du uebrigens auch nicht mehrmals hintereinander return benutzen. Return beendet die Funktion unmittelbar und setzt den Rueckgabewert. Willst du mehrere Dinge zurueckgeben, koenntest du zB eine Liste verwenden.
Befasse dich lieber noch einmal ausfuehrlich mit den grundlegenden Dingen und versuch einfachere Dinge zu implementieren und zu verstehen.
Beste Gruesse
[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