# Senso bzw SimonSays programmieren



## 2Kcinnay (19. Mai 2015)

Hallo,

Ich versuche momentan das Spiel SimonSays mit meinem derzeitigen Kenntnisstand in Java zu programmieren.
Wer nicht weiss was das für ein Spiel ist hier der Link:

Senso (Spiel) â€“ Wikipedia

Leider habe ich viele Fragen...

Zum einen gibt es viele Fehlermeldungen deren Ursprung ich nicht verstehe. Diese habe ich im Code "auskommentiert".

Das Grundkonzept ist soweit auch noch nicht ganz vorhanden. Einerseits weil ich die Fehlermeldungen noch nicht gelöst habe, andererseits weil ich nicht wirklich weiss wie ich weiter machen soll. 

Ich habe einen Array erzeugt indem die Reihenfolge der Labels gespeichert wird, die nacheinander aufblinken.

Ich weiss aber nicht wie man überprüfen kann, ob vom Nutzer der Button geklickt wurde (also der Button der zum jeweiligen Label gehört), der auch an x-ter Stelle auf dem Bildschirm aufblinkte.

Hier erstmal der Code:


```
[COLOR=#000000]package senso;


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
import [U]java.lang[/U].*;




publicclass[U]senso[/U]extends JFrame
{
  Container c;
  private JLabel label1;
  private JLabel label2;
  private JLabel label3;
  private JLabel label4;
  private JLabel sensol;
  private JButton b1;
  private JButton b2;
  private JButton b3;
  private JButton b4;
  private JButton start_stop;
 
  
  
  public senso (String title)
  {
    super(title);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    c = getContentPane();
    c.setLayout(new FlowLayout());
    c.setBackground(Color.GRAY);
    
    int frameWidth = 450;
    int frameHeight = 610;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    
    label1 = new JLabel("ROT");
    Dimension d2 = new Dimension(200,200);
    label1.setPreferredSize(d2);
    label1.setOpaque(true);
    label1.setFont(new Font("Helvetica",Font.BOLD,28));
    label1.setForeground(Color.WHITE);
    label1.setBackground(Color.RED);
    c.add(label1);
    
    label2 = new JLabel("BLAU");
    
    label2.setPreferredSize(d2);
    label2.setOpaque(true);
    label2.setFont(new Font("Helvetica",Font.BOLD,28));
    label2.setForeground(Color.WHITE);
    label2.setBackground(Color.BLUE);
    c.add(label2);
    
    label3 = new JLabel("GRÜN");
    
    label3.setPreferredSize(d2);
    label3.setOpaque(true);
    label3.setFont(new Font("Helvetica",Font.BOLD,28));
    label3.setForeground(Color.WHITE);
    label3.setBackground(Color.GREEN);
    c.add(label3);
    
    label4 = new JLabel("GELB");
    
    label4.setPreferredSize(d2);
    label4.setOpaque(true);
    label4.setFont(new Font("Helvetica",Font.BOLD,28));
    label4.setForeground(Color.WHITE);
    label4.setBackground(Color.YELLOW);
    c.add(label4);
    
    sensol = new JLabel ("SENSO");
    Dimension d6 = new Dimension(400,40);
    sensol.setPreferredSize(d6);
    sensol.setOpaque(true);
    sensol.setFont(new Font("Helvetica",Font.BOLD,28));
    sensol.setHorizontalAlignment(SwingConstants.CENTER);
    sensol.setForeground(Color.WHITE);
    sensol.setBackground(Color.GRAY);
    c.add(sensol);
    
    knopflistener kl = new knopflistener();
    knopflistener2 kl2 = new knopflistener2();
    knopflistener3 kl3 = new knopflistener3();
    knopflistener4 kl4 = new knopflistener4();
    
    b1 = new JButton("Change colour 1");
    b1.addActionListener(kl);
    
    b2 = new JButton("Change colour 2");
    b2.addActionListener(kl2);
    
    b3 = new JButton("Change colour 3");
    b3.addActionListener(kl3);
    
    b4 = new JButton("Change colour 4");
    b4.addActionListener(kl4);
    
    knopflistener5 kl_start_stop = new knopflistener5();
   
    start_stop = new JButton("Start/Stop");
    start_stop.addActionListener(kl_start_stop);
    
    c.add(b1);
    c.add(b2);
    c.add(b3);
    c.add(b4);
    c.add(sensol);
    c.add(start_stop);
    
    setResizable(false);
    setVisible(true);
  }
  
  
  
  
  class knopflistener implements ActionListener
  {
booleaneins = false;
    public void actionPerformed(ActionEvent e)
    {
      
      if (eins == false) {
        label1.setBackground(Color.BLACK);
        eins = true;
      } // end of if
      else {
        label1.setBackground(Color.RED);
        eins = false;
      } // end of if
    }
  }
  class knopflistener2 implements ActionListener
  {
booleanzwei = false;
    public void actionPerformed(ActionEvent e)
    
    {
      
      if (zwei == false) {
        label2.setBackground(Color.BLACK);
        zwei = true;
      } // end of if
      else {
        label2.setBackground(Color.BLUE);
        zwei = false;
      } // end of if
    }
  }
  class knopflistener3 implements ActionListener
  {
booleandrei = false;
    public void actionPerformed(ActionEvent e)
    {
      
      if (drei == false) {
        label3.setBackground(Color.BLACK);
        drei = true;
      } // end of if
      else {
        label3.setBackground(Color.GREEN);
        drei = false;
      } // end of if
    }
  }
  class knopflistener4 implements ActionListener
  {
booleanvier = false;
    public void actionPerformed(ActionEvent e)
    {
      
      if (vier == false) {
        label4.setBackground(Color.BLACK);
        vier = true;
      } // end of if
      else {
        label4.setBackground(Color.YELLOW);
        vier = false;
      } // end of if
      
    }
  }
  class knopflistener5 implements ActionListener 
      {
        boolean ss = false;
 
        public void actionPerformed(ActionEvent e)
        {
          if (ss == false) {
            ss = true;
          } // end of if
          else {
            ss = true;
          } // end of if
          
        }
      }     
  


     
booleancomputeramzug = true; 
booleanrichtig = true;
int[] welchesfeld = newint[100][U];[/U]// Syntax error on token ";", { expected after this token
     
     
      
     for (int i = 0; i<100;i++)
     {
         welchesfeld[i]= (int) (Math.random()*4 +1);
     }
      
     int runde = 0;
     
     
do{      // [U]Hier[/U] [U]blinken[/U] die Labels [U]nacheinander[/U] [U]auf[/U], die [U]der[/U] [U]Nutzer[/U] [U]dann[/U]  in
              // [U]richtiger[/U] [U]Reihenfolge[/U] [U]anklicken[/U] [U]soll[/U]
         
         for (int a = 0; a <= runde; a++){
         
         if (welchesfeld[a] == 1){
             label1.setBackground(Color.BLACK);
             Thread.sleep(1000);
             label1.setBackground(Color.RED);
         }
         else if (welchesfeld[a] == 2){
             label2.setBackground(Color.BLACK);
             Thread.sleep(1000);
             label2.setBackground(Color.BLUE);
         }
         else if (welchesfeld[a] == 3){
             label3.setBackground(Color.BLACK);
             Thread.sleep(1000);
             label3.setBackground(Color.GREEN);
         }
         else if (welchesfeld[a] == 4){
             label4.setBackground(Color.BLACK);
             Thread.sleep(1000);
             label4.setBackground(Color.YELLOW);
         }
         
        }
         
      }while (ss == true && richtig == true && computeramzug == true);
          


    
  
publicstaticvoid main[U]([/U]String[] args[U])[/U]//Multiple markers at this line
    //- Syntax error on token ")", ; 
    // expected
    //- Syntax error on token "(", ; 
     //expected
  {
new senso("SENSO by Yannick");
  }


[U]}[/U]//Syntax error, insert "}" to complete ClassBody
[/COLOR]
```

Danke im Voraus

PS: 1. Bin neu im  Forum, sry wenn ich was falsch gemacht habe
       2. Wer so ein Spiel schon einmal programmiert hat, kann mir auch gerne seinen Ansatz mitteilen!


----------



## strußi (19. Mai 2015)

also in zeile 262 die main schreibt man "public static void main( String[] args){"
das dürfte einen fehler beheben

poste doch bitte die fehlermeldungen.
grüße


----------



## Saheeda (20. Mai 2015)

Hi,

- Klassen werden in Java mit großem Buchstaben angefangen. Momentan heißt deine senso-Klasse genauso wie dein Package, evtl ruft das Konflikte hervor
- dir fehlen ganz ganz oft Leerzeichen, z.B. Z. 15, 131, 147, 164, 216. Schau nochmal Zeile für Zeile durch


----------



## strußi (20. Mai 2015)

moin,
um es noch mal klar zu stellen:
zwischen Sichtbarkeit/Zugriff(public, private, protected)
static oder nicht (nach notwendigkeit)
final oder nicht (nach notwendigkeit)
Rückgabetyp (void, String, int, ....)
name
gehört immer ein leerzeichen

mir ist auch nicht ergründlich warum du html-tags verwendest.


----------



## 2Kcinnay (20. Mai 2015)

