Buongiorno a tutti!
Sono uno studente di ingegneria, ho implementato una mezza scacchiera per la dama in jQuery. Ora che sono quasi a fine progetto e gli esami incombono vengo a scoprire che il progetto deve essere presentato in javascript puro che io non conosco a pieno. Qualcuno è in grado di darmi una mano per convertire il codice che ho buttato giù fino ad ora?
Logica di generazione della scacchiera e delle pedine (già convertita in Javascript e trascritta per completezza)
codice:
var Turno=1;
function creaScacchiera() {
var row=1;
for (i=0;i<32;i++){
var newdiv = document.createElement('div');
newdiv.innerHTML += i;
newdiv.setAttribute('id', i);
newdiv.setAttribute("class","casella");
newdiv.className += " "+'row'+row;
if (i%4==3) {++row;}
if (i%8==0)
{
newdiv.className += " capo";
}
if (i%8==7)
{
newdiv.className += " capo_dx";
}
if (i<12)
{
newdiv.className += " occupato";
newdiv.innerHTML +='<div class="pedina bianchi" id="p'+i+'" onClick="cliccaPedina()"></div>'
}
else if (i>19)
{
newdiv.className += " occupato";
newdiv.innerHTML +='<div class="pedina neri" id="p'+i+'"></div>'
}
var schacchiera = document.getElementById('container');
schacchiera.appendChild(newdiv);
}
}
creaScacchiera();
/*
for (i=0;i<32;i++){
$('#container').append('<div class="casella" id="'+i+'">'+i+'</div>');
if (i%8==0)
{
$('#'+i+'').addClass('capo');
}
if (i<12)
{
$('#'+i+'').append('<div class="pedina bianchi" id="p'+i+'"></div>').addClass('occupato');
}
else if (i>19)
{
$('#'+i+'').append('<div class="pedina neri" id="p'+i+'"></div>').addClass('occupato');
}
}
*/
Pedina mangiabile o non mangiabile.
codice:
function checkMangiabile(elemento,pedina)
{
var idc = Number($('#'+elemento+'').attr('id')); // idc = id della casella potenzialmente mangiabiel.
var riga = ($('#'+elemento+'').attr('class')).substr(11,1);
var capo = ($('#'+elemento+'').attr('class')).substr(13,4);
var mangiante = Number($('#p'+pedina+'').parent().attr('id')); // Id casella della pedina mangiante
if (pedina <12) //OVVERO BIANCA
{
if($('#'+elemento+' > div').hasClass('neri'))
{
if (Number(riga)%2==1) // Se riga dispari
{
{
$('#'+(idc+(idc-mangiante-1))+'').not('.occupato').addClass('possible');
}
}
else // se pari
{
$('#'+(idc+(idc-mangiante+1))+'').not('.occupato').addClass('possible');
}
}
}
else //OVVERO NERA
{
if($('#'+elemento+' > div').hasClass('bianchi'))
{
if (Number(riga)%2==1)
{
{
$('#'+(idc+(idc-mangiante+1))+'').not('.occupato').addClass('possible');
}
}
else
{
$('#'+(idc+(idc-mangiante-1))+'').not('.occupato').addClass('possible');
}
}
}
//Bisogna Verificare se nei dintorni vi sono pedine avversarie mangiabili, a quel punto bisogna marcare la tabella di destinazione come 'possibile';
}
function nuovoTurno()
{
document.getElementById('info').innerHTML = "Turno n° "+ ++Turno;
}
Logica di riconoscimento della pedina selezionata ed illuminazione delle destinazioni possibili.
codice:
$(".pedina").click(function () {
$(".casella").removeClass('clicked');
// $(".casella").removeClass('mangiabile'); superflua
$(this).parent().addClass('clicked');
var idc = Number($(this).parent().attr('id')); // Idc = id della casella. Casting esplicito a valore numerico (per avitare erronea concatenazione 14+4 = 144)
$(".casella").removeClass('possible');
var pedina = ($(this).attr('id')).substring(1); // Prendo id pedina.
var riga = ($(this).parent().attr('class')).substr(11,1);
var capo = ($(this).parent().attr('class')).substr(13,4);
if (pedina<12)
{
if(Turno%2==1)
{
if (Number(riga)%2==1)
{
if (capo=="capo") // Se sono ad un estremo
{
$('#'+(idc+4)+'').not('.occupato').addClass('possible'); // Metto occupato se l'id della casella +4 è non occupato.
if ($('#'+(idc+4)+'').hasClass('occupato'))
{
checkMangiabile((idc+4),pedina);
}
}
else
{
$('#'+(idc+4)+', #'+(idc+3)+'').not('.occupato').addClass('possible');
if($('#'+(idc+4)+'').hasClass('occupato'))
{
checkMangiabile((idc+4),pedina);
}
if($('#'+(idc+3)+'').hasClass('occupato'))
{
checkMangiabile((idc+3),pedina);
}
}
}
else // Riga pari
{
if (capo=="capo")
{
$('#'+(idc+4)+'').not('.occupato').addClass('possible');
if ($('#'+(idc+4)+'').hasClass('occupato'))
{
checkMangiabile((idc+4),pedina);
}
}
else{
$('#'+(idc+5)+', #'+(idc+4)+'').not('.occupato').addClass('possible');
if($('#'+(idc+5)+'').hasClass('occupato'))
{
checkMangiabile((idc+5),pedina);
}
if($('#'+(idc+4)+'').hasClass('occupato'))
{
checkMangiabile((idc+4),pedina);
}
}
}
}
}
if (pedina>19)
{
if(Turno%2==0)
{
if (Number(riga)%2==0)
{
if (capo=="capo")
{
$('#'+(idc-4)+'').not('.occupato').addClass('possible');
if ($('#'+(idc-4)+'').hasClass('occupato'))
{
checkMangiabile((idc-4),pedina);
}
}
else
{
$('#'+(idc-4)+', #'+(idc-3)+'').not('.occupato').addClass('possible');
if($('#'+(idc-4)+'').hasClass('occupato'))
{
checkMangiabile((idc-4),pedina);
}
if($('#'+(idc-3)+'').hasClass('occupato'))
{
checkMangiabile((idc-3),pedina);
}
}
}
else
{
if (capo=="capo")
{
$('#'+(idc-4)+'').not('.occupato').addClass('possible');
if ($('#'+(idc-4)+'').hasClass('occupato'))
{
checkMangiabile((idc-4),pedina);
}
}
else{
$('#'+(idc-5)+', #'+(idc-4)+'').not('.occupato').addClass('possible');
if($('#'+(idc-5)+'').hasClass('occupato'))
{
checkMangiabile((idc-5),pedina);
}
if($('#'+(idc-4)+'').hasClass('occupato'))
{
checkMangiabile((idc-4),pedina);
}
}
}
}
}
});
Logica di spostamento delle pedine:
codice:
$(".possible").live("click",function () {
$('.casella').removeClass('possible');
$('.casella').removeClass('mangiabile');
$('.clicked div').appendTo(this); // Sposta la pedina da un div all'altro.
$('.clicked').removeClass('occupato');
$('.clicked').removeClass('clicked');
$(this).addClass('occupato');
nuovoTurno();
if(Turno%2==1)
{
document.getElementById('info_game').innerHTML = "Tocca al Bianco";
}
else
{
document.getElementById('info_game').innerHTML = "Tocca al Nero";
}
});
Grazie in anticipo.
Mattia