Hallo Zusammen,
ich bin neu in diesem Forum und hab bisher noch nicht sehr viel mit C# oder WPF zutun gehabt. Ich hoffe das ihr mir für mein folgendes Problem hilfreiche Anregungen geben könnt, sodass ich mich direkt mit den richtigen Themen intensive auseinander setzten kann. Ganz neu ist die objektorientierte Softwarentwicklung für mich nicht, nur schon ein paar Tage her 😉.
Also zu meinem Vorhaben. Ich möchte gerne ein kleines Spiel realisieren. Viele von euch kennen sicher das Spiel 3D-Mühle. Für die die es noch nicht kennen habe ich mal ein BILD hinzugefügt.
Im Prinzip ist dies Viergewinnt im drei Dimensionalen. Zwei Spieler setzten gegeneinander Steine in einem 3D Würfel. Derjenige Spieler welcher als erstes 4 Steine einer Reihe senkrecht, parallel oder diagonal gesetzt hat gewinnt das Spiel.
Nun zu meinem Problem. Wie würdet Ihr das Problem angehen. Der Würfel muss drei Dimensional dargestellt werden, jeder Stein muss von einem der beiden Spieler auswählbar sein und sich in der Spielerfarbe einfärben lassen. Die beiden Spieler sitzen an einem Bildschirm. Ich fände es persönlich klasse, wenn man den Würfel um x- und y-Achse drehen kann, sodass man sich genau dei Kombinationen anzeigen lassen kann.
Über konstruktive Anregungen würde ich mich sehr freuen.
Mit freundlichen Güßen
Arne
Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 6.1: "Bilder als Dateianhang hochladen"
Hallo arvbar,
den einstieg in 3D Grafiken mit WPF kannst du hier finden: MSDN:Übersicht über 3D-Grafiken
Mit google kannst du aber einiges finden.
Die Darstellung würde ich vom eigendlichen Spiel Trennen, hier kannst du mal nach MVVM Pattern googeln.
Da Spielfeld währe dann dein Model, 3D Array sollte reichen, 0 und 1 für die Spieler.
Prüfung ob jemand gewonnen hat würde ich in einer eigenen Klasse auslagen.
Das VM würde, die Spiellogig Abbilden. Spieler 1 am Zug, Prüfen ob Zug gültig (vielleicht auch in eine Klasse auslagern), einfügen ins Model, prüfen ob Gewonnen. Wenn nicht Gewonnen Spieler 2 am Zug. Ansonsten ausgabe gewonnen.
Für den Zug (Auswahl der Felder) würde ich vielleicht eine 2D Draussicht aufs Feld anbieten (ich gehe jetzt mal davon aus, das die Steine wie bei 4Gewinnt gesetzt werden (von oben Fallen)), das macht es leichter zu bestimmen, weche Position ausgewählt wurde. Das 3D Model ist dann nur zur Ansicht.
MFG
Björn
Sollte man mal gelesen haben:
Hi arvbar,
Wie würdet Ihr das Problem angehen.
So wie jedes andere Problem auch. Man schreibt sich die Anforderungen auf, entwirft eine geeignete Software-Architektur, evaluiert verschiedene Ansätze für alle Teilprobleme und dann schreibt und testet man die einzelnen Programmmodule.
Da du aber offenbar noch keine Erfahrungen (mit C#, 3D-Programmierung, Spieleprogrammierung) hast, würde ich empfehlen, erstmal mit einem kleineren Projekt anzufangen. Beispielsweise Vier Gewinnt in 2D, oder einen einfachen Würfel in 3D. Das ist für einen Anfänger schon eine genügend hohe Herausforderung.
Zum Einstieg in die 3D-Grafik gibt es hier einen Artikel mit weiteren Links: [FAQ] Wie finde ich den Einstieg in die 3D-Programmierung mit C#?. Zum Einstieg in C# und die Objektorientierte Programmierung gibt es hier einige Tips: [FAQ] Wie finde ich den Einstieg in C#?.
Christian
Weeks of programming can save you hours of planning
So ich hab mich entschieden mich etwas genauer mit WPF, Blender und Microsofts Expressions Blend auseinanderzusetzten. Ansich ist das ja ne wirklich schicke Sache. Nach ein bisschen lesen, machen und tun bin ich ganz begeistert das ich mein Modell um die X-Achse drehen kann. 😉
Hallo zusammen,
unser Studienprojekt nähert sich dem Ende und ich finde das Spiel ist für unsere erste C# Anwendung ganz aktzeptabel geworden. Danke nochmal für die wertvollen Tipps. Wir haben uns dabei sehr stark an das MVVM Pattern gehalten. Die Logik haben wir im Model implementiert (.Dll) und zu jeder View ein View Model erstellt. Aktuell arbeiten wir noch an der KI für den Computer. Im Anhang nochmal zwei Screenshots unserer Anwendung.
Viele Grüße
Arne
Die Serielle Kommunikation ist für einen 3D-RGB Würfel den wir gebaut haben. Dieser wird als zusätzliche Anzeige des aktuellen Spiels genutzt (Gadget 😉.