[Spiel] Kartenspiel Leben und Tod Tips und Probleme

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:

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
 

Quaxli

Top Contributor
Du solltest das nicht alles in die Main-Methode packen, sondern mit Klassen und Methoden arbeiten.

Zu Deinem Fehler: Der IndexOutOfBounds-Fehler resultiert aus dieser Zeile:

Java:
for (int fill = 0; fill < (forbatch.length + 1); fill++)

Ein Array beginnt beim Feld mit dem Index 0. Entsprechend hat ein Array[32] die Felder 0 - 31.
Wenn Du, wie oben die Bedingung mit

Java:
fill < (forbatch.length+1)

definierst, wird der Fehler genau dann geworfen, wenn Dein Programm versucht auf das Feld mit dem Index 32 zuzugreifen, welches nicht existiert.
 

Network

Top Contributor
@Quaxli's-Antwort: Vom Prinzip stimme ich dem zu.
Aber was den Fehler selbst betrifft nicht! Hast ja alles richtig gemacht was das betrifft.

Du solltest vieleicht in Zeile 14
Java:
arrnr = 0
hinzufügen.
Denn arrnr wird ja jedesmal auf 1 aufgezählt. Nach der ersten "31" wird aber dein arrnr nicht wieder auf "0" zurückgesetzt. Der Code ab Zeile 11 beginnt wieder von vorn und wieder zählt weiter ab der Zahl 31!


PS: Warum überschreibst du eig. jedesmal die 31. Stelle neu? Die anderen Stellen werden ja überhaupt nie gefüllt(?)
 
M

MrChT

Gast
Danke euch schon mal die Exception ist weg.

@Quaxli:
Ich habe das Spiel in Klassen programmiert, aber die Class Stack herrauskopiert, um sie zu testen, wobei dann die Exception auftrat.

@Network:
Das wäre meine nächste Frage gewesen. Ich müsste in den Schleifen die Arrayvariable "arrnr" hochzählen lassen. Allerdings benutze ich ja eben diese um das Array auf doppelte Werte zu testen.

Kann sein, dass ich Tomaten auf den Augen habe, aber ich komm nicht drauf wie ich das machen kann, weil ich ja "arrnr" nicht einfach hochzählen lassen kann, weils im nächsten Schleifendurchlauf wieder geändert wird.

Freundlichste Grüße
 

Network

Top Contributor
Aber dass du es hochzählst ist doch gerade das Problem! (?)

In der 2. Zeile zählst du 31mal arrnr um 1 hoch. Die Schleife wird dann gebreakt! Die Hauptschleife ruft jetzt wieder die 2. Schleife auf. Die beginnt dann weiterhin von 31 auf zu zählen... und frägst dann die 32. Stelle ab, bzw. versuchst alles ab 31+ abzufragen.

Ums zu verdeutlichen ein Programmdurchlauf: (grob)
- arrnr = 0
- 1. Schleife wird gestartet
- 2. Schleife wird gestartet
- ... 31x arrnr + 1 ...
- bis arrnr = 31
- Schleife wird unterbrochen
- arrnr ist jetzt 31
- 1. Schleife beginnt von vorn
- 2. Schleife wird gestartet
- arrnr++
- arrnr ist jetzt 32
- 2. Schleife beginnt von vorn
- Wenn card == forbatch[arrnr = 32]
<<<<< Fehlermeldung >>>>>
Es gibt keine 32. stelle von forbatch
 
M

MrChT

Gast
Ja, dass habe ich schon ausgebessert. Die Schleife zählt bis zur 31, von 0 - 31, soweit hab ichs verstanden und ausgebessert, nur brauch ich die Variable ja 2 mal. Einmal für die Schleife für den Test, was jetzt auch läuft, hab also ne zufällige Zahl im Array, aber leider immer nur auf "Platz" 0, weil ich ja die Variable immer auf Null setzen muss.

Mein Problem ist jetzt, ob bzw wie ich die Variable in jeder Runde um 1 hochzusetzen und gleichzeitig zur Überprüfung nutzen kann.

Freundlichste Grüße
 

Network

Top Contributor
Ahhh jetzt verstehe ich was du meinst(denke ich).
Ich verstehe nur nicht was es daran nicht zu verstehen gibt...

Warum willst du nur EINE Variable verwenden? Besonderst da du ja bereits "check" auch initialisiert hast!

Java:
      for (int fill = 0; fill < (forbatch.length + 1); fill++)
      {
            card = (int) (random() * 31);
    
            for (int check = 0; check < forbatch.length; check++)
            {
                if (card == forbatch[check])
                {
                    break;
                }
                else 
                {
                    if (check == 31)
                    {                   
                        forbatch[arrnr] = card;
                        arrnry++;
                        break;
                    }
                }
            }
        }
 
M

MrChT

