# [Spiel]Welche Bilder sind gleich



## predatorline (8. Feb 2015)

Hallo, ich bin derzeit am einen einfachen Spiel zu programmieren mit dem man zwischen Komponenten mit Icons Linien zeichnet und nach der Zeichnung sollte überprüft werden, ob die gezogegen Linien dementsprechend richtig gezeichnet/gewählt worden sind. Ich komme dennoch bei der überprüfung gleicher Bilder nicht mehr weiter. Das einzige was mir einfällt ist alle Bilder miteinander mithilfe von if statements zu vergleichen , was ich bereits im Code Kommentiert angewendet habe. Es muss aber bestimmt eine einfachere Methode geben.
Hier ist ein Beispiel wie das Programm sehr grob derzeit aussieht : http://fs1.directupload.net/images/150208/fct8yd3u.png

```
import java.awt.BasicStroke;
   import java.awt.Color;
   import java.awt.Component;
   import java.awt.Graphics;
   import java.awt.Graphics2D;
   import java.awt.Point;
   import java.awt.Shape;
   import java.awt.geom.Line2D;
   import java.util.ArrayList;
   import java.util.List;
   import javax.swing.JFrame;
   import javax.swing.JLabel;
   import javax.swing.JButton;
   import java.awt.event.ActionListener;
   import java.awt.event.ActionEvent;
   import javax.swing.SwingConstants;
   import javax.swing.ImageIcon;
public class CatSameCoins{

 public static JLabel label;
 public ActionListener btn1Listener;
 public ActionListener btn2Listener;
 public ActionListener btn3Listener;
 public ActionListener btn4Listener;
 public ActionListener btn5Listener;
 public ActionListener btn6Listener;
 public JButton btn1;
 public JButton btn2;
 public JButton btn3;
 public JButton btn4;
 public JButton btn5;
 public JButton btn6;
 public JButton btnCheck;
 public ArrayList<String> listto = new ArrayList<String>();
 public ArrayList<String> listfrom = new ArrayList<String>();
 public static boolean drawing = false;
 public static List<Shape> shapes = new ArrayList<Shape> ();
 public static Shape currentShape = null;
 static Component fromComponent;
 private JLabel lblCheck;

 public void drawLine(Component from , Component to){
        listfrom.add(from.getName()); //first list with component names from where the drawing start
        listto.add(to.getName());    //second list with component names where the drawing ends

        Point fromPoint = new Point();
        Point toPoint = new Point();

        fromPoint.x = from.getX()+from.getWidth()/2; //get middle 
        fromPoint.y = from.getY()+from.getHeight()/2; //get middle

        toPoint.x = to.getX()+to.getWidth()/2;
        toPoint.y = to.getY()+to.getHeight()/2;

        currentShape = new Line2D.Double (fromPoint, toPoint);
        shapes.add (currentShape);
        label.repaint();
        drawing = false;
 }

 public CatSameCoins(){
    JFrame frame = new JFrame ();
    frame.getContentPane().setLayout(null);

    JButton btnremove = new JButton("remove-drawings");
    btnremove.setBounds(139, 39, 216, 23);
    btnremove.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            shapes.removeAll(shapes);
            listfrom.removeAll(listfrom);
            drawing= false;
            btn1.addActionListener(btn1Listener);
            btn2.addActionListener(btn2Listener);
            btn3.addActionListener(btn3Listener);
            btn4.addActionListener(btn4Listener);
            btn5.addActionListener(btn5Listener);
            btn6.addActionListener(btn6Listener);    
        }
     });
    frame.getContentPane().add(btnremove);

    btn1 = new JButton("1");
    btn1.setName("btn1");
    btn1.setBounds(21, 88, 45, 97);
    btn1Listener = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            drawing = true;
            fromComponent = btn1;
            btn1.removeActionListener(this);
        }
    };
    btn1.addActionListener(btn1Listener);
    frame.getContentPane().add(btn1);

    btn2 = new JButton("2");
    btn2.setName("btn2");
    btn2Listener = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            drawing = true;
            fromComponent = btn2;
            btn2.removeActionListener(this);
        }
    };
    btn2.addActionListener(btn2Listener);
    btn2.setBounds(21, 196, 45, 97);
    frame.getContentPane().add(btn2);

    btn3 = new JButton("3");
    btn3.setName("btn3");
    btn3Listener = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            drawing = true;
            fromComponent = btn3;
            btn3.removeActionListener(this);
        }
    };
    btn3.addActionListener(btn3Listener);
    btn3.setBounds(21, 307, 45, 97);
    frame.getContentPane().add(btn3);

    btn4 = new JButton("4");
    btn4.setName("btn4");
    btn4Listener = new ActionListener() {
         public void actionPerformed(ActionEvent e) {
             if(drawing == true){
                 drawLine(fromComponent,btn4);
                 drawing = false;
                 btn4.removeActionListener(this);
                }   
            }
        };
    btn4.addActionListener(btn4Listener);
    btn4.setBounds(407, 88, 45, 97);
    frame.getContentPane().add(btn4);

    btn5 = new JButton("5");
    btn5.setName("btn5");
    btn5Listener = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if(drawing == true){
                drawLine(fromComponent,btn5);
                drawing = false;
                btn5.removeActionListener(this);
            }
        }
    };
    btn5.addActionListener(btn5Listener);
    btn5.setBounds(407, 202, 45, 91);
    frame.getContentPane().add(btn5);

    btn6 = new JButton("6");
    btn6.setName("btn6");
    btn6.setBounds(407, 307, 45, 91);
    btn6Listener = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if(drawing == true){
                drawLine(fromComponent,btn6);
                drawing = false;
                btn6.removeActionListener(this);
            }
        }

    };
    btn6.addActionListener(btn6Listener);    
    frame.getContentPane().add(btn6);

    btnCheck = new JButton("check");
    btnCheck.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            for(int i=0;i< listfrom.size();i++){
                System.out.println(listfrom.get(i)+" - "+listto.get(i));
            }
            lblCheck.setText("False");
            //if().... lblCheck.setText("True")
            //else lblCheck.setText("False")

            /*if(btn6.getIcon().toString().equals(btn1.getIcon().toString())){
                System.out.println("yes");
            }
            else{
                System.out.println("neah");
                }*/
        }
    });
    btnCheck.setBounds(171, 405, 143, 46);
    frame.getContentPane().add(btnCheck);

    lblCheck = new JLabel("");
    lblCheck.setHorizontalAlignment(SwingConstants.CENTER);
    lblCheck.setBounds(84, 405, 80, 46);
    frame.getContentPane().add(lblCheck);

    label = new JLabel (){
        protected void paintComponent ( Graphics g )
        {
        Graphics2D g2d = ( Graphics2D ) g;
        g2d.setPaint ( Color.black);
        g2d.setStroke(new BasicStroke(5));
        for ( Shape shape : shapes )
        {
            g2d.draw ( shape );
            repaint();
        }
        }
    } ;
   label.setSize(500,500);
   frame.getContentPane().add (label);

   frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
   frame.setSize ( 500, 500 );
   frame.setLocationRelativeTo ( null );
   frame.setVisible ( true );
 }

public static void main ( String[] args )
{
   new CatSameCoins();
}
```


----------



## Androbin (8. Feb 2015)

Pseudo-Code:

```
für ( jeden Button )
    prüfe ( button.bild <--equals--> button.isVerbundenMit.bild ) // ( da du beide Male das Selbe Bild-Objekt übergibst kannst du hier mit "==" arbeiten )

wenn ( alle richtig )
    dann richtig
    sonst falsch
```


----------



## Java20134 (17. Feb 2015)

Ich glaube das könnte dir weiterhelfen: Kapitel 10.9 Rheinwerk Computing :: Java 7 - Mehr als eine Insel - 10 Grafikprogrammierung

Oder du machst das einfach so, das du die Button nur anklicken kannst. Hast du zwei ausgewählt, so wird eine Linie zwischen den beiden gezogen. Und am Ende überprüfst du einfach nur noch ob die gedrückten Button zusammenpassen.


----------

