# Automaten Spiel



## mmo (1. Mai 2012)

Hallo,

muss für Informatik ein Spiel programmieren. Habe ein Automaten Spiel gewählt, welches bei z.b. 4 gleichen paaren (ass) von karten 100 punkte ausgeben soll, jedoch klappt es nicht mit der punkteverteilung, nachdem man den sogenannten automaten gestoppt hat.
das spiel soll bei z.b. jedem paar punkte geben, jedoch je höher der kartenwert desto mehr punkte bei paaren.
heir ist mal das Spiel zum downloaden: File-Upload.net - Karten_Projekt.zip

ich hoffe ihr könnt mir helfen, das spiel fertig zu programmieren, da ich kein plan habe, wie ichs so programmieren könnte, damit es punkte gibt.
danke für die hilfe!


----------



## Robokopp (1. Mai 2012)

Hab mir zwar nicht angeschaut, aber du kannst im Prinzip eine variable Punkte deklarieren,und an der stelle wo die "gewinn-bedingung"erfüllt ist 100 Punkte dazu addieren


----------



## mmo (1. Mai 2012)

hab ich mir auch gedacht, aber es ist viel schwieriger als du denkst. die variable ist das problem. 
noch was, wir programmieren die spiele mit dem java-editor, der ist da am ´besten.


----------



## Robokopp (1. Mai 2012)

und was ist da das problem? du kannst der Variable doch Punkte dazuaddieren, die du bspw. mit standartpunkte*punktemodifier oder standartpunkte+modifier festlegst. den modifier kannst du dir aus den kartenwerten generieren.

Ach und vlt nützt es was, wenn du hier den unkompilierten Sourcecode hochlädst. Ich weiß nichts mit class Dateien anzufangen und hab keine Lust mich mit Reverse Engineering zu befassen falls das dafür notwendig ist


----------



## mmo (3. Mai 2012)

Hier die Class-Datei:


```
import java.awt.*;

class Karten extends Object implements Runnable {
    Panel leinwand;
    Image[] bilder;

   public Karten(Image[] pictures, Panel show_pan){
       leinwand = show_pan;
       bilder=pictures;
   }

   private boolean stop;

   public void run(){
     pausedavor();
     while (!stop) {
      Graphics bildmalstift;
      Image anzeigebild;
      int anzahl;
      bildmalstift= leinwand.getGraphics();
      anzahl=bilder.length;
        for (int i=0;i<=anzahl-1;i++) {
        anzeigebild= bilder[i];
        bildmalstift.drawImage(anzeigebild,0,0,leinwand.getSize().width,leinwand.getSize().height,null);
        pausenow();

      }
     }


   }
   
   public void anhalten(){
     stop=true;
   }
   
   private void pausedavor(){
     int millisec;
     try {
       millisec= 500;
       Thread.sleep(millisec);
     } catch (InterruptedException e) {}
   }
   
   private void pausenow(){
     int millisec;
     try {
       millisec= 50;
       Thread.sleep(millisec);
     } catch (InterruptedException e) {}
   }
   
}
```


hier der Code für das Applet:

