Nokioteca [Nokia] Forum: [mshell] Snake - Nokioteca [Nokia] Forum

Salta al contenuto

Pagina 1 di 1
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione

[mshell] Snake Poteva mancare in mShell???

#1 L   lento 

  • Senior Member
  • PuntoPuntoPuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 637
  • Iscritto: 03 settembre 2008
  • Cellulare:E72

Inviato 13 giugno 2009 - 21:34

Salve a tutti...Potevamo noi adoratori di mShell rinunciare a Snake...Ceeeertoo che si!!!
Ma mi serviva un gioco semplice per spiegare quanto anticipato da 'IlSocio' in una precedente discussione: L'uso dello schermo suddiviso in caselle.
Lo schermo viene diviso i 24 righe per 24 colonne ottenendo così 576 caselle in queste caselle si possono posizionare i frutti di cui il vermicello è goloso
eventuali ostacoli e il vermicello stesso.

Nonostante un Array semplice può essere visto come una linea continua di caselle....
possiamo anche vederlo come qui riportato, è sempre una linea continua di caselle ma è stata spezzata per evidenziare come si può facilmente trovare e mettere un valore nel suo interno vedendolo come su una scacchiera di 24 righe per 24 colonne.
gr=[0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
];

Col numero 5 indichiamo il frutto che si trova alla 12 riga e alla 13 colonna per individuare la corrispondente posizione nel' Array basta considerare le righe complete 11 e la colonna dove si trova per fare gr[13+11*24] ovvero gr[colonna+(righe_complete*24)]

Quello che voglio far notare è la genialità del sistema di controllo che regge questo gioco:

Penso vi sarete chiesti come fà il programma a ricordarsi tutte le evoluzioni che fa il serpentello e tener conto del fatto che continua ad allungarsi.....

Usando l'Array sopra citato la cosa diventa semplice basta sapere dove è la testa del vermicello e dove si trova la sua parte finale.
Praticamente lo gestiamo con 4 tasti su=1 giù=2 sinistra=3 destra=4 in base al tasto premuto andremo ad aggiungere un quadratino davanti alla testa del vermetto nella direzione indicata dal tasto ed andremo a cancellarne uno alla coda.

Ma come fà la coda a sapere dove è orientata? semplice nel' Array ad ogni casella dove passa la testa si lascia il numero corrispondente all'operazione svolta in modo che quando lo incontra la coda sa che direzione a preso la testa e la segue.
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,2,3,3,3,3,3,3,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,5,0,0,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,3,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Questo è l'Array corrispondente alla figura qui allegata. Download file  Snake.png (1,85K)
Numero di downloads: 5

E per sapere se Snake si è morso basta leggere la casella ove la testa deve spostarsi se contiene 0 va tutto bene se contiene da 1 a 4 si è morso se contiene 5 si mangia il frutto!.

Su questa base a array si possono costruire un infinità di giochi gestiti velocemente e con facilità.

Un esempio? eliminate tutte le caselle a video del vermicello tranne la testa e la coda,
l'asciate la memoria del percorso fatto dalla testa nella matrice e disegnate e cancellate la testa e la coda....così che sembrino due esserini che si spostano sullo schermo.

Cosa esce? un omino che fugge ed un segugio che si trova 10 passi addietro, questo segugio lo insegue ripetendo perfettamente il suo percorso perché fiuta la pista.
Ora ogni 10 movimenti il segugio si avvicina di un passo (quadretto) al'omino.. se continua così lo prende!
Ma per sua fortuna l'omino incontra spesso delle pozzanghere (il frutto del vermicello) ed ogni volta che riesce a bagnarsi i piedi nella pozzanghera il segugio perde terreno perché fatica a fiutarlo...

Vedete come diventa facile creare giochi sempre nuovi leggendo i vari oggetti e posizioni memorizzate nel'array!!!.

Vi allego il sorgente per 240x320 qui: Download file  Snake.txt (4,78K)
Numero di downloads: 21
e qui quello per i 176x208 : Download file  Snake176x208.txt (4,78K)
Numero di downloads: 31

Come al solito non è finito, il gioco continua a incrementare la velocità man mano si mangia un frutto e pure si allunga....
Il gioco termina se sbatte contro i bordi o se si morde.

Tutto il resto:
1) segnare il punteggio.
2) aggiungere bariere nuove ad ogni livello
3) aumentare la disponibilità di frutti ecc.
Lo lascio a voi.......

