====== Øvelse: Puslespil med PImage og multidimensionelle arrays ====== **Formål:** * At lære at arbejde med **multidimensionelle arrays** i Processing. * At lære at bruge `PImage` til at manipulere og opdele billeder. * At arbejde med **grafisk output** og brugerinput (`mousePressed`) i Processing. * At forstå hvordan man kan kombinere data-modeller (2D-array) med visuelle elementer. ---- **Beskrivelse:** I denne øvelse skal du lave et simpelt puslespil i Processing. Opgaven går ud på at: - Vælge et billede (`PImage`) og opdele det i fx 3x3 eller 4x4 brikker. - Gemme hver brik i et 2D-array (`PImage[][]`). - Tegne puslespillets brikker i et gitter i `draw()`. - Lade spilleren **bytte to brikker** ved at klikke på dem. - Eventuelt kontrollere, om puslespillet er samlet korrekt. ---- Man kunne evt. anvende nedestående billede: {{ :images:futurama_puzzle.jpeg?400 |}} ---- **Hints / vejledning:** * 1. Opdel billedet i brikker* * Brug `get(x, y, w, h)` på dit `PImage` til at hente en del af billedet. Eksempel: PImage brik = original.get(j*brikBredde, i*brikHøjde, brikBredde, brikHøjde); * Gem hver brik i et 2D-array: `brikker[i][j]`. *2. Tegn brikkerne* * Brug nested loops til at tegne arrayet: image(brikker[i][j], j*brikBredde, i*brikHøjde); * 3. Bland brikkerne (shuffle)* * Byt brikkerne rundt flere gange, fx ved at bytte to tilfældige brikker. * Det er op til dig, hvordan du vil lave “blandingen”. *4. Flyt brikker med musen* * Brug `mousePressed()` til at finde, hvilken brik der blev klikket på: int i = mouseY / brikHøjde; int j = mouseX / brikBredde; * Gem første klik og andet klik, og bytte brikkerne i arrayet. * 5. Tjek om puslespillet er samlet* * Loop igennem `brikker` og tjek, om hver brik ligger på sin oprindelige position. * Hvis ja, kan du fx vise en besked: “Puslespillet er løst!”. ---- **Ekstra udfordringer:** * Lav puslespillet større (4x4 eller 5x5). * Tilføj **antal træk** eller **timer**. * Fremhæv klikbare brikker med `stroke()` eller `rect()`. * Lav en funktion til at **reset puslespillet**. ----