```
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 18.04.2012
  * @author
  */

public class Karten_Appl extends Applet {
  //////////////////////////////
  int anzahlbilder=8;
  // Anfang Attribute
  Panel cp = new Panel(null);
  private Panel panLeinwand1 = new Panel(null);
  private Panel panLeinwand2 = new Panel(null);
  private Button playbut1 = new Button();
  private Button clearbut = new Button();
  private Panel panLeinwand3 = new Panel(null);
  private Button butstop1 = new Button();
  private Button butstop2 = new Button();
  private Button butstop3 = new Button();
  
  /////////////////////////////
  
  MediaTracker mein_Mt = new MediaTracker(this);
  MediaTracker dein_Mt = new MediaTracker(this);
  MediaTracker sein_Mt = new MediaTracker(this);
  MediaTracker euer_Mt = new MediaTracker(this);
  Image[] bildFeld1 = new Image[anzahlbilder];   //ARRAY um Bilder aufzunehmen
  Image[] bildFeld2 = new Image[anzahlbilder];
  Image[] bildFeld3 = new Image[anzahlbilder];
  Image[] bildFeld4 = new Image[anzahlbilder];
  
  Thread t1, t2, t3, t4;
  Karten k1,k2, k3, k4;
  
  /////////////////////////////

  private Panel panLeinwand4 = new Panel(null);
  private Button butstop4 = new Button();
  private Button playbut2 = new Button();
  private Button playbut3 = new Button();
  private Button playbut4 = new Button();
  private Button playbut = new Button();

  private Label label5 = new Label();
  private Label label6 = new Label();
  private Label label7 = new Label();
  private TextField tf1 = new TextField();
  private TextField tf2 = new TextField();
  private TextField tfhighscore = new TextField();
  private TextField tfplus = new TextField();
  private Label label8 = new Label();
  private Label label9 = new Label();
  private Button butcheck = new Button();
  // Ende Attribute

  public void init() {
    cp.setBounds(0, 0, 898, 588);
    add(cp);
    // Anfang Komponenten

      /////////////////////////////
     for (int i=0;i<anzahlbilder;i++){
     bildFeld1[i]= this.getImage(this.getDocumentBase(),"decka"+(i)+".jpg");
     bildFeld2[i]= this.getImage(this.getDocumentBase(),"deckb"+(i)+".jpg");
     bildFeld3[i]= this.getImage(this.getDocumentBase(),"deckc"+(i)+".jpg");
     bildFeld4[i]= this.getImage(this.getDocumentBase(),"deckd"+(i)+".jpg");
     mein_Mt.addImage(bildFeld1[i],i);
     dein_Mt.addImage(bildFeld2[i],i);
     sein_Mt.addImage(bildFeld3[i],i);
     euer_Mt.addImage(bildFeld4[i],i);

       try {
           mein_Mt.waitForAll();
           dein_Mt.waitForAll();
           sein_Mt.waitForAll();
           euer_Mt.waitForAll();
       } catch(InterruptedException e) { }
    }  // Ende von for-schleife
    
      /////////////////////////////

    panLeinwand1.setBounds(15, 23, 185, 241);
    cp.add(panLeinwand1);
    panLeinwand2.setBounds(229, 24, 185, 241);
    cp.add(panLeinwand2);
    playbut1.setBounds(54, 279, 105, 33);
    playbut1.setLabel("Spielen!!!");
    playbut1.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        playbut1_ActionPerformed(evt);
      }
    });
    cp.add(playbut1);
    clearbut.setBounds(375, 388, 179, 25);
    clearbut.setLabel("Spiel neustarten (Clear All)");
    clearbut.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        clearbut_ActionPerformed(evt);
      }
    });
    cp.add(clearbut);
    panLeinwand3.setBounds(450, 16, 185, 241);
    cp.add(panLeinwand3);
    butstop1.setBounds(56, 323, 105, 33);
    butstop1.setLabel("Stop!");
    butstop1.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        butstop1_ActionPerformed(evt);
      }
    });
    cp.add(butstop1);
    butstop2.setBounds(243, 323, 121, 33);
    butstop2.setLabel("Stop!");
    butstop2.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        butstop2_ActionPerformed(evt);
      }
    });
    cp.add(butstop2);
    butstop3.setBounds(478, 320, 121, 33);
    butstop3.setLabel("Stop!");
    butstop3.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        butstop3_ActionPerformed(evt);
      }
    });
    cp.add(butstop3);
    panLeinwand4.setBounds(679, 10, 185, 241);
    cp.add(panLeinwand4);
    butstop4.setBounds(705, 317, 105, 33);
    butstop4.setLabel("Stop!");
    butstop4.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        butstop4_ActionPerformed(evt);
      }
    });
    cp.add(butstop4);
    playbut2.setBounds(245, 281, 121, 33);
    playbut2.setLabel("Spielen!!!");
    playbut2.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        playbut2_ActionPerformed(evt);
      }
    });
    cp.add(playbut2);
    playbut3.setBounds(479, 279, 121, 33);
    playbut3.setLabel("Spielen!!!");
    playbut3.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        playbut3_ActionPerformed(evt);
      }
    });
    cp.add(playbut3);
    playbut4.setBounds(706, 275, 105, 33);
    playbut4.setLabel("Spielen!!!");
    playbut4.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        playbut4_ActionPerformed(evt);
      }
    });
    cp.add(playbut4);
    playbut.setBounds(138, 372, 209, 41);
    playbut.setLabel("Jetzt Spielen!!!");
    playbut.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        playbut_ActionPerformed(evt);
      }
    });
    cp.add(playbut);
    label5.setBounds(95, 488, 63, 25);
    label5.setText("Versuche: ");
    cp.add(label5);
    label6.setBounds(67, 452, 50, 25);
    label6.setText("Punkte: ");
    cp.add(label6);
    label7.setBounds(519, 432, 83, 33);
    label7.setText("Ihr Highscore");
    cp.add(label7);
    tf1.setBounds(122, 453, 137, 25);
    tf1.setText("10");
    tf1.setFont(new Font("Dialog", Font.PLAIN, 14));
    cp.add(tf1);
    tf2.setBounds(160, 488, 49, 25);
    tf2.setText("14");
    tf2.setFont(new Font("Dialog", Font.PLAIN, 14));
    cp.add(tf2);
    tfhighscore.setBounds(411, 467, 281, 33);
    tfhighscore.setForeground(Color.BLACK);
    tfhighscore.setBackground(Color.GREEN);
    tfhighscore.setFont(new Font("Dialog", Font.PLAIN, 20));
    cp.add(tfhighscore);
    tfplus.setBounds(307, 456, 65, 25);
    cp.add(tfplus);
    label8.setBounds(293, 454, 19, 27);
    label8.setText("+");
    label8.setFont(new Font("Dialog", Font.PLAIN, 16));
    cp.add(label8);
    label9.setBounds(308, 427, 59, 25);
    label9.setText("Gewinn: ");
    cp.add(label9);
    butcheck.setBounds(640, 392, 105, 33);
    butcheck.setLabel("button1");
    butcheck.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        butcheck_ActionPerformed(evt);
      }
    });
    cp.add(butcheck);
    // Ende Komponenten

  }
  
    /////////////////////////////
  // Anfang Methoden
  public void playbut1_ActionPerformed(ActionEvent evt) {
    k1=new Karten(bildFeld1, panLeinwand1);
    t1= new Thread(k1);
    t1.start();

  }
  
    public void playbut2_ActionPerformed(ActionEvent evt) {
    k2=new Karten(bildFeld2, panLeinwand2);
    t2= new Thread(k2);
    t2.start();
  }

  public void playbut3_ActionPerformed(ActionEvent evt) {
    k3=new Karten(bildFeld3, panLeinwand3);
    t3= new Thread(k3);
    t3.start();
  }

  public void playbut4_ActionPerformed(ActionEvent evt) {
    k4=new Karten(bildFeld4, panLeinwand4);
    t4= new Thread(k4);
    t4.start();
  }

  public void clearbut_ActionPerformed(ActionEvent evt) {
    tf1.setText("10");
    tf2.setText("14");
    tfhighscore.setText("");
    tfplus.setText("");
  }

  public void butstop1_ActionPerformed(ActionEvent evt) {
    t1.stop();

  }

  public void butstop2_ActionPerformed(ActionEvent evt) {
    t2.stop();
  }

  public void butstop3_ActionPerformed(ActionEvent evt) {
    t3.stop();
  }

  public void butstop4_ActionPerformed(ActionEvent evt) {
    int versuche;
    versuche= Integer.valueOf(tf2.getText());

    t4.stop();
    versuche= versuche-1;
    tf2.setText(String.valueOf(versuche));

  }



  public void playbut_ActionPerformed(ActionEvent evt) {
    k1=new Karten(bildFeld1, panLeinwand1);
    t1= new Thread(k1);
    t1.start();
    
    k2=new Karten(bildFeld2, panLeinwand2);
    t2= new Thread(k2);
    t2.start();
    
    k3=new Karten(bildFeld3, panLeinwand3);
    t3= new Thread(k3);
    t3.start();
    
    k4=new Karten(bildFeld4, panLeinwand4);
    t4= new Thread(k4);
    t4.start();

    tfplus.setText("");
  }

  public void butcheck_ActionPerformed(ActionEvent evt) {
    int punkte, erg;
        punkte= Integer.valueOf(tf1.getText());
    if () {
       erg= punkte*100;
      tf1.setText(String.valueOf(erg));
      tfplus.setText(String.valueOf(erg-punkte));
    }
  }

  // Ende Methoden

}
```


