Hoi allemaal,
Weet iemand toevallig hoe ik deze schuifpuzzel kan veranderen in 9 blokjes waarvan 1 leeg is.
Dit is de broncode:
Weet iemand toevallig hoe ik deze schuifpuzzel kan veranderen in 9 blokjes waarvan 1 leeg is.
Dit is de broncode:
Code:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.lang.String;
public class Schuifpuzzel extends Applet implements ActionListener
{
private Button Knop[];
//16 knopjes
private int OnzichtbaarBlokje;
//plaats van het onzichtbare blokje
private int Teller=0;
//telt aan het aantal keren dat u een blokje verschuift
private String s;//tekst voor het einddialoog
//initialiseer het applet
public void init()
{
Knop = new Button[16];
//maak het array aan
int rij=0,kolom=0;
setBackground(new Color(0,0,0));
//initialiseer alle knopjes
for (int i=0;i<16;i++)
{
Knop[i]=new Button();
kolom++;
if (kolom==4)
{kolom=0;rij++;}
}
setLayout( new GridLayout(4,4));
for (int i=0;i<16;i++)
{
Knop[i].addActionListener(this);
//actionListener bijvoegen
Knop[i].setActionCommand(String.valueOf(i));
//actionCommand instellen
Knop[i].setLabel(String.valueOf(i+1)); //label instellen
add(Knop[i]);
//voeg het bij het applet
}
Knop[15].setVisible(false); //laatste blokje wordt onzichtbaar
OnzichtbaarBlokje=15;
Shuffle();
//schudt de blokjes...
}
//op blokje geklikt?
public void actionPerformed(ActionEvent e)
{
//op welk blokje?
int plaats =(new Integer(e.getActionCommand())).intValue();
System.out.println("Action:"+plaats+" "+OnzichtbaarBlokje);
//grenst het aan het lege blokje?
if (GrenstAan(plaats,OnzichtbaarBlokje))
{
String temp;
System.out.println("OK! verwisseld..."+ ++Teller);
Knop[plaats].setVisible(false);
Knop[OnzichtbaarBlokje].setVisible(true);
temp=Knop[plaats].getLabel();
Knop[plaats].setLabel(Knop[OnzichtbaarBlokje].getLabel());
Knop[OnzichtbaarBlokje].setLabel(temp);
OnzichtbaarBlokje=plaats;
}
else
{
System.out.println("nope...dat gaat niet...");
}
if (Opgelost())
//spel opgelost?
{
System.out.println("Klaar!!!");
//doe hier later iets nuttiger...
s=new String("Spel is afgelopen, na "+Teller+" keren klikken!");
EindDialoog.MaakFrame(s);
//Toon einddialoog
Teller=0;
//reset de teller
Shuffle();
// en opnieuw shuffelen...
}
}
// Schud de blokjes... Verwissel 10000 maal twee blokjes,
public void Shuffle()
{
String temp;
int r1,r2;
for (int i=1;i<10000;i++)
{
r1=(int)Math.round(Math.random()*15);
r2=(int)Math.round(Math.random()*15);
// Moeten aan elkaar grenzen
// en één van beide moet het onzichtbaar blokje zijn
if (GrenstAan(r1,r2)&&(r1==OnzichtbaarBlokje ||
{
System.out.println(r1+" "+r2);
temp=Knop[r1].getLabel();
Knop[r1].setLabel(Knop[r2].getLabel());
Knop[r2].setLabel(temp);
if (r1==OnzichtbaarBlokje)
OnzichtbaarBlokje=r2;
else
OnzichtbaarBlokje=r1;
}
}
//en maak het blokje met label 16 onzichtbaar
for (int i=0;i<16;i++)
{
Knop[i].setVisible(true);
if (new Integer(Knop[i].getLabel()).intValue()==16)
{ OnzichtbaarBlokje=i;
Knop[i].setVisible(false);
}
}
}
//test of twee blokjes aan elkaar grenzen
public boolean GrenstAan(int p,int q)
{
int i;
if (p>q) {i=p;p=q;q=i;} //zet kleinste eerst
if ( (Math.abs(p-q)==1
&&( (p!=3 && q!=4)) //niet achter het randje...
&&( (p!=7 && q!=8))
&&( (p!=11 && q!=12))
) ||
(Math.abs(p-q)==4) )
return true;
return false;
}
//puzzel opgelost?
public boolean Opgelost()
{
boolean temp=true;
for (int i=0;i<16;i++)
if (i!=new Integer(Knop[i].getLabel()).intValue()-1)
temp=false;
return temp;
}
}
Laatst bewerkt door een moderator: