PDA

Visualizza la versione completa : [C++] Gioco "Snake"


frizzo28
14-10-2006, 09:54
Ciao a Tutti sto realizzando il gioco snake in c... come compilatore uso turbo c++3.0. Per ora ho iniziato solo facendo un abbozzo senza ne punti ne che si muove da solo... praticamente ho fatto degli asterischi che si possono muovere con le freccette della tastiera il problema che se ad esempio sono 3 e sono tutti in fila e la direzione è verso destra e io premo freccia giu si sposta quello a sinistra...
cioè situazione iniziale
*** direzione verso destra premo freccia giu e

**
*
invecie dovrebbe essere
**
' *
grazie a tutti
ciao

ecco il codice:


//Gioco snake (per ora una parte :D)
//Davide Granata
#include<conio.h>
#include<iostream.h>
#include<dos.h>
#include<stdio.h>
#include<time.h>
#include<stdlib.h>

void main()
{
clrscr();
randomize();
int x=2,y=2,vx[99],vy[99],lun=2,i,bx,by;
char c=' ',dir;
for(i=0;i<lun;i++,x++){vx[i]=x;vy[i]=y;}

for(i=0;i<lun;i++){
gotoxy(vx[i],vy[i]);
cout<<"*";}

while(c!=13){
x=vx[lun-1];
y=vy[lun-1];
chiedi:
c=getch();
if(c==75&&dir!='r'){x--;dir='l';}
else if(c==77&&dir!='l'){x++;dir='r';}
else if(c==72&&dir!='d'){y--;dir='u';}
else if(c==80&&dir!='u'){y++;dir='d';}
else if(c==13)goto fine;
else goto chiedi;


bx=vx[0];
by=vy[0];



for(i=0;i<lun-1;i++){
vx[i]=vx[i+1];
vy[i]=vy[i+1];
}

vx[lun-1]=x;
vy[lun-1]=y;







gotoxy(vx[lun-1],vy[lun-1]);
cout<<"*";


gotoxy(bx,by);
cout<<" ";

}

getch();
fine:
}

ps nel disegno ignorate l'apice ho dovuto metterlo x forza senno non riuscivo a spaziare tutto correttamente

frizzo28
14-10-2006, 12:50
Questa è la versione di snake quasi finito rimane sempre il problema descritto nel post precedente


//Davide Granata
#include<conio.h>
#include<iostream.h>
#include<dos.h>
#include<stdio.h>
#include<time.h>
#include<stdlib.h>

void main()
{
textbackground(LIGHTGRAY);
clrscr();
randomize();
int x=2,y=2,vx[99],vy[99],lun=1,i,bx,by,inizio=0,cibox,ciboy,genera=1,ok=0, p=0,punti=0;
char c=' ',dir='r';

gotoxy(1,22);
for(i=0;i<80;i++)cout<<"-";
for(i=0;i<lun;i++,x++){vx[i]=x;vy[i]=y;}

for(i=0;i<lun;i++){
gotoxy(vx[i],vy[i]);
textcolor(6);
//textbackground(5);
cprintf("*");}


while(c!=13&&p==0){

//Se serve genero il cibo
if(genera==1){
do{
ok=1;
cibox=random(79)+1;
ciboy=random(21)+1;
for(i=0;i<lun-1;i++){
if(vx[i]==cibox&&vy[i]==ciboy)ok=0;
}
}while(ok!=1);
//Ora lo disegno
gotoxy(cibox,ciboy);
textcolor(LIGHTBLUE);
cprintf("0");
genera=0;
}


x=vx[lun-1];
y=vy[lun-1];
if(kbhit()){

c=getch();
if(c==75&&dir!='r'){x--;dir='l';}
else if(c==77&&dir!='l'){x++;dir='r';}
else if(c==72&&dir!='d'){y--;dir='u';}
else if(c==80&&dir!='u'){y++;dir='d';}
else if(c==13)goto fine;
else goto chiedi;
inizio=1;
}
else{if(dir=='r')x++;
if(dir=='l')x--;
if(dir=='u')y--;
if(dir=='d')y++;
}
if(inizio!=0){
bx=vx[0];
by=vy[0];



for(i=0;i<lun-1;i++){
vx[i]=vx[i+1];
vy[i]=vy[i+1];
}



vx[lun-1]=x;
vy[lun-1]=y;


gotoxy(bx,by);
cout<<" ";

gotoxy(vx[lun-1],vy[lun-1]);
textcolor(6);
cprintf("*");

//textcolor(3);
//textbackground(5);
//cprintf(" ");

chiedi:
}
//Controllo se becco il cibo
if(vx[lun-1]==cibox&&vy[lun-1]==ciboy){genera=1;punti=punti+2;lun++;
//Sposto tutti di un posto
for(i=lun-1;i>0;i--){vx[i]=vx[i-1];vy[i]=vy[i-1];}
vx[0]=vx[1]-1;
vy[0]=vy[1]-1;


};

//Controllo se il serpente tocca un muro
if(x<1||x>79||y<1||y>21)p=1;

//Ora controllo si mangia se stesso
for(i=0;i<lun-2;i++)
{
if(vx[lun-1]==vx[i]&&vy[lun-1]==vy[i])p=1;

}
//Stampo punti
textcolor(0);
gotoxy(1,24);
cprintf(" ");
gotoxy(1,24);
cprintf("Hai fatto ,%d punti",punti);
delay(200);

}
gotoxy(40,11);cout<<"Hai perso . Premi un tasto per uscire";
getch();

fine:
}

menphisx
14-10-2006, 16:04
Guarda che cout è C++ non C :madai!?:

frizzo28
14-10-2006, 19:27
però a me il programma funzia mi da il probl sopra desritto..... :)

Samuele_70
14-10-2006, 20:37
Originariamente inviato da frizzo28
però a me il programma funzia mi da il probl sopra desritto..... :)
No guarda stai facendo un pò di confusione, se usi la gotoxy(), textcolor(), textbackground(),
devi per forza utilizzare la cprintf() o la cputs(), altrimenti le suddette sono perfettamente inutili.
Quindi anche la cout non c'entra proprio nulla.
Un consiglio personale, per carità togli quei goto ! :nonlodire

menphisx
14-10-2006, 21:05
Guarda che se funziona è solo grazie all'IDE che usi, non vuol dire che sia corretto :rollo:
printf -> C
cout -> C++
oltretutto non c'era neanche l'inclusione di std :nonlodire

frizzo28
14-10-2006, 21:18
ok grazie a tutti ora sostituisco tutti i cout con cprintf... :)
per il problema esposto nel primo post non avreste una soluzione ? :fagiano:
P. S. Sono newbie del c... è da gennaio che lo studiamo a scuola....

Xaratroom
31-10-2006, 19:29
oltretutto non c'era neanche l'inclusione di std
Con iostream.h non dovrebbero esserci problemi

Loading