das problem liegt darin, dass ich nicht weiß, wie ich einer variable den wert der gestoppten karte zuweisen kann, wie des funktioniert, wie ich des reinschreiben soll im Applet. Das Spiel soll eben als Thread laufen, deswegen auch die Class-Datei.


----------



## timbeau (3. Mai 2012)

Urgs ist das fies. 

anstatt überall setBounds würde ich mal ein vernünftiges Layout benutzen. Dann mal die Logik und die Grafik trennen. 

Dann ist das mit den Punkten auch viel einfacher. 

Du würfelst 4x. Bei Gewinn liest du die Zahl aus, nimmst die passende Karte und lässt zeichnen. Dazu berechnest du einfach anhand des Ergebnisses den Gewinn. 

Array oder Liste mit Punkten [10, 20,50,100]

int wurf = Random.nextInt(4)

Punkte = Array[wurf]


Fertig

Ps: Mit Aussagen "der ist am Besten" wäre ich vorsichtig


----------



## mmo (3. Mai 2012)

als erstes habe ich setBounds nicht eingefügt. es hat sich automatisch eingefügt durch den java editor. bekomms trotzdem nicht hin und außerdem gibt es da keinen würfel sondern wenn man das spiel startet dann tauchen 4 karten auf, die sich ständig ändern in einer endlos schleife, wobei man sie nur mit dem stop button stoppen kann und sich dann daraus der wert herauslesen sollte. 
könntest du am besten den fertiggeschriebenen code reinstellen?


