Jump to content
Nokioteca Forum

[Mshell] Sokoban


lento
 Share

Recommended Posts

Dato che dovevo rispondere con un esempio di sokoban a 'Nalcwap' ne approfitto per metterlo un po piu in luce.

Tenete presente che è ridotto all'osso, i livelli non sono stati implementati.

(E' comunque estremamente facile aggiungerli.)

Per renderlo piu comprensibile ho utilizzato solo if..then riducendo al minimo anche l'uso delle funzioni.

Anche le dimensioni dello scenario sono ridotte (Essendo solo un esempio per 'Nalcwap').

Come al solito lascio a voi il piacere di completarlo e aumentarne le potenzialità.

La mia logica del gioco non sarà la migliore...ma piuttosto di niente...

sokoban.png

sokoban.txt

Modificato da lento
Link to comment
Condividi su altri siti

Come richiesto da 'Nalcwap' posto la versione completa di due livelli di gioco.

Aggiungere ulteriori livelli è estremamente facile.

Cosi pure ingrandire l'area di gioco.

Cosi pure aumentare il numero di casse (Attualmente ne prevedo max 5).

Qui ho dovuto creare due funzioni, ma se avete analizzato il precedente

programma dovreste riuscire a capire cosa fanno.

Non chiedetemi di metterci anche le musichette :incazzato: mi raccomando!.

sokoban1.txt

Link to comment
Condividi su altri siti

Sorry my confusion but where in the code

1-i move the boxes?

2- what part fix the box and square1when my square1 push the box and collide the wall?

Can you please post this 2 examples separate for understand?

Ps:i know now the part the square1 collide wall example

if x+1<=maxCol and level[y][x+1]=0 then

g.put(x*10,y*10,vuota); x=x+1;

g.put(x*10,y*10,square1);

end;

Very thanks lento

Link to comment
Condividi su altri siti

Il primo if verifica se la mossa da compiere x+1<=maxCol esce dalle dimensioni consentite maxCol

e se dove ci si dovrebbe muovere è presente il muro (wall) level[y][x+1]#1 .

elsif tasto=ui.rightkey then // sposta a destra sqaure1
   if x+1<=maxCol and level[y][x+1]#1 then
     if level[y][x+1]=0 then
       g.put(x*10,y*10,vuota); x=x+1;
     elsif level[y][x+1]=2 and x+2<=maxCol and level[y][x+2]=0 then
       level[y][x]=0; g.put(x*10,y*10,vuota); x=x+1;
       level[y][x]=0; level[y][x+1]=2; g.put((x+1)*10,y*10,box);      
     end;
   end;

Il secondo if verifica se dove ci si deve muovere è una piastrella vuota.

in tal caso deve solo cancellare square1 dalla attuale piastrella e incrementare la x alla piastrella successiva

(in fondo al programma poi verrà disegnato square1 usando la nuova posizione di x.)

elsif: se non è vuota verifica se nella nuova posizione è presente box ma verifica anche se la casella subito dopo x+2

sia vuota allora muove square1 in x+1 e box in x+2

Link to comment
Condividi su altri siti

Please sign in to comment

You will be able to leave a comment after signing in



Accedi Ora
 Share

×
×
  • Crea Nuovo...

Informazione Importante

Questo sito utilizza i cookie per analisi, contenuti personalizzati e pubblicità. Continuando la navigazione, accetti l'utilizzo dei cookie da parte nostra | Privacy Policy