Vi ricordo che questo è l'ultimo gioco di una certa complessità che presento....
Questo mi serviva per completare la spiegazione degli Array semplici.....

Dopo avervi dato la lenza e li vermetto (Snake) stà a voi divertirvi a pescare..
Buon divertimento.

Ha dimenticavo......nel scopiazzarlo sono rimasto ammirato di come certa gente di ingenio riesce
a rendere semplici le soluzioni di problemi che ai miei occhi risultavano estremamente complesse!!.
0

#2 L   Nick_7 

  • Senior Member
  • PuntoPuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 339
  • Iscritto: 20 novembre 2008
  • Località:Luna
  • Cellulare:Omnia HD
  • Firmware:I8910XXJB1

Inviato 14 giugno 2009 - 09:32

Ottimo proverò a dargli un'occhiata e vedrò cosa posso fare :shifty:
0

#3 L   6587gianluca 

  • Advanced Member
  • PuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 213
  • Iscritto: 31 dicembre 2006
  • Cellulare:Nokia C7

Inviato 15 giugno 2009 - 08:12

Ciao "lento" innanzitutto grazie per Snake, è veramente carino e studiato benissimo. Sono due giorni che stò leggendo il sorgente, l'ho stampato, mi sono creato una matrice da 24 x 24 e stò facendo le prove per vedere se lo riesco a far girare su carta.
Finchè il serpente è di una lunghezza di 2 caselle in qualche modo riesco a capire come fà a muoversi ma quando diventa più lungo mi perdo.

Supponiamo che snake è di tre caselle e supponiamo che si stà muovendo in alto e che incontra un valore uguale a zero quindi siamo nella parte del sorgente seguente :

gr[cot+rit*25]=dietro; plot(cot,rit,g.green);
dietro=gr[coc+ric*25];
incremento(ric,coc);
gr[coc+ric*25]=0; plot(coc,ric,g.white);
coc=coc+ico; ric=ric+iri;


mi chiedo dietro è la casella subito dopo la testa oppure è proprio la coda cioà la terza casella nel caso di serpente lungo tre caselle ???
Ti chiedo questo in quanto non riesco a capire bene come simuove snake.
Grazie "lento", ciao.-
0

#4 L   Nick_7 

  • Senior Member
  • PuntoPuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 339
  • Iscritto: 20 novembre 2008
  • Località:Luna
  • Cellulare:Omnia HD
  • Firmware:I8910XXJB1

Inviato 15 giugno 2009 - 21:39

io ho applicato:

g.full(true);

eppure la griglia non parte dall'angolo in alto a sinistra (0,0) come credo che sia anche logico, come mai??? <_<
0

#5 L   lento 

  • Senior Member
  • PuntoPuntoPuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 637
  • Iscritto: 03 settembre 2008
  • Cellulare:E72

Inviato 16 giugno 2009 - 16:34

Visualizza MessaggiNick_7, il 15/06/2009 - 22:39, ha scritto:

io ho applicato:
g.full(true);
eppure la griglia non parte dall'angolo in alto a sinistra (0,0) come credo che sia anche logico, come mai??? :thumbs:

'Nick_7' capisco che in questi giorni sei preso da euforia da vacanze... e molte altre cose ti distraggono, ma abbi un pò di pietà per noi schiavi del lavoro.... :angel:
Prima di postare dacci un occhiata va!.
function DisCampo()
/*==================
  disegna a quadratini il campo dove si muove snake */
  for co=1 to 24 do
	for ri=1 to 24 do
	  plot(ri,co,g.white);
	end;
  end; 
end;
e se questa funzione la trasformassi in questo modo....
function DisCampo()
/*==================
  disegna a quadratini il campo dove si muove snake */
  for co=0 to 23 do
	for ri=0 to 23 do
	  plot(ri,co,g.white);
	end;
  end; 
end;
che succederebbe????
Ciao e divertiti.
0

#6 L   lento 

  • Senior Member
  • PuntoPuntoPuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 637
  • Iscritto: 03 settembre 2008
  • Cellulare:E72

Inviato 16 giugno 2009 - 17:41

Visualizza Messaggi6587gianluca, il 15/06/2009 - 09:12, ha scritto:

mi chiedo dietro è la casella subito dopo la testa oppure è proprio la coda cioà la terza casella nel caso di serpente lungo tre caselle ???
Ti chiedo questo in quanto non riesco a capire bene come simuove snake.
Grazie "lento", ciao.-