----------



## timbeau (3. Mai 2012)

mmo hat gesagt.:


> als erstes habe ich setBounds nicht eingefügt. es hat sich automatisch eingefügt durch den java editor. bekomms trotzdem nicht hin und außerdem gibt es da keinen würfel sondern wenn man das spiel startet dann tauchen 4 karten auf, die sich ständig ändern in einer endlos schleife, wobei man sie nur mit dem stop button stoppen kann und sich dann daraus der wert herauslesen sollte.



Das heißt, du hast die sich drehenden Karten nicht selbst programmiert? 



mmo hat gesagt.:


> könntest du am besten den fertiggeschriebenen code reinstellen?



Was zahlst du?


----------



## Robokopp (4. Mai 2012)




----------



## mmo (4. Mai 2012)

> Das heißt, du hast die sich drehenden Karten nicht selbst programmiert?



doch hab ich, bloß weiß ich nicht, wie ich des mit der variable hinbekomme. meine güte. es sind keine drehenden karten, sondern karten die sich tauschen, sprich eine karte erscheint auf einer leinwand (panLeinwand) und dann erscheint ne andere und immer weiter so. 
am besten wäre, wenn man den java-editor hat und des mal startet und anschaut wie des funzt.


----------



## andre111 (4. Mai 2012)

Ich will jetzt nicht unfreundlich werden, aber wenn du möchtest, dass dir jemand dein Spiel fertig programmiert, dann erstell einen Thread unter Jobbörse und mach dort dein Angebot, wie viel du bereit wärst zu zahlen.
Ansonsten solltest du dir erst mal die Grundlagen aneignen und sicher beherrschen, bevor du dich an Applets, GUIs und Spiele ranwagst.


----------



## timbeau (4. Mai 2012)

mmo hat gesagt.:


> doch hab ich, bloß weiß ich nicht, wie ich des mit der variable hinbekomme. meine güte. es sind keine drehenden karten, sondern karten die sich tauschen, sprich eine karte erscheint auf einer leinwand (panLeinwand) und dann erscheint ne andere und immer weiter so.
> am besten wäre, wenn man den java-editor hat und des mal startet und anschaut wie des funzt.



Ich bin schon in der Lage diesen Code zu entziffern. Nur du scheinst es nicht zu verstehen, weil du nur mit dem Gui-Builder rumspielst ohne die Grundlagen zu kennen. 

Wenn du also bei diesem Code bleiben willst, erstelle pro Kartenbild eine Punktzahl. 

Fertiger Java-Code: 


```
int [] punkte = {10,20,50,100};
```

Frag nachdem du Stop gedrückt hast jedes KArtenobjekt, welches Bild gerade gezeigt wird. 


```
private int index;
```


```
for (int i=0;i<=anzahl-1;i++) {
        anzeigebild= bilder[i];
        bildmalstift.drawImage(anzeigebild,0,0,leinwand.getSize().width,leinwand.getSize().height,null);
        pausenow();
index = i;
 
      }
```


```
private int getIndex(){
return index;
}
```

Jetzt hast du 4 Werte pro Karte und dein Array. 

Wenn der Index überall gleich ist, z.B. 3, dann gibts 100Punkte. Natürlich noch das Array anpassen.


----------



## mmo (11. Mai 2012)

den code, denn du da reingestellt hast, habe ich in die class-datei eingefügt und klappt auch,a ber wie mach ich des jetzt im applet rein? wo und was soll ich da reinschreiben?


----------



## timbeau (11. Mai 2012)

Du musst sobald ein Thread gestoppt wird, dessen Feld auslesen.


----------



## mmo (11. Mai 2012)

hab des jetzt so im Applet:

```
public void butstop1_ActionPerformed(ActionEvent evt) {
    int x1;
    t1.stop();
    k1=new Karten(bildFeld1, panLeinwand1);
    t1= new Thread(k1);
    k1.getIndex();
  }
```

und so würde ichs bei den andern drei stopbuttons machen und beim vierten mit if-bedingung beginnen. stimmt des so? liest des dann von den andern stopbuttons die werte ab?


----------



## timbeau (11. Mai 2012)

Ob das stimmt kannst du doch testen. Gib aus was für ein Kartenobjekt erstellt wird und vergleiche mit dem angezeigten Bild. 

Testweise kannst du auch mal feste Bilder anzeigen lassen, z.B. 4 Asse.


----------



## mmo (11. Mai 2012)

habs fast geschafft, jedoch macht es bei mir bei egal welchem paar +100 punkte, also des erste, was ich da reinprogrammiert habe. ich glaube i-wie liest es den kartenwert nicht ab.
heir mein code:

```
public void butstop1_ActionPerformed(ActionEvent evt) {
    t1.stop();

    k1=new Karten(bildFeld1, panLeinwand1);
    x1= Integer.valueOf(k1.getIndex());
  }

  public void butstop2_ActionPerformed(ActionEvent evt) {
    t2.stop();

    k2=new Karten(bildFeld2, panLeinwand2);
    x2= Integer.valueOf(k2.getIndex());
  }

  public void butstop3_ActionPerformed(ActionEvent evt) {
    t3.stop();
    k3=new Karten(bildFeld3, panLeinwand3);
    x3= Integer.valueOf(k3.getIndex());
  }

  public void butstop4_ActionPerformed(ActionEvent evt) {
    int versuche;
    versuche= Integer.valueOf(labversuche.getText());
    t4.stop();
    versuche= versuche-1;
    labversuche.setText(String.valueOf(versuche));
    int punkte, erg;
    punkte= Integer.valueOf(labpunkte.getText());
    k4=new Karten(bildFeld4, panLeinwand4);
    x4= Integer.valueOf(k4.getIndex());
    if (x1==x2) {
      erg= punkte+100;
      labpunkte.setText(String.valueOf(erg));
      labplus.setText(String.valueOf(erg-punkte));
    }
    if (x1==x3) {
      erg= punkte+100;
      labpunkte.setText(String.valueOf(erg));
      labplus.setText(String.valueOf(erg-punkte));
    }

  }
```


----------



## mmo (11. Mai 2012)

hatte da en fehler, ich mein des hier, aber trotzdem klappts net:


```
public void butstop1_ActionPerformed(ActionEvent evt) {
    t1.stop();

    k1=new Karten(bildFeld1, panLeinwand1);
    x1= Integer.valueOf(k1.getIndex());
  }

  public void butstop2_ActionPerformed(ActionEvent evt) {
    t2.stop();

    k2=new Karten(bildFeld2, panLeinwand2);
    x2= Integer.valueOf(k2.getIndex());
  }

  public void butstop3_ActionPerformed(ActionEvent evt) {
    t3.stop();
    k3=new Karten(bildFeld3, panLeinwand3);
    x3= Integer.valueOf(k3.getIndex());
  }

  public void butstop4_ActionPerformed(ActionEvent evt) {
    int versuche;
    versuche= Integer.valueOf(labversuche.getText());
    t4.stop();
    versuche= versuche-1;
    labversuche.setText(String.valueOf(versuche));
    int punkte, erg;
    punkte= Integer.valueOf(labpunkte.getText());
    k4=new Karten(bildFeld4, panLeinwand4);
    x4= Integer.valueOf(k4.getIndex());
    if (x1==x2) {
      erg= punkte+100;
      labpunkte.setText(String.valueOf(erg));
      labplus.setText(String.valueOf(erg-punkte));
    } else {
      if (x1==x3) {
       erg= punkte+50;
       labpunkte.setText(String.valueOf(erg));
       labplus.setText(String.valueOf(erg-punkte));
      } else {
         if (x1==x4) {
            erg= punkte+25;
            labpunkte.setText(String.valueOf(erg));
            labplus.setText(String.valueOf(erg-punkte));
         } else {
            erg= punkte+0;
            labpunkte.setText(String.valueOf(erg));
            labplus.setText(String.valueOf(erg-punkte));
         }
      }
    }

  }
```


----------



## timbeau (11. Mai 2012)

Dann check mal die Index Methode. 

Nimm mal den Debugger, bei so einem Projekt kann man die Übersicht verlieren aber die Probleme muss man eingrenzen können. Ist der Index auch gesetzt wenn die Karte erstellt wird? Du machst ein neues Kartenobjekt aber wie setzt du den Index?


----------



## mmo (12. Mai 2012)

also dies ist die class-datei mit der index-methode, hab deinen ratschlag befolgt, jedoch weiß ich nicht, wo ich die "int [] punkte = {10,20,50,100};" einfügen soll, bzw. was ich weiter damit machen soll.
class-datei:

```
int [] punkte = {10,20,50,100};

   private int index;

   private boolean stop;

   public void run(){
     pausedavor();
     while (!stop) {
      Graphics bildmalstift;
      Image anzeigebild;
      int anzahl;
      bildmalstift= leinwand.getGraphics();
      anzahl=bilder.length;
        for (int i=0;i<=anzahl-1;i++) {
        anzeigebild= bilder[i];
        bildmalstift.drawImage(anzeigebild,0,0,leinwand.getSize().width,leinwand.getSize().height,null);
        pausenow();
        index = i;
      }
     }


   }
   
   public int getIndex(){
     return index;
   }
   
   public void anhalten(){
     stop=true;
   }
```



hier die applet datei:

```
public class Karten_Appl extends Applet {
  //////////////////////////////
  int anzahlbilder=8;
  int x1, x2, x3, x4;

MediaTracker mein_Mt = new MediaTracker(this);
  MediaTracker dein_Mt = new MediaTracker(this);
  MediaTracker sein_Mt = new MediaTracker(this);
  MediaTracker euer_Mt = new MediaTracker(this);
  Image[] bildFeld1 = new Image[anzahlbilder];   //ARRAY um Bilder aufzunehmen
  Image[] bildFeld2 = new Image[anzahlbilder];
  Image[] bildFeld3 = new Image[anzahlbilder];
  Image[] bildFeld4 = new Image[anzahlbilder];
  
  Thread t1, t2, t3, t4;
  Karten k1,k2, k3, k4;
  
  /////////////////////////////




 public void init() {
    cp.setBounds(0, 0, 898, 588);
    add(cp);
    // Anfang Komponenten

      /////////////////////////////
     for (int i=0;i<anzahlbilder;i++){
     bildFeld1[i]= this.getImage(this.getDocumentBase(),"decka"+(i)+".jpg");
     bildFeld2[i]= this.getImage(this.getDocumentBase(),"deckb"+(i)+".jpg");
     bildFeld3[i]= this.getImage(this.getDocumentBase(),"deckc"+(i)+".jpg");
     bildFeld4[i]= this.getImage(this.getDocumentBase(),"deckd"+(i)+".jpg");
     mein_Mt.addImage(bildFeld1[i],i);
     dein_Mt.addImage(bildFeld2[i],i);
     sein_Mt.addImage(bildFeld3[i],i);
     euer_Mt.addImage(bildFeld4[i],i);

       try {
           mein_Mt.waitForAll();
           dein_Mt.waitForAll();
           sein_Mt.waitForAll();
           euer_Mt.waitForAll();
       } catch(InterruptedException e) { }
    }  // Ende von for-schleife
    
      /////////////////////////////



// Anfang Methoden
  public void clearbut_ActionPerformed(ActionEvent evt) {
    labpunkte.setText("10");
    labversuche.setText("14");
    labhighscore.setText("");
    labplus.setText("");
  }

  public void butstop1_ActionPerformed(ActionEvent evt) {
    t1.stop();

    k1=new Karten(bildFeld1, panLeinwand1);
    x1= Integer.valueOf(k1.getIndex());
  }

  public void butstop2_ActionPerformed(ActionEvent evt) {
    t2.stop();

    k2=new Karten(bildFeld2, panLeinwand2);
    x2= Integer.valueOf(k2.getIndex());
  }

  public void butstop3_ActionPerformed(ActionEvent evt) {
    t3.stop();
    
    k3=new Karten(bildFeld3, panLeinwand3);
    x3= Integer.valueOf(k3.getIndex());
  }

  public void butstop4_ActionPerformed(ActionEvent evt) {
    int versuche;
    versuche= Integer.valueOf(labversuche.getText());
    t4.stop();
    versuche= versuche-1;
    labversuche.setText(String.valueOf(versuche));
    int punkte, erg;
    punkte= Integer.valueOf(labpunkte.getText());
    k4=new Karten(bildFeld4, panLeinwand4);
    x4= Integer.valueOf(k4.getIndex());
    if (x1==x2) {
      erg= punkte+100;
      labpunkte.setText(String.valueOf(erg));
      labplus.setText(String.valueOf(erg-punkte));
    } else {
      if (x1==x3) {
       erg= punkte+50;
       labpunkte.setText(String.valueOf(erg));
       labplus.setText(String.valueOf(erg-punkte));
      } else {
         if (x1==x4) {
            erg= punkte+25;
            labpunkte.setText(String.valueOf(erg));
            labplus.setText(String.valueOf(erg-punkte));
         } else {
            erg= punkte+0;
            labpunkte.setText(String.valueOf(erg));
            labplus.setText(String.valueOf(erg-punkte));
         }
      }
    }

  }



  public void playbut_ActionPerformed(ActionEvent evt) {
    k1=new Karten(bildFeld1, panLeinwand1);
    t1= new Thread(k1);
    t1.start();
    
    k2=new Karten(bildFeld2, panLeinwand2);
    t2= new Thread(k2);
    t2.start();
    
    k3=new Karten(bildFeld3, panLeinwand3);
    t3= new Thread(k3);
    t3.start();
    
    k4=new Karten(bildFeld4, panLeinwand4);
    t4= new Thread(k4);
    t4.start();

    labplus.setText("");
  }

  // Ende Methoden
```

des ist so des wichtigste.


----------



## timbeau (12. Mai 2012)

Ich sehe da leider noch keinen roten Faden in deinen Bemühungen. Was schonmal gut ist, ist das Auslesen, welche Karte gezogen wurde. Hast du das überprüft? Passen die x?-Werte zu den richtigen Karten? Sysouts oder debuggen.

Dann setzt du den Index in deiner Klasse (nicht class-Datei, die class-Datei ist deine kompilierte Java-Datei  ) einfach auf 4. 


```
for (int i=0;i<=anzahl-1;i++) {
        ...
        index = i;
      }
```

Was soll das bringen? Der Index ist abhängig von der gezogenen Karte. Du musst in deiner Klasse eine Methode schreiben, die dir einen Wert aus dem Punkte-Array zurück gibt. 


```
public int returnPoints(int index) {
return punkte[index] //keine Fehlerbehandlung
}
```

Und in deinem Applet machst du sowas wie 


```
if(x1==x2 && x2 == x3 && x3 == x4) {
System.out.println("4x die gleiche Karte!";
int punkte = klasse.returnPoints(x1);
System.out.println("Das bring " + punkte  + " Punkte!");
```


----------



## mmo (12. Mai 2012)

