Kartenspiel Leben und Tod programmieren

B

br3nn3r

Gast
Also wir sollen folgendes Spiel programmieren:

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.

Hab mich schon ein wenig umgeschaut und bin jetzt soweit das ich den Kartenstapel und das Mischen hinbekommen habe das sieht bei mir folgendermaßen aus:

Java:
class Karte
{
	// Bewertung der Karten und Definition der Farben
   public final static int KARO  = 0, HERZ  = 1, PIK   = 2, KREUZ = 3;                            
   public final static int BUBE = 11, DAME = 12, KOENIG = 13, ASS = 1;
   private final int farbe, wert;  
                            
   // Konstruktor                          
   public Karte(int f, int w)
   {
      farbe = f;
      wert 	= w;
   }
        
   // get-set-Funktionen
   public int getFarbe()
   {
      return farbe;
   }
    
   public int getWert()
   {
      return wert;
   }
    
   // Karten-Methoden
   public String Farbe2String()
   {
      switch (farbe) {
         case KARO:   
         	return "Karo";
         case HERZ:   
         	return "Herz";
         case PIK: 
         	return "Pik";
         case KREUZ:    
         	return "Kreuz";         	
      }
      System.out.println("Farbe falsch! : "+farbe);
      return "-1";
   }
    
   public String Wert2String()
   {
   	if ((wert>=2)&&(wert<=10))
   		return ""+wert;
   		
      switch (wert) {
         case 1:   
          	return "A";
         case 11:  
         	return "B";
         case 12:  
         	return "D";
         case 13:  
         	return "K";
        }
      return "-1";     
   }
    
   public String Karte2String() 
   {
      return Farbe2String() + "-" + Wert2String();
   }
}

public class Kartenspiel
{
   // 32er Kartenstapel (7-10,B,D,K,A für Karo, Herz, Pik und Kreuz)
   private Karte[] stapel;   
   private int kartenImSpiel; 
    
   // Konstruktor
   public Kartenspiel() 
   {
      stapel = new Karte[32];
      int zaehler = 0;
      for (int f=0; f<4; f++ ) 
      {
         for (int w=1; w<7; w++ ) 
         {
            stapel[zaehler] = new Karte(f, w);
            zaehler++;
         }
      }
      mischen();
   }
    
   // KartenSpiel-Methoden
   public void mischen()
   {
      Karte temp;
      for (int i=31; i>0; i--)
      {
         int zuff       = (int)(Math.random()*(i+1));
         temp           = stapel[i];
         stapel[i]      = stapel[zuff];
         stapel[zuff]   = temp;
      }
      kartenImSpiel = 32;
   }
    
   public int kartenAnzahl()
   {
      return kartenImSpiel;
   }
    
   public Karte gibEineKarte()
   {
      if (kartenImSpiel == 0)
         mischen();         
      kartenImSpiel--;
      return stapel[kartenImSpiel];
    }
}

kann man das soweit machen?
meine Frage ist jetzt wie schaff ich jetzt das die gemischten karten in zwei stapel aufgeteilt werden? damit ich sie dann miteinander vergleichen kann?

danke schonmal
 

darekkay

Bekanntes Mitglied
Wenn du deinen stapel[] gefüllt/gemischt hast, dann kannst du doch zwei neue arrays erstellen stapel1[] und stapel2[] und weist denen jeweils die Hälfte vom stapel[]-Array zu ;)

Übrigens, ein schönes, einfaches Spiel (aber leider mit 100% Glück ^^) - wir hatten als Kinder immer eine Regel, die das ganze "spannender" gemacht hat - bei gleichen Karten wird eine Karte verdeckt gelegt, dann wieder eine offen, und dann bekommt der Sieger alles. (bzw. bei erneut gleichen Karten das ganze wiederholen).
So konnte man auch unter Umständen auch ein Ass bekommen (bei dir klappt es auch nur für 3 Asse, da man den höchsten niemals gewinnen kann).
So gesehen gewinnt bei dir IMMER der Spieler, der das Kreuz-Ass hat. Die Karte kann er schließlich niemals verlieren ;)
 
L

lightblue

