#1 24.08.2011 12:54:33

TonyMontana
Member
Registriert: 19.12.2007
Beiträge: 74

Kwirk

Hallo,
ich bin auf ein interessantes Spiel gestoßen. Es heisst "Kwirk". Das Spiel ist unter anderem noch als "Amazing Tater" und "Puzzle Boy" erschienen ist. Es ist ein Puzzle Spiel, bei dem man eine oder mehrere Tomaten ;-) ins Ziel steuern muss. Dabei hindern einen ungünstig herumliegende Blöcke und Drehschalter verschiedener Größe. Das schwarze sind "löcher" in die man Blöcke hineinschieben kann, um sie passierbar zu machen. Das Spiel ist rastermäßig, sozusagen als Schachbrett aufgebaut. Schaut euch am besten das Video an:
http://www.youtube.com/watch?v=Pit-9Obf53Q

Wie schwer wäre es dieses Spiel zu programmieren? Und zwar "nur" die reine Spielelogik. Ich denke es wäre sinnvoll, das Spiel intern ablaufen zu lassen, also prüfen ob ein Spielzug möglich ist und dann ggfs. den neuen Zustand berechnen. Die Darstellung in 3D wäre weniger das Problem. Ich habe leider keine Ahnung, wie man die Klassenhierarchie sinnvoll aufbaut um alle Spielelemente sinnvoll zu integrieren. Also so, dass man am Ende nur noch die Positionen und Zustände der Spielelemente am Anfang angeben muss und das Spiel dann "funktioniert".

So ein bisschen kann ich mir das Vorstellen: Eine Basisklasse, vielleicht abstrakt, die dann vorgibt, welche Methoden / Funktionen jede abgeleitete Klasse implementieren muss.

Auf jeden Fall hat man die Position der Spielfigur und eine gewünschte Zielposition. Dann muss man wohl in einer Schleife alle anderen Objekte abfragen ob sie im Weg sind. Bei Schaltern hängt das dann auch von der Ausrichtung ab, welche Felder genau erlaubt sind und welche nicht. Wenn ein Block im weg ist, kann man den Schalter auch nicht in diese blockierte Position bewegen. Dann müssen ja die Blöcke verschiebbar sein und dürfen nicht mehr verschiebbar sein, wenn ein Hinderniss im weg ist usw.
irgendwie ziemlich schwierig, oder gibt es eine elegante, einfach Möglichkeit wie man da anfängt?

Offline

 

#2 26.08.2011 08:44:43

DerPeer
GodlikeMember
Ort: Berlin
Registriert: 04.02.2005
Beiträge: 1291

Re: Kwirk

Du hast es eigentlich schon ganz gut beschrieben.

Worin ICH die größte Schwierigkeit sehe, ist, die Animation dazwischen hinzukriegen. Wenn du einen Block um ein Feld verschiebst, dann wird die Spiellogik nur zwischen dem 1. und dem 2. Zustand unterscheiden. Da der Block aber nicht springen darf (weils hässlich aussieht), stellt sich die Frage, ob man auch das Schieben selbst in die Spiellogik übernimmt oder das halt nur hübsch malt. Na egal.

Ansonsten würde ich auf jeden Fall ein array[1..20,1..20] of integer machen, in welchem das Spielfeld definiert ist (0=frei, 1=Mauer, 2=Spielstein X, ...). So lassen sich Kollisionsabfragen leichter anstellen.
Dieses Feld muss natürlich aktuell gehalten werden.

Ansonsten halte ich das nicht für allzu schwer.

DerPeer

Offline

 

#3 26.08.2011 12:07:34

TonyMontana
Member
Registriert: 19.12.2007
Beiträge: 74

Re: Kwirk

[quote=DerPeer]Du hast es eigentlich schon ganz gut beschrieben.

Danke :-)

[quote=DerPeer]Worin ICH die größte Schwierigkeit sehe, ist, die Animation dazwischen hinzukriegen. Wenn du einen Block um ein Feld verschiebst, dann wird die Spiellogik nur zwischen dem 1. und dem 2. Zustand unterscheiden. Da der Block aber nicht springen darf (weils hässlich aussieht), stellt sich die Frage, ob man auch das Schieben selbst in die Spiellogik übernimmt oder das halt nur hübsch malt. Na egal.

Das zum Beispiel kann ich mir recht gut vorstellen, wie das relativ einfach funktionieren kann: Man speichert in jedem Objekt den alten und neuen Zustand und die alte und neue Position. Die Animation wird dann in die Spielelogik integriert. Ob gerade eine Animation läuft kann man ja auch noch speichern. Jedes Objekt wird in einer Update Methode auf die berechnete Position gesetzt. Als Parameter hat man die Zeit. So in die Richtung dürfte es funktionieren.

[quote=DerPeer]Ansonsten würde ich auf jeden Fall ein array[1..20,1..20] of integer machen, in welchem das Spielfeld definiert ist (0=frei, 1=Mauer, 2=Spielstein X, ...). So lassen sich Kollisionsabfragen leichter anstellen.
Dieses Feld muss natürlich aktuell gehalten werden.

Das ist vielleicht eine gute Idee. Bisher hatte ich mir überlegt, konstanten zu definieren, die das Spielfeld festlegen und dann alle Abfragen anhand dieser Konstanten  zu berechnen. Das wird aber etwas unübersichtlich. So geht es vielleicht besser, wenn man einfach die Positionen und Zustände (Schalterrichtung usw.) hat, dann kann man ja das Array recht einfach berechnen. Und anhand des Array kann man dann einfacher prüfen, welcher Spielzug im nächsten Schritt dann möglich ist.

[quote=DerPeer]Ansonsten halte ich das nicht für allzu schwer.

:-)

Beitrag geändert von TonyMontana (26.08.2011 12:08:09)

Offline

 

#4 27.08.2011 15:48:48

TonyMontana
Member
Registriert: 19.12.2007
Beiträge: 74

Re: Kwirk

Kann mir jemand sagen, wie ich mit Blender texturierte Einheitssphären, Einheitswürfel und Quader machen kann. So schwer ist das doch hoffentlich nicht, oder? Ich habe leider bisher damit nichts gemacht.

Offline

 

#5 29.08.2011 10:19:35

DerPeer
GodlikeMember
Ort: Berlin
Registriert: 04.02.2005
Beiträge: 1291

Re: Kwirk

Warum willst du es dann benutzen? :-)

Nee sorry, keine Ahnung. Man kann sich allerdings fragen, ob es Sinn macht, zu posten dass man keine Ahnung hat ;-)

DerPeer

Offline

 

#6 29.08.2011 13:30:28

TonyMontana
Member
Registriert: 19.12.2007
Beiträge: 74

Re: Kwirk

Naja, ich bräuchte eben für das Spiel dann auch Models. smile Für die Tests reicht mir für die Spielfigur auch erstmal eine Sphäre mit Textur. Diese konnte ich mit Blender schon erzeugen (Add-Mesh-UVSphere oder sowas war das). Bei den Blöcken wären Quader wohl angebracht und Schalter sind dann bestimmt auch irgendwie in Blender machbar. Ein Würfel ist ja als Model beim Start von Blender vorhanden, allerdings ohne Texturkoordinaten. Die frage ist, wie schwer es ist die Models mit Texturkoordinaten zu versehen. Läuft das nur über unwrapping der Meshs? Die Models an sich dürften wohl recht einfach zu erstellen sein, vorausgesetzt man kann mit Blender umgehen... smile
Und nein, benutzen möchte ich Blender eigentlich auch nicht, aber woher sollte ich den die Models nehmen? Geometrische Grundformen als Model (mit Textur) gibt es wohl aber die ganzen Schalter sind etwas speziell, deswegen gehe ich nicht davon aus, dass ich diese irgendwo finde?
Mir bleibt also wahrscheinlich nichts anderes übrig als mich mit einem 3D Modeller zu beschäftigen. Ich habe alternativ noch TrueSpace da. Aber egal welchen 3D Modeller man nimmt, die Bedienung ist bei allen leider nicht so ganz einfach. tongue

Beitrag geändert von TonyMontana (29.08.2011 13:37:30)

Offline

 

#7 29.08.2011 17:05:31

Gnietschow
ProMember
Ort: Berlin
Registriert: 20.06.2007
Beiträge: 237

Re: Kwirk

Ein Modell ordentlich mit Texturkoordinaten zu versehen benötigt auf jeden Fall etwas Übung. Dabei nimmt man sich meist nacheinander die einzelnen Bestandteile und projiziert sie auf die 2D-Textur. Diese Gitter-Map rendert man dann in eine Datei, damit man sie in einem Bildbearbeitungsprogramm (z.B. Gimp) mit Farben und Texturen füllen kann.

Für einfache Modell wie einen Würfel oder eine Kugel kann man sich auch relativ leicht die UV-Koordinaten selbst berechen, z.B. kann man die komplette Textur einfach auf jede Würfelseite legen und bei der Kugel entsprechend dem Rotationswinkel der Vertices entsprechend der 2 Achsen auf U und V mappen. In DirectX gibt es Methoden wie D3DX9CreateSphere, welche einem ein Mesh mit einer Kugel generieren, allerdings ohne Texturkoordinaten. Diese könnte man selber hinzufügen oder man baut sich direkt den gesamten Vertexbuffer selber.

Aber man wird irgendwann nicht um einen 3D-Modeller drumherum kommen, wenn das Spiel auch grafischen Anreiz bieten soll smile

Ich hab mal eben eine Einheitskugel und einen Einheitswürfel mit Texturkoordinaten als X-Datei exportiert und hier angehangen, vielleicht reicht das erstmal für deine Zwecke (Quader kannst du ja durch Skalierung des Wüfels an einer Achse erzeugen). Die Texturpfade kannst du direkt in der X-Datei ändern.

MfGnietschow


Attachments:
Attachment Icon Sphere+Cube.zip, Größe: 23,937 bytes, Downloads: 549

Es gibt 10 Gruppen von Menschen - die die das Binärsystem verstehen und die anderen.  :-)
Vegetarier essen meinem Essen das Essen weg ;)
-------------------------------------------------------------------------------------------------------------------
Der Community-Hub für Videospiele: gameloop.io

Offline

 

#8 29.08.2011 17:38:33

TonyMontana
Member
Registriert: 19.12.2007
Beiträge: 74

Re: Kwirk

Vielen dank! Ich habe mich nun auch soweit mit Blender beschäftigt, dass ich erstmal einfache Modells zusammenbasteln kann, die zum Testen absolut ausreichend sind. Habe schon mal einen Würfel, eine Ebene und verschiedene Schalter hinbekommen smile

Beitrag geändert von TonyMontana (29.08.2011 17:39:00)

Offline

 

#9 30.08.2011 09:39:22

DerPeer
GodlikeMember
Ort: Berlin
Registriert: 04.02.2005
Beiträge: 1291

Re: Kwirk

Ich habe bisher meine "Modelle" fast ausschließlich im Programmcode generiert, also den Vertexbuffer selber zusammengebastelt, wie Gnietschow meinte. Deshalb hab ich mit Kugeln und Würfeln weniger das Problem ;-)

Aber darüberhinaus wird man um einen Modeller nicht vorbeikommen, stimmt. Nutzt du dann durchgängig das X-Format? Kann man sich aussuchen, welcher Vertexformat man nimmt (Texturkoordinaten, Normalen, blablub...)

DerPeer

Offline

 

#10 31.08.2011 11:06:16

TonyMontana
Member
Registriert: 19.12.2007
Beiträge: 74

Re: Kwirk

Ja, natürlich kann man sich den Vertexbuffer für die geometrischen Grundobjekte selber bauen. Wie man eben mag smile

Offline

 

Brett Fußzeile

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson