# Puzzle-Programmierung ->Hilfestellung gesucht!!!



## MasterOfDisaster (11. Dez 2004)

Hallo Ihr! 

Wir sollen für die Uni ein Puzzle programmieren... 
Soweit so gut, nur bin ich, was programmieren angeht, etwas unbeholfen...  

Ich muss nu dafür sorgen, dass das geladene Bild zerschnitten wird! Erstma mit nem ganz einfachem Schnittnetz (einfache rechtcke halt...). ICh weiss nur nich, wie man das am besten angeht... 
Wir hamm nen BufferedImage, aber mit welcher Klasse bzw. Methode realisier ich jetzt, dass das Bild mit dem Schnittnetz versehen und so zerschnitten wird, dass mehrere kleine Einzelbilder entstehen? (die ich dann anschließend ja nur noch mischen muss... - aber anderes Thema...) 

Vielleicht kann mir jemand hilfreiche Tipps geben? Wäre mir jedenfalls sehr geholfen...  

der MoD


----------



## Kerberus (11. Dez 2004)

Schau dir mal folgende Funktion an in der API:
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/image/BufferedImage.html#getSubimage(int,%20int,%20int,%20int)


----------



## Reality (11. Dez 2004)

Die Lösung die ich kenne, ist vielleicht etwas komplizierter, aber immerhin hast du ein kleines Beispielprogramm ("JAVA 2 ENT-PACKT):


```
import java.applet.*;
import java.awt.*;
import java.awt.image.*;

public class TileImage extends Applet{
Image img;
Image cell[] = new Image[4*4];
int iw, ih;
int tw, th;

public void init(){
    try{
        img = getImage(getCodeBase(), "opaque.png");
        MediaTracker t = new MediaTracker(this);
        t.addImage(img, 0);
        t.waitForID(0);
        iw = img.getWidth(null);
        ih = img.getHeight(null);
        tw = iw/4;
        th = ih/4;
        CropImageFilter f;
        FilteredImageSource fis;
        t = new MediaTracker(this);
        
        for(int y=0; y<4; y++){
           for(int x=0; x<4; x++){
              //Schneidet Vierecke aus
              f= new CropImageFilter(tw*x, th*y, tw, th);
              //Nimmt den Filter auf und legt in an ImageProducer
              fis= new FilteredImageSource(img.getSource(), f);
              int i = y*4+x;
              cell[i] = createImage(fis);
              t.addImage(cell[i], i);
           }
        }
        t.waitForAll();
        
        for(int i=0; i<32; i++){
            int si = (int) (Math.random() * 16);
            int di = (int) (Math.random() * 16);
            Image tmp = cell[si];
            cell[si] = cell[di];
            cell[di] = tmp;
        }
    }catch(InterruptedException e){}
}

public void paint(Graphics g){
    for(int y=0; y<4; y++){
        for(int x=0; x<4; x++){
            g.drawImage(cell[y*4+x], x*tw, y*th, null);
        }
    }
}
}
```

Liebe Grüße
Reality


----------



## MasterOfDisaster (11. Dez 2004)

@ Reality: Danke erstma, sehr nett!

Machen aber kein Applet! Soll ne Applikation werden, dass hätt ich viell. erwähnen sollen....
Aber das sollte ja erstma so schlimm nich sein...  ???:L

------------------------------------------------------------------------------------------------------------
10 min später....


Naja, ich weiß nich, ob des so des richtige is...?
Da muss es doch noch ne bessere Variante geben...(irgendwie mit generalpath und setclip...)
Weiss nur nich wie die funzt... :bahnhof: 

Hülfeee...


----------



## Reality (11. Dez 2004)

Hi,
ob das ein Applet werden soll oder eine Applikation, spielt keine Rolle. 

Liebe Grüße
Reality


----------



## MasterOfDisaster (11. Dez 2004)

So weit so gut! Danke erstma für den Ansatz! Wir werden damit erstma unsere Implementierung starten. Das sieht soweit ganz machbar aus...

Hab allerdings gleich noch ne weitere Frage:

Wir sollen ebenfalls ein Schnittnetz basteln, bei dem die Teile nicht mit geraden, sondern mit geschwungenen Schnitten geteilt wird. Wie bekommen wir das am geschicktesten implementiert???

Hat keiner ne Idee??? :idea: 

Wer ne Idee hat, bitte mir verraten!!!! :? 

Danke MoD


----------