Gast
hi,
hat jemand eine komplette lösung wie man das kartenspiel leben und tod mit java programmiert?
komm da echt nimmer weiter....!!!!
brauch ganz dringend eine musterlösung!!!!!
vielen vielen dank
 

VfL_Freak

Top Contributor
Moin,

wohl eher nicht :D

Zeig doch mal, was Du bislang als Ansatz hast und stell' dann dazu konkrete Fragen ;)
Dann wird Dir hier auch gerne geholfen :)

Gruß
Klaus
 
B

br3nn3r

Gast
könntest du mir zeigen wie genau ich das mit dem zuweisen mache? also meinen stapel in die zwei neuen arrays aufteile?
 

darekkay

Bekanntes Mitglied
Java:
for(int i = 0; i < 25; i++)
stapel1[i] = stapel[i]
for(int i = 25; i < 51; i++)
stapel2[i-25] = stapel[i]

sowas in der Art
 
B

br3nn3r

Gast
sry aber irgendwie klappt das net so wie ich das will ... diese for schleife müsste ich doch in zeile 85 einbauen oder?

wenn ich dann aber in der main funktion mir den wert des stapels anzeigen lasssen will dann kommt da immer der wert null.
 
B

br3nn3r

Gast
hab das jetzt nochmal ganz anders angefangen

bis jetzt hab ich folgenden code:

Java:
public class Kartenspiel 
{
	public static void main (String[] args)
	{
	Stack myList = new Stack (32);
	if (!myList.isFull())
	{
		myList.push(new Karte("Harry Potter", "Rowling"));
	}
	if (!myList.isFull())
	{
		myList.push(new Karte("Harry Potter", "Rowling"));
	}
	if (!myList.isEmpty())
	{
		Karte element = myList.pop();
		System.out.print("Jetzt lese ich:");
		element.print();
	}
	}
}
class Karte
{
	private String ziffer;
	private String farbe;
	public Karte (String ziffer, String farbe)
	{
		this.ziffer = ziffer;
		this.farbe = farbe;
	}
	public void print ()
	{
		System.out.println(ziffer + " von " + farbe);
	}
}