Gast
Ui, weil ich dachte die Variable in "forbatch[x]" muss immer die selbe sein, aber so wäre das natürlich echt super.
Danke dafür :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
xFearofdarkness Feinde überlappen sich in Java Spiel Spiele- und Multimedia-Programmierung 3
ItundMathe1994 TicTacToe Spiel programmieren Spiele- und Multimedia-Programmierung 2
JEP1 Hilfe bei Spiel Spiele- und Multimedia-Programmierung 1
P Pokemon Spiel Funktioniert nicht ? Spiele- und Multimedia-Programmierung 3
Leon.tr3x Mein erstes Programm/Spiel Spiele- und Multimedia-Programmierung 10
O Texas Hold'em Poker als Online-Spiel mit Freunden Spiele- und Multimedia-Programmierung 5
Drachenbauer Speicher-Tool für ein Spiel schreiben Spiele- und Multimedia-Programmierung 13
M Spiel Mühle-Programmierung Java Spiele- und Multimedia-Programmierung 9
Excess Spiel abzugeben Spiele- und Multimedia-Programmierung 1
I Superhelden - Spiel Spiele- und Multimedia-Programmierung 14
E Hauptmenü und Spiel ???? Spiele- und Multimedia-Programmierung 2
L Sound in Java Spiel Spiele- und Multimedia-Programmierung 5
R Interaktives Spiel Spiele- und Multimedia-Programmierung 5
L Spiel im Editor testen Spiele- und Multimedia-Programmierung 4
Jackii dispatchUncaughtException in Quiz Spiel mit GUI Layout Spiele- und Multimedia-Programmierung 6
D Textbasiertes Spiel Spiele- und Multimedia-Programmierung 8
K Android Spiel Programmieren Spiele- und Multimedia-Programmierung 6
L BrickBreaker Spiel Spiele- und Multimedia-Programmierung 3
A Spiel Figur ansprechen und bewegen Spiele- und Multimedia-Programmierung 3
it_is_all Dialogbox im Spiel - Text in Blöcke aufteilen Spiele- und Multimedia-Programmierung 4
F Koordinieren und Essen von Snake - Spiel Spiele- und Multimedia-Programmierung 14
G Entity Verwaltung in einem 2D Spiel Spiele- und Multimedia-Programmierung 1
E Möchte Spiel Programmieren Spiele- und Multimedia-Programmierung 7
S Connect6 Spiel - Code in ei Spiele- und Multimedia-Programmierung 2
A Spiel nach Abfrage beenden oder neustarten Spiele- und Multimedia-Programmierung 1
G Welten Generierung 2D Spiel Spiele- und Multimedia-Programmierung 4
G Java 2D Spiel mit LWJGL verbinden Spiele- und Multimedia-Programmierung 1
N Problem mit 2D Spiel Spiele- und Multimedia-Programmierung 17
T Probleme bei "Pixel-Fighting"-Spiel: Unausgewogene Mannschaften??? Spiele- und Multimedia-Programmierung 4
R Pong Spiel Problem Spiele- und Multimedia-Programmierung 1
L Coordinate Space JavaFX 2d Spiel Spiele- und Multimedia-Programmierung 0
C Vier Gewinnt Spiel Programmiertipp Spiele- und Multimedia-Programmierung 11
N Jump and run Spiel - wo anfangen / weitermachen? Spiele- und Multimedia-Programmierung 11
K Spiel zum zuordnen von Dienstgraden und Dienstgradabzeichen Spiele- und Multimedia-Programmierung 5
M Textbasiertes Spiel programmieren Spiele- und Multimedia-Programmierung 4
T 2d-Spiel Licht Spiele- und Multimedia-Programmierung 5
S Jump 'n' Run-Spiel Kollisionserkennung Spiele- und Multimedia-Programmierung 3
T Spiel rendern Spiele- und Multimedia-Programmierung 2
Grevak Sounds im Spiel Spiele- und Multimedia-Programmierung 5
B Fehlerhafte Mob Bewegungen in Tower Defense Spiel Spiele- und Multimedia-Programmierung 2
F Spiel ähnlich wie SimCity/o.ä programmieren Spiele- und Multimedia-Programmierung 5
X Erklärung zu einem Tic Tac Toe Spiel Spiele- und Multimedia-Programmierung 1
I Spectator Modus für Spiel ähnlich zu Terraria Spiele- und Multimedia-Programmierung 8
I Textbasiertes Spiel - Umsetzungsfrage & Schleifen Problem Spiele- und Multimedia-Programmierung 26
M Kollisions abfrage bei 3D spiel? Spiele- und Multimedia-Programmierung 12
D JAVA Basiertes Spiel aus dem Internet in eigenem Client laden Spiele- und Multimedia-Programmierung 1
P [Spiel]Welche Bilder sind gleich Spiele- und Multimedia-Programmierung 2
E GUI zum Spiel hinzufügen Spiele- und Multimedia-Programmierung 19
S 2D Spiel - Physics Spiele- und Multimedia-Programmierung 16
S 2D Spiel "Der Sprung" Spiele- und Multimedia-Programmierung 7
A 2D Spiel ohne Tiles Spiele- und Multimedia-Programmierung 10
V welche vorgehensweise beforzieht ihr bei einfachem Quizz Spiel ? Spiele- und Multimedia-Programmierung 4
S Quaxli's Heli Spiel läuft nicht nach Plan Spiele- und Multimedia-Programmierung 2
G Methode sleepen während das Spiel weiterläuft Spiele- und Multimedia-Programmierung 3
T Spiel Überprüfung Spiele- und Multimedia-Programmierung 3
P Spiel laggt nach unbestimmter Zeit tierisch. Spiele- und Multimedia-Programmierung 27
S Hilfe bei Spiel Spiele- und Multimedia-Programmierung 6
B Hauptmenü für Spiel Spiele- und Multimedia-Programmierung 1
W Spiel ist langsam/laggt Spiele- und Multimedia-Programmierung 18
J Ascii Spiel Spiele- und Multimedia-Programmierung 1
Androbin Mein Spiel will sich nicht zeichnen lassen !!! Spiele- und Multimedia-Programmierung 7
O Vollständige Musik in Spiel einbauen (wav - Format) Spiele- und Multimedia-Programmierung 8
Y Quiz Spiel Spiele- und Multimedia-Programmierung 1
J Conways Spiel des Lebens nachprogrammiert Spiele- und Multimedia-Programmierung 1
B Spiel Programmieren, die Anfänge Spiele- und Multimedia-Programmierung 6
D [OpenGL] Spiel in der Art von Age of Empires Spiele- und Multimedia-Programmierung 4
lord239123 suche Graphiker für ein Pokemon-Spiel Spiele- und Multimedia-Programmierung 6
S Spiel installeren lassen und organisieren Spiele- und Multimedia-Programmierung 3
J Lichtupdate in tile-basiertem Spiel Spiele- und Multimedia-Programmierung 4
P Erstes Spiel (Strategie) Spiele- und Multimedia-Programmierung 31
J Mein erstes Spiel [Spielevorstellung] Spiele- und Multimedia-Programmierung 2
Bananabert Spiel Renderer Images und Strings Spiele- und Multimedia-Programmierung 4
N Spiel Menü error ! Spiele- und Multimedia-Programmierung 5
S Anfangsmenü mit Spiel verknüpfen Spiele- und Multimedia-Programmierung 16
S Spiel ruckelt trotz 50 fps Spiele- und Multimedia-Programmierung 16
D Spiel-Bilddaten auswerten Spiele- und Multimedia-Programmierung 7
Creylon [LWJGL] Spiel Exportieren Spiele- und Multimedia-Programmierung 2
L Hilfe bei Klassendesign für Spiel Spiele- und Multimedia-Programmierung 2
Devil0s Spiel laggt trotz 90 FPS (bei der Anzeige) Spiele- und Multimedia-Programmierung 9
N Webanwendung als eine Art Spiel Spiele- und Multimedia-Programmierung 8
L Korrekte Darstellung von Wasser in 2D Spiel Spiele- und Multimedia-Programmierung 4
F Ideen für spiel Spiele- und Multimedia-Programmierung 4
J wohin mit der Logik des Spiel Spiele- und Multimedia-Programmierung 2
R Experimente mit Quaxlis Spiel Spiele- und Multimedia-Programmierung 12
W Spiel-Grundlagen selbst austüfteln: Kollisionen? Spiele- und Multimedia-Programmierung 3
Kenan89 Java 2D Spiel Spiele- und Multimedia-Programmierung 39
M Automaten Spiel Spiele- und Multimedia-Programmierung 27
J Tic tac toe spiel Neustart Spiele- und Multimedia-Programmierung 5
S 2D Spiel im Vollbild langsamer als im Fenster Spiele- und Multimedia-Programmierung 11
A TicTacToe Spiel Spiele- und Multimedia-Programmierung 3
S Verbesserungvorschläge Spiel Z Spiele- und Multimedia-Programmierung 31
S Spiel abbrechen Spiele- und Multimedia-Programmierung 3
J Greenfoot "Little Crab" Spiel Erweiterungen Spiele- und Multimedia-Programmierung 6
P Spiel HUD erstellen Spiele- und Multimedia-Programmierung 6
E Spiel neustarten Spiele- und Multimedia-Programmierung 4
S Aufbau von Klassen für Spiel Spiele- und Multimedia-Programmierung 13
A Grundlagensuche für Spiel Spiele- und Multimedia-Programmierung 8
V Basisprinzipien Breakout-Spiel Spiele- und Multimedia-Programmierung 8
E Spiel startet nach exportieren nicht Spiele- und Multimedia-Programmierung 7
Gossi Erweiterung von Quaxlis Heli-Spiel Spiele- und Multimedia-Programmierung 16

Ähnliche Java Themen

Neue Themen


Oben