Jump to content
Nokioteca Forum

Nrunner


Recommended Posts

nRunner Il line runner per Symbian fatto in casa :thumbs:

- Introduzione:

Ciao a tutti,

come avrete ben capito il mio intento sarà quello di cercare di replicare l'ormai famosissimo e amatissimo giochino di "line runner" anche per noi "poveri" possessori di dispositivi che montano ancora un vecchio ed ormai abbandonato sistema operativo come Symbian; ma fino a quando ci saremo noi a programmare e sopratutto a divertirci con mShell non si potrà mai dire che esso sia un OS da abbandonare. Detto ciò siamo pronti ad incominciare :D

- Obiettivo:

Iniziamo innanzitutto ad analizzare il gioco originale. Attenzione però, noi non lo stiamo copiando, ma ne stiamo semplicemente prendendo spunto per realizzare qualcosa di nuovo, e chissà mai magari di migliore. :POk, però adesso basta dire cavolate!

In che cosa consiste il giochino e come dovrà essere realizzato?

Bene, il gioco consiste in un omino stilizzato che, rimanendo fermo nella propria posizione, deve cercare di evitare i vari ostacoli che gli vengono incontro assieme al background.

Quello che dovremo fare noi sarà riprodurre le stesse funzioni di salto e di rotolamento che l'omino compie per evitare l'ostacolo.

- Primi test:

use graph as g, ui;

x=30; //posizione x del personaggio
y=65; //posizione y del personaggio
n=0; //immagine dalla quale partire

a=[g.icon("e:\\Images\\0.png"),
g.icon("e:\\Images\\1.png"),
g.icon("e:\\Images\\2.png"),
g.icon("e:\\Images\\3.png"),
g.icon("e:\\Images\\4.png"),
g.icon("e:\\Images\\5.png"),
g.icon("e:\\Images\\6.png"),
g.icon("e:\\Images\\7.png"),
g.icon("e:\\Images\\8.png")]; //array con tutte le immagini da far scorrere

ui.ptr(ui.relative); //impostiamo il tipo di comando touch
ui.keys(true);

do

c=ui.cmd(1);
g.clear();
g.put(x,y,a[n]); //posizioniamo il personaggio
g.brush(g.red); // colore sfondo del tasto d'uscita
g.rect(300,0,60,60); // tasto d'uscita
g.line(0,320,360,320); // linea di separazione (inutile ma giusto per capire dove toccare)
g.line(310,10,350,50); // linea per disegnare la "X" di uscita
g.line(310,50,350,10); // seconda linea per disegnare la "X" di uscita
g.text(50,370,"salta/jump"); // un testo giusto per sapere dove toccare
g.show();
y=65; // riportiamo il personaggio nella sua posizione
n++; passiamo al prossimo frame
if n=9 then n=0 end; //una volta in fondo ricominciamo da capo
sleep(50); // intervallo tra un frame ed un altro
if isarray(c) then // se il comando compare sotto forma di tocco, quindi un matrice con 3 valori [x,y,tocco (sì/no)]
if c[1]>320 then y=y-45; // se tocchiamo l'area in basso allora salta
end;
if c[0]>300 and c[1]<60 then // se tocchiamo l'angolo in alto a destra allora si esce
e=true;
end;
end;
until e=true;

- Note:

Dato che non sono ancora in possesso di immagini definitive per l'omino, userò provvisoriamente le immagini postate da "lento" per il giochino di Aladino, sempre che sia d'accordo :P

Le immagini, come avrete potuto notare dal codice, sono da mettere in e:\images\

- Conclusione:

La prima parte finisce qui, ora, dato che purtroppo in questo periodo sono un pochino impegnato con l'università, non prometto aggiornamenti periodici ne tanto meno sostanziali a breve, ma come ben saprete, non appena troverò un attimino di tempo liberò mi metterò a studiare qualche piccola novità da implementare a questo che potrebbe rivelarsi un giochino davvero molto interessante se ben sviluppato; intanto attendo le vostre prime impressioni, ma sopratutto i vostri consigli sulle prossime migliorie ^_^

