Snake sous dev c++ en mode texte

Soyez le premier à donner votre avis sur cette source.

Vue 6 507 fois - Téléchargée 624 fois

Description

Voici un jeu de snake réalisé sous dev c++, on peut choisir les dimensions du terrain ainsi que les niveaux

Source / Exemple :


#include <conio.c>
#include <stdio.h>
#include <time.h>

int i, j;
int ox, oy;
int x, y, avx, avy;
int lignes, colonnes;
char c;
int sens, vitesse;
int snake, avsnake, greffe=5;
int poxal, poyal, pomme=0;
int posx[201];
int posy[201];
int c_fond=62, c_bordure=49 , c_pomme=44, c_normal=15, c_snake=2;
int niveau=1;
int gagne=0;
char recommencer;

void reglages();
void tableau();
void initsnake();
void collision();
void test_clavier();
void affichage_snake();
void test_position();
void creer_pomme();
void test_pomme();
void gagner();
void perdu();
void eff_ecran();

void main(){

   if(gagne!=1) reglages();
   srand(time(NULL));
   tableau();
   creer_pomme();
   initsnake();
   do{
      collision();
      test_pomme();
      test_position();
      affichage_snake();
      test_clavier();

   }while((c!=27) && (x!=ox+(colonnes)) && (x!=ox-1) && (y!=oy+(lignes)) && (y!=oy-1));
   perdu();
}

void reglages(){
   clrscr();
   textcolor(c_normal);
   gotoxy(30,2);printf("---------");
   gotoxy(30,3);printf("| SNAKE |");
   gotoxy(30,4);printf("---------");
   gotoxy(1,9);
   do{
      printf(" lignes (entre 10 et 15) : ");
      scanf("%d",&lignes);
   }while((lignes<10) || (lignes>15));
   do{
      printf("\n colonnes (entre 10 et 60) : ");
      scanf("%d",&colonnes);
   }while((colonnes<10) || (colonnes>60));
   do{
      printf("\n niveau (entre 1 et 6) : ");
      scanf("%d",&niveau);
   }while((niveau<1) || (niveau>6));
   do{
      gotoxy(26,19);
      printf(" appuyer sur une touche");
      Sleep(650);
      gotoxy(26,19);
      printf("                       ");
      Sleep(650);
   }while(kbhit()==0);
   clrscr();
}

void tableau(){
    ox=39-(colonnes/2);
    oy=14-(lignes/2);
    textcolor(c_normal);
    gotoxy(30,2);printf("---------");
    gotoxy(30,3);printf("| SNAKE |");
    gotoxy(30,4);printf("---------");
    textcolor(c_fond);
    for(i=0;i<=colonnes+1;i++){
      for(j=0;j<=lignes+1;j++){
         gotoxy((ox-1)+i,(oy-1)+j);
         if((ox+i==ox)||(ox+i-1==(ox+colonnes))||(oy+j==oy)||(oy+j-1==(lignes+oy))){
            textcolor(c_bordure); 
            printf("%c",178);
         }
         else printf("%c",177);
         textcolor(c_fond);
      }
   }
}

void initsnake(){
   x=35;
   y=14;
   snake=5;
   for(i=0;i<=201;i++){
      posx[i]=0;
      posy[i]=0;
   }
   for(i=snake;i>0;i--,x++){
      posx[i]=x;
      posy[i]=y;
   }
   x--;
   avx=x; avy=y;
   sens=1;
   j=0;
}

void collision(){
   for(i=2;i<=snake;i++){
      if((posx[1]==posx[i])&&(posy[1]==posy[i])) perdu();
   }
}

void creer_pomme(){
   textcolor(c_pomme);
   poxal= ( rand()% colonnes )+ ox ;
   poyal= ( rand()% lignes)+ oy  ;
   for(i=1;i<=snake;i++){
      if((poxal==posx[i])&&(poyal==posy[i])) creer_pomme();
   }
   gotoxy(poxal,poyal); printf("%c",770);
   if(gagne==1)getch();
}

void test_pomme(){
    if((posx[1]==poxal)&&(posy[1]==poyal)){
       pomme++;
       gagner();
       snake+=greffe;
       creer_pomme();
    }
}

