// array met namen fotobestanden
var fotos = ['249.jpg','248.jpg','247.jpg','217.jpg','216.jpg','215.jpg','211.jpg','166.jpg','141.jpg','97.jpg','83.jpg','1.jpg','4.jpg','3.jpg','2.jpg'];
// moeilijkheidsgraad -> waarde radiobutton
var level;
//aantal fotos in array
var aantalFotos=fotos.length;
//geselecteerde foto
var foto;
//array met puzzel-elementen in volgorde
var puzzel = [];
//configuratie moeilijkheidsgraad
var levels = [];
levels[0] = [];
levels[0]['rij']=4;
levels[0]['kolom']=4;
levels[1] = [];
levels[1]['rij']=6;
levels[1]['kolom']=5;
levels[2] = [];
levels[2]['rij']=8;
levels[2]['kolom']=8;
//afmetingen fotos
var fotoBreedte = 700;
var fotoHoogte = 467;
//afmeting div-tags -> te berekenen
var celBreedte;
var celHoogte;
//score
var aantalClicks = 0;
var aantalCorrect = 0;
//wachttijd 150ms (als je op 2 deeltjes geklikt hebt blijft dit 150ms transparant voor ze verwisseld worden)
var wacht = 150;
$(document).ready(function(){
// change-event aan radiobuttons koppelen
$('input[name=level]').bind('click',function(){
level = $(this).val();
nieuw();
});
//click-event aan knop koppelen
$('#shuffle').bind('click',function(){
nieuw();
});
//ken aan alle div-tags in #foto een click-event toe
$('#foto').delegate('div','click',function(){
//wanner op div-tag in #foto wordt geklikt,
//roep functie verwerk aan en geef div-object mee
verwerk(this);
});
//haal geselecteerd niveau op
//waarde van radiobutton met attribuut checked
level = $('input[name=level][checked=checked]').val();
//roep functie nieuw op
nieuw();
});
//functie selecteert willikeurige afbeelding uit array en initieert puzzel
function nieuw()
{
// controleer of #foto kindnodes bevat
// zo ja, verwijder kindnodes
if($('#foto').children().length >0)
{
$('#foto').empty();
}
// zoek pad van een willekeurig geselecteerde afbeelding
foto = '/images/klasfoto/' + fotos[Math.floor(aantalFotos * Math.random())];
// bereken celbreedte en -hoogte
celBreedte = Math.floor(fotoBreedte / levels[level]['kolom']);
celHoogte = Math.floor(fotoHoogte / levels[level]['rij']);
//maak div-element aan
var div = $('
');
div.css({position:'absolute',
width:celBreedte + 'px',
height:celHoogte + 'px',
overflow:'hidden'});
var img = $('
![]()
');
img.attr('src',foto);
// voeg foto toe aan #thumb
//als er al iets in thumb zit eerst wegdoen
if ($('#thumb').children().length >0)
{
$('#thumb').empty();
}
$('#thumb').append($(img).clone());
$(img).css('position','absolute');
$(div).append(img);
//maak voor elke cel (rij/kolom een kloon van de div en positioneer foto
//zet kloon in array puzzel
for (var rij = 0; rij < levels[level]['rij']; rij++)
{
for(var kolom = 0; kolom < levels[level]['kolom']; kolom++)
{
// maak voor elke cel een kloon van div
var cel = $(div).clone();
// bereken voor elke cel een id = aantal kolommen*aantal rijen + kolomnummer
var id = levels[level]['kolom']*rij+kolom;
//console.log(id);
cel.attr('id','puzzel_' + id);
//bereken left en top voor foto
var links = '-' + celBreedte * kolom + 'px';
var top = '-' + celHoogte * rij + 'px';
//positioneer afbeelding
$(cel).find('img')
.css({left:links,
top:top});
//duw cel in array puzzel
puzzel.push(cel);
}
}
//zet alle elementen op willikeurige plaats
for (var rij = 0; rij < levels[level]['rij']; rij++)
{
for(var kolom = 0; kolom < levels[level]['kolom']; kolom++)
{
// bereken index van willekeurig element uit puzzel-array
index = Math.floor(puzzel.length * Math.random());
// haal puzzestuk uit array puzzel met index
var puzzelStuk = puzzel[index];
// bereken positie puzzelstuk
var links = celBreedte *kolom + 'px';
var top = celHoogte * rij + 'px';
//positioneer puzzelstuk
$(puzzelStuk).css({left:links,
top:top});
//voeg toe aan foto
$('#foto').append(puzzelStuk);
//verwijder puzzelStuk uit puzzel
puzzel.splice(index,1);
}
}
// zet aantal clicks,.... (alle spans) op 0 -> zie function score()
aantalClicks = 0;
score();
}
//verwerk aangeklikte div-tag
function verwerk(obj)
{
//wordt op geselecteerd object geklikt -> verwijder klasse
if($(obj).hasClass('geselecteerd'))
{
$(obj).removeClass('geselecteerd');
}
else
{
$(obj).addClass('geselecteerd');
if($('.geselecteerd').length == 2)
{
verwissel();
}
}
}
//verwissel de twee geselecteerde div-tags in DOM
function verwissel()
{
aantalClicks += 2;
//haal geselecteerde objecten uit de pagina
var puzzel_1 = $('.geselecteerd').eq(0);
var puzzel_2 = $('.geselecteerd').eq(1);
//vraag index op van geselecteerde elementen in #foto
var puzzel_1_ndx = $(puzzel_1).index();
var puzzel_2_ndx = $(puzzel_2).index();
// maak puzzelstukken los van DOM met detach()
puzzel_1 = $(puzzel_1).detach();
puzzel_2 = $(puzzel_2).detach();
// vraag left en top op van beide elementen
var links_1 = $(puzzel_1).css('left');
var boven_1 = $(puzzel_1).css('top');
var links_2 = $(puzzel_2).css('left');
var boven_2 = $(puzzel_2).css('top');
//ken left en top toe van ander element
$(puzzel_1).css({left:links_2,
top:boven_2});
$(puzzel_2).css({left:links_1,
top:boven_1});
// elementen terug toevoegen
if (puzzel_1_ndx == 0)
{
$('#foto div').eq(0).before(puzzel_2);
}
else
{
puzzel_1_ndx--;
$('#foto div').eq(puzzel_1_ndx).after(puzzel_2);
}
puzzel_2_ndx--;
$('#foto div').eq(puzzel_2_ndx).after(puzzel_1);
deselecteer();
score();
}
//deselecteer de geselecteerde div-tags
function deselecteer()
{
$('.geselecteerd').removeClass('geselecteerd');
}
// zoek aantal correcte puzzelstukken
//update cpanel
function score()
{
//toon aantal clicks
$('#clicks').text(aantalClicks);
//bereken aantal correcte puzzelstukken
var aantalCorrect = 0;
$('#foto div').each(function(index,value) {
if($(this).attr('id') == 'puzzel_' + index)
{
aantalCorrect++;
}
});
$('#correct').text(aantalCorrect);
var aantalFout = levels[level]['rij']*levels[level]['kolom']-aantalCorrect;
$('#fout').text(aantalFout);
}