E' colpa mia dovevo dargli un altro nome....dietro è una variabile generica temporanea (potresti ciamarla temp che raccoglie
il valore della casella dove si trova attualmente la testa di snake e la copia nella nuova casella dove va ad avanzare.
Poi dietro=gr[coc+ric*25]; non serve ad un bel niente mi son dimenticato di cancellarla!. ;)
Allora vediamo se riesco a darti un idea del meccanismo:
Per fare avanzare la testa preleva il numero presente nella casella dove attualmente si trova la testa e lo copia nella nuova posizione.
Mentre per la coda legge il valore contenuto nella casella della coda, cancella la coda e con il valore letto aggiorna le sue coordinate
fatte da coc(Colonna_coda) e ric (Riga_coda) che gli permettono di sapere dovè la coda per la volta successiva.

Se con la pressione di un tasto si decide di cambiare direzione: si modifica immediatamente il contenuto della casella della testa.
Esempio se vado a destra (4) cancello l'attuale valore (1) contenuto nella casella della testa e vi pongo il (4). Ora prima di disegnare la nuova testa si
verifica cosa cè in quella casella se è libera (0) vi disegno la testa e vi pongo il (4) serve per sapere in caso di nessuna pressione dei tasti come muovermi.
Quando nell'avanzare incontri un frutto, semplicemente sostituisco il frutto con la testa di Snake e non accorcio la coda così facendo il vermetto si è
allungato.

Potevo scriverlo anche un pò meglio ste programma....per renderlo più facile da capire ma a volte il tempo è quello che è.
Ciao....

Messaggio modificato da lento il 16 giugno 2009 - 17:44

0

#7 L   6587gianluca 

  • Advanced Member
  • PuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 213
  • Iscritto: 31 dicembre 2006
  • Cellulare:Nokia C7

Inviato 16 giugno 2009 - 18:14

Visualizza Messaggilento, il 16/06/2009 - 18:41, ha scritto:

E' colpa mia dovevo dargli un altro nome....dietro è una variabile generica temporanea (potresti ciamarla temp che raccoglie
il valore della casella dove si trova attualmente la testa di snake e la copia nella nuova casella dove va ad avanzare.
Poi dietro=gr[coc+ric*25]; non serve ad un bel niente mi son dimenticato di cancellarla!. :blink:
Allora vediamo se riesco a darti un idea del meccanismo:
Per fare avanzare la testa preleva il numero presente nella casella dove attualmente si trova la testa e lo copia nella nuova posizione.
Mentre per la coda legge il valore contenuto nella casella della coda, cancella la coda e con il valore letto aggiorna le sue coordinate
fatte da coc(Colonna_coda) e ric (Riga_coda) che gli permettono di sapere dovè la coda per la volta successiva.

Se con la pressione di un tasto si decide di cambiare direzione: si modifica immediatamente il contenuto della casella della testa.
Esempio se vado a destra (4) cancello l'attuale valore (1) contenuto nella casella della testa e vi pongo il (4). Ora prima di disegnare la nuova testa si
verifica cosa cè in quella casella se è libera (0) vi disegno la testa e vi pongo il (4) serve per sapere in caso di nessuna pressione dei tasti come muovermi.
Quando nell'avanzare incontri un frutto, semplicemente sostituisco il frutto con la testa di Snake e non accorcio la coda così facendo il vermetto si è
allungato.

Potevo scriverlo anche un pò meglio ste programma....per renderlo più facile da capire ma a volte il tempo è quello che è.
Ciao....


Grazie "lento" proverò nuovamente a studiarlo attentamente facendo riferimento anche a questa tua spiegazione.....poi richiederò ....sicuramente non capisci niente.....nemmeno tu però!!!!
0

#8 L   Nick_7 

  • Senior Member
  • PuntoPuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 339
  • Iscritto: 20 novembre 2008
  • Località:Luna
  • Cellulare:Omnia HD
  • Firmware:I8910XXJB1

Inviato 16 giugno 2009 - 22:17

Grazie 'lento' non ci avevo fatto abbastanza attenzione ma quando mai stai attento te??

un'altra cosa guarda tra un po' ti insulta...: vedo molto spesso questo genere di scrittura: gr[coc+ric*25] e volevo chiederti il significato di di "*" e del numero che segue "25" (a primo impatto dovrebbe riguardare le o colonne o le righe) poichè non riesco a capire perchè va inserito solo dopo il "ric" e non anche dopo il "coc". :thumbs: ...come al solito non capisci una mazza :lol:
0

#9 L   lento 

  • Senior Member
  • PuntoPuntoPuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 637
  • Iscritto: 03 settembre 2008
  • Cellulare:E72

Inviato 17 giugno 2009 - 06:47

Visualizza MessaggiNick_7, il 16/06/2009 - 23:17, ha scritto:

Grazie 'lento' non ci avevo fatto abbastanza attenzione ma quando mai stai attento te??

un'altra cosa guarda tra un po' ti insulta...: vedo molto spesso questo genere di scrittura: gr[coc+ric*25] e volevo chiederti il significato di di "*" e del numero che segue "25" (a primo impatto dovrebbe riguardare le o colonne o le righe) poichè non riesco a capire perchè va inserito solo dopo il "ric" e non anche dopo il "coc". :thumbs: ...come al solito non capisci una mazza :)

Uè rispondo io perche 'lento' se proprio fuso ha fatto un bel guazzabuglio e abbiamo dovuto ricoverarlo alla neuro.....
24...25 uno dei due è sbagliato! perchè non correggete voi il programma e poi lo mettiamo qui con tanto di nome di chi vi ha partecipato?
Ora 'lento' si trova a dover convertire il software da la voro su nuovi PC e perde l'attenzione su altre cose.
Appena la neuro me lo molla ve faccio sapé. Ha! dimenticavo sopra è spiegato il meccanismo delle rihe colonne dovresti poter sistemare il tutto da solo.
A presto spero....Comunque siete diventati bravi...ora non vi sfugge più niente.

Messaggio modificato da lento il 17 giugno 2009 - 06:48

0

#10 L   lento 

  • Senior Member
  • PuntoPuntoPuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 637
  • Iscritto: 03 settembre 2008
  • Cellulare:E72

Inviato 18 luglio 2009 - 20:58

A riecchime!! rinsavito più bello e arzillo che pria!. (Bello?? PAROLA GROSSA!)
Allora... visto che nessuno è caduto nel mio trabocchetto... :thumbs: Mi arrendo :thumbs: .
A parte quella riga
Poi dietro=gr[coc+ric*25]; non serve ad un bel niente mi son dimenticato di cancellarla!.
del tutto innocua e inutile il programma non ha altri difetti a me noti :thumbs: .
A presto....
0

#11 L   Nick_7 

  • Senior Member
  • PuntoPuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 339
  • Iscritto: 20 novembre 2008
  • Località:Luna
  • Cellulare:Omnia HD
  • Firmware:I8910XXJB1

Inviato 24 ottobre 2011 - 19:07

Ciao lento, sto provando a fare un "porting" di snake anche sui dispositivi touchscreen ed in primo acchito sembra andare tutto bene anche se ci sono un sacco di cose da sistemare...
Se volete potrei anche postarvi il codice che sto utilizzando ma vi avverto che è pieno di bug. <_<
Ci dovrò lavorare un bel po' su...
Appena mi verranno in mente delle domande da farti riguardo al codice ti contatterò, quindi datti una rilettura al codice per essere pronto! :lol:
Alter: sempre a rompere le scatole alla gente te... -_-

Download file


0

#12 L   lento 

  • Senior Member
  • PuntoPuntoPuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 637
  • Iscritto: 03 settembre 2008
  • Cellulare:E72

Inviato 01 novembre 2011 - 13:12

Visualizza MessaggiNick_7, il 24 ottobre 2011 - 19:07, ha scritto:

Ciao lento, sto provando a fare un "porting" di snake anche sui dispositivi touchscreen...
Ci dovrò lavorare un bel po' su...
Appena mi verranno in mente delle domande da farti riguardo al codice ti contatterò, quindi datti una rilettura al codice per essere pronto! :lol:
Alter: sempre a rompere le scatole alla gente te... -_-


Ok !

Vedrò se riesco a recuperare un vecchio N97 per provare il gioco.
0

#13 L   Nick_7 

  • Senior Member
  • PuntoPuntoPuntoPuntoPunto
  • Gruppo: Utente
  • Messaggi: 339
  • Iscritto: 20 novembre 2008
  • Località:Luna
  • Cellulare:Omnia HD
  • Firmware:I8910XXJB1

Inviato 01 novembre 2011 - 19:34

Visualizza Messaggilento, il 01 novembre 2011 - 13:12, ha scritto:

Ok !

Vedrò se riesco a recuperare un vecchio N97 per provare il gioco.


Grazie lento sarebbe davvero bello se riprendessi a programmare anche per i touch :thumbs:
0

Condividi questa discussione:


Pagina 1 di 1
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione