meine verrueckte idee - ist sowas moeglich

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.
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

waturs hat geschrieben:Die nicht jugendfreien sachen werden auch rausgelassen
Damit hast du mich als Tester verloren :D
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

http://www.mindhog.net/~mmuller/project ... index.html habe ich heute bei freshmeat gesehen. Scheint eine kleine mit Python Erweiterbare Game-Engine zu sein ;)
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Hi,

entschuldigt, dass ich es gestern nicht mehr geschafft habe.

Das Tutorial findest Du in nehe1-10.zip auf
http://www.pygame.org/gamelets/

Meine kleine Änderung findest Du hier:
http://paste.pocoo.org/show/4190/

Als Textur kann man quadratische! Grafiken verwenden, z.B. diese:
http://blender-archi.tuxfamily.org/imag ... kWall2.jpg
... einfach in das Verzeichnis mit meinem Skript unter 'seamless_wall.jpg' speichern - oder alternativ den oberen Teil des Skriptes ändern.

Genauso leicht kann man auch den sich drehenden Würfel mit verschiedensten Texturen belegen. Man kann auch mehrere 3D-Flächen erzeugen und dann mit entsprechenden Bereichen einer Textur belegen.
Wichtig dabei ist nur, wie die Texturkoordinaten (glTexCoord...) den Vertices (glVertex...) zugeordnet werden.

Gruß,
Michael
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Michael Schneider hat geschrieben: Das Tutorial findest Du in nehe1-10.zip auf
http://www.pygame.org/gamelets/
Ach, das meinst du. Nun, das Original bringt einem OpenGL bei, aber nicht PyOpenGL. Und die Python-Ports der Tutorials sind nur Code, hat mit Tutorials also wenig zu tun. Leider ist beides in Kombination auch nicht so der Renner. Mit Zeit und Google kommt man dann aber doch irgendwann in die Nähe eines Lerneffekts ;) Hat bei mir jedenfalls geklappt ("been there, done that, but it wasn't pretty").
Michael Schneider hat geschrieben: Als Textur kann man quadratische! Grafiken verwenden, [...]
Soweit ich weiß müssen Breite und Höhe zudem Zweierpotenzen (z.B. 128, 256) sein, was anderes hat bei mir nicht funktioniert.
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Y0Gi hat geschrieben:
Michael Schneider hat geschrieben: Als Textur kann man quadratische! Grafiken verwenden, [...]
Soweit ich weiß müssen Breite und Höhe zudem Zweierpotenzen (z.B. 128, 256) sein, was anderes hat bei mir nicht funktioniert.
Hi Y0Gi,

ich habe das "quadratisch" auch nur empirisch ermittelt, da der Programmablauf bei nichtquadratischen images ewig langsam wurde. Zwischen beliebiger Kantenlänge und einer Zweiterpotenz habe ich bei meinen wenigen Versuchen keinen merklichen Unterschied festgestellt. Ich wollte das oben schon schreiben, war mir dann aber doch nicht sicher und habe es weggelassen.

Es wäre auch verhältnismäßig belanglos, denn man kann ja beliebige Texturen auf ein 2^n-Quadrat verformen und dann nachher wieder auf ein Rechteck mappen. :-)

Da die Abhängigkeiten (PyGame, pyOpenGL, ...) ziemlich umfassend sind, die Doku (wie ich auch schon feststellte) relativ mager und in Blender ja schon erhebliche Fortschritte gemacht wurden, sollte man sich vom vorgelegten Werk nicht zu sehr verführen lassen, wenn man dafür nicht weiter kommt. Aber man kann sich ja aus Tutorial 10 die Technik abgucken.

Grüße,
Michael
Grüße,
Michael
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Also ich würde von PyOpenGL abraten. OpenGL ist sehr low-level und um mehr als einen Würfel darzustellen muss man schon einiges an Zeit investieren, und 3 Monate halte ich da für zu knapp.

Wenn es unbedingt 3D sein muss, ist wohl Blender wirklich die beste Wahl, evtl. könntest du auch die Python-Bindings für Ogre3d nehmen:

http://www.ogre3d.org/wiki/index.php/PyOgre

OGRE ist allerdings nur eine Rendering Engine, keine 3D-Spiel engine, d.h. du müsstest dich um Sachen wie Kollisionsabfrage mit den Wändern etc. selbst rumschlagen.

Ansonsten gäbe es noch Crystal Space, ich weiss aber nicht, ob Crystal Space Pythonbindings hat oder ob du dann C++ Programmieren müsstest (wovon ich dir als Anfänger mit wenig Zeit eher abraten würde)

Wenn es nicht unbedingt 3D sein muss und 2D auch reicht, würde ich PyGame empfehlen, damit sollte dein Vorhaben in 3 Monaten gut zu schaffen sein, auch Fancy-Stuff wie Labyrinthgenerierung sollte evtl. noch drin sein.

Lange Rede, kurzer Sinn: ich würde dir zu einem 2D-Spiel raten; auch das ist genug Arbeit und nicht unbedingt weniger beeindruckend. Und ein fertiges 2D-Spiel macht sicherlich einen besseren Eindruck als ein 3D-Spiel, welches nur zur Hälfte fertig ist.
waturs
User
Beiträge: 8
Registriert: Montag 13. August 2007, 01:12