Images.zip

Edited by Nick_7
Link to post
Share on other sites

Fantastico! per la prima volta ho visto il gioco che volete replicare.

Direi che senza ombra di dubbio si può fare ed in seguito modificare, forse in meglio.

Faccio notare che per rendere più veloce il gioco utilizza un numero di frame molto piu basso di aladin.

(ad occhio sembra che per correre utilizzi 4 immagini per giunta a soli due colori. e quando salta solo due idem quando si abbassa.)

Anche la dimensione dell'omino... è piccolo! quindi più proporzionato agli ostacoli.

Vi consoglio di vedere quanti frame utilizza nell'intero gioco e partire da lì.

Definite le immagini che volete utilizzare per il gioco il resto si fà.

Link to post
Share on other sites

Scusate la domanda OT.

Ma come mai su certi post mi trovo della pubblicità attaccata?.

E' il forum che la gestisce?

Credo la pubblicità venga inserita in automatico dal sito sotto ogni primo post <_<

Comunque sia girovagando nella rete ho trovato questa interessantissima gif che contiene diversi frame, sicuramente più di 4, ma almeno l'idea della corsa è resa in maniera decisamente più realistica.

Runner%203%20stick%20man.gif

Questa è la miglior gif che sono riuscito a trovare poi dopo proverò a scomporla nei sui vari frames; per quanto riguarda la dimensione credo che la ridurrò a circa un quinto o un sesto poi si vedrà ;)

Edited by Nick_7
Link to post
Share on other sites

Credo la pubblicità venga inserita in automatico dal sito sotto ogni primo post <_<

Comunque sia girovagando nella rete ho trovato questa interessantissima gif che contiene diversi frame, sicuramente più di 4, ma almeno l'idea della corsa è resa in maniera decisamente più realistica.

Runner%203%20stick%20man.gif

Questa è la miglior gif che sono riuscito a trovare poi dopo proverò a scomporla nei sui vari frames; per quanto riguarda la dimensione credo che la ridurrò a circa un quinto o un sesto poi si vedrà ;)

Ciao Nick_7 ho scomposto la gif ecco le vari immagini.

IMG00000.bmp

IMG00001.bmp

IMG00002.bmp

IMG00003.bmp

IMG00004.bmp

IMG00005.bmp

IMG00006.bmp

Edited by 6587gianluca
Link to post
Share on other sites

Ciao Nick_7 ho scomposto la gif ecco le vari immagini.

Ripensandoci...mi sa che le immagini su postate non possono essere utilizzate in quanto hanno la striscia nera sotto e nell'uso delle immagini quando salti vedresti saltare anche il pavimento sotto l'omino.

He cercato di toglierla, provala e vedi se va bene.

IMG00000.bmp

IMG00001.bmp

IMG00002.bmp

IMG00003.bmp

IMG00004.bmp

IMG00005.bmp

IMG00006.bmp

Edited by 6587gianluca
Link to post
Share on other sites

Ciao 6587gianluca, grazie mille per avermelo scomposto nei vari frame! :lmaosmiley:

In effetti è vero, proverò a togliere la banda nera.

Grazie ancora alla prossima!

Edit: ho appena scaricto le tue immagini editate e sembrano andare bene, le proverò tra oggi e domani ;)

Edited by Nick_7
Link to post
Share on other sites

Ciao 6587gianluca, grazie mille per avermelo scomposto nei vari frame! :lmaosmiley:

In effetti è vero, proverò a togliere la banda nera.

Grazie ancora alla prossima!

Quelle nel post nr. 5 sono con la banda nera, quelle nel post nr. 6 sono già senza banda nera.

Provale e poi facci sapere.

Ciao.-

Link to post
Share on other sites

Ho provato quelle senza banda c'è ancora una piccolissima linea nera al di sotto che permane anche nel salto :doh:

