Farlo in livecode è veramente facile e veloce, vediamo come.
Create uno stack con 16 pulsanti:
Numerate i pulsanti e ordinatele in modo che siano equidistanti. Vi consiglio di selezionarle in righe e colonne e usare i pulsanti di allineamento e distribuzione del property inspector.
Fatto ciò nel codice del pulsante 16 mettete il seguente codice:
on mouseUp lock screen put the loc of me into locme put the loc of button "16" into loc16 if distanza(locme,loc16) < 97 then set the loc of me to loc16 set the loc of button "16" to locme end if unlock screen controllaVittoriaend mouseUp
function distanza aa,bb put ((item 1 of aa) - (item 1 of bb) )^2 into xx put ((item 2 of aa) - (item 2 of bb) )^2 into yy return sqrt(xx + yy) end distanzaCome vedete il codice controlla se il pulsante premuto è sufficientemente vicino al pulsante 16, in tal caso lo scambia di posto col pulsante 16. In pratica fa un controllo se si trova accanto al pulsante 16 applicando la formula della distanza di geometria analitica √(ΔX2 + ΔY2) applicata ai baricentri (proprietà loc). Chiaramente io ho impostato 97 pixel, voi dovrete controllare quale valore rappresenta l'adiacenza dei pulsanti rispetto a quanto grandi li avete fatti.
Ora rendete invisibile il pulsante 16:
Impostate come behaviour di tutti i pulsanti quello del pulsante 16 e metà del gioco è già completo.
Se provate a premere su un pulsante esso si sposterà solo se è vicino alla casella vuota.
Ora mettete nella card il seguente codice:
on openCard mescolaend openCard
on controllaVittoria put the soluzione of me into ordine repeat with i=1 to 16 put (the loc of button i ) & cr after temp end repeat if ordine = temp then answer "Hai vinto!" end ifend controllaVittoria
on impostaVittoria repeat with i=1 to 16 put (the loc of button i ) & cr after temp end repeat set the soluzione of me to tempend impostaVittoria
on mescola put "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16" into temp put the soluzione of me into posizioni repeat with i=1 to 16 put the number of items of temp into nn put random(nn) into elemento put item elemento of temp & CR after ordineBottoni delete item elemento of temp #così leva anche la virgola end repeat repeat for each line tLine in ordineBottoni set the loc of button tLine to the first line of posizioni delete the first line of posizioni end repeatend mescolalanciate il comando impostaVittoria e avete finito!
Lanciando il messaggio impostaVittoria salvate le posizioni dei pulsanti vincenti, quindi il messaggio controllaVittoria controlla se tutte le posizioni sono quelle giuste.
Il messaggio mescola serve per mescolare le carte.
Potete anche aggiungere un pulsate per poter rimettere tutti i pulsanti in ordine con il seguente codice:
on mouseUp put the soluzione of this card into temp repeat with i=1 to 16 set the loc of button i to line i of temp end repeatend mouseUpCosì:
Ora tocca a voi divertirvi ad aggiungere un timer, il numero di mosse utilizzato per vincere e qualche elemento grafico!
Se avete dubbi chiedete pure nei commenti.
NOTA: non tutte le combinazioni casuali generano un gioco del 15 risolvibile. Per l'esattezza solo la metà di tutte le possibili configurazioni (16! / 2), in un prossimo post spiegherò come capire se una combinazione è risolvibile.



Nessun commento:
Posta un commento