OOP für "Dummies" ???

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.
derkai
User
Beiträge: 169
Registriert: Montag 12. Mai 2008, 11:43

OOP für "Dummies" ???

Beitragvon derkai » Sonntag 1. Juni 2008, 12:50

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
imac
20 Zoll
2,4 ghz
Karl
User
Beiträge: 252
Registriert: Freitag 29. Juni 2007, 17:49

Beitragvon Karl » Sonntag 1. Juni 2008, 13:14

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
derkai
User
Beiträge: 169
Registriert: Montag 12. Mai 2008, 11:43

Beitragvon derkai » Sonntag 1. Juni 2008, 13:37

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
Zuletzt geändert von derkai am Sonntag 1. Juni 2008, 13:43, insgesamt 1-mal geändert.
imac

20 Zoll

2,4 ghz
derkai
User
Beiträge: 169
Registriert: Montag 12. Mai 2008, 11:43

Beitragvon derkai » Sonntag 1. Juni 2008, 13:41

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
imac

20 Zoll

2,4 ghz
derkai
User
Beiträge: 169
Registriert: Montag 12. Mai 2008, 11:43

Beitragvon derkai » Sonntag 1. Juni 2008, 13:45

ich weiss, das der Code extrem primitiv von mir geschrieben wurde, aber das ist eben mein "Learning by Doing". Erst mal einfach und funktionierend und dann werde ich es eben aufmöbeln.

Kai
imac

20 Zoll

2,4 ghz
Karl
User
Beiträge: 252
Registriert: Freitag 29. Juni 2007, 17:49

Beitragvon Karl » Sonntag 1. Juni 2008, 13:57

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?
BlackJack

Beitragvon BlackJack » Sonntag 1. Juni 2008, 15:09

@derkai: Hier gibt's eine Java-Implementierung von BattleTech: MegaMek.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Beitragvon nkoehring » Dienstag 3. Juni 2008, 22:53

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)


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.

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

Wer ist online?

Mitglieder in diesem Forum: Majestic-12 [Bot]