Comunque sia come dimensioni ci siamo sul touch-screen dovrebbe andare più che bene anche così, poi vi farò degli screenshots ;)

Grazie per il bel lavoro con le immagini :thumbs:

Edit:

Grandissima novità: come aveva già fatto 6587gianluca prima di me, sono riuscito a scomporre l'immagine animata .gif nei suoi 7 fotogrammi, poi ho completamente eliminato la striscia nera che c'era sotto ogni fotogramma ed infine ho applicato la trasparenza eliminando semplicemente lo sfondo bianco e ho salvato tutte le immagini in formato .png in modo tale da poter conservare per l'appunto la trasparenza. Ora l'effetto del movimento è davvero fantastico. :lmaosmiley:

Anche se non è molto, anzi quasi niente, sono comunque molto contento dei risultati fin'ora conseguiti, ora bisogna passare alla parte più importante: il codice. :mumble:

Note: software utilizzato per la modifica delle immagini: Gimp 2.6

A presto con altre interessanti novità! ^_^

0.png

1.png

2.png

3.png

4.png

5.png

6.png

Edited by Nick_7
Link to post
Share on other sites

Ho notato che le immagini sono 200 pixel per 200pixel nel gioco cosa fai le riduci?

Mah... ora per i primi test penso che le terrò così anche perché non mi creano problemi e poi mi sono utili per capire bene come salta il personaggio; dopo di che, se ce ne sarà bisogno, magari le ridurrò della metà ad una grandezza di 100 pixel per 100 pixel.

Ho già scritto un nuovo codice tutto adattato per gli schermi dei touch-screen, adesso il giochino viene visualizzato solo in landscape, ma non voglio ancora pubblicare il codice in quanto è troppo acerbo e non ho ancora finito di definire bene il salto... diciamo che ci sto lavorando... ^_^

p.s.: @lento grazie per la risposta qui: http://www.nokioteca.net/home/forum/index.php/topic/209305-oggetto-in-movimento-x-game/page__st__40__p__1830363#entry1830363

Link to post
Share on other sites

Bene bene. finalmente in questa sezione c'è di nuovo un po' di attività :P

Da "ex" sviluppatore python su symbian vi dico che l'idea è fantastica e il gioco carino. Chissà magari se ho un po di tempo posso anche darvi una mano ma non garantisco nulla, tra università, port di rockbox e vita hehe

Poi io sono ancora fermo all'n70, potrei prendere in prestito il 5228 di mia sorella se volete che faccia delle prove xD

:thumbs:

Link to post
Share on other sites

Bene bene. finalmente in questa sezione c'è di nuovo un po' di attività :P

Eggià qui si vive alla grande!

Nella discussione "Oggetto In Movimento X Game" di '6587gianluca' cè la versione più adatta la tuo N70.

L'unica modifica utile sarebbe adattarlo alla risoluzione del tuo schermo (176x208) e magari lo puoi giocare in landscape.

Se non mi sbaglio il tuo N70 non è touch ? vero?.

Edited by lento
Link to post
Share on other sites

Dai quando ho un attimo di tempo lo proverò di sicuro ;)

Grazie dell'interessamento questo potrebbe aiutare che utilizza schermi come il tuo, ma non farne un impegno.

La mia era solo un idea.

Se nei tuoi studi cè l'informatica potresti postarci in mShell dei stralci di programmi che ci aiutino a miglioralo.

Ad esempio un algoritmo di ordinamento con tanto di spegazione, come si verifica se un numero è pari ecc.

Piccole cose che messe assime possano generare grandi cose.

Le grandi cose nascono dall'infinitamente piccolo (grosso guaio a chinatown)

Link to post
Share on other sites

Ciao a tutti,

ho fatto altri test sul movimento del personaggio e vi posto un codice funzionante, ma ricordo che non sono ancora compresi gli ostacoli, per ora mi sto dedicando solo ed esclusivamente allo studio del movimento del personaggio.

