import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.util.*;
/**
 * Write a description of class Flaeche here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Flaeche extends World
{   
    private Ball bTemp, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9;
    private ArrayList<Ball> liste=new ArrayList<Ball>();
    private int schritt = 0;
    private int vergleichszahl;
    private int kleinsteZahl = -1;
    private int kleinsteZahlPlatz;
    private int verschiebungszaehler;
    private int tauschAnzahl = 0;
    private int pruefungsAnzahl = 0;
    private String text1, text2;
    private int zaehler;

    /**
     * Constructor for objects of class Flaeche.
     * 
     */
    public Flaeche()
    {    
        // Create a new world with 600x400 cells with a cell size of 1x1 pixels.
        super(600, 270, 1); 

        b0=new Ball((int)(Math.random() * 10) + 1);
        b1=new Ball((int)(Math.random() * 10) + 1);
        b2=new Ball((int)(Math.random() * 10) + 1);
        b3=new Ball((int)(Math.random() * 10) + 1);
        b4=new Ball((int)(Math.random() * 10) + 1);
        b5=new Ball((int)(Math.random() * 10) + 1);
        b6=new Ball((int)(Math.random() * 10) + 1);
        b7=new Ball((int)(Math.random() * 10) + 1);
        b8=new Ball((int)(Math.random() * 10) + 1);
        b9=new Ball((int)(Math.random() * 10) + 1);

        liste.add(b0);
        b0.setPlatz(0);
        liste.add(b1);
        b1.setPlatz(1);
        liste.add(b2);
        b2.setPlatz(2);
        liste.add(b3);
        b3.setPlatz(3);
        liste.add(b4);
        b4.setPlatz(4);
        liste.add(b5);
        b5.setPlatz(5);
        liste.add(b6);
        b6.setPlatz(6);
        liste.add(b7);
        b7.setPlatz(7);
        liste.add(b8);
        b8.setPlatz(8);
        liste.add(b9);
        b9.setPlatz(9);

        addObject(b0, 30,90);
        addObject(b1, 90,90);
        addObject(b2, 150,90);
        addObject(b3, 210,90);
        addObject(b4, 270,90);
        addObject(b5, 330,90);
        addObject(b6, 390,90);
        addObject(b7, 450,90);
        addObject(b8, 510,90);
        addObject(b9, 570,90);
    }

    public void act()
    {
        // if (Greenfoot.mousePressed(this))
        if (zaehler == 150)
        {
            zaehler = zaehler - 150;
            if(istAllesSortiert() == true)
            {
                this.showText("Alles sortiert!", 320, 180);               
                Greenfoot.stop();
            }
            else
            {
                try
                {
                    if (kleinsteZahl < 0)
                    {                
                        kleinsteZahl = liste.get(schritt).getWert();
                        kleinsteZahlPlatz = liste.get(schritt).getPlatz();
                        vergleichszahl =  1;
                    }
                    if(liste.get(schritt + 1) != null)
                    {
                        liste.get(schritt).setbewegen(4);
                        liste.get(schritt + vergleichszahl).setbewegen(4);
                        pruefungsAnzahl++;
                        if(kleinsteZahl >  liste.get(schritt + vergleichszahl).getWert())
                        {
                            kleinsteZahl = liste.get(schritt + vergleichszahl).getWert();
                            kleinsteZahlPlatz = liste.get(schritt + vergleichszahl).getPlatz();
                        }
                    }
                    text1 = liste.get(schritt).getWert()+ " > " + liste.get(schritt + vergleichszahl).getWert()+ " ?   bisher kleinste Zahl: " + kleinsteZahl + "  auf Platz: " +  kleinsteZahlPlatz + "  " + pruefungsAnzahl + ". Prüfung    ";
                    text2 = tauschAnzahl + ". Tausch";
                    this.showText(text1, 320, 220); 
                    this.showText(text2, 320, 240); 

                    if(vergleichszahl + schritt == 9)
                    {
                        if (schritt != kleinsteZahlPlatz)
                        {
                            tauschAnzahl++;
                        }
                        bTemp = liste.get(kleinsteZahlPlatz);
                        liste.get(kleinsteZahlPlatz).setPlatz(schritt);
                        liste.get(kleinsteZahlPlatz).setbewegen(6);
                        if (liste.get(kleinsteZahlPlatz).getbewegen() == 6 && liste.get(kleinsteZahlPlatz).getY() == 90)
                        {
                            zaehler = zaehler - 150 * liste.get(kleinsteZahlPlatz).getPlatz() - 300 ;
                        }
                        for(verschiebungszaehler = kleinsteZahlPlatz -1; verschiebungszaehler >= schritt; verschiebungszaehler--)
                        {
                            liste.get(verschiebungszaehler).setPlatz(verschiebungszaehler + 1);
                            liste.get(verschiebungszaehler).setbewegen(9);
                            liste.set(verschiebungszaehler + 1 ,liste.get(verschiebungszaehler));
                        }
                        schritt++;
                        text2 = tauschAnzahl + ". Tausch"; 
                        this.showText(text1, 320, 220); 
                        this.showText(text2, 320, 240); 
                        if (schritt == 9 )
                        {
                            schritt = 0;
                        }
                        kleinsteZahl = -1;
                    }
                    vergleichszahl++;
                }
                catch (Exception e)
                {
                    schritt = 0;
                }
            }

        }
        zaehler++;
    }

    public boolean istAllesSortiert()
    {
        boolean sortiert = true;
        for(int zaehler = 0; zaehler < 9; zaehler++)
        {
            if(liste.get(zaehler).getWert() > liste.get(zaehler + 1).getWert())
            {
                sortiert = false;
            }
        }
        return sortiert;
    }
}
