Snake sous dev c++ en mode texte

0/5 (3 avis)

Vue 6 711 fois - Téléchargée 636 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

11 nov. 2004 à 12:49
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

7 mars 2004 à 19:52
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

17 août 2003 à 12:56
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.