ja habs überprüft, klappt aber nicht. ich glaub ich hab des mit den x-werten falsch gemacht, denn es gibt ja 32 karten und dadurch 4 kartenstapel, die folgendermaßen heißen:
"decka"+(i)+".jpg"
"deckb"+(i)+".jpg"
"deckc"+(i)+".jpg"
"deckd"+(i)+".jpg"
in jedem kartenstapel gibts 8 karten (verschieden). wie gesagt ich gehe es flasch an, da oben es so angegeben ist:

```
bildFeld1[i]= this.getImage(this.getDocumentBase(),"decka"+(i)+".jpg");
```

aber ich weiß nicht, wie ich ne variable auf des beziehen könnte oder so. bei mir macht es immernoch +100 puntke, egal was für en paar kommt. 

ich weiß ncoh immernicht, was des soll:

```
int [] punkte = {10,20,50,100};
```


```
public int returnPoints(int index) {
   return punkte[index]; //keine Fehlerbehandlung
  }
```

könntest du nicht vllt mal dir des programm anschaun mit dem java-editor oder mal des programm starten, wie des abfolgt, weil es ist schwer zu erklären, wenn mans net mal selber anschaut.
hier nochmal das programm bis zum heutigen zeitpunkt zum downloaden:
File-Upload.net - Karten_Projekt.zip


----------



## timbeau (12. Mai 2012)

Browserabsturz, deshlab kürzer. 

Mit "hab ich falsch gemacht" kommen wir nicht weiter. 


```
public void run(){
     pausedavor();
     while (!stop) {
      Graphics bildmalstift;
      Image anzeigebild;
      int anzahl;
      bildmalstift= leinwand.getGraphics();
      anzahl=bilder.length;
        for (int i=0;i<=anzahl-1;i++) {
        anzeigebild= bilder[i];
        bildmalstift.drawImage(anzeigebild,0,0,leinwand.getSize().width,leinwand.getSize().height,null);
        pausenow();
        index = i;
      }
     }


   }
```

Hier wird pro Thread ausgewählt, welche deiner Karten gezeigt wird. Ob die Variablen stimmen musst DU rausfinden. Wenn du dein Programm in ein Java-Projekt packst schau ich mir das an, mit Applet-Kram hab ich grade keine Lust und es funktioniert auch nicht bei mir. 

Zu den Punkten. Das ist nicht die perfekte Lösung aber wie würdest du einer Karte Punkte zuordnen wenn du das ganze auf Papier machen würdest???

Du schreibst die Punkte pro Karte hin und daneben die Karte selber. 

Deine Schritte:
1. Du musst es jetzt endlich(!) mal hinkriegen eine Info über die gezogene Karte zu bekommen. Index sollte dir da helfen. Problem: Deine Karten sind bes****** benannt. decka0 = Herz-Ass, deckb0 = Kreuz-König, deckc0 = Pik9. Was soll das? 
2. Mit diesem Index gehst du auf dein Punkte-Array. Das musst du anpassen. Siehe Tipp mit dem Papier. Wieviele Karten, wieviele Punktemöglichkeiten?
3. Die Variablen zusammen-tragen. Du brauchst ja alle 4 um zu sehen ob gewonnen wurde. 

Hau mal rein, du kommst seit Tagen nicht vom Fleck hiermit.


----------



## mmo (13. Mai 2012)

jawohl, ich habe es endlich!!! 
dank dir @timbeau hab ichs!! danke, danke!!
dank dieser idee mit dem index in der class-datei und dann später mit den if-else. hatte da en fehler im applet. durch zufall hab ichs entdeckt und jetzt klappts. danke nochmals!!
hier das fertige applet zum downlaoden:
File-Upload.net - Karten_Projekt.zip


----------



## timbeau (14. Mai 2012)

Hi, zum einen bringt dein Prog meinen Firefox zum Absturz, zum anderen wird ja immernoch nicht nach Karte unterschieden.


----------



## mmo (14. Mai 2012)

?? komisch, bei mir funktioniert es nämlich, starte es vllt mit dem internet explorer oder mal java aktualisieren.


----------



## timbeau (15. Mai 2012)

Ich besitze keinen Internet-Explorer da ich kein Windows nutze und Java ist die neuste Version. Teste mal bei dir, so ein Spiel sollte auf verschiedenen Rechnern laufen


----------



## mmo (15. Mai 2012)

wirklich komisch aber, denn bei mir klappts perfekt. werde nochmal nachschauen.


----------

