Magiske kvadrater
Med et magisk kvadrat forstår vi en to-dimensjonal tabell der hver rute inneholder et tall og summen av alle tallene i hver kolonne og hver rad er den samme. I eksempelet er summen av alle kolonner og summen av alle rader 15. Du finner masse materiale om magiske kvadrater på nettet.
Spillideen er å legge ut tall i en tabell som ikke er, men kan bli, et magisk kvadrat. Spilleren skal kunne bytte om på tall for at det skal bli "magisk".
Du kan se løsningen jeg har valgt å lage på en egen side:
test.html
https://borres.hiof.no/pisk/P5js/p5jsskisser/kvadrater/test.html
Vurderinger
Jeg har truffet noen valg når dt gjelder selve problemet:
- Jeg har valgt å bruke en 4x4 tabell. Dette er diskutabelt og avhenger selvsagt av den potesielle målgruppa. 3x3 kunne vært et alternativ for unge brukere.
- Jeg har valgt å bruke tallene 1 t.o.m. 16, dvs så lave tall som mulig. Det gjør det greitt å summere i hodet.
Struktur
Jeg har forsøkt beskrive den planen jeg har hatt i hodet, og på papiret, når jeg laget denne koden. Jeg er fullstendig klar over at det er en ufullstendig forklaring og det er selvsagt også slik at jeg har prøvd og feilet underveis. Ikke desto mindre tror jeg at oppdelingen av problemløsningen kan være ganske fornuftig og være til hjelp hvis jeg, eller andre, skal gjøre noe med denne koden senere.
Det første jeg gjør er å lage kode som kan lage et magisk kvadrat i en 2-dimensjonal Array. Hvis jeg har løst dette har jeg en fasit, og jeg kan flytte litt på noen tall for å lage en oppgave.
Jeg begynner med å velge blandt noen kjente standardløsninger. Etterpå stokker jeg kolonner og rader. Dette endrer ikke summene. (Funksjonen tilfeldigTall() er definert i sketch.js)
Jeg trenger å kunne beskrive en rute, med verdi, posisjon, og fasitverdi. En rute må være klikkbar og må kunne endre farge. Jeg definerer et rute-objekt. Etter en del iterasjoner og testing har jeg endt opp med dette:
Da har vi altså laget en oppgave generator og et ruteobjekt. Da må vi kople de to. Det er her vi manipulerer et magisk kvadrat slik at det blir en oppgave å rekonstruere det. Jeg administrerer ruter og oppgaver med denne koden:
Hovedskriptet som drar det hele i gang er slik:
Selve websiden er ganske grei