import java.awt.*; import java.util.Random; /*************************************************************** Kortti ***************************************************************/ class kortti { int x, y; Image kuva; int index; public kortti(int nx, int ny, Image image, int i) { x = nx; y = ny; kuva = image; index = i; } } /*************************************************************** Lauta ***************************************************************/ class lauta { kortti Kuva[] = new kortti[17]; int varatut[] = {-1,-1,-1,-1,-1,-1,-1,-1, -1, -1, -1, -1, -1, -1, -1 ,-1}; Random sat = new Random(); boolean jarjestyksessa = false; public lauta(Image image[]) { tee_paikat(image); } void tee_paikat(Image im[]) { for (int i=0;i<16;i++) { int luku = arvo_paikka(); Kuva[i] = new kortti((i%4)*150+5, (i/4)*109+5, im[luku], luku); } Kuva[16] = new kortti(0,0, im[16], 16); } int arvo_paikka() { int luku = java.lang.Math.abs(sat.nextInt() % 16); while (varatut[luku] == 0) luku = java.lang.Math.abs(sat.nextInt() % 16); varatut[luku] = 0; return luku; } public boolean siirra(int x, int y) { int nro = 18; int i; for (i=0; i<16;i++) if ((Kuva[i].x < x) && (x < Kuva[i].x + 150)) if ((Kuva[i].y < y) && (y < Kuva[i].y + 109)) { nro = i; if (Kuva[i].index == 15) return false; break; } if (nro == 18) return false; if (nro<12) // Onko tyhjä alapuolella if (Kuva[nro+4].index == 15) {vaihda(nro, nro+4); return true;} if (nro>3) // Onko tyhjä yläpuolella if (Kuva[nro-4].index == 15) {vaihda(nro, nro-4); return true;} if (nro == 0 || nro == 1 || nro == 2 || nro == 4 || nro == 5 || nro == 6 || nro == 8 || nro == 9 || nro == 10 || nro == 12 || nro == 13 || nro == 14) // Onko oikealla if (Kuva[nro+1].index == 15) { vaihda(nro, nro+1); return true; } if (nro == 1 || nro == 2 || nro == 3 || nro == 5 || nro == 6 || nro == 7 || nro == 9 || nro == 10 || nro == 11 || nro == 13 || nro == 14 || nro == 15) // Onko vasemmalla if (Kuva[nro-1].index == 15) { vaihda(nro, nro-1); return true; } return false; } void vaihda(int luku1, int luku2) { int apu; Kuva[16].kuva = Kuva[luku2].kuva; Kuva[luku2].kuva = Kuva[luku1].kuva; Kuva[luku1].kuva = Kuva[16].kuva; apu = Kuva[luku1].index; Kuva[luku1].index = Kuva[luku2].index; Kuva[luku2].index = apu; } void onko_jarjestyksessa() { for (int i=0;i<15;i++) { if (Kuva[i].index > Kuva[i+1].index) { jarjestyksessa = false; return; } } jarjestyksessa = true; } }