Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Didattica > Corsi G - M > Laboratorio di multimedia I
 
Snake in Processing
Clicca QUI per vedere il messaggio nel forum
IsaMetallo
ciao a tutti... per smanettare un pò oggi mi sono messo ad implementare una versione semplice di snake (famoso gioco per cellulari) nella sua prima versione (quella cioè in cui si perdeva anche se si toccava il muro)...
sono ancora ad uno stadio iniziale, sto ancora lavorando sul movimento... ma la cosa stranissima è che solo le prime due parti del corpo del serpente si muovono correttamente, mentre le altre rimangono ferme, e non riesco a capire il perchè... se qualcuno mi dà una mano mi farebbe piacere...

SNAKEGAME
code:
Snake snake; int rate=1; int bodySize=20; //grandezza del corpo del serpente PVector direction=new PVector(0,bodySize); //direzione iniziale verso il basso (scelta a caso) static boolean running=true; //la variabile booleana fa vedere se il gioco è in corso o menp void setup(){ size(600,600); snake=new Snake(bodySize); frameRate(rate); smooth(); } void draw(){ if (running){ //il gioco in corso disegna il primo sfondo e fa muovere il serpente, il resto sarà gestito a parte background(loadImage("back.jpg")); snake.move(direction); } else //se no viene disegnata la schermata di perdita { background(loadImage("nelson.jpg")); textFont(loadFont("Arial-Black-48.vlw") , 40); fill(255); text("You Lose!",width-275,200); textFont(loadFont("Arial-Black-48.vlw"),20); text("Press n",width-200,height-100); text("for a new game", width-200,height-70); } } void keyPressed(){ //cambia direzione al serpente if (keyCode==UP) direction.set(0,-bodySize,0); if (keyCode==DOWN) direction.set(0,bodySize,0); if (keyCode==LEFT) direction.set(-bodySize,0,0); if (keyCode==RIGHT) direction.set(bodySize,0,0); if (key=='n') newGame(); } static void gameFinished(){ //se invocato ferma il gioco running=false; } void newGame(){ //ripristina lo stato iniziale snake=new Snake(bodySize); running=true; direction=new PVector(0,bodySize); }


SNAKE
code:
class Snake{ ArrayList snakeBody=new ArrayList(); Snake(int bodySize){ //crea un serpente con 5 pezzi int scala=0; for (int i=0; i<5; i++){ snakeBody.add(new SnakeBodyPart(new PVector(300-scala,10),bodySize)); scala+=bodySize; } } void move(PVector direction){ //la direzione influisce solo sul movimento della testa SnakeBodyPart head=(SnakeBodyPart)snakeBody.get(0); head.move(direction); head.display(); //il resto viene fatto in modo che un pezzo successivo prenda il posto del pezzo precedente int count=1; while(count<snakeBody.size()){ SnakeBodyPart part=(SnakeBodyPart)snakeBody.get(count); SnakeBodyPart previous=(SnakeBodyPart)snakeBody.get(count-1); part.setNewPos(previous.getOldPos()); part.display(); count=count+1; } } }


SNAKEBODYPART
code:
class SnakeBodyPart{ PVector pos,oldPos; int bodySize; float scala; SnakeBodyPart(PVector pos,int bodySize){ this.pos=pos.get(); this.oldPos=pos.get(); this.bodySize=bodySize; this.scala=bodySize/2; } void display(){ //disegna un rettangolo il cui centro viene letto dal vettore posizione rectMode(CENTER); fill(0,255,0); rect(pos.x,pos.y,bodySize,bodySize); } PVector getOldPos(){ return oldPos.get(); } PVector getPos(){ return pos.get(); } void setNewPos(PVector newPos){ pos.set(newPos.get()); } void move(PVector direction){ oldPos=pos.get(); pos.add(direction); //se la posizione esce dalla finestra si perde if (((pos.x-scala<0)||(pos.x+scala>width)) || ((pos.y-scala/2<0)||(pos.y+scala/2>height))) SnakeGame.gameFinished(); } }

IsaMetallo
niente ho risolto :-)

Stetolo
L'avevo fatto anch'io :) !

IsaMetallo
ehm... non funziona il tuo... nel senso, io passo col quadrato blu su quello giallo ma non si allunga il serpente... sbaglio qualcosa?

Stetolo
Sicuramente si..
Ti allego l'eseguibile per giocarci:

IsaMetallo
niente, io passo sopra con il quadrato blu su quello giallo e nn succede niente...

Stetolo
L'ho riprovato ancora..
Su Windows..
You too?

IsaMetallo
si certo winodws xp... funziona uguale sia via processing che via applicazione...

Stetolo
Non so darti una spiegazione onestamente.. A me ed a varie altre persone a cui l'ho fatto provare funziona correttamente..

IsaMetallo
boh strano... pace... ma il modo in cui gioco è corretto giusto? controllo il quadrato blu e passo sopra quello giallo e basta..

Stetolo
Si, fai invio all'inizio per avviare, poi scegli la difficoltà, poi controlli lo snake con le frecce..

IsaMetallo
a chi interessasse, il mio finito... basta decommentare/commentare un pezzo di codice per farlo comportare come snake 1 o 2... il codice è commentato cmq, si capisce...

Supernick
Provato, ben fatto!
Ora si potrebbe mettere una stringa con il punteggio attuale, e magari migliorare la grafica del serpente e della frutta... e magari farlo in 3D, no beh non esageriamo :D

IsaMetallo
al 3d ci sto pensando da un pò... magari quando sono più tranquillo ci smanetto...

Supernick
Si in effetti ora non è proprio il momento :D

comunque ieri ho provato a fare due cazzatine con mobile processing e sul telefono mi andavano!!
Per chi non va ricordo che bisogna installare J2ME e il Wireless Toolkit

IsaMetallo
anch'io sono molto curioso di provare mobile processing, ma sinceramente ho provato ad esportare gli esempio e nemmeno quelli andavano... non so se è il mio cellulare o ho sbagliato qualcosa... cmq credo che la compatibiltà con java ce l'abbia... boh...

Supernick
anche io ho provato con degli esempi e non dava problemi boh... e se ha compatibilità il mio dovrebbero averla tutti :D

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate