# Kartenspiel (Karten)



## Billabongo (1. Sep 2011)

Heii

Ich will gerade ein Kartenspiel programmieren. Dabei wollte ich die Karten in einer Klasse programmieren wobei die verschiedenen Karten Subklassen sein sollten, die Karten sollten sich eigentlich wie Button verhalten. Jedoch klappt das iwie nicht. Wäre froh wenn mir jemand helfen könnte.

```
class Karten extends JButton {

	public int sp;//Siegpunkte
	public int ap;//Aktionspunkte
	public int g;//Geld
	public int ko;//Kosten
	public int ka;//kauf

	private JButton b;
  
   public class Karten(int sp, int ap, int g, int ko, int ka, JButton b)  {
   setRolloverEnabled(true);
  
   JButton Karte1= new JButton();
   Karte1=b;
   ImageIcon bild1= new ImageIcon("C:\\Users\\Bill\\Documents\\MA\\karte11.jpg");
   ImageIcon bild2= new ImageIcon("C:\\Users\\Bill\\Documents\\MA\\karte12.jpg");
 
   Karte1.setToolTipText("hilfe");

   Karte1.setIcon(bild1);  
   Dimension d = new Dimension(bild1.getIconWidth(), bild1.getIconHeight());
   Karte1.setPreferredSize(d);
   Karte1.setRolloverIcon(bild2);
   
   Karte1.addActionListener(new ButtonLauscher());
   this.sp=1;
   this.ap=0;
   this.g=0;
   this.ko=2;
   this.ka=0; 

	}
  Karte1() extends Karten{
	  
  }
```


----------



## SlaterB (1. Sep 2011)

> Karte1=b;
die Variable Karte1 zeigt jetzt wie vorher b auf null?

> Karte1() extends Karten{
???


----------



## eRaaaa (1. Sep 2011)

> > Karte1=b;
> die Variable Karte1 zeigt jetzt wie vorher b auf null?


b wird übergeben  (Sinn machts dennoch nicht, wenn man überlegt das eine Zeile vorher eine Instanz in Karte1 abgelegt wird...)

Allerdings ist die Instanz(this) doch eh schon ein JButton (class Karten extends JButton ) ???:L

public class Karten(int sp, int ap, int g, int ko, int ka, JButton b) 

was hat das 
	
	
	
	





```
class
```
 da zu suchen?


----------



## SlaterB (1. Sep 2011)

das Karten-Objekt ist ein Button,
ein zweiter wird übergeben,
ein dritter mit Karte1 noch erzeugt
und dann gibts noch b als Klassenattribut

wirklich eindeutig zu viele Buttons


----------



## Billabongo (1. Sep 2011)

ja mhm... das ist einfach die letzte version, war verzweifelt und hab halt einfach rumprobiert. Also Karte 1 sollte halt eine subklasse von karten sein.


----------



## Billabongo (1. Sep 2011)

sorry für doppelpost, aber als Gast kann man ja nicht editieren.  Hätte den jemand einen vorschlag, wie ich die Karten programmieren könnte, bzw wie ich das korrekt mit klassen und subklassen hinkriege?


----------



## SlaterB (1. Sep 2011)

der erste konkrete Vorschlag ist KEINE Subklasse zu verwenden, Karte ist gut und fertig 
(übrigens immer Einzahl für Klassen verwenden, es heißt ja auch JButton und nicht JButtons..)

du hast vielleicht irgendwelche Vorstellungen, warum du Subklassen brauchst,
da du die aber verschweigst und niemand anders auf sowas kommst, kann auch keine Lösung genannt werden


----------



## Billabongo (1. Sep 2011)

niemand anders auf sowas kommst? meintest du kommt?
Egal, ich dachte mir halt, dass die Karten ja alle gewisse Gemeinsamkeiten aufweisen und somit von einer Hauptklasse erben könnten. Also ist dein Vorschlag ich soll für jede Karte eine eigene Klasse machen?


----------



## SlaterB (1. Sep 2011)

kommt, richtig,
ich weiß leider weiter nicht was dein Ziel ist, vielleicht bist du mit Subklassen wirklich gut dran

class Karte1 extends Karte {

}


----------



## Billabongo (1. Sep 2011)

oke tut mir leid, wenn ich mich nicht so klar ausdrücken konnte. Ich versuche  es nochmals. Grundsätzlich gibt es im Kartenspiel 2 Typen von Karten, solche die entweder Geld oder Punkte bringen und Aktionskarten und von beiden Typen gibt es wiederum verschiedene Karten. Ich habe nun gehofft das ich für jeden Typ eine Klasse machen kann und die einzelnen Klassen dann als Subklasse definieren kann. Aber wenn es nicht sinnvoll ist, bin ich auch ganz offen für andere Vorschläge.


----------



## Billabongo (1. Sep 2011)

Also das eigentliche Ziel ist es das ich Karten habe, die ich in meine Arraylist speichern kann.


----------



## SlaterB (2. Sep 2011)

das sind einfach nicht wirklich Infos, die Designentscheidungen rechtfertigen,
wie unterscheiden sich die Subklassen, brauchen sie unterschiedliche wesentliche Code-Blöcke?
oder haben sie nur unterschiedliche Werte in gar gleichen Attributen, was dann stark gegen einzelne Klassen spricht?

letztlich programmiere doch irgendwas, fange an und korrigiere später,
vorher unspezifisch darüber zu reden bringt nicht viel, eher bei wirklich konkreten Problemen,

du musst auch nicht alle Komplexität von Anfang an drin haben, 
starte vielleicht mit einem einzelnen Kartentyp und bringe auch andere Programmteile voran


----------



## Billabongo (2. Sep 2011)

Oke also es gibt drei Typen Geld und Punkte Karten und die sind eig gleich ausser das die einen Geld und die anderen Punkte geben. Als dritter typ wären noch die Aktionskarten, die sind im Grunde alle ähnlich.


----------



## Skanky (2. Sep 2011)

Hi, ich denke es handelt sich um das Spiel Dominion?^^

ich sitze gerade an selbigen und hab es es ähnlich gelöst wie du.

1 Klasse ="Karte" mit variabel und Methoden die alle Karten gleich haben (rückseite(bild), wert, name, typ)
2 Klasse ="WerteKarte" basierend auf Karte für Punkte und Geld Karten, da diese von der Art her gleich sein (haben ein Wert =Punkt/Geld)
2 Klasse ="AktionsKarte" <-- hab ich noch nicht Geschrieben. Behinhaltet aber den Code für die verschiedenen Aktionen. 

Geldkarten (Kupfer, Silber, Gold) sind demnach Wertekarten mit unterschiedlichen Variablen genauso wie Punktekarten(Herzogtum, Anwesen, Provinz, Fluch(negativer Wert). Aber alle werden durch die Klasse="WerteKarte" beschrieben. 

dann hab ich noch eine Klasse="Stapel" für die Handkarten, Nachziehstapel, Ablagestapel, und die Stapel für die Kaufkarten welche wiederum in einer ArrayList zusammen gefasst sind. 


Was mir sehr geholfen hat: Einfach mal die Karten nehmen und gucken was wirklich überall gleich ist und was zusammen passt. Ich habe dafür zwei Abende genommen und mir Tabellen und Ablaufdiagramme vom Spiel und den Aktionen gemacht um alles soweit es geht zu Abstrahieren. Das hilft zwar nicht beim Code schreiben aber dafür bei der Logik. 

Bei meiner Variante hakt es gerade leider an der GUI


----------



## Gaara92 (3. Sep 2011)

hab mich jetzt mal registriert. 
@Skanky ja stimmt, ich arbeite an ein Dominion, hast du vllt  skype oder ein anderer messenger, dann könnte man sich evtl austauschen


----------