class Stack
{
	{
	while (!kartenStapel.isFull())
    {
        kartenStapel.push(new Karte(ziffer[i], farbe[j]));
    }
	
	spielerStapel = new Stack (kartenStapel/2); //solange Karten geben bis voll
	computerStapel = new Stack (kartenStapel/2); //solange Karten geben bis voll
	
	 private Karte[] array;
	 private int top = 0;
	 public Stack(int nr)
	 {
		 array = new Karte[nr];
	 }
	 	 
	 public void push (Karte element)
	 {
		 array[top++] = element;
	 }
	 
	 public Karte pop()
	 {
		 return array[--top];
	 }
	 
	 public boolean isEmpty()
	 {
		 if (top == 0)
		 {
			 return true;
		 }
		 else
		 {
			 return false;
		 }
	 }
	 public boolean isFull()
	 {
		 if(top == array.length)
		 {
			 return true;
		 }
		 else
		 {
			 return false;
		 }
	 }
}
	
class Spiel
{
	public Spiel()
	{
		Karte elementSpieler = spielerStapel.pop();
		System.out.print("Karte des Spielers:");
		elementSpieler.print();

		Karte elementComputer = computerStapel.pop();
		System.out.print("Karte des Computers:");
		elementComputer.print();
	}
	public void Gewinn()
	{	
		if (ziffer.elementSpieler > ziffer.elementComputer)
		{
			gewinnStapelSpieler.push(elementComputer)
		}
		else if (ziffer.elementSpieler == ziffer.elementComputer)
		{
			farbe.elementSpieler == farbe.elementComputer
		}
		else if (ziffer.elementSpieler < ziffer.elementComputer)
		{
			gewinnStapelComputer.push
		}
	}
}

hab das aus ner übungsaufgabe übernommen deshalb steht oben noch buch usw drin.

komm jetzt aber irgendwie nimmer weiter, wäre über jede hilfe dankbar

grüße
 
M

MrChT

Gast
Hey,

ich programmiere gerade am gleichen Spiel und hätte eine Frage dazu.
Ich hatte den Kartenstapel als Stack gebastelt und mit 32 Integer-Variablen (mit Math.random()) gefüllt.

Mein Problem:
Math.random() gibt mehrmals die gleichen Werte aus.
Mein "Wunschzettel":
Eine Art Stack, welches vor dem befüllen überprüft, ob ein Wert bereits im Stack vorhanden ist. In etwa so wie ein TreeSet, nur, dass die Werte zufällig nacheinander eingefügt, und NICHT sortiert wieder ausgegeben werden.

Kann mir jemand helfen?

Freundlichste Grüße
 

Network

Top Contributor
@Threadstarter: Mit was kommst du jetzt nicht mehr weiter?

Hey,

ich programmiere gerade am gleichen Spiel und hätte eine Frage dazu.
Ich hatte den Kartenstapel als Stack gebastelt und mit 32 Integer-Variablen (mit Math.random()) gefüllt.

Mein Problem:
Math.random() gibt mehrmals die gleichen Werte aus.
Mein "Wunschzettel":
Eine Art Stack, welches vor dem befüllen überprüft, ob ein Wert bereits im Stack vorhanden ist. In etwa so wie ein TreeSet, nur, dass die Werte zufällig nacheinander eingefügt, und NICHT sortiert wieder ausgegeben werden.

Kann mir jemand helfen?

Freundlichste Grüße

Wie währe es mit einer ArrayList, gefüllt mit deinen gewünschten Zahlen.
Math.random() wählt eine Zahl von 0 bis (ArrayList.size()-1)
Du nimmst die Zahl heraus und removest dann den Eintrag...
 

Ivan Dolvich

Mitglied
Hi Brenner,

ich kann gerade nicht schlafen. Dein Glück, ich versuch dir mal bisschen weiter zu helfen. (Übrigends sollte dieser Thread unter Hausaufgaben laufen, aber was solls..)
Vorweg, ich kenne das Spiel nicht, aber wenn ich es richtig verstanden habe, gibt es zwei Spieler, jeder bekommt die hälfte der Karten, in jeder Runde wird von jedem Spieler eine Karte gezeigt, und der mit der höheren Karte bekommt beide und legt sie weg.

Was brauchen wir?
Karten
Kartenstapel
Spieler
und irgendwas, in dem alles drin steckt.

Fangen wir mit der Karte an:
Eine Karte hat einen Wert. z.B. 5 oder 7 oder Bube.
Eine Karte hat eine Farbe. z.B. Herz, Karro oder Kreuz.
Man muss erst den Wert, und wenn dieser gleich ist, dann die Zahl mit einer anderen Karte vergleichen.
Zahlen kann man gut vergleichen. Zum Beispiel ist die 7 größer wie 5 und der Bube? Naja, machen wir ne Zahl draus. Bube enspricht 11, Dame der 12, usw. Für die Farbe das selbe. Karo := 0, Herz := 1, usw.
Schon kann man Karten vergleichen. Bei dir hattest du Strings benutzt. Damit könnte man es irgendwie auch hinbekommen, aber... naja.

Wenn man die Karten hat, dann ist der Stapel recht einfach.
Er hat eine Liste von Karten.
Er kann mischen, Karten weggeben und Karten aufnehmen
Dein Stack kann das schon ganz gut. Nur die Zeilen 39 - 46 machen keinen Sinn... Hast du mal versucht, das zum laufen zu bringen?
Ich würde dir aber Listen empfehlen.

Der Spieler ist noch einfacher. Er besteht aus zwei Stapeln. Ein Stapel für die Karten auf der Hand, ein Stapel für die gewonnen Karten.
Er muss die oberste Karte zeigen und wenn er verloren hergeben können oder die Karte vom Gegner nehmen können.

Und dieses irgendwas, in dem alles drin steckt... naja, das kommt automatisch.

Also meine Skizze von den Klassen sähe so aus:
Java:
class Karte{
  int wert;
  int farbe;
}

class Stapel{
  ArrayList<Karte> karten = new ArrayList<Karte>();
  void mischen();
  void push(Karte);
  Karte pop();
  boolean istLeer();
  int getAnzahl();
}

class Spieler{
  Stapel karten;
  Stapel gewonneneKarten;
  Karte zeigeKarte();
  void gewonnen(Karte);
}

class Spiel{
  Spieler mensch;
  Spieler computer;