Die html tags und die Leerzeichen sind irgendwie beim Copy/Pasten mit reingerutscht. Keine Ahnung wieso, in eclipse sieht das alles sauber aus...
Daran kann der Fehler also nicht liegen


----------



## 2Kcinnay (20. Mai 2015)

Fehlermeldungen habe ich als Kommentare mit reingeschrieben. Leider sind auch hier beim Einfügen in den Post irgendwie Html Tags reingerutscht....


----------



## strußi (20. Mai 2015)

mit fehlermeldung meine ich so was

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - Erroneous tree type: <any>
	at pkgtry.Array.main(Array.java:19)
einfach mal alles was da steht hier posten


----------



## 2Kcinnay (20. Mai 2015)

nach dem kompilieren wir diese Angezeigt:
Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
	Syntax error on token "(", ; expected
	Syntax error on token ")", ; expected

Die Fehlermeldungen die ausser dieser vor dem kompilieren in eclipse neben den Zeilen markiert werden habe ich ja bereits auskommentiert.


----------



## strußi (20. Mai 2015)

hab mir das mal kurz angeschaut,

wie gesagt, ein paar syntaxfehler, freilaufende for -schleife, Namensgebenung, Formatierung, ...

jetzt sollte es soweit laufen, bis auf die Methode in 212, die dir gefehlt hat, die musst du noch anbinden oder in eine deiner inneren klassen einbinden,

deine Klasse knopflistener macht immer das selbe auf einem anderen Label. mach eine Action daraus und übergib das label als variable, einmal code (oop)


