Nick_7 Pubblicato: 10 Giugno 2009 Segnalazione Share Pubblicato: 10 Giugno 2009 Beato tè che tra un pò ti godi le vacanze..... Dopo 9 lunghissimi mesi di scuola un po' di vacanza me la merito... Beh un po' di inglese io lo conosco tanto è vero che ho già fatto una domandina sul forum di mShell... Comunque se tu magari mi dicessi in che modo formulare la domanda (in italiano) io un tentativo ce lo farei Link to comment Condividi su altri siti More sharing options...
lento Pubblicato: 10 Giugno 2009 Autore Segnalazione Share Pubblicato: 10 Giugno 2009 Beh un po' di inglese io lo conosco tanto è vero che ho già fatto una domandina sul forum di mShell... Comunque se tu magari mi dicessi in che modo formulare la domanda (in italiano) io un tentativo ce lo farei Prova a metterla così: Ho un cellulare Nokia 6630 con la versione 3.02-30 di mShell... quando eseguo questo programma: use ui; ui.keys(true,false); do tasto=ui.cmd(300); print(tasto); until tasto=48 Display: null null null 54 <------premo tasto 6 null null null -54 <-----rilascio tasto 6 Tutto bene! Mentre...così...... Display: null null 54 <------premo tasto 6 null null null <------ premo tasto 4 ????? null null -52 <------rilascio tasto 4 null -54 <-----rilascio tasto 6 Perchè mentre tengo premuto il tasto 6 non legge la pressione del tasto 4 ? come avviene su altri cellulari? Vi sarei grato se mi indicate cosa sbaglio, sto tentando di realizzare un gioco dove due giocatori agiscono in contemporanea sulla tastiera. Link to comment Condividi su altri siti More sharing options...
Nick_7 Pubblicato: 14 Giugno 2009 Segnalazione Share Pubblicato: 14 Giugno 2009 Non so perchè ma non mi lascia inserire una nuova discussione Link to comment Condividi su altri siti More sharing options...
lento Pubblicato: 25 Gennaio 2010 Autore Segnalazione Share Pubblicato: 25 Gennaio 2010 Prova a metterla così:Ho un cellulare Nokia 6630 con la versione 3.02-30 di mShell... quando eseguo questo programma: use ui; ui.keys(true,false); do tasto=ui.cmd(300); print(tasto); until tasto=48 Display: null null null 54 <------premo tasto 6 null null null -54 <-----rilascio tasto 6 Tutto bene! Mentre...così...... Display: null null 54 <------premo tasto 6 null null null <------ premo tasto 4 ????? null null -52 <------rilascio tasto 4 null -54 <-----rilascio tasto 6 Perchè mentre tengo premuto il tasto 6 non legge la pressione del tasto 4 ? come avviene su altri cellulari? Vi sarei grato se mi indicate cosa sbaglio, sto tentando di realizzare un gioco dove due giocatori agiscono in contemporanea sulla tastiera. 'Nick_7' dovendo imparare j2me casualmente ho trovato la risposta a questo problema. E' una differenza hardware e non cè niente da fare. E' un problema presente anche in j2me quando si vuole gestire la pressione dei tasti. Tutto dipende dai costruttori dei cellulari. Alcuni modelli permettono di leggere la pressione di un tasto, il rilascio e la eventuale pressione di un secondo tasto mentre se ne tiene premuto un altro. Altri permettono solo di leggere la pressione di un tasto e non rilevano ulteriori tasti finchè non si rilascia il tasto premuto. Altri addirittura rendono il codice di tasto premuto e eventuali altri premuti solo al rilascio!. (bufferizzazione della tastiera) Quindi posso risponderti che non è un difetto di mShell. Se aspettavi ancora un pò deventevamo nonni! Alter è vero ma ho dovuto arrangiarmi. Link to comment Condividi su altri siti More sharing options...
Nick_7 Pubblicato: 25 Gennaio 2010 Segnalazione Share Pubblicato: 25 Gennaio 2010 Grazie mille lento per questa precisazione, almeno ho capito che non era colpa del mio codice... Link to comment Condividi su altri siti More sharing options...
6587gianluca Pubblicato: 1 Giugno 2011 Segnalazione Share Pubblicato: 1 Giugno 2011 Per lento. Allego il file di far rotolare il barile, nella sua versione nr. 6 adattato per E71, con la speranza di poter realizzare la collisione tra Mario ed il Barile. Grazie.- Donkey_6_modificato.doc Link to comment Condividi su altri siti More sharing options...
lento Pubblicato: 2 Giugno 2011 Autore Segnalazione Share Pubblicato: 2 Giugno 2011 Per lento. Allego il file di far rotolare il barile, nella sua versione nr. 6 adattato per E71, con la speranza di poter realizzare la collisione tra Mario ed il Barile. Grazie.- Ciao '6587gianluca' la funzione collisione(); è stata lasciata incompleta proprio per permetterti di completare il tuo gioco. Sempe in questa sezione (Vedi altri giochini) dovresti trovare tutto quanto ti serve per scrivere una funzione sulle collisioni. Domanda: hai adattato anche gli scenari all' E71?. Link to comment Condividi su altri siti More sharing options...
6587gianluca Pubblicato: 2 Giugno 2011 Segnalazione Share Pubblicato: 2 Giugno 2011 Ciao '6587gianluca' la funzione collisione(); è stata lasciata incompleta proprio per permetterti di completare il tuo gioco. Sempe in questa sezione (Vedi altri giochini) dovresti trovare tutto quanto ti serve per scrivere una funzione sulle collisioni. Domanda: hai adattato anche gli scenari all' E71?. Si, ho adattato anche gli scenari all'E71, provalo se puoi, è simpatico da vedere, scorre benissimo, poi aggiugerò qualche suono per renderlo più vivo. Per quanto riguarda la collisione ci ho provato in vari modi ma non ci sono riuscito. Ciao.- Link to comment Condividi su altri siti More sharing options...
lento Pubblicato: 2 Giugno 2011 Autore Segnalazione Share Pubblicato: 2 Giugno 2011 Per quanto riguarda la collisione ci ho provato in vari modi ma non ci sono riuscito. Quali modi? hai provato... Purtroppo sono diventato totalmente Alieno ora posseggo Un Samsung Galaxy_Ace (Android) mi sarà difficile provare il gioco. Link to comment Condividi su altri siti More sharing options...
6587gianluca Pubblicato: 2 Giugno 2011 Segnalazione Share Pubblicato: 2 Giugno 2011 Quali modi? hai provato... Purtroppo sono diventato totalmente Alieno ora posseggo Un Samsung Galaxy_Ace (Android) mi sarà difficile provare il gioco. allora ho fatto le seguenti prove : if .barilix=.brosx then ...istruzioni end; poi ho provato for cu=0 to .nbarili do if .barilix[cu]=.brosx then ....istruzioni end;end; e poi mi sembra di aver fatto altre prove che però ora non mi vengono in mente in quanto dopo le prove le ho cabncellate. Dando l'invio alle precedenti prove e mi appariva l'errore nel main al seguente punto: g.put(0,0,sfondo); Ho controllato gli altri giochini ma tutte le funzioni colisione erano relative ad (mi sembra che si dice) array, nel senso che si controllavano una per una le bombe che colpivano ad esempio i sottomarini (ricordi!) quindi veniva scansionata bomba per bomba e sottomarino per sottomarino, invece in questo caso bisognerebbe prendere in considerazione solo l'eventuale collisiona tra un qualsiasi barile con mario bross. Tu che ne pensi....le prove che ho fatto sono tutte sbagliate vero ???? Link to comment Condividi su altri siti More sharing options...
lento Pubblicato: 3 Giugno 2011 Autore Segnalazione Share Pubblicato: 3 Giugno 2011 (modificato) Tu che ne pensi....le prove che ho fatto sono tutte sbagliate vero ???? Mi congratulo per i tentativi fatti. Il primo tentativo è sicuramente sbagliato perché .barilix è una matrice. Quindi devi indicare l'indice, come giustamente hai fatto nel secondo tentativo. Direi: prima chiariamoci le idee su cosa vogliamo ottenere. Io la vedo così: 1) Sfruttando le matrici barilix[], bariliy[] e brosx, brosy possiamo identificare con assoluta precisione dove si trova Bros e i barili. 2) Quindi ad ogni ciclo di movimento verifichiamo scansionando le matrici se Bros e un barile sono in contatto. 3) Se sono in contatto assegnamo un valore che indica collisione avvenuta ad una variabile globale (Oppure facciamo si che la funzione Collisione() ci renda un valore Vero o falso. 4) Nel ciclo principale del gioco oltre a verificare tasto verifichiamo anche l'avvenuta collisione e decidiamo di togliere vite o terminare il gioco. Ok! Ora concentriamo la nostra attenzione sul punto 1). for cu=0 to .nbarili do if .barilix[cu]=.brosx then ....istruzioni end; end; in teoria è giusta, l'errore sta nella eccessiva precisione dei dati contenuti in barili[cu] e brosx è praticamente impossibile che il vertice sinistro in alto della figura di Bros coincida con il vertice in alto a sinistra del barile. (Vedi spiegazione https://www.nokioteca.net/home/forum/index.php/topic/150216-mshell-far-rotolare-il-barile/page__view__findpost__p__1287891 ) Bross si muove con velocità diverse ed in più salta. Bisogna ragionare in termini di sovrapposizione di rettangoli. Dobbiamo verificare quando una parte del rettangolo di Bross si sovrappone al rettangolo del barile. Il ciclo che Hai scritto fa un confronto solo del punto (A) con il punto (E) è quasi impossibile che coincidano. Per verificare la sovrapposizione delle due immagini applichiamo la regola: Due rettangoli si intersecano se la distanza assoluta sull'asse x tra i centri dei due rettangoli è minore della somma delle semilarghezze dei rettangoli e la distanza assoluta sull'asse y tra i centri dei due rettangoli è minore della somma delle semialtezze Puoi trovare spiegazioni in internet (come ho fatto io!) Allora bisogna confrontare: mezzoBrosx=10 // considero figura di 20x30 pixel 20 in x 30 in y mezzaBottex=10 // considero botte 20x20 pixel mezzox=mezzoBrosx+mezzaBottex mezzoBrosy=15 // considero figura di 20x30 pixel 20 in x 30 in y mezzaBottey=10 // considero botte 20x20 pixel mezzoy=mezzoBrosy+mezzaBottey // mezzox e mezzoy ti converrà utilizzarle come costanti globali già pre_calcolate for cu=0 to .nbarili do if (math.abs((.barilix[cu]+mezzaBottex)-(.brosx+mezzoBrosx))< mezzox) and (math.abs((.bariliy[cu]+mezzaBottey)-(.brosy+mezzoBrosy))< mezzoy) then ....istruzioni end; end; Per velocizzare il tutto puoi ridurre il confronto sopra indicato solo per i barili che sono sul piano di Bros leggendo la matrice pbarile[] . for cu=0 to .nbarili do if .pbarile[cu]=.pmario then if (math.abs((.barilix[cu]+mezzaBottex)-(.brosx+mezzoBrosx))< mezzox) and (math.abs((.bariliy[cu]+mezzaBottey)-(.brosy+mezzoBrosy))< mezzoy) then ....istruzioni end; end; end; Spero di non aver sbagliato qualcosa.... Modificato 3 Giugno 2011 da lento Link to comment Condividi su altri siti More sharing options...
6587gianluca Pubblicato: 3 Giugno 2011 Segnalazione Share Pubblicato: 3 Giugno 2011 Direi: prima chiariamoci le idee su cosa vogliamo ottenere. Ok ! Ok!,,ora sono a lavoro ho letto velocemente, poi riesaminerò il tutto con più attenzione...però mi chiedo mezzoBrosx=10 // considero figura di 20x30 pixel 20 in x 30 in y mezzaBottex=10 // considero botte 20x20 pixel mezzox=mezzoBrosx+mezzaBottex mezzoBrosy=15 // considero figura di 20x30 pixel 20 in x 30 in y mezzaBottey=10 // considero botte 20x20 pixel mezzoy=mezzoBrosy+mezzaBottey questi valori vanno dichiarati all'iniziono del programma ???? Ciao e grazie per ora.... Link to comment Condividi su altri siti More sharing options...
lento Pubblicato: 3 Giugno 2011 Autore Segnalazione Share Pubblicato: 3 Giugno 2011 (modificato) E' preferibile dichiararli ad inizio programma come variabili Globali. Così facendo si evita di crearle e distruggerle ogni volta si chiamerà la funzione collisione() Non Hai allegato le immagini che utilizzi quindi mezzaBottex=10,mezzoBrosy=15 sono valori da mè inventati... Un altra cosa: nel ciclo principale del programma do g.put(0,0,sfondo); g.pen(0xff0000); g.text(160,15,"score");g.text(205,15,p); g.show(); for z=1 to lives do g.put(z*15+195,25,life); end;g.show(); escibarile()=0; sbarili(); brosmovi(tasto); //collisione(); g.show(); .....ecc.. .....ecc.. until tasto=false non ci sono troppi g.show(); ??? Ricorda che ogni volta che chiami quel comando viene ridisegnato lo schermo rallentando di molto il programma e consumando parecchia energia della batteria. Modificato 3 Giugno 2011 da lento Link to comment Condividi su altri siti More sharing options...
6587gianluca Pubblicato: 4 Giugno 2011 Segnalazione Share Pubblicato: 4 Giugno 2011 E' preferibile dichiararli ad inizio programma come variabili Globali. Così facendo si evita di crearle e distruggerle ogni volta si chiamerà la funzione collisione() Non Hai allegato le immagini che utilizzi quindi mezzaBottex=10,mezzoBrosy=15 sono valori da mè inventati... Un altra cosa: nel ciclo principale del programma do g.put(0,0,sfondo); g.pen(0xff0000); g.text(160,15,"score");g.text(205,15,p); g.show(); for z=1 to lives do g.put(z*15+195,25,life); end;g.show(); escibarile()=0; sbarili(); brosmovi(tasto); //collisione(); g.show(); .....ecc.. .....ecc.. until tasto=false non ci sono troppi g.show(); ??? Ricorda che ogni volta che chiami quel comando viene ridisegnato lo schermo rallentando di molto il programma e consumando parecchia energia della batteria. Ti ringrazio per la tua solita grande disponibilità, ma purtroppo non ci arrivo. Grazie comunque, ciao.- Link to comment Condividi su altri siti More sharing options...
ask57 Pubblicato: 11 Novembre 2015 Segnalazione Share Pubblicato: 11 Novembre 2015 Premessa: Apro questa nuova discussione nel tentativo di illustrare dei concetti basilari della programmazione sfruttando l'idea di '6587gianluca' che si stà prodigando a realizzare un gioco. Per sua gentile concessione utilizzo le sue immagini. Non spiegherò quello che si trova sui manuali di mshell.(devo finire di leggerli pure io...) Leggete anche l'eccellente "Miniguida per Iniziare" di 'masmil1988' https://www.nokioteca.net/home/forum/index....showtopic=38298 Non sono un insegnante...conosco qualcosa...e molto non sò, correrò il rischio di trasmettere anche qualche concetto sbagliato. Spero che altri verifichino l'esattezza di quel che si dirà intervenendo con correzioni per il bene di tutti, Grazie!. Nota: si tratta di un colloquio tra me e il mio alter ego che per dipiù è convinto di avere personalità multiple!!. Per il corretto funzionamento dovete installare nella MemoryCard queste due immagini: Nella Directory "E:\Images\" immagine donkeysfondo.png donkeysfondo.pnge barile.png barile.png Sono immagini per cellulari con schermo 240x320, per i possessori di cellulari con schermo 320x240 all'inizio dovranno vedere solo 3/4 dell'immagine. Torniamo a noi: L'idea è di far cadere e rotolare un barile lungo dei piani. Si pone un barile sul piano più alto, cade, rotola, cade,rotola così percorre tutto lo scenario del gioco "DonkeyKong", quando esce di scena ne riparte un altro. L'immagine dovrebbero essere sufficiente per capire. donkeysfond_1.png La prima regola è avere le idee chiare di cosa si vuol realizzare!. Ovvero conoscere il problema e come si vuol risolverlo (a grandi linee). Allora il programma sarà così: mostra "donkeysfondo.png" (l'immagine di fondo a pieno schermo) mostra il barile in alto a destra pronto a cadere "barile.png"Qui ci sono due azioni che si ripetono parecchie volte una per ogni piano: il barile cade sul piano sottostante il barile rotola sino al lato opposto del piano Ultima cosa, quando il barile giunge all'estremità dell'ultimo piano esce di scena e riappare al punto 1) pronto a ripetere la sequenza. Tutto chiaro?. Siii!(alter ego).Ecco il sorgente: use graph;graph.size(240,320);graph.full(true);sfondo=graph.icon("e:\\Images\\donkeysfondo.png"); barile=graph.icon("e:\\Images\\barile.png");graph.put(0,0,sfondo);graph.put(214,97,barile);graph.show(); sleep(10);graph.put(0,0,sfondo);graph.put(214,98,barile);graph.show();sleep(10); graph.put(0,0,sfondo);graph.put(214,99,barile);graph.show();sleep(10);graph.put (0,0,sfondo);graph.put(214,100,barile);graph.show();sleep(10);graph.put(0,0, sfondo);graph.put(214,101,barile);graph.show();sleep(10);graph.put(0,0,sfondo); graph.put(214,102,barile);graph.show();sleep(10);graph.put(0,0,sfondo);graph.put (214,103,barile);graph.show();sleep(10);graph.put(0,0,sfondo);graph.put(214,104, barile);graph.show();sleep(10);graph.put(0,0,sfondo);graph.put(214,105,barile); graph.show();sleep(10);graph.put(0,0,sfondo);graph.put(214,106,barile);graph. show();sleep(10);graph.put(0,0,sfondo);graph.put(214,107,barile);graph.show(); sleep(10);graph.put(0,0,sfondo);graph.put(214,108,barile);graph.show();sleep (10);graph.put(0,0,sfondo);graph.put(214,109,barile);graph.show();sleep(10); graph.put(0,0,sfondo);graph.put(214,110,barile);graph.show();sleep(10);graph. put(0,0,sfondo);graph.put(214,111,barile);graph.show();sleep(10);graph.put(0,0, sfondo);graph.put(214,112,barile);graph.show();sleep(10);graph.put(0,0,sfondo); graph.put(214,113,barile);graph.show();sleep(10);graph.put(0,0,sfondo);graph. put(214,114,barile);graph.show();sleep(10);graph.put(0,0,sfondo);graph.put(214, 115,barile);graph.show();sleep(10);graph.put(0,0,sfondo);graph.put(214,116, barile);graph.show();sleep(10);graph.put(0,0,sfondo);graph.put(214,117,barile); graph.show();sleep(10);graph.put(0,0,sfondo); ...... Fermo! fermo!ma cosè sta roba qua?. Il programma!...ci sono molte altre righe che devo scrivere per completarlo..... E' PAZZO!...presto chiudete la discussione e chiamate l'ospedale.... Vi assicuro che il sorgente qui riportato salvato in un file testuale con un nome di fantasia e estensione obbligatoria .m viene aperto dall'interprete mShell, lo legge e lo esegue tutto e non si lamenta! si vede il barile cadere per qualche piano, funziona!!. Dk0.txt Ma non si capisce niente! e come fa l'interprete mShell a capirci qualcosa?? son tutte parole appiccicate!. Allora possiamo immaginare che l'interprete quando esegue un programma su file fa quanto segue: Apre il programma da eseguire (Il programma deve essere scritto come testo) Parte dal primo carattere in alto a sinistra legge la prima istruzione,verifica che sia scritta correttamente e la esegue, poi legge la seconda e cosi via, scorre tutto esattamente come si legge un libro. Man mano che compie questa azione interpreta e esegue le istruzioni una dopo l'altra fino al termine del file e con esso termina anche il programma. Anche se non è esattamente così. Qui si capisce che siamo noi umani ad avere la necessità di una scrittura del programma che sia in grado di farci capire cosa compie. Dobbiamo poter scrivere in un modo tale, che sia il programma stesso a spiegarsi. Pazzesco!!! mi stai dicendo che quel ammasso alfanumerico può diventare un programma che si spiega?? Vuoi dire che il programma mi insegna come funziona?? Si! Ora te lo riscrivo.... Ok! questo è il sorgente: use graph; graph.size(240,320); graph.full(true); sfondo=graph.icon("e:\\Images\\donkeysfondo.png"); barile=graph.icon("e:\\Images\\barile.png"); graph.put(0,0,sfondo); graph.put(214,97,barile); graph.show();sleep(10); graph.put(0,0,sfondo); graph.put(214,98,barile); graph.show();sleep(10); graph.put(0,0,sfondo); graph.put(214,99,barile); graph.show();sleep(10); graph.put(0,0,sfondo); graph.put(214,100,barile); graph.show();sleep(10); graph.put(0,0,sfondo); graph.put(214,101,barile); graph.show();sleep(10); graph.put(0,0,sfondo); graph.put(214,102,barile); graph.show();sleep(10); graph.put(0,0,sfondo); graph.put(214,103,barile); graph.show();sleep(10); graph.put(0,0,sfondo); graph.put(214,104,barile); graph.show();sleep(10); Dk1.txt ...... Fermo! fermo! Ma?..dovevo scrivere ancora 60 centimetri di programma e il barile cade di un piano! e se aggiungo altri 6 metri di programma vedrai il barile cadere fino in fondo! e se poi aggiungo altri 6 metri e 60 centimetri rifà un altra volta il tutto!. Niente da fare...è proprio pazzo, richiama l'ospedale....non vorrai farci scrivere 6 metri e 60 di comandi per vedere un barile rotolare? Fine prima puntata... scusa ma in ke linguaggioè scritto, e come compilarlo per ottenere un eseguibile....???? grazie per la risponta..... Link to comment Condividi su altri siti More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Accedi Ora