Bin ich dafür bereit?

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
Leetplex
User
Beiträge: 6
Registriert: Donnerstag 8. März 2012, 17:34

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)?
Trichter
User
Beiträge: 45
Registriert: Montag 20. April 2009, 10:21

Das hängt ganz von der Komplexität des Spiels ab, das du programmieren willst.
Das Game of Life könnte ein guter Anfang sein.
Leetplex
User
Beiträge: 6
Registriert: Donnerstag 8. März 2012, 17:34

Game Of Life? also. Spiel des Lebens? Wie Funktioniert das?
Benutzeravatar
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?
Leetplex
User
Beiträge: 6
Registriert: Donnerstag 8. März 2012, 17:34

Ein Design des Spiels hab ich noch nicht. Platformunabhänigkeit kann Python sowieso schon oder? und Konsole kann ich auch Löschen...

Windows: os.system('cls')
Linux: os.system('clear') ...^^
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Leetplex hat geschrieben:Platformunabhänigkeit kann Python sowieso schon oder? und Konsole kann ich auch Löschen...

os.system('cls') ...^^
Plattformunabhaengigkeit ist keine magische Eigenschaft. Gerade dein Beispiel zeigt das: Es funktioniert nur unter Windows.

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.
Trichter
User
Beiträge: 45
Registriert: Montag 20. April 2009, 10:21

Leetplex hat geschrieben:Game Of Life? also. Spiel des Lebens? Wie Funktioniert das?
http://de.wikipedia.org/wiki/Conways_Spiel_des_Lebens
Leetplex
User
Beiträge: 6
Registriert: Donnerstag 8. März 2012, 17:34

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!
Leonidas
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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Leetplex
User
Beiträge: 6
Registriert: Donnerstag 8. März 2012, 17:34

Es ist ein.. Strategie-RPG Jo :)
Benutzeravatar
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.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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:

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)
Dazu gehört noch dieses Template:

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>
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
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

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 :P
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

sma hat geschrieben:Nachdem ich selbstverliebt noch einmal mein altes Video geschaut hatte konnte ich gestern nicht mehr antworten :)
Du kleiner Smarzist, Du! :mrgreen:

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
Antworten