void affichage_snake(){
   for(i=snake;i>=0;i--){
      gotoxy(posx[i],posy[i]);
      if(i==0){
         textcolor(c_fond);
         printf("%c",177);
      }else textcolor(c_snake);
         if(i==1)           printf("%c",178);
         if((i!=0)&&(i!=1)) printf("%c",219);
   }
   textcolor (c_normal);
   gotoxy(ox-1,oy+lignes+2);
   printf("niveau: %2.d",niveau);
   gotoxy(ox-1,oy+lignes+2+1);
   printf("pomme(s) :%2.d/%2.d",pomme,(((lignes*colonnes)/30)+6));
   textcolor (c_fond);
}

void test_position(){
   if((avx!=x)||(avy!=y)){
      if(snake==avsnake){
         posx[0]=posx[snake];
         posy[0]=posy[snake];
         for(i=snake;i>1;i--){
            posx[i]=posx[i-1];
            posy[i]=posy[i-1];
         }
      }
      if(snake!=avsnake){

         posx[0]=posx[avsnake];
         posy[0]=posy[avsnake];
         for(i=avsnake;i>1;i--){
            posx[i]=posx[i-1];
            posy[i]=posy[i-1];
         }
         for(i=(avsnake+1);i<=snake;i++){
            posx[i]=posx[i-1];
            posy[i]=posy[i-1];
         }
      }
      if(avx!=x) posx[1]=x;
      if(avy!=y) posy[1]=y;
   }
   avsnake=snake;
   avx=x; avy=y;
}

void test_clavier(){
   if(kbhit()==1){
      c=getch();
      switch(c){
         case 'd' : if(sens!=3){
                       x++ ;
                       sens=1;
                       }else x-- ; break;
         case 'q' : if(sens!=1){
                       x-- ;
                       sens=3;
                       }else x++ ; break;
         case 's' : if(sens!=2){
                       y++ ;
                       sens=4;
                       }else y-- ; break;
         case 'z' : if(sens!=4){
                       y-- ;
                       sens=2;
                       }else y++ ; break;
         case 'p' : getch() ; break;
      }
   }
   else{
      switch(sens){
         case 1 : x++; break;
         case 3 : x--; break;
         case 4 : y++; break;
         case 2 : y--; break;
      }
   }
   switch(niveau){
         case 1: vitesse=120  ; break ;
         case 2: vitesse=90   ; break ;
         case 3: vitesse=65   ; break ;
         case 4: vitesse=40   ; break ;
         case 5: vitesse=20   ; break ;
         case 6: vitesse=15   ; break ;
      }
   Sleep(vitesse);
}

void gagner(){
   if(pomme==(((lignes*colonnes)/30)+6)){
      pomme=0;
      eff_ecran();
      niveau++;
      if(niveau>7){
         gagne=0;
         gotoxy(30,7);
         textcolor(c_normal);
         printf(" Gagne ");
         Sleep(700);
         getch();
         main();
      }
      gagne=1;
      main();
   }
}

void perdu(){
  do{
      pomme=0;
      if(kbhit()==1) exit(1);
      i++;
      textcolor(c_normal);
      gotoxy(32,3);
      printf("PERDU");
      Sleep(700);
      gotoxy(32,3);
      printf("     ");
      Sleep(700);
   }while(kbhit()==0);
   getch();
   Sleep(60);
   textcolor(c_normal);
   gotoxy(30,2);
   printf("         ");
   gotoxy(30,4);
   printf("         ");
   gotoxy(26,3);
   printf("recommencer? (o/n)");
   do{
      recommencer=getch();
      if((recommencer=='o')||(recommencer=='O')){
         lignes=0;
         colonnes=0;
         eff_ecran();
         main();
      }
      if((recommencer=='n')||(recommencer=='N')) exit(1);
   }while((recommencer!='o')||(recommencer!='O')||(recommencer!='n')||(recommencer!='N'));
}

void eff_ecran(){
   textcolor(0);
   for(i=0;i<=70;i++){
      for(j=0;j<=23;j++){
         gotoxy(i,j);
         printf("%c",177);
      }
   }
}

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

LeFrenchie8125
Messages postés
1
Date d'inscription
jeudi 11 novembre 2004
Statut
Membre
Dernière intervention
11 novembre 2004

serait-il^possible d'obtenir egalement les sources de :
conio.c
time.h

merci d'avance
mononokehime
Messages postés
1
Date d'inscription
mercredi 3 mars 2004
Statut
Membre
Dernière intervention
7 mars 2004

chez moi le serpent ne veut pas bouger, il va tout droit et je ne peut pas le déplacer.
cbestern
Messages postés
25
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
17 novembre 2003

joli petit jeux complet et simple à la fois.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.