```
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package javaforum.senso;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
 
 
 
public class Senso extends JFrame
{
  Container c;
  private JLabel label1;
  private JLabel label2;
  private JLabel label3;
  private JLabel label4;
  private JLabel sensol;
  private JButton b1;
  private JButton b2;
  private JButton b3;
  private JButton b4;
  private JButton start_stop;
 
 
 
  public Senso (String title)
  {
    super(title);// kann auch mit setTitle(title); realisiert werden
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    c = getContentPane();
    c.setLayout(new FlowLayout());
    c.setBackground(Color.GRAY);
 
    int frameWidth = 450;
    int frameHeight = 610;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
 
    label1 = new JLabel("ROT");
    Dimension d2 = new Dimension(200,200);
    label1.setPreferredSize(d2);
    label1.setOpaque(true);
    label1.setFont(new Font("Helvetica",Font.BOLD,28));
    label1.setForeground(Color.WHITE);
    label1.setBackground(Color.RED);
    c.add(label1);
 
    label2 = new JLabel("BLAU");
 
    label2.setPreferredSize(d2);
    label2.setOpaque(true);
    label2.setFont(new Font("Helvetica",Font.BOLD,28));
    label2.setForeground(Color.WHITE);
    label2.setBackground(Color.BLUE);
    c.add(label2);
 
    label3 = new JLabel("GRÜN");
 
    label3.setPreferredSize(d2);
    label3.setOpaque(true);
    label3.setFont(new Font("Helvetica",Font.BOLD,28));
    label3.setForeground(Color.WHITE);
    label3.setBackground(Color.GREEN);
    c.add(label3);
 
    label4 = new JLabel("GELB");
 
    label4.setPreferredSize(d2);
    label4.setOpaque(true);
    label4.setFont(new Font("Helvetica",Font.BOLD,28));
    label4.setForeground(Color.WHITE);
    label4.setBackground(Color.YELLOW);
    c.add(label4);
 
    sensol = new JLabel ("SENSO");
    Dimension d6 = new Dimension(400,40);
    sensol.setPreferredSize(d6);
    sensol.setOpaque(true);
    sensol.setFont(new Font("Helvetica",Font.BOLD,28));
    sensol.setHorizontalAlignment(SwingConstants.CENTER);
    sensol.setForeground(Color.WHITE);
    sensol.setBackground(Color.GRAY);
    c.add(sensol);
 
    knopflistener kl = new knopflistener();
    knopflistener2 kl2 = new knopflistener2();
    knopflistener3 kl3 = new knopflistener3();
    knopflistener4 kl4 = new knopflistener4();
 
    b1 = new JButton("Change colour 1");
    b1.addActionListener(kl);
 
    b2 = new JButton("Change colour 2");
    b2.addActionListener(kl2);
 
    b3 = new JButton("Change colour 3");
    b3.addActionListener(kl3);
 
    b4 = new JButton("Change colour 4");
    b4.addActionListener(kl4);
 
    knopflistener5 kl_start_stop = new knopflistener5();
 
    start_stop = new JButton("Start/Stop");
    start_stop.addActionListener(kl_start_stop);
 
    c.add(b1);
    c.add(b2);
    c.add(b3);
    c.add(b4);
    c.add(sensol);
    c.add(start_stop);
 
    setResizable(false);
    setVisible(true);
  }
 
 
 
 
  class knopflistener implements ActionListener
  {
    boolean eins = false;
    public void actionPerformed(ActionEvent e)
    {
 
      if (eins == false) {
        label1.setBackground(Color.BLACK);
        eins = true;
      } // end of if
      else {
        label1.setBackground(Color.RED);
        eins = false;
      } // end of if
    }
  }
  class knopflistener2 implements ActionListener
  {
    boolean zwei = false;
    public void actionPerformed(ActionEvent e)
 
    {
 
      if (zwei == false) {
        label2.setBackground(Color.BLACK);
        zwei = true;
      } // end of if
      else {
        label2.setBackground(Color.BLUE);
        zwei = false;
      } // end of if
    }
  }
  class knopflistener3 implements ActionListener
  {
    boolean drei = false;
    public void actionPerformed(ActionEvent e)
    {
 
      if (drei == false) {
        label3.setBackground(Color.BLACK);
        drei = true;
      } // end of if
      else {
        label3.setBackground(Color.GREEN);
        drei = false;
      } // end of if
    }
  }
  class knopflistener4 implements ActionListener
  {
    boolean vier = false;
    public void actionPerformed(ActionEvent e)
    {
 
      if (vier == false) {
        label4.setBackground(Color.BLACK);
        vier = true;
      } // end of if
      else {
        label4.setBackground(Color.YELLOW);
        vier = false;
      } // end of if
 
    }
  }
  class knopflistener5 implements ActionListener 
      {
        boolean ss = false;
 
        public void actionPerformed(ActionEvent e)
        {
          if (ss == false) {
            ss = true;
          } // end of if
          else {
            ss = true;
          } // end of if
 
        }
      }     
 
 
public void methodeFEHLT( boolean ss) throws InterruptedException{
 
    boolean computeramzug = true; 
    boolean richtig = true;
    int[] welchesfeld = new int[100];// Syntax error on token ";", { expected after this token
 
 
 
     for (int index = 0; index<welchesfeld.length; index++)
     {
         welchesfeld[index]= (int) (Math.random()*4 +1);
     }
 
     int runde = 0;
 
 
    do{      // Hier blinken die Labels nacheinander auf, die der Nutzer dann  in
              // richtiger Reihenfolge anklicken soll
 
         for (int a = 0; a <= runde; a++){
 
         if (welchesfeld[a] == 1){
             label1.setBackground(Color.BLACK);
             Thread.sleep(1000);
             label1.setBackground(Color.RED);
         }
         else if (welchesfeld[a] == 2){
             label2.setBackground(Color.BLACK);
             Thread.sleep(1000);
             label2.setBackground(Color.BLUE);
         }
         else if (welchesfeld[a] == 3){
             label3.setBackground(Color.BLACK);
             Thread.sleep(1000);
             label3.setBackground(Color.GREEN);
         }
         else if (welchesfeld[a] == 4){
             label4.setBackground(Color.BLACK);
             Thread.sleep(1000);
             label4.setBackground(Color.YELLOW);
         }
 
        }
 
      }
while (ss == true && richtig == true && computeramzug == true);
 
 
}
 
 
public static void main(String[] args)//Multiple markers at this line
    //- Syntax error on token ")", ; 
    // expected
    //- Syntax error on token "(", ; 
     //expected
  {
    new Senso("SENSO by Yannick");
  }
 
 
}//Syntax error, insert "}" to complete ClassBody
```

es gäbe sicher mehr zu sagen, aber dass sollte erstmal reichen


----------

