# Kartenspiel programmieren



## Joy (12. Jun 2009)

hallo erstmal 

ich hab mich gewagt nach einem guten halben Jahr Schul-Java an ein für mich größeres Projekt zu wagen. Habe schon angefangen ein paar Dinge (wie die Spieler als Objekte) zu programmieren, mein Problem allerdings ist im Moment, dass ich keine Ahnung habe, wie ich Karten erzeugen kann, also, dass ich eine Karte habe die in einem Textfenster gezeigt wird. Bei Google habe ich auch nicht wirklich etwas gefunden, was mir weitergeholfen hat!

Zweites Problem:

```
Frame f = new Frame( "Mau Mau" );
		f.add(new Label("Geben Sie die Spieleranzahl ein!"), BorderLayout.NORTH);
		objSpielerzahl.setSpielerzahl(Integer.parseInt(objTE.readLine()));
		f.setSize(1000,2000);
		f.setVisible(true );
		System.exit(0);
```
ich weiß nicht, warum kein Fenster aufgeht.. Wir haben das Einlesen von Daten in der Schule zwar über Konsole aber ansonsten immer mit dem Code 
	
	
	
	





```
objSpielerzahl.setSpielerzahl(Integer.parseInt(objTE.readLine()));
```
 gemacht.

Kann mir vielleicht jemand einen Tipp geben, woran es liegen könnte?

Liebe Grüße


----------



## Der Müde Joe (12. Jun 2009)

>wie ich Karten erzeugen kann

enjoy:

```
package card;

public class Card implements Comparable<Card>{
	
	private final Suit suit;
	private final Rank rank;
	
	
	public enum Suit{
		HEART, DIAMOND, CLUB, SPADE;
	}
	public enum Rank{
		TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE;
		
		public int rank(){
			return this.ordinal() + 2;
		}
	}
	
	
	public Card(Rank rank, Suit suit){
		this.rank = rank;
		this.suit = suit;
	}

	public int compareTo(Card card){
		return this.rank.compareTo(card.rank);
	}

	public Rank getRank() {
		return rank;
	}

	public Suit getSuit() {
		return suit;
	}
	
	public String toString(){
		return "" + rank + " "+ suit;
	}
	
	
	public static void main(String [] args){
		Card c = new Card(Rank.TWO, Suit.HEART);
		Card c2 = new Card(Rank.TEN,Suit.HEART);
		
		System.out.println(c);
		System.out.println(c.rank.compareTo(c2.rank));
	}
}
```


```
package card;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Deck{
	
	private final int DECK_SIZE = 52;
	
	private final List<Card> cards;
	
	
	public Deck(){
		cards = new ArrayList<Card>(DECK_SIZE);
		
		for(Card.Suit suit : Card.Suit.values()){
			for(Card.Rank rank : Card.Rank.values()){
				cards.add(new Card(rank, suit));
			}
		}
	}
	
	public void shuffleDeck(){
		Collections.shuffle(cards);
	}
	
	public Card deal(){
		return cards.remove(0);
	}
	
	public void burn(){
		cards.remove(0);
	}
	
	public static void main(String [] args){
		Deck d = new Deck();
		d.shuffleDeck();
		
		System.out.println(d.deal());
	}
}
```

EDIT:
Wobei man den Rank eigentlich nicht mit ordinal() + 2 machen sollte, sondern eine Richtige enum mit einem int initialisiert.


----------



## 0815 (12. Jun 2009)

> ich weiß nicht, warum kein Fenster aufgeht..




```
f.setVisible(true );
        System.exit(0);
```

weil du das programm beendest, nachdem du das fenster anzeigst.


----------



## Joy (12. Jun 2009)

danke für eure Hilfe - habe allerdings nochmal ein Problem 
und zwar: 
@ Der Müde Joe: warum kommt in der Kartenklasse immer bei der Ausgabe "-8"?

Liebe Grüße


----------



## Der Müde Joe (13. Jun 2009)

>warum kommt in der Kartenklasse immer bei der Ausgabe "-8"?
Comparable (Java Platform SE 6)



> Compares this object with the specified object for order. Returns a *negative* integer, zero, or a positive integer as this object is *less than*, equal to, or greater than the specified object.



Vergleiche 2 mit 10: 2 - 10 = -8


----------

