Seite 1 von 1

[PYGAME + PGU] Eingaben des Spielers verarbeiten

Verfasst: Mittwoch 22. Januar 2014, 19:48
von Bolitho
Hi,

ich beschäftige mich schon einige Zeit mit dem Programmieren und habe inzwischen ein grundlegendes Verständnis aufgebaut. Baue derzeit an einer Umsetzung eines Strategiespiels, dass ich als Kind und Jugendlicher mit Freunden auf Papier gespielt habe. Versuche derzeit eine minimal komplexe erste spielbare Version zu stricken, um die Prinzipien der Spielentwicklung und der Repräsentation verschiedener Dinge zu lernen und für mich zu optimieren. Das Spiel wird auf einer 2D Tilemap gespielt, erstes Entwicklungsziel ist es, dass Spiel rundenbasiert an einem Rechner zu spielen. Später vielleicht mal ein Update auf Spiel per e-Mail oder auch eine Lösung im Internet in Echtzeit. Bis dahin ist es aber noch ein langer Weg.

Momentan scheitere ich daran, Usereingaben per Tastatur in Variablen abzulegen. Sprich: Beim Initialisieren soll der Spieler seinen Namen eingeben und mit diesem wird dann ein Objekt für seinen Spieler erstellt. Pseudocode:

Code: Alles auswählen

class Spieler():
   def __init__(self, name):
   self.name = name

spielername = ???
spieler = Spieler(spielername)
Später im Spiel brauche ich dann weitere Eingaben für Städtenamen usw.

Habe die letzten beiden Tage dazu recherchiert und bin immer wieder bei PGU gelandet. Habe mir aus Beispielen eine Klasse zusammengeklickt, die mir eine Eingabemaske gibt und auch die Buttons setzt. Soweit alles gut. Leider kommen die Eingaben nicht an. Bevor ich den entsprechenden Code hier poste, würde ich gern von Euch wissen, ob ich auf dem richtigen Weg mit PGU bin oder ob man das besser anders umsetzt. Könnt Ihr helfen? Ein Link zu einem entsprechenden Tutorial oder ähnlichem würde mir reichen. Möchte es selber lernen und verstehen und keine fertige Lösung.

Vielen Dank im Voraus!

Freundliche Grüße,
Bolitho

Re: [PYGAME + PGU] Eingaben des Spielers verarbeiten

Verfasst: Mittwoch 22. Januar 2014, 20:03
von Madmartigan
Ich kenne PGU nicht und weiß daher auch nicht was genau es können soll.
Prinzipiell gibt es für GUI-Entwicklung fertige und sehr mächtige Frameworks (wxPython, PySide, PyQt, ...), die über eine exzellente Dokumentation mit zahlreichen Beispielen verfügen. Was genau nun PGU anders macht wäre die Frage.

Prinzipiell scheint mir auch der Code interessant, also wenn du ihn hier posten magst, findet sich vielleicht schneller eine Lösung.

Re: [PYGAME + PGU] Eingaben des Spielers verarbeiten

Verfasst: Mittwoch 22. Januar 2014, 20:15
von Bolitho

Code: Alles auswählen

import pygame
from pygame.locals import *
import sys; sys.path.insert(0, "..")
from pgu import gui
...
class Eingabe(gui.Dialog): # Meine Klasse erbt von gui.Dialog aus dem PGU Framework
    def __init__(self):
        title = gui.Label("Spielereingabe") 
        self.value = gui.Form() 
        app = gui.Desktop() 
        app.connect(gui.QUIT,app.quit,None)
        c = gui.Table(width=300,height=250)
        c.tr()
        c.td(gui.Label("Spielereingabe"),align=0,colspan=2)   
        c.tr()
        tt = gui.Table()
        tt.tr()
        tt.td(gui.Label("Spielername: "),align=1)
        tt.td(gui.Input(name="spielername",size=10))
        tt.tr()
        tt.td(gui.Label("Land: "),align=1)
        tt.td(gui.Input(name="land",size=10))
        c.td(tt,colspan=2)
        c.tr()
        e = gui.Button("Okay")
        e.connect(gui.CLICK,self.send,gui.CHANGE)
        c.td(e)
        e = Quit(app)
        c.td(e)
        gui.Dialog.__init__(self,title,c)
        app.run(c)

def onchange(value):
    print('-----------')
    for k,v in value.value.items():
        print(k,v)
    value.close()

