mieszanie puzzli - Random()

0

Robię grę puzzle, mam już wczytany obrazek i podzielony na części, muszę zrobić jeszcze mieszanie jego kawałków, ale nie wiem jak...
tutaj podaję fragment który odpowiada za wczytanie i podział obrazka na buttonie:
myślałem aby mieszanie zrobić za pomocą funkcji Random...

 
ImageIcon imageicon = new ImageIcon(Puzzle.class.getResource("shrek.jpg"));
        source = imageicon.getImage();
        width = imageicon.getIconWidth();
        height = imageicon.getIconHeight();
        
        jPanel1.setLayout(new GridLayout(wys,szer,0,0));
        
             
        Random generator = new Random(); 
        
    for ( int i = 0; i < wys; i++) {
            for ( int j = 0; j < szer; j++) {
                    jButton3 = new JButton();
                    
                    jPanel1.add(jButton3);
                    image = createImage(new FilteredImageSource(source.getSource(), new CropImageFilter(j*width/szer, i*height/wys, width/szer, height/wys)));
                    jButton3.setIcon(new ImageIcon(image));                   
            
                   }
           }

1

Umieść obrazki w jakiejś kolekcji (List, Vector, ArrayList) i wywołaj metodę shuffle z klasy Collections.

0

a można dokładniej ?
da się to zrobić mając aktualny kod czy trzeba od nowa robić wczytanie i podział obrazka używając kolekcji i metody shuffle ?

0

Troszkę musisz zmienić

//utworzenie obrazków i zapisanie ich do kolekcji
List<ImageIcon> obrazki=new ArrayList<ImageIcon>();
for (int i = 0; i < wys; i++) 
{
    for ( int j = 0; j < szer; j++) 
    {
        image = createImage(new FilteredImageSource(source.getSource(), new CropImageFilter(j*width/szer, i*height/wys, width/szer, height/wys)));
        obrazki.add(new ImageIcon(image));  
    }
}
//poprzestawianie
Collections.shuffle(obrazki);
//utworzenie przycisków
for ( int i = 0; i < obrazki.size(); i++) 
{
    jButton3 = new JButton(obrazki.get(i));
    jPanel1.add(jButton3);
}
0

**Array**List<ImageIcon> obrazki=new ArrayList<ImageIcon>();

wielkie dzięki, działa :D

0

Nie rozumiem **ArrayList**
Kod

List<ImageIcon> obrazki=new ArrayList<ImageIcon>();

jest składniowo poprawny, i jest bardziej elastyczny niż

ArrayList<ImageIcon> obrazki=new ArrayList<ImageIcon>();

(prościej zmienia się typ kolekcji). Kłopot może się pojawić jeśli masz takie deklaracje importu:

import java.awt.*;
import java.util.*;

W obu tych pakietach jest klasa List. Wtedy trzeba zmienić deklaracje importu, albo deklarację zmiennej obrazki.

java.util.List<ImageIcon> obrazki=new ArrayList<ImageIcon>();
0

myślałem, że po prostu zjadłeś "Array" w pierwszej linijce, bo właśnie miałem problem, o którym wspomniałeś ;)

dzięki za wyjaśnienie, po wpisaniu:
java.util.List<ImageIcon> obrazki=new ArrayList<ImageIcon>();
też już działa :)

0
bo napisał(a)

Troszkę musisz zmienić

//utworzenie obrazków i zapisanie ich do kolekcji
List<ImageIcon> obrazki=new ArrayList<ImageIcon>();
for (int i = 0; i < wys; i++) 
{
    for ( int j = 0; j < szer; j++) 
    {
        image = createImage(new FilteredImageSource(source.getSource(), new CropImageFilter(j*width/szer, i*height/wys, width/szer, height/wys)));
        obrazki.add(new ImageIcon(image));  
    }
}
//poprzestawianie
Collections.shuffle(obrazki);
//utworzenie przycisków
for ( int i = 0; i < obrazki.size(); i++) 
{
    jButton3 = new JButton(obrazki.get(i));
    jPanel1.add(jButton3);
}

odkopuje temat ponieważ wystąpił problem z tym kodem
powyższy kod mam w metodzie createpuzzle() i działa
po skopiowaniu tej metody do nowej klasy mam błąd przy createImage (podkreśla mi dokładnie to słowo)
błąd -cannot find symbol
coś muszę dodać do nowej klasy kopiując tą metodę ?

0

W starej klasie była metoda createImage(). Są dwie możliwości:

  1. Sam ją napisałeś. Wtedy rozwiązanie jest proste, napisz ją też w nowej klasie.
  2. Stara klasa dziedziczy po jakiejś klasie standardowej, a w tej klasie była metoda createImage(). Trudno zaproponować rozwiązanie nie znając struktury klas Twojego programu.
0

poradziłem sobie, należało do klasy dodać extends java.swing.JFrame ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1