So, nun mal wieder was von mir....

das die gesamte geschichte mit 3d ziemlich aufwendig ist, leuchtet mir ein...nur hab ich so gar keine idee was man als 2d spiel so machen koennte.

hat da jemand vllt. ein paar schlagwoerter die man mir um die ohren hauen koennte so als inspriration?
:?
ich merke auch dass es schwierig wird, genug zeit zu investieren....ohne eigenen computer noch viiieeel schwieriger

O-Ton: "hm, du sitzt aber auch mehr am rechner als ich" und es ist seiner !!!!! :oops:
werd ich wohl wirklich meine anforderungen erheblich zurueckschrauben muessen :(

eine *confused* waturs
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

waturs hat geschrieben:hat da jemand vllt. ein paar schlagwoerter die man mir um die ohren hauen koennte so als inspriration?
Hallo waturs!

Ein Memory-Spiel. Also Karten die auf einem Tisch liegen. Jede Karte gibt es zwei mal im Spiel. Immer wenn man zwei zusammen gehörende Karten gefunden hat, dann darf man diese behalten.

Du kannst persönliche Bilder verwenden und wenn keine Karten mehr auf dem Tisch liegen, dann kommt der Heiratsantrag. So etwas kannst du z.B. mit pyGame http://www.pygame.org/projects/23/177/ oder wxPython machen.

Die Idee von mkallas, mit RenPy http://www.renpy.org/wiki/renpy/Home_Page eine Bildgeschichte zu erstellen, hat mir auch sehr gefallen.
- http://www.renpy.org/screencast1.htm
- http://www.renpy.org/wiki/renpy/Ren'Py% ... ht%20Walks

Wenn du eine gute Zeichnerin bist, dann...
... und wenn nicht, dann kannst du persönliche Bilder einbauen. ;-)

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
waturs
User
Beiträge: 8
Registriert: Montag 13. August 2007, 01:12

Guten morgen allerseits, :wink:

also die idee mit dem memory spiel ist nett, ich denke dafuer koennte die zeit durchaus reichen.
ich habe mal meine gedanken halbwegs sortiert und mein brainstorming aufgeschrieben:

memory spiel

- spielkarten quadratisch
- 20 karten (oder x karten - gerade zahl) = 10 paare (oder x/2 paare)
- x/2 = anzahl der bilder
- spielfeld groesse entsprechend der anzahl der karten (rechteckig), nicht dass alle nebeneinander liegen
- spielfeld soll klickbares image sein 'bitte hier klicken' --> aufruf einer "praesentation" ;-))
- erst nach beendigung des spiels kann man das spielfeld anklicken
- anordnung der karten zufaellig (wichtig: immer kartenpaare)
- klick = karte umdrehen und bild zeigen
- nur 2 klicks pro spielzug erlauben
- spielzug = klick 1 (bild offen) + klick 2, das heisst solange bild 1 offen halten bis klick 2 erfolgt
- wenn klick 1 und klick 2 dasselbe bild ergeben = true --> karten werden auf dem "haben" stapel abgelegt
- wenn klick 1 und klick 2 nicht zusammen passen, karten wieder umdrehen und neuen spielzug erlauben
- nette spielereien: anzahl der spielzuege, zeit messen usw.


folgende erste aktionen sind nach meinem verstaendnis noetig

a) irgendeine liste erstellen in der die bilder = variablen abgelegt sind
b) das ganze graphisch machen, also mit bildern verlinken
c) das spielfeld erzeugen
d) das spielfeld als link zur praesentation bestimmen
e) sicherstellen dass auf dem spielfeld nur kartenpaare liegen, d.h keine einzelne karte

puhhh, ich glaub damit kann ich definitv was lernen....
:D

jedesmal wenn ich vor einer aufgabe steh komme ich mir vor wie der blutigste anfaenger.

ein problem gibt es noch, da ich zwar durch wenig arbeit momentan in der lage bin an meinem arbeitsplatz etwas mit python rumzuspielen, kann ich hier ohne sein wissen was machen aber dummerweise ist von meinem arbeitgeber her die seite zu pygame gesperrt. klassifiziert als "game". 8)

entweder ich mache hier auf der arbeit die theoretischen geschichten und zu hause dann das pygame oder ganz anders.....komplizierter gehts ja fast nicht :?

auf der arbeit hab ich folgende hilfsmittel:

- gVim Editor
- python 2.4 (GUI, module docs, command line, manual)

jedes programm dass ich installieren moechte muss "approved" werden, weil ich keine admin rechte hab, ist eben eine sehr grosse firma, da hat man nix zu sagen.

wem ist jetzt die lust vergangen??? :P

auf komentare freut sich eure

waturs
waturs
User
Beiträge: 8
Registriert: Montag 13. August 2007, 01:12

ich hab dann mal nebenbei angefangen, soweit mir meine arbeit das erlaubt hat.
folgendes ist bis jetzt dabei rausgekommen:

