M
MrChT
Gast
Hey,
nachdem ich gebeten wurde, einen neuen Thread zu diesem Thema zu öffnen, bin ich hier also mit meinen Anfängerfragen.
Hier mal die Aufgabe:
Spezifikation eines Computerspiels
Die allgemeinen Spielregeln:
Hierbei handelt es sich um eine ganz einfache Variante des Spiels "Leben und Tod". Das
Spiel wird mit zwei Spielern gespielt. Jeder der Spieler erhält einen Kartenstapel, indem ein
Kartenspiel ausgeteilt wird. Von diesen Stapeln wird jeweils die oberste Karte gezogen und
mit der Karte des Gegners verglichen. Der Spieler mit der höheren Karte erhält beide Karten,
die er auf einen Ablagestapel legt. Die Reihenfolge der Karten ist: 7, 8, 9, 10, B, D, K, As. Bei
gleichem Wert entscheidet die Farbe, hier gilt: Karo, Herz, Pik, Kreuz. Ist ein Kartenstapel zu
Ende, wird mit dem Ablagestapel weitergespielt. Das Spiel ist nach einer festgelegten Anzahl
von Runden (oder wenn ein Spieler keine Karten mehr hat) zu Ende. Gewonnen hat der
Spieler, der am Ende mehr Karten besitzt.
Die Realisierung am Computer:
Es spielen Computer und Spieler gegeneinander. Es gibt keine Strategie, sondern das Spiel
läuft nach dem Geben der Karten voll deterministisch ab. Deshalb kann per
Computerprogramm schnell entschieden werden, wer das Spiel gewinnt. Damit Sie trotzdem
den Spielverlauf verfolgen können, sollte eine geeignete Ausgabe erfolgen (z.B. jeweils die
beiden gezogenen Karten) und jeder Spielzug mittels Drücken der Enter-Taste so verzögert
werden, dass am Bildschirm der Spielverlauf nachvollzogen werden kann.
Tipps:
1. Betrachten Sie das ganze erst mal unter objektorientiertem Aspekt: Gespielt wird ein
Spiel. Zu einem Spiel gehören zwei Spieler. Jeder Spieler bekommt einen Kartenstapel
(klingt doch irgendwie nach Stack), von dem er eine Karte zieht (klingt nach pop()). Wenn
er die höhere Karte hat, legt (klingt nach push()) er die beiden Karten auf seinen
Ablagestapel. Wenn der Kartenstapel zu Ende ist, wird der Ablagestapel zum
Kartenstapel gemacht, usw ... Dann wird schnell klar, welche Objekte, mit welchen
Elementen und Elementfunktionen Sie brauchen.
2. Programmieren Sie nicht alles auf einmal, sondern überprüfen Sie immer wieder ihre
Zwischenergebnisse. Nur ein paar Beispiele: Statt zu mischen, initialisieren Sie die
Anordnung der Karten erst mal "fest verdrahtet" im Programm. Arbeiten Sie erst mal mit
Stapeln, die aus ganz wenigen Karten bestehen, dann kann der Spielverlauf leicht
kontrolliert werden. Statt mit einer komplizierten Klasse Karte können Sie auch erst mal
mit einer Karte, die aus einfachen Integerwerten besteht arbeiten und erst in einem
zweiten Schritt eine Klasse Karte mit allen Details einführen. Für das Bestehen des
Testats reicht eine ganz einfache (allerdings objektorientierte) Version, im Notfall auch
mit Integer-Karten etc. – Hauptsache Sie programmieren selbst.
3. Wenn Ihr Programm nicht das tut, was es soll, dann verfolgen Sie den Spielverlauf
mittels zusätzlicher Ausgaben (die Sie am Ende wieder löschen müssen) solange, bis Sie
den Fehler gefunden haben.
Zusatz:
Wer Lust hat und es sich zutraut, kann auch das wirkliche Spiel "Leben und Tod"
programmieren.
1.
Um den Kartenstapel zu erzeugen benutze ich Integer-Variablen, ein Array, und am Ende ein Stack, wegen der einfachen Handhabung.
2.
Mit Math.random erzeuge ich Zufallszahlen, mit verschachtelten for und if-Schleifen überprüfe ich, ob die erzeugte Zahl im Array schon vorhanden ist. Aussehen tuts so:
Compiler machts so wie er soll. Programm gestartet, jetzt habe ich eine OutOfBoundsException
Was hab ich falsch gemacht???
Sorry wegen den Bezeichnungen ich bin nicht so der einfallsreiche Typ.
Mit freundlichen Grüßen
nachdem ich gebeten wurde, einen neuen Thread zu diesem Thema zu öffnen, bin ich hier also mit meinen Anfängerfragen.
Hier mal die Aufgabe:
Spezifikation eines Computerspiels
Die allgemeinen Spielregeln:
Hierbei handelt es sich um eine ganz einfache Variante des Spiels "Leben und Tod". Das
Spiel wird mit zwei Spielern gespielt. Jeder der Spieler erhält einen Kartenstapel, indem ein
Kartenspiel ausgeteilt wird. Von diesen Stapeln wird jeweils die oberste Karte gezogen und
mit der Karte des Gegners verglichen. Der Spieler mit der höheren Karte erhält beide Karten,
die er auf einen Ablagestapel legt. Die Reihenfolge der Karten ist: 7, 8, 9, 10, B, D, K, As. Bei
gleichem Wert entscheidet die Farbe, hier gilt: Karo, Herz, Pik, Kreuz. Ist ein Kartenstapel zu
Ende, wird mit dem Ablagestapel weitergespielt. Das Spiel ist nach einer festgelegten Anzahl
von Runden (oder wenn ein Spieler keine Karten mehr hat) zu Ende. Gewonnen hat der
Spieler, der am Ende mehr Karten besitzt.
Die Realisierung am Computer:
Es spielen Computer und Spieler gegeneinander. Es gibt keine Strategie, sondern das Spiel
läuft nach dem Geben der Karten voll deterministisch ab. Deshalb kann per
Computerprogramm schnell entschieden werden, wer das Spiel gewinnt. Damit Sie trotzdem
den Spielverlauf verfolgen können, sollte eine geeignete Ausgabe erfolgen (z.B. jeweils die
beiden gezogenen Karten) und jeder Spielzug mittels Drücken der Enter-Taste so verzögert
werden, dass am Bildschirm der Spielverlauf nachvollzogen werden kann.
Tipps:
1. Betrachten Sie das ganze erst mal unter objektorientiertem Aspekt: Gespielt wird ein
Spiel. Zu einem Spiel gehören zwei Spieler. Jeder Spieler bekommt einen Kartenstapel
(klingt doch irgendwie nach Stack), von dem er eine Karte zieht (klingt nach pop()). Wenn
er die höhere Karte hat, legt (klingt nach push()) er die beiden Karten auf seinen
Ablagestapel. Wenn der Kartenstapel zu Ende ist, wird der Ablagestapel zum
Kartenstapel gemacht, usw ... Dann wird schnell klar, welche Objekte, mit welchen
Elementen und Elementfunktionen Sie brauchen.
2. Programmieren Sie nicht alles auf einmal, sondern überprüfen Sie immer wieder ihre
Zwischenergebnisse. Nur ein paar Beispiele: Statt zu mischen, initialisieren Sie die
Anordnung der Karten erst mal "fest verdrahtet" im Programm. Arbeiten Sie erst mal mit
Stapeln, die aus ganz wenigen Karten bestehen, dann kann der Spielverlauf leicht
kontrolliert werden. Statt mit einer komplizierten Klasse Karte können Sie auch erst mal
mit einer Karte, die aus einfachen Integerwerten besteht arbeiten und erst in einem
zweiten Schritt eine Klasse Karte mit allen Details einführen. Für das Bestehen des
Testats reicht eine ganz einfache (allerdings objektorientierte) Version, im Notfall auch
mit Integer-Karten etc. – Hauptsache Sie programmieren selbst.
3. Wenn Ihr Programm nicht das tut, was es soll, dann verfolgen Sie den Spielverlauf
mittels zusätzlicher Ausgaben (die Sie am Ende wieder löschen müssen) solange, bis Sie
den Fehler gefunden haben.
Zusatz:
Wer Lust hat und es sich zutraut, kann auch das wirkliche Spiel "Leben und Tod"
programmieren.
1.
Um den Kartenstapel zu erzeugen benutze ich Integer-Variablen, ein Array, und am Ende ein Stack, wegen der einfachen Handhabung.
2.
Mit Math.random erzeuge ich Zufallszahlen, mit verschachtelten for und if-Schleifen überprüfe ich, ob die erzeugte Zahl im Array schon vorhanden ist. Aussehen tuts so:
Java:
import static java.lang.Math.*;
public class TestGenCard
{
public static void main(String[] args)
{
int card = 0;
int arrnr = 0;
int [] forbatch = new int[32];
for (int fill = 0; fill < (forbatch.length + 1); fill++)
{
card = (int) (random() * 31);
for (int check = 0; check < forbatch.length; check++)
{
if (card == forbatch[arrnr])
{
break;
}
else
{
arrnr++;
if (arrnr == 31)
{
forbatch[arrnr] = card;
break;
}
}
}
}
System.out.println(forbatch[0]);
}
}
Compiler machts so wie er soll. Programm gestartet, jetzt habe ich eine OutOfBoundsException
Was hab ich falsch gemacht???
Sorry wegen den Bezeichnungen ich bin nicht so der einfallsreiche Typ.
Mit freundlichen Grüßen