  void vorbereiten();
  void spiele();
  boolean istSpielZuEnde();
}

So. Die Skizze ist eigentlich schon fast ein Geschenk. Du musst sie nurnoch ausmahlen.
Geh Schritt für Schritt vor.
Erst die Klasse Karte. Was braucht die noch? Nur noch Getter und Setter => Java Bean

Klasse Stapel:
Die Klasse Collections aus dem Package java.util hat die Methode shuffle(List<T>). Damit kannst du deine Karten mischen.
Die anderen beiden Methoden bekommst du auch hin. Spätestens steht in dem Link zu den Listen von oben alles drin.

Klasse Spieler:
Auch nichts tolles. Das bekommst du auch hin.

Klasse Spiel wird minimal schwieriger:
in der Methode vorbereiten machst du alles, was du brauchst, um ein Spiel starten zu können. Du erstellst die Karten, die Spieler und die Stapel.
in spiele() wird eine runde berechnet.
Dabei werden die obersten karten gezogen und... naja, steht alles schon in deiner Beschreibung. Einfach eins nach dem anderen umsetzen.
die Methode istSpielZuEnde() überprüft, ob die jeweiligen Ereignisse eingetroffen sind, damit ein spiel zuende ist.


Was du jetzt noch brauchst, ist eine main-Methode, die das Spiel zum laufen bringt, und solang am laufen hält, bis Spiel.istSpielZuEnde() == true

Viel erfolg!
Ivan
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M [Spiel] Kartenspiel Leben und Tod Tips und Probleme Spiele- und Multimedia-Programmierung 7
C Kartenspiel Framework Spiele- und Multimedia-Programmierung 4
Kenan89 Ansatzfrage: Kartenspiel für 2 Spieler Online Spiele- und Multimedia-Programmierung 3
B Kartenspiel (Karten) Spiele- und Multimedia-Programmierung 14
X Kartenspiel: Karten erstellen Spiele- und Multimedia-Programmierung 4
Y Kartenspiel - Karten austeilen Spiele- und Multimedia-Programmierung 4
S Kartenspiel - Wie realisiert man anklickbare Karten? Spiele- und Multimedia-Programmierung 3
T Kartenspiel mit Server Client Funktionen Spiele- und Multimedia-Programmierung 3
H Kartenspiel: MauMau Spiele- und Multimedia-Programmierung 8
S Kartenspiel Spiele- und Multimedia-Programmierung 3
G JInput - noch am Leben? Spiele- und Multimedia-Programmierung 4
M BlueJ Schach Steuerung programmieren Spiele- und Multimedia-Programmierung 28
ItundMathe1994 TicTacToe Spiel programmieren Spiele- und Multimedia-Programmierung 2
N Escape the Room - Spiele Apps programmieren Spiele- und Multimedia-Programmierung 14
Laaalo Tic tac toe programmieren Spiele- und Multimedia-Programmierung 4
mihe7 Wie man einfache Spiele programmieren kann Spiele- und Multimedia-Programmierung 23
M Brauche Hilfe was zu Programmieren Spiele- und Multimedia-Programmierung 4
N Minecraft Spigot-Plugin | Schusswaffe programmieren Spiele- und Multimedia-Programmierung 3
A Programmieren eines Memorys mit Java (in Eclipse) Spiele- und Multimedia-Programmierung 5
A DoodleJump programmieren: Kollisionsabfrage Spiele- und Multimedia-Programmierung 6
I Vier gewinnt programmieren, Klick-Reihenfolge Spiele- und Multimedia-Programmierung 2
B Programmieren wie der Befehl /ban in Minecraft geblockt wird aber nicht /ban mit einem Argument Spiele- und Multimedia-Programmierung 1
K Android Spiel Programmieren Spiele- und Multimedia-Programmierung 6
P Tennis- Spielstand- Zähler für Schule programmieren Spiele- und Multimedia-Programmierung 6
J HDMI Ausgänge mit Java programmieren? Spiele- und Multimedia-Programmierung 18
L Hörtest programmieren und implementieren Spiele- und Multimedia-Programmierung 2
E Möchte Jump and Run programmieren Spiele- und Multimedia-Programmierung 2
E Möchte Spiel Programmieren Spiele- und Multimedia-Programmierung 7
M Gesellschaftsspiel Mühle in Java programmieren Spiele- und Multimedia-Programmierung 3
M Textbasiertes Spiel programmieren Spiele- und Multimedia-Programmierung 4
M Logitech G15/G510 Applets programmieren Spiele- und Multimedia-Programmierung 3
F Spiel ähnlich wie SimCity/o.ä programmieren Spiele- und Multimedia-Programmierung 5
O Rundenbasiertes strategiespiel programmieren Spiele- und Multimedia-Programmierung 2
K 2D Blockade Programmieren Spiele- und Multimedia-Programmierung 3
wolfgang63 Mit JavaFX einfaches Game programmieren Spiele- und Multimedia-Programmierung 5
J Mod Loader programmieren Spiele- und Multimedia-Programmierung 11
I Hitpoints/Lifepoints programmieren, wie? Spiele- und Multimedia-Programmierung 7
L Minecraft Minecraft Plugin programmieren (Craftbukkit 1.7.2) Problem Spiele- und Multimedia-Programmierung 4
B Spiel Programmieren, die Anfänge Spiele- und Multimedia-Programmierung 6
wolfgang63 Einfachen Soundgenerator programmieren Spiele- und Multimedia-Programmierung 1
J UNO Programmieren Spiele- und Multimedia-Programmierung 4
F Bot Programmieren Spiele- und Multimedia-Programmierung 10
N Game GUI Programmieren Spiele- und Multimedia-Programmierung 16
1 Minecraft Minecraft Plugins programmieren Spiele- und Multimedia-Programmierung 6
T MiniCraft - selbst nach Programmieren Spiele- und Multimedia-Programmierung 25
A Klickgame ala "Harveys neue Augen" oder "Edna bricht aus" in Java programmieren... Fragen zu Kleinig Spiele- und Multimedia-Programmierung 8
S Spiel Programmieren (Kreise treffen) Spiele- und Multimedia-Programmierung 5
F wie richtig spiele programmieren ? Spiele- und Multimedia-Programmierung 19
C Hinterteil von Snake programmieren Spiele- und Multimedia-Programmierung 11
B Spiele programmieren für ein Fenster? Spiele- und Multimedia-Programmierung 14
T Vier gewinnt programmieren Spiele- und Multimedia-Programmierung 9
G Stimme programmieren Spiele- und Multimedia-Programmierung 11
Sebi Mit Java Online games programmieren ? Spiele- und Multimedia-Programmierung 8
N Labyrinth programmieren/Denkhilfe Spiele- und Multimedia-Programmierung 3
data89 Spiel mit JMonkey programmieren Spiele- und Multimedia-Programmierung 6
O Programmieren von "Familienduell" Spiele- und Multimedia-Programmierung 3
A Wie JAVA Webcam Client programmieren? Spiele- und Multimedia-Programmierung 11
T vier gewinnt programmieren - aber wie Spiele- und Multimedia-Programmierung 19
N In einem Kasten springende Bälle programmieren...Hilfe Spiele- und Multimedia-Programmierung 7
B Problem beim Programmieren von 4Gewinnt Spiele- und Multimedia-Programmierung 5
A Programmieren eines Bruchrechners Spiele- und Multimedia-Programmierung 3
K Malefiz programmieren - Frage zu den einzelnen Spielfeldern Spiele- und Multimedia-Programmierung 5
G wer möchte mit mir risiko programmieren? Spiele- und Multimedia-Programmierung 7
B Problem beim Programmieren Von Mühle Spiele- und Multimedia-Programmierung 6
N Sinus Welle programmieren! Spiele- und Multimedia-Programmierung 4
J Gesellschaftsspiele programmieren Spiele- und Multimedia-Programmierung 8
P 2D Spiel mir drehbaren Bildern (Sprites) programmieren Spiele- und Multimedia-Programmierung 10
U Ball programmieren Spiele- und Multimedia-Programmierung 26
A "Wegnehm-Spiel" programmieren, Tipps + Links? Spiele- und Multimedia-Programmierung 8

Ähnliche Java Themen


Oben