Code: Alles auswählen

from Tkinter import *

class card:
	def __init__(self, master):
		frame = Frame(master)
        	frame.pack()
		
		self.game = Button(frame, text="Starte mein Spiel", fg="red", command=self.game)
		self.game.pack(side=LEFT)

		self.button = Button(frame, text="Nein, doch nicht spielen", fg="green", command=frame.quit)
		self.button.pack(side=LEFT)


	def game(self):
		print "hier startet demnaechst ein memory spiel!"
		

root = Tk()

card=card(root)

root.mainloop()

doof finde ich jetzt nur, dass die nachricht auf der command prompt erscheint. schoener waere ja ein neues fenster...in dem dann spaeter auch das spiel startet. bzw. diese start - und end buttons sollten spaeter bestandteil des spielfeldes sein.
jetzt habe ich schon ein wenig rumgestoebert und folgende sachen gefunden:

messagebox
Tkinter.Toplevel

wobei ich es so verstanden habe dass messagebox eher fuer fehlermeldungen ist.
wie das mit dem toplevel funktioniert (und das besonders fuer meinen fall...) ist mir noch gaenzlich schleierhaft.

:?:

hoffentlich stell ich mich zu doof an...

*einen strauss sonnenstrahlen schickt*
waturs
BlackJack

Zwei Anmerkungen: Sternchen-Imports werden zwar dummerweise in fast allen Tkinter-Tutorials benutzt, aber in realen Programmen sollte man die vermeiden. Man holt sich damit alle Namen aus einem Modul in den Namensraum und früher oder später verliert man den Überblick wo Namen herkommen oder man fällt sogar über Namenskollisionen aus verschiedenen Modulen oder eigenem Quelltext.

Also entweder die Namen, die man braucht explizit importieren…

Code: Alles auswählen

from Tkinter import Button, Frame, Tk
…oder nur das Modul und dann "voll qualifizierte" Namen verwenden. Bei `Tkinter` ist es üblich den Namen zu `tk` zu verkürzen.

Code: Alles auswählen

import Tkinter as tk
Jetzt kann man auf `tk.Tk`, `tk.Button`, `tk.Frame` usw. zugreifen.

Die zweite Sache ist die Namensgebung bei Klassen. Klassennamen sind per Konvention in "MixedCase", fangen also mit Grossbuchstaben an. In Deinem Quelltext kommst Du nach Zeile 22 zum Beispiel nicht mehr an die `card`-Klasse heran, weil an den Namen jetzt eine Instanz gebunden ist.
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Hi waturs,

ich möchte Dich keinesfalls überreden, von Deinem eingeschlagenen Pfad abzukommen! Ein Memory-Spiel in 3 Monaten ist für eine "Anfängerin" durchaus machbar und angemessen. :-)



Trotzdem würde ich Dich gern auch auf das Authorensystem 3D-Gamestudio aufmerksam machen:
http://www.3dgamestudio.de/
Das ist eine Kombination aus 3D-Engine, 3D-Model Editor und C-Script-Editor. Also alles was man zum zügigen Erzeugen und Programmieren von 3D-Spielen benötigt.
Der Nachteil daran ist, dass man mit C-Script programmieren muss, nicht mit Python (vielleicht kommt das ja mal mit Python-Unterstützung raus oder man programmiert einen Wrapper). Aber der Vorteil für Dich wäre, dass Du noch nicht durch Python verwöhnt bist. ;-)
Das System ist recht gut dokumentiert und es gibt viele Tutorials und Beispiele. Kollisionsabfrage und Gravitation können vom System simuliert werden. Es gibt vorgefertigte Charaktere, die Du in einem selbst geschaffenen Raum (Labyrinth) laufen lassen kannst. Mit etwas Geschick und den vorhandenen Templates kannst Du also in max. 1 Stunde Dein erstes Männchen in Deinem ersten kleinen Labyrinth laufen lassen. Vor allem die Gestaltung der Level ist mit diesem System ein Klacks.

Hier in Deutschland gab es eine etwas ältere Version des Systems bereits auf einer Heft-CD. Es ist also gut möglich, dass Du schon eine Freeware-Version finden kannst.
Wenn Du also igendwann (vielleicht zum Hochzeitstag dann ;-)) das Spiel in 3D umsetzen möchtest, sieh Dir das System mal ein.

Grüße,
Michael
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

waturs hat geschrieben:ein problem gibt es noch, da ich zwar durch wenig arbeit momentan in der lage bin an meinem arbeitsplatz etwas mit python rumzuspielen, kann ich hier ohne sein wissen was machen aber dummerweise ist von meinem arbeitgeber her die seite zu pygame gesperrt. klassifiziert als "game". 8)
[...]
jedes programm dass ich installieren moechte muss "approved" werden, weil ich keine admin rechte hab, ist eben eine sehr grosse firma, da hat man nix zu sagen.
Den ersten Teil kenne ich, darf hier aber wenigstens was installieren.
Die Lösung könnte sein, es eben gerade nicht zu installieren, sondern Python z.B. von einem Stick auszuführen: Portable Python.
Antworten