Code: Alles auswählen

...
dialog = funktionen.Eingabe()
dialog.connect(gui.CHANGE,funktionen.onchange,dialog)
...
Den Code habe ich aus den Beispielen des Frameworks angepasst unter zu Hilfenahme der spärlichen Doku, daher ist er auch noch nicht in "Schönschrift". Bitte um Gnade.

Die print Anweisung soll die Daten erstmal in der Konsole ausgeben, das Weiterleiten an die Variable zur Spielergenerierung ist dann kein Problem mehr. Die Daten kommen aber eben nicht an.

Die genannten Frameworks (wxPython, PySide, PyQt, ...) arbeiten alle mit Pygame und Python 2.7.6 zusammen? Gibt es eine Empfehlung? Ach, ich surfe die einfach mal an...

Danke!

Re: [PYGAME + PGU] Eingaben des Spielers verarbeiten

Verfasst: Mittwoch 22. Januar 2014, 21:51
von Bolitho
Habe mir die Frameworks mal angesehen, bisher bin ich damit noch nicht in Berührung gekommen. Wenn ich das richtig verstehe, dann brauche ich Pygame eigentlich garnicht, weil ich z.B. in wxPhython alles was ich brauche für mein 2D Strategiespiel auch finde und machen kann. Soweit richtig? Ich stürze mich mal in den Code und die Tutorials. Bis später und danke.

Re: [PYGAME + PGU] Eingaben des Spielers verarbeiten

Verfasst: Mittwoch 22. Januar 2014, 22:18
von Madmartigan
Nach einigen Änderungen läuft der Code jetzt, allerdings ohne Funktion, da die Connections hier bei mir Fehler werfen.

Die Imports von sys und pygame sind jedenfalls unnötig, da ungebraucht und somit überflüssig.
Die Eingabefelder werden einfach dem Aufruf td() als Parameter übergeben, wer genau ist damit das parent davon? Das ist nicht ersichtlich.
Ein GUI-Toolkit, das heutzutage noch auf feste Layouts, Tabellen und pixel-basierte Positionierung zurückgreift, scheint mir doch ein wenig überholt, zu unflexibel und wie man sieht, auch vom Code her nicht wirklich konventionell.

Nein, die Frameworks, die ich aufzählte, arbeiten per se nicht mit pygame zusammen, PGU ist hier schon etwas anders. Da hatte ich deine Frage falsch verstanden.

Meine Empfehlung: Entweder schaust du, dass du eine bessere Doku zu PGU findest und überarbeitest den Code deutlich, oder du schreibst dir dein eigenes GUI Framework für pygame. pygame hat ja bereits Funktionen um Tastatur- und Maus-Input zu verarbeiten. Du musst also nur die UI-Elemente selber zeichnen. Das Toolkit muss nicht sofort extrem komplex sein, ganz klein anfangen und dann erweitern. Dadurch lernt man GUI-Programmierung für Spiele meiner Ansicht nach wesentlich effektiver.


EDIT:
Für ein reines 2D-Spiel eignet sich erfahrungsgemäß auch der QGraphicsView von PyQt/PySide. Damit hast du dann alle UI-Elemente wie Labels, Inputs, Buttons, usw. usw. frei Haus.

Re: [PYGAME + PGU] Eingaben des Spielers verarbeiten

Verfasst: Donnerstag 23. Januar 2014, 08:24
von Bolitho
Okay, vielen Dank. Damit habe ich drei Alternativen und komme weiter:

1) UIs selber schreiben und die Pygame-Route weitergehen
2) Umstieg auf wxPython
3) Umstieg QGraphicsView von PyQt/PySide

Wobei der erste Weg den vermutlich größten Lernerfolg verspricht.

Werde mich damit heute beschäftigen und hier zu gegebener Zeit berichten.

Viele Grüße,
Bolitho

Re: [PYGAME + PGU] Eingaben des Spielers verarbeiten

Verfasst: Freitag 24. Januar 2014, 18:20
von Bolitho
Problem mit eigener UI gelöst. Code ist (noch) nicht hübsch, aber funktioniert.

Danke nochmals und ein schönes Wochenende!
Bolitho

Re: [PYGAME + PGU] Eingaben des Spielers verarbeiten

Verfasst: Freitag 24. Januar 2014, 21:54
von Madmartigan
Kein Problem, helfe immer gern, wenn es möglich ist.