Bin ich dafür Bereit in Python ein Konsolen Spiel zu Schreiben?
Ich kann schon einige Sachen wie Eingabe, Module, Eigene Module
Also was meint ihr kann ich Anfangen? Und wenn Ja kann ich mit Python die Schriftfarbe in der Konsole Ändern(Linux u. Windows)?
Bin ich dafür bereit?
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Willkommen im Forum!
Ich weisst nicht, ob du dafuer bereit bist und wuesste auch nicht wie ich das einschaetzen sollte. Die Sachen die du aufzaehlst sind absolute Grundlagen und auch sehr oberflaechlich.
Dein Ziel, ein plattformunabhaengiges Terminal-Spiel, ist jedenfalls ziemlich anspruchsvoll. Das Windows-Terminal (Eingabeaufforderung, cmd) und Unix Terminals sind 2 Welten.
Wie genau soll das Spiel denn aussehen?
Ich weisst nicht, ob du dafuer bereit bist und wuesste auch nicht wie ich das einschaetzen sollte. Die Sachen die du aufzaehlst sind absolute Grundlagen und auch sehr oberflaechlich.
Dein Ziel, ein plattformunabhaengiges Terminal-Spiel, ist jedenfalls ziemlich anspruchsvoll. Das Windows-Terminal (Eingabeaufforderung, cmd) und Unix Terminals sind 2 Welten.
Wie genau soll das Spiel denn aussehen?
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Plattformunabhaengigkeit ist keine magische Eigenschaft. Gerade dein Beispiel zeigt das: Es funktioniert nur unter Windows.Leetplex hat geschrieben:Platformunabhänigkeit kann Python sowieso schon oder? und Konsole kann ich auch Löschen...
os.system('cls') ...^^
Was fuer die Einschaetzung wichtiger ist als das Spiel-Design ist, was das Spiel enthalten soll, welche Techniken etc. Wenn du die Schriftfarbe aendern willst, hast du doch schon eine Idee wie du das einsetzen willst, oder?
Daneben: Bitte verwende [ python][ /python] Tags fuer Python Code.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
http://de.wikipedia.org/wiki/Conways_Spiel_des_LebensLeetplex hat geschrieben:Game Of Life? also. Spiel des Lebens? Wie Funktioniert das?
Also es sollte im Mittelalter Spiele(Name: Medieval Fights(Kann auch noch überdacht werden))
Spiel Titel sollte Farbig sein(Wenn Möglich)
Aufbau Spiel(Weizen Anbauen, Kasernen Errichten, Soldaten Essen Geben)
etc.
Edit: Game Of Life lass ich mal Lieber o.O!
Spiel Titel sollte Farbig sein(Wenn Möglich)
Aufbau Spiel(Weizen Anbauen, Kasernen Errichten, Soldaten Essen Geben)
etc.
Edit: Game Of Life lass ich mal Lieber o.O!
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Sir of the Round Table Conways Game of Life?
Also Klassen solltest du für dieses Spiel schon können, weil das was du machen willst klingt entweder nach Strategiespiel oder RPG.
Also Klassen solltest du für dieses Spiel schon können, weil das was du machen willst klingt entweder nach Strategiespiel oder RPG.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
@Leetplex: Ich denke zwar auch, dass das ganze mittels Klassen erst komfortable zu gestalten sein dürfte, aber Du kannst doch auch erst einmal ohne loslegen. Sofern Du Listen und Dictionaries verstanden hast, kann man damit schon recht weit kommen.
Die Frage ist nur, ob Du wirklich gleich mit ``curses`` oder ``urwid`` loslegen willst, oder ob es nicht auch erst einmal ohne geht. Evtl. musst Du Deine Anforderungen an das Spieldesign ein wenig runterschrauben? So ein Spiel kann sich ja auch weiterentwickeln und erfährt in der Lernphase eh sicherlich viele Iterationen, in denen man Code komplett wegwirft und mit einem besseren Design von vorne anfängt.
Fange doch erst einmal an und überlege Dir die grundlegende Spielmechanik und versuche die in Code umzusetzen. Dabei wirst Du sicherlich viel lernen und ggf. auch an Deine Grenzen stoßen.
Alternativ hatten wir erst vor ein paar Wochen einen Thread über simple, mit Bordmitteln umsetzbare Spielideen. Es dürften noch ettliche weitere ähnliche Threads hier existieren. Dazu kommen noch viele Snippets, aus denen man auch lernen kann.
Auch wenn es dort primär um das Entwickeln eines BASIC-Interpreters geht, so fand ich dieses Video von sma sehr interessant. Für Dich könnte interessant sein, wie die simple Spielmechanik umgesetzt wird.
Die Frage ist nur, ob Du wirklich gleich mit ``curses`` oder ``urwid`` loslegen willst, oder ob es nicht auch erst einmal ohne geht. Evtl. musst Du Deine Anforderungen an das Spieldesign ein wenig runterschrauben? So ein Spiel kann sich ja auch weiterentwickeln und erfährt in der Lernphase eh sicherlich viele Iterationen, in denen man Code komplett wegwirft und mit einem besseren Design von vorne anfängt.
Fange doch erst einmal an und überlege Dir die grundlegende Spielmechanik und versuche die in Code umzusetzen. Dabei wirst Du sicherlich viel lernen und ggf. auch an Deine Grenzen stoßen.
Alternativ hatten wir erst vor ein paar Wochen einen Thread über simple, mit Bordmitteln umsetzbare Spielideen. Es dürften noch ettliche weitere ähnliche Threads hier existieren. Dazu kommen noch viele Snippets, aus denen man auch lernen kann.
Auch wenn es dort primär um das Entwickeln eines BASIC-Interpreters geht, so fand ich dieses Video von sma sehr interessant. Für Dich könnte interessant sein, wie die simple Spielmechanik umgesetzt 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
Nachdem ich selbstverliebt noch einmal mein altes Video geschaut hatte konnte ich gestern nicht mehr antworten Die drei Bücher von David H. Ahl (siehe http://www.atariarchives.org/) enthalten Beispiele für über 200 Spiele, die alle in der Konsole funktionieren. Es ist zugegeben ein bisschen schwer, das archaische Basic zu dekodieren.
Hammurabi war meiner Recherche nach das erste Spiel dieser Art. Die Beschreibung von Leetplex klang auch ein bisschen nach http://de.wikipedia.org/wiki/Hanse_(Computerspiel) - davon gab es auch etliche Klone.
Um Spiele vielleicht ein bisschen zeitgemäßer Aussehen zu lassen, ohne das man sich aber mit der GUI-Programmierung unter Python auseinandersetzen muss, wäre noch eine Idee, das ganze als Web-Anwendungen, die man dann über einen Browser anspricht, zu gestalten. Damit handelt man sich aber natürlich ein ganz anderes Set von Problemen ein, denn zunächst muss man jetzt natürlich HTML und ein bisschen CSS können und dann auch verstehen, wie die Anwendung gestaltet werden muss, damit sie mit dem Request/Response-Ansatz eines Webbrowsers klar kommt.
Hier ist ein Beispiel für Bottle (http://bottlepy.org/), den ich schnell zusammengehackt habe:
Dazu gehört noch dieses Template:
In der ersten Zeile importiere ich ein paar Bottle-Funktionen. Danach definiere ich eine Klasse "Hammurabi", in der das Spiel implementiert würde. Ein einziges Exemplar dieser Klasse merke ich mir als globale Variable für die Interaktion. Das kann bei einer "echten" Webanwendung so nie funktionieren, weil dort ja beliebig viele Leute parallel zugreifen könnten, aber da ich weiß, dass nur ich das Spiel im Browser aufrufen werde, ist das so OK.
Mit @get() definiere ist, welche Funktion aufgerufen werden soll, wenn die App startet und ich im Browser die URL http://localhost:8888 aufrufe. Es wird ein Template dargestellt, in das ich mein Hammurabi-Objekt und einen leeren Fehler füttere. Ich hätte eigentlich gedacht, Bottle käme auch mit error=None klar, aber das ging nicht.
Das Template selbst zeigt meine Variablen aus dem Hammurabi-Objekt an und fragt dann danach, wie viel Land ich verkaufen möchte. Andere Funktionen sind vom Leser zu ergänzen. Drücke ich den "Land verkaufen"-Button, komme ich bei der durch @post markierten Funktion von Bottle an. Dort werde ich (ein bisschen ungeschickt) aus, was passiert ist, fange Fehler ab und ändere das Hammurabi-Objekt (was eigentlich als Methode in dieses Objekt gehört) und zeige danach wieder das Template mit den nun aktualisierten Variablen an.
Müsste ich jetzt nicht mal langsam anfangen zu arbeiten, würde ich das ganze noch mal etwas refaktorieren, damit die Spiellogik nicht im Rahmenwerk untergeht. Ich denke aber, man kann so schon loslegen und hat dann natürlich alle Möglichkeiten von HTML, was die Darstellung angeht. Ich könnte das Getreide z.B. durch kleine Grafiken darstellen oder aber als einfache Balkengrafik.
Die letzten beiden Zeilen in meinem Python-Programm starten übrigens den in Bottle eingebauten Webserver im Debug-Modus, sodass ich nichts weiter als Bottle brauche, um mein Programm zu entwickeln.
Stefan
Hammurabi war meiner Recherche nach das erste Spiel dieser Art. Die Beschreibung von Leetplex klang auch ein bisschen nach http://de.wikipedia.org/wiki/Hanse_(Computerspiel) - davon gab es auch etliche Klone.
Um Spiele vielleicht ein bisschen zeitgemäßer Aussehen zu lassen, ohne das man sich aber mit der GUI-Programmierung unter Python auseinandersetzen muss, wäre noch eine Idee, das ganze als Web-Anwendungen, die man dann über einen Browser anspricht, zu gestalten. Damit handelt man sich aber natürlich ein ganz anderes Set von Problemen ein, denn zunächst muss man jetzt natürlich HTML und ein bisschen CSS können und dann auch verstehen, wie die Anwendung gestaltet werden muss, damit sie mit dem Request/Response-Ansatz eines Webbrowsers klar kommt.
Hier ist ein Beispiel für Bottle (http://bottlepy.org/), den ich schnell zusammengehackt habe:
Code: Alles auswählen
from bottle import get, post, request, run, template, debug
class Hammurabi:
def __init__(self):
self.year = 1
self.people = 100
self.acres = 1000
self.sheffles = 2800
hammurabi = Hammurabi()
@get("/")
def start():
return template("start", h=hammurabi, error="")
@post("/")
def play():
value = int(request.forms['value'])
error = ""
if request.forms['sell']:
if value < 0:
error = "Du musst eine positive Zahl eingeben!"
elif value > hammurabi.acres:
error = "So viel Land besitzt du nicht!"
else:
hammurabi.acres -= value
hammurabi.sheffles += value * 15
return template("start", h=hammurabi, error=error)
debug(True)
run(port=8888, reloader=True)
Code: Alles auswählen
<h1>Jahr {{h.year}}</h1>
Du hast {{h.people}} Leute.<br>
Du hast {{h.acres}} Land.<br>
Du hast {{h.sheffles}} Getreide.<br>
%if error:
<p style='color:red'>{{error}}</p>
%end
<form method=post action=/>
<input name=value><input type=submit name=sell value="Land verkaufen">
</form>
Mit @get() definiere ist, welche Funktion aufgerufen werden soll, wenn die App startet und ich im Browser die URL http://localhost:8888 aufrufe. Es wird ein Template dargestellt, in das ich mein Hammurabi-Objekt und einen leeren Fehler füttere. Ich hätte eigentlich gedacht, Bottle käme auch mit error=None klar, aber das ging nicht.
Das Template selbst zeigt meine Variablen aus dem Hammurabi-Objekt an und fragt dann danach, wie viel Land ich verkaufen möchte. Andere Funktionen sind vom Leser zu ergänzen. Drücke ich den "Land verkaufen"-Button, komme ich bei der durch @post markierten Funktion von Bottle an. Dort werde ich (ein bisschen ungeschickt) aus, was passiert ist, fange Fehler ab und ändere das Hammurabi-Objekt (was eigentlich als Methode in dieses Objekt gehört) und zeige danach wieder das Template mit den nun aktualisierten Variablen an.
Müsste ich jetzt nicht mal langsam anfangen zu arbeiten, würde ich das ganze noch mal etwas refaktorieren, damit die Spiellogik nicht im Rahmenwerk untergeht. Ich denke aber, man kann so schon loslegen und hat dann natürlich alle Möglichkeiten von HTML, was die Darstellung angeht. Ich könnte das Getreide z.B. durch kleine Grafiken darstellen oder aber als einfache Balkengrafik.
Die letzten beiden Zeilen in meinem Python-Programm starten übrigens den in Bottle eingebauten Webserver im Debug-Modus, sodass ich nichts weiter als Bottle brauche, um mein Programm zu entwickeln.
Stefan
Ja, du versuchst dich besser an etwas, denn die Frage "Bin ich dafür bereit?" ist IMO weniger wichtig als "Packe ich das?". Wärst du bereit, hättest du ja längst angefangen und würdest ggf. hier Fragen zu konkreten Problemen stellen. Ich befürchte ein richtiges Strategie-RPG ist etwas zu schwierig, aber du wirst ja selbst sehen ob das der Fall ist sobald du dich mal ranmachst
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Du kleiner Smarzist, Du!sma hat geschrieben:Nachdem ich selbstverliebt noch einmal mein altes Video geschaut hatte konnte ich gestern nicht mehr antworten
BTW: Wann kommt denn mal ein neues?
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