use graph as g, ui;

ui.mode(1); // forza la modalità portrait
ui.ptr(ui.relative); // tipo di controllo touch

a=[g.icon("e:\\Images\\0.png"),
g.icon("e:\\Images\\1.png"),
g.icon("e:\\Images\\2.png"),
g.icon("e:\\Images\\3.png"),
g.icon("e:\\Images\\4.png"),
g.icon("e:\\Images\\5.png"),
g.icon("e:\\Images\\6.png")]; // immagini personaggio

x=100;
y=100;
n=0;

function grafica(); // funzione che gestisce quasi l'intera grafica
g.clear();
g.rect(100,100,100,100);
g.brush(g.red);
g.rect(300,0,60,60);
g.line(0,320,360,320);
g.line(310,10,350,50);
g.line(310,50,350,10);
g.text(150,370,"salta/jump");
g.put(.x,.y,.a[.n]);
.n++;
if .n=7 then 
 .n=0;
end;
sleep(50);
g.show();
end;

do

grafica();
c=ui.cmd(1);
if isarray(c) then
if c[1]>320 then //se tocco sotto
 if y=100 then do
  grafica();
  y=y-5; n=1; // salta con l'immagine 1
 until y=50;
elsif y=50 then do // altrimenti
  grafica();
  y=y+5; n=6; // scende con l'immagine 6
 until y=100 // finché non torna nella posizione iniziale
end;
end;
if c[0]>300 and c[1]<60 then // se clicko sul quadratino rosso 
 e=true;
end;
end;

until e=true; // si esce dal programma

Sto lavorando ad una funzione più avanzata del salto del giocatore, ma ci sono ancora delle cose da sistemare e quindi non ho voluto pubblicare il codice.

Comunque sia se qualcuno vuole testare già questo piccolo codice per dirmi a grandi linee le proprie impressioni non sarebbe male.

Note: Questo codice è stato fatto per mantenere il cellulare in posizione verticale, ma la versione finale sarà in orizzontale.

Ricordo che il codice è fatto per dispositivi touch-screen ma può essere facilmente adattato anche per i dispositivi con tastiera cambiando solo parte di immissione dei comandi.

Per comodità vi inserisco il codice anche in allegato.

P.S.: ciao memoryn70, sono davvero contento che ci segui e se potessi provare anche qualche codice sarebbe fantastico! :thumbs:

A presto con altre novità! ^_^

nRunner.v0.03.txt

Edited by Nick_7
Link to post
Share on other sites

:D

Purtroppo non vi posso garantire nulla, ma ora mi leggo un attimo il codice e vediamo cosa salta fuori dalla mia modesta analisi hihi

EDIT: allora. Se in mShell è possibile programmare ad oggetti, li consiglio. Anche se effettivamente l'omino sarà solo uno. Ma gli ostacoli no. Ci sono le classi giusto?

Per esempio un ostacolo avrà come attributi la posizione x,y rispetto alla linea, il colore ecc...

Come metodi può avere una cosa tipo isCollide() oppure Move() se vogliamo aggiungere un po di difficoltà.

Poi sconsiglio l'uso di variabili relative allo schermo che sono fisse...poi son dolori a cambiare tutto una volta fatto. Meglio cercare di usare qualcosa tipo X_SCREEN *.5 se si vuole a metà schermo ecc.

Cosi funzionerà (beh più o meno) sia sul mio n70, che virtualmente su uno schermo di pc.

Consiglio anche un po di identazione: oltre a rendere il codice più capibile è anche più facile rivederlo e correggerlo ;)

Ma le immagini sono quelle di qualche post fa? perchè me le hai convertite in png :P

EDITONE: ok. Testato il tutto. Figo :D Come inizio non sembra male.

Scusa una cosa isarray© praticamente vede se ci sono le coordinate del touch, altrimenti è un tasto fisico? Se è cosi, ok il principio va bene. Ma la grafica deve essere separata dai comandi...altrimenti viene fuori un casino :)

Mi sono anche permesso di sistemare un po l'appeal del codice:

/*
   This is a nice game...
   Qui un qualche commento ci sta 
   by XXX
   version XXX
   changelog XXX
*/

use graph as g, ui;

ui.ptr(ui.relative); // tipo di controllo touch

/* Image resources */
a=[g.icon("e:\\data\\mRunner\\0.bmp"),
  g.icon("e:\\data\\mRunner\\1.bmp"),
  g.icon("e:\\data\\mRunner\\2.bmp"),
  g.icon("e:\\data\\mRunner\\3.bmp"),
  g.icon("e:\\data\\mRunner\\4.bmp"),
  g.icon("e:\\data\\mRunner\\5.bmp"),
  g.icon("e:\\data\\mRunner\\6.bmp")];

/* What's that? */
x=100;
y=100;
n=0;

function grafica(); // funzione che gestisce quasi l'intera grafica
   g.clear();
   g.rect(100,100,100,100);
   g.brush(g.red);
   g.rect(300,0,60,60);
   g.line(0,320,360,320);
   g.line(310,10,350,50);
   g.line(310,50,350,10);
   g.text(150,370,"salta/jump");
   g.put(.x,.y,.a[.n]);
   .n++;
   if .n=7 then 
       .n=0;
   end;
   sleep(50);
   g.show();
   end;

/* Main */
do

   grafica();
   c=ui.cmd(1);
   if isarray(c) then

   if c[1]>320 then //se tocco sotto
       if y=100 then
           do
               grafica();
               y=y-5; n=1; // salta con l'immagine 1
           until y=50;
       elsif y=50 then
           do
               grafica();
               y=y+5; n=6; // scende con l'immagine 6
           until y=100 // finché non torna nella posizione iniziale
       end;
   end;

   if c[0]>300 and c[1]<60 then // se clicko sul quadratino rosso 
       e=true;
       end;
   end;

until e=true; // si esce dal programma

Dimenticavo, ultimo punto della mia analisi hehe

Scritte come jump o il quadratino per uscire (anche se presenti solo ovviamente ora, più avanti ci sarà qualcosa da mettere di utile) sarebbero da scrivere una sola volta o quando necessario, aggiornando solo la parte di canvas che ci interessa per ottenere prestazioni migliori, anche se effettivamente mshell + il celluare sono potenti abbastanza :thumbs:

Bisognerà poi lavorare sul modo di generare posizioni degli ostacoli a caso, ma non troppo ovviamente. Magari integrando anche un concetto di Facile-Difficile-Medio!

Lo sfondo è fisso quindi ottimo, pure l'omino. quindi dai che si fa :lol:

Edited by memoryn70
Link to post
Share on other sites

Programmazione ad oggetti? Classi? :huh:

Indentazione e commenti ok per quello non c'è problema le aggiungerò man mano.

Sì le immagini sono in .png proprio per far sì che mantengano la trasparenza e che si possano vedere gli oggetti dietro il personaggio (se in futuro dovessi aggiungerci un background...) :shifty:

Link to post
Share on other sites

Programmazione ad oggetti? Classi? :huh:

Indentazione e commenti ok per quello non c'è problema le aggiungerò man mano.

Sì le immagini sono in .png proprio per far sì che mantengano la trasparenza e che si possano vedere gli oggetti dietro il personaggio (se in futuro dovessi aggiungerci un background...) :shifty:

Ah ottimo si! Se mshell gestisce la trasparenza ottimo!

ps. leggi di nuovo il post che ho editato :)

EDIT: ok se non sai la programmazione ad oggetti fa nulla ;) Si può fare tranquillamente in modo lineare ma ora sono fissato con sti oggetti anche perchè all'uni sto facendo il Java hehe

Edited by memoryn70
Link to post
Share on other sites
  • 3 months later...
  • 4 weeks later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

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