[Spiel] CityXXL - Hilfe bei Level System
Ihr könnt ja jetzt ein EXTRA Thema erstellen, wo ihr über mich Diskutieren könnt (und der Forum).
Ich werde es in Zukunft versuchen bessere Beiträge zu Schreiben.
Ich bin ja noch nicht der Python-Profi und es müssen doch noch nicht alle Profies sein wie ihr, oder?
Ihr habt auch mal angefangen zu lernen und Beiträge geschrieben, und das Forum ist da Probleme zu Posten und nicht nur "Perfeckte Code". Ich lerne halt noch Python ich hatte mal ein Jahr aufgehöhrt und dann "jetzt wieder über ein Jahr wieder Code geschrieben". Ich habe mich erst mit den Thema Objektierte Programmiereung beschäftigt, und ihr könntet mir ja mal dein einen oder anderen Tip geben! Ich werde auch eure Tips, wenn möglich umsetzen. Ich bin auch erst 14 Jahre alt, ihr seit doch um die 20, oder?
-------------------------------------------------------------------
-------------------------------------------------------------------
Kuckt euch doch mal den alten Code von CityXXL an, dann bemerkt ihr schon das ich einiges verbessert habe, nur ich komme
bei diesenFunktionen nicht so Richtig klar, weil ich sowas noch nicht gemacht habe, und gerade mit Schleifen.
Mit Schleifen habe ich mich zwar beschäftigt, aber ich sehe irgendwann in große Funktionen nicht mehr durch.
-------------------------------------------------------------------
In meinen Forum sind ausserdem schon 3 Mitglieder!
Ich werde es in Zukunft versuchen bessere Beiträge zu Schreiben.
Ich bin ja noch nicht der Python-Profi und es müssen doch noch nicht alle Profies sein wie ihr, oder?
Ihr habt auch mal angefangen zu lernen und Beiträge geschrieben, und das Forum ist da Probleme zu Posten und nicht nur "Perfeckte Code". Ich lerne halt noch Python ich hatte mal ein Jahr aufgehöhrt und dann "jetzt wieder über ein Jahr wieder Code geschrieben". Ich habe mich erst mit den Thema Objektierte Programmiereung beschäftigt, und ihr könntet mir ja mal dein einen oder anderen Tip geben! Ich werde auch eure Tips, wenn möglich umsetzen. Ich bin auch erst 14 Jahre alt, ihr seit doch um die 20, oder?
-------------------------------------------------------------------
Das mache ich immer!Code in Tags setzen
-------------------------------------------------------------------
Kuckt euch doch mal den alten Code von CityXXL an, dann bemerkt ihr schon das ich einiges verbessert habe, nur ich komme
bei diesenFunktionen nicht so Richtig klar, weil ich sowas noch nicht gemacht habe, und gerade mit Schleifen.
Mit Schleifen habe ich mich zwar beschäftigt, aber ich sehe irgendwann in große Funktionen nicht mehr durch.
-------------------------------------------------------------------
In meinen Forum sind ausserdem schon 3 Mitglieder!
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Vielleicht wäre es ja die bessere Lösung für dich wenn du Spiele erstmal in Ruhe lässt und stattdessen lernst kleinere Programme ordentlich und elegant aufzubauen. Anregungen dürftest du mehr als genug finden. Solltest du darin richtig gut werden, kannst du dich später noch an OOP und größeres wagen.
Das solltest du noch üben. Das sind ganz wichtige Grundlagen. Dann macht man lieber viele kleinere Funktionen. Dadurch bleibt es auch übersichtlicher, wie du ja schon gemerkt hast.jtschoch hat geschrieben:ich komme
bei diesenFunktionen nicht so Richtig klar, weil ich sowas noch nicht gemacht habe, und gerade mit Schleifen.
Mit Schleifen habe ich mich zwar beschäftigt, aber ich sehe irgendwann in große Funktionen nicht mehr durch.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Wo denn zum Beispiel könnte ich eine Kleinere Funktion machen?
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Ich war auch mal 14...jtschoch hat geschrieben:Ich werde auch eure Tips, wenn möglich umsetzen. Ich bin auch erst 14 Jahre alt, ihr seit doch um die 20, oder?
Versteh uns nicht falsch, wir wollen dir helfen und ich denke jeder hier würde dir so ziemlich jede Frage beantworten, falls wir merken du bemühst dich und setzt unsere Vorschläge um.
Ein guter Anfang bei deinem Spiel wäre das Trennen von Logik (wer hat wie viel und befindet sich wo) und UI (User Interface, Ein-/Ausgabe).
the more they change the more they stay the same
CityXXL.Auswahl>(): Welchen Sinn soll die Methode machen?jtschoch hat geschrieben:Wo denn zum Beispiel könnte ich eine Kleinere Funktion machen?
CityXXL.Programm(): Lässt sich durch den Einsatz eines dictionary auf wenige Zeilen reduzieren.
CityXXL.Spielbank.Einzahlung() / Auszahlung(): Beide Funktionen machen doch grundsätzlich dasselbe. Warum also doppelt?
Das except sollte klar definiert sein. Das validieren der Eingabe kann zudem in eine eigene Funktion ausgelagert und somit immer wieder verwendet werden.
Diese elend langen print-Anweisungen gehören auch nicht in die Methoden. Das gehört getrennt, wie Dav1d ja schon sagte...
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
Ja an paar solchen Dingen habe ich schon gedacht, aber manches ist mir nicht aufgefallen.
Danke für die hinweise, ich werde Morgen versuchen sie umzusetzen, eine Frage dazu noch:
So:
Achso bei den Printausgaben habe ich mir auch schon was Überlegt, das ich die definiere, so:
[EDIT]: Da kann man ja gleich print verwenden!
Ne, irgendwie hatte ich eine andere Idee mir fällt die nicht mehr ein, oben die wars nicht würde ich auch nicht anwenden!
Und bei doppelten funktionen werde ich eine machen, wie zum Beispiel meine Auswahl bei Einkaufen, das selbe habe ich auch bei Arbeiten in der Art, da kaann ich ja eine definieren und das die entsprechenden Werte geben und mit return zurückgeben lassen.
Danke für die hinweise, ich werde Morgen versuchen sie umzusetzen, eine Frage dazu noch:
Wie soll ich aber die Funktionen aufrufen?mutetella hat geschrieben:CityXXL.Programm(): Lässt sich durch den Einsatz eines dictionary auf wenige Zeilen reduzieren.
So:
Code: Alles auswählen
programm = {1:self.Status(), 2:self.Bank(),...}
Code: Alles auswählen
def print_Texte(wert, wert1,...):
print "Hallo %s" % wert, wert1,...
Ne, irgendwie hatte ich eine andere Idee mir fällt die nicht mehr ein, oben die wars nicht würde ich auch nicht anwenden!
Und bei doppelten funktionen werde ich eine machen, wie zum Beispiel meine Auswahl bei Einkaufen, das selbe habe ich auch bei Arbeiten in der Art, da kaann ich ja eine definieren und das die entsprechenden Werte geben und mit return zurückgeben lassen.
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Ich erinnere mich noch gut daran, was mein Bruder im Alter von 14 Jahren auf dem C=64 programmiert hat. Auf die Frage wie er denn vorgegangen sei, kamen dann so Antworten wie: "Also erst mal habe ich das Betriebssystem abgeschaltet ...". Das interessante daran: er hatte recht! Heute kümmert er sich unter anderem um das KDE-Soundsystem.jtschoch hat geschrieben:Ich bin auch erst 14 Jahre alt, ihr seit doch um die 20, oder?
Manche haben halt die Denkweise eines Software-Entwicklers, bei anderen hingegen mag es so gar nicht recht funktionieren.
Ich kann oben aus dein Text keinen Sinn erkennen, wie ihr ihn bei mir auch nicht erkennen könnt!(Verstehen)
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Dann reduziere ich die Aussage mal auf: Mit 14 Jahren kann man durchaus in der Lage sein nicht-triviale Software zu schreiben. Das erfordert aber intensive Beschäftigung mit dem Thema und die Bereitschaft, wirklich lernen zu wollen.jtschoch hat geschrieben:Ich kann oben aus dein Text keinen Sinn erkennen, wie ihr ihn bei mir auch nicht erkennen könnt!(Verstehen)
Um Winston Churchill zu paraphrasieren: "I have nothing to offer but blood, toil, tears, and cold pizza".
@jtschoch: Kennst du das Programmierforum von ubuntuusers.de? Dort haben die Leute meistens noch mehr Geduld als hier. Frag doch da mal nach. Ich hab ehrlich gesagt auch keine Lust, deine Fragen zu beantworten, aber vielleicht findet sich ja dort jemand... (ist ernstgemeint)
Auf meine Frage die 5 beitraege weiter oben ist ht noch niemand beantwortet.
@snaufu: Kenn ich
@snaufu: Kenn ich
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Überleg' doch mal, was den keys 1, 2 etc. in Deinem dictionary-Beispiel zugewiesen wird. Du willst ja nicht die Rückgabewerte der Funktionen dort stehen haben, sondern die Funktionen selbst.jtschoch hat geschrieben:Wie soll ich aber die Funktionen aufrufen?
Ja natürlich, solange Du auf der Konsolenebene bleibst (also kein 'curses', 'urwid' oder ähnliches verwendest), wird Deine UI aus jeder Menge print-Anweisungen bestehen. Der Punkt ist ja nicht, dass Du diese Anweisungen an sich reduzieren sollst, sondern dass diese Anweisungen, die allein der Ausgabe dienen, nichts in Funktionen/Methoden verloren haben, die für die Programmlogik zuständig sind.jtschoch hat geschrieben:Da kann man ja gleich print verwenden!
Ich wurde hier auch immer und immer wieder aufgefordert, Logik und Ausgabe zu trennen und erst einmal die Funktionen/Klassen zu entwerfen, die später dann ihre Informationen an die Ausgabe weitergeben oder von dort abgeholt werden. Es dauerte ein Weilchen bis ich um diese 'Kurve herumdenken' konnte, weil in meiner Vorstellung der Ablauf eines Programmes zwangsläufig mit einer (Bedien-)oberfläche verknüpft sein musste. Beschränke Dich also erstmal auf das eigentliche, nämlich Funktionen wie Deine 'Spielbank.einzahlung()' und diese Dinge. Natürlich kannst Du (vorerst) in diesen Funktionen ein oder zwei print-Anweisungen platzieren, um das Ergebnis kontrollieren zu können. Aber die finale in Form gebrachte Ausgabe machst Du erst, wenn diese Funktionen/Klassen die Ergebnisse liefern, die Du erwartest.
Irgendwie kann ich es auch verstehen, dass Du das eine oder andere, das Dir hier geraten wird, nicht umsetzen möchtest oder kannst, weil Du Dich dafür mit Dingen auseinandersetzen musst, die auf den ersten Blick so kompliziert und riesig erscheinen, dass man versucht ist zu glauben, mit seinem eigenen kleinen Werkzeugkasten schneller ans Ziel zu kommen. Gerade am Anfang bekam und auch jetzt noch bekomme ich hier im Forum Antworten und Tipps, für dessen Verständnis und Umsetzung ich oft viele Tage benötige, weil ich oft noch nicht einmal die Begrifflichkeiten verstehe. Und immer (ich meine wirklich 'immer'!) wenn ich in meiner Anfängerarroganz glaubte, ich wüsste einen einfacheren Weg, war das nur ein umständlicher, schlecht oder überhaupt nicht funktionierender Umweg.
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
@jtschoch: Funktionen, Methoden, oder ganz allgemein aufrufbare Objekte, ruft man auf in dem man einen Ausdruck hat, der zu dem Objekt ausgewertet wird, welches man aufrufen möchte und dieses dann mit Hilfe von Klammern mit einer (möglicherweise leeren) Argumentliste rechts daneben *aufruft*.
Der Ausdruck links von der Argumentliste ist im einfachsten Fall ein Name (``list()``), in vielen Fällen einer der den Punkt-Operator Attributzugriffe enthält (``os.listdir('.')``), kann aber auch jeder beliebige Ausdruck sein, dessen Ergebnis ein aufrufbares Objekt ist (``random.choice([operator.add, operator.sub])(42, 23)``).
Der Ausdruck links von der Argumentliste ist im einfachsten Fall ein Name (``list()``), in vielen Fällen einer der den Punkt-Operator Attributzugriffe enthält (``os.listdir('.')``), kann aber auch jeder beliebige Ausdruck sein, dessen Ergebnis ein aufrufbares Objekt ist (``random.choice([operator.add, operator.sub])(42, 23)``).
Verstehe ich noch nicht ganz.
In meinen Test-Skript hat es nicht Funktioniert!
Wenn ich 1 eingebe ruft er beide auf, also Ausgabe 1 und 2.
In meinen Test-Skript hat es nicht Funktioniert!
Code: Alles auswählen
#!/usr/bin/python
def test_1():
print "1"
def test_2():
print "2"
eingabe = raw_input(">")
liste = {1:``test_1()``,2:``test_2()``}
liste[int(eingabe)]
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
@jtschoch: Python macht hier genau das was Du im Quelltext sagst. Du erstellst ein Wörterbuch, das Zahlen auf die *Rückgabewerte* von den Funktionen abbildet, die Du *aufrufst*. Genau das hatte ich doch beschrieben: Ein Aufruf ist ein Ausdruck der zu einem aufrufbaren Objekt ausgewertet wird mit Klammern rechts daneben, die dann diesen Aufruf ausführen. Du willst aber nicht den Rückgabewert der Funktion im Wörterbuch sondern die Funktion. Und aufrufen willst Du die erst *nachdem* der Benutzer etwas eingegeben hat und auf Basis dieser Eingabe die entsprechende Funktion aus dem Wörterbuch geholt wurde. Dann musst Du das aber auch *so* hinschreiben.
Ein Wörterbuch an den Namen `liste` zu binden ist übrigens ungünstig.
Ein Wörterbuch an den Namen `liste` zu binden ist übrigens ungünstig.
Das verstehe ich irgendwie trotzdem nicht ganz richtig,
könntest du vielleicht ein kleines Beispiel machen? Dann versehe ich das besser.
Mir fällt es schwer das was du Beschreibst herauslesen. Das mit der Liste war ja nur zum Test, das teil habe ich noch nicht in den Richtigen Code eingebaut.
Ich habe auch versucht die einzubauen, aber es ging nicht. Ich kapiere das nicht wie ich den Funktionsname geben soll.
könntest du vielleicht ein kleines Beispiel machen? Dann versehe ich das besser.
Mir fällt es schwer das was du Beschreibst herauslesen. Das mit der Liste war ja nur zum Test, das teil habe ich noch nicht in den Richtigen Code eingebaut.
Ich habe auch versucht die
Code: Alles auswählen
(``funktion()``)
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
``function`` ist nichts anderes als eine Syntax um anzuzeigen, dass es sich hier um Code handeln soll, wie es zum Beispiel in ReST der Fall ist.
Dein Beispiel korrigiert:
Du ordnest hier Zahlen Funktionsobjekten zu, Funktionsobjekte koennen sich hinter allem verstecken (BlackJack hat das ja beschrieben), aber egal wie man darauf zugreift: mit ``(hier, kommen, die, argumente, hin)`` nach dem Funktionsobjekt ruft man sie auf.
Wenn du ``menue[int(eingabe)]`` ausfuehrst bekommst du das Funktionsobjekt das zu der Zahl gehoert, mit den Klammern dahinter rufst du sie auf.
P.S. Die Backtick (`) Syntax (z.B. `u'ä'`) ist aequivalent zu repr (also ``repr(u'ä')``), aber deprecated, d.h. man soll es nicht benutzen.
Dein Beispiel korrigiert:
Code: Alles auswählen
def test_1():
print "1"
def test_2():
print "2"
eingabe = raw_input(">")
menue = {1: test_1 , 2:test_2}
menue[int(eingabe)]()
Wenn du ``menue[int(eingabe)]`` ausfuehrst bekommst du das Funktionsobjekt das zu der Zahl gehoert, mit den Klammern dahinter rufst du sie auf.
P.S. Die Backtick (`) Syntax (z.B. `u'ä'`) ist aequivalent zu repr (also ``repr(u'ä')``), aber deprecated, d.h. man soll es nicht benutzen.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Man sollte mal eine wiki-Seite über das Thema "Menüs via Dispatching" erstellen - so oft, wie das hier benötigt wird...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert