[jeu en mode texte][bcc]kjusfight

Description

Juste un espèce de galaxian à scrolling horizontal.
Utilise les fonctions gotoxy(x,y); avec printf.. pour l'affichage.
Utilise des tableaux de structures pour pouvoir tirer plusieurs missiles en même temps, pour qu'il y ai plusieurs ennemis..

Gestion des highscore par fichier externe avec cryptage rudimentaire.

Source / Exemple :


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

#define    GAUCHE      75
#define    DROITE      77
#define    HAUT        72
#define    BAS         80
#define    ENTER       13
#define    ESCAPE      27
#define    ESPACE      32

int menu();
void jeux(int niveau,int vitesse);

int main(){

     int choix;
     int niveau1=2;
     int vitesse1=10;

     choix=menu();

     do {

     switch (choix){
     case '1': 
           jeux(niveau1,vitesse1);
          choix= menu();
          break;
     case '2':
          printf("\nIl suffit de tuer les vaisseaux qui arrivent : touche espace pour tirer, flèches de directions pour se déplacer");
          printf("\ndans le jeu : taper q pour quitter\n");
          choix=menu();
          break;
     case '3':
          choix=menu();     
          break;
      case '4':
           do {
           printf("\nentrez le niveau :\n 1. facil\n2. moyen\n3. dure");
            printf("\n");
            scanf("%d",&niveau1);
           }while (niveau1!=1 && niveau1!=2 && niveau1!=3);
          choix=menu();          
           break;

      case '5':
           do {
           printf("\ndonnez la vitesse de jeu, de 1 a 20\n");
           scanf("%d",&vitesse1);
           }while (vitesse1<1 || vitesse1 >20);
           choix=menu();
           break;
     }

     }while (choix!='6');
     
     

return 0;}

int menu(){
int choix1;
     printf("\n1. Jouer\n2. instructions\n3. about\n4. niveau\n5. vitesse\n6. quitter");
choix1=getch();

return choix1;
}

void jeux(int niveau, int vitesse){ // le jeux en lui-meme

     clrscr();

FILE *highscore;
char chemin[45];
int increment,incremente;
double temps,temps1;

struct tir{
     int nouveau;
     int x;
     int y;
     int vieux;
     int mort;
     int vx;
}tir[15];

struct vaisseau{

     int x;
     int y;
     int vieuxx;
     int vieuxy;
      int tir;
      int nouveau,vieux,mort;
}v;

struct ennemi{
int x;
int y;

int nouveau,vieux,mort;

}e[10];

struct joueur{
int score;
char nom[30];
char nomc[30];
char scorec[10];
int scorecrypt;
char scoreccrypt[10];
char fichier[50];
int pirate;
}j;

int temps2;

// initialisations :

v.x=2;
v.y=10;
v.vieuxx=2;
v.vieuxy=10;
j.score=0;

for (increment=0;increment<10;increment++){
tir[increment].nouveau=0;
tir[increment].vieux=0;
tir[increment].mort=0;

e[increment].nouveau=0;

}

// au départ : 1 bébette :
// pour que le prog crée une bette une ennemi il suffit de faire e[i].nouveau=1
e[0].nouveau=1;

gotoxy(v.vieuxx,v.vieuxy);
printf("0");

char key;

srand(time(NULL));

while (key!='q'){  // la boucle du jeu

     for (temps=0;temps<1000*vitesse;temps++){  // pour ralentir, on ajuste la vitesse
     
          while (kbhit()){  // clavier

          key=getch(); // on lit la valeur
     
v.vieuxx=v.x;
v.vieuxy=v.y;

// maintenant les actions suivant les touches :
          
          switch (key){
          
          case GAUCHE:
               if (v.x>1){
               
                    v.x--;

               }
          break;
          
          case DROITE:
               if (v.x<7){
               
                    v.x++;

               }
               break;
          
          case HAUT:
               if (v.y>1){v.y--;}
               break;

          case BAS:
               if (v.y<25){v.y++;}
               break;
          
          case ESPACE:  // on tire
                
     
                 for (increment=0;tir[increment].nouveau==1 && increment<10;increment++){}

                         tir[increment].nouveau=1;

                 break;

          } //switch     
     
     
          if (v.vieuxy>0 && v.vieuxy<26){
          gotoxy(v.vieuxx,v.vieuxy);
          printf(" ");
          } // on efface le dernier 0

          gotoxy(v.x,v.y);
          printf("0"); // on affiche le 0

     } // while kbhit

      } // for pour ralentir

      for (increment=0;increment<10;increment++){
           if (e[increment].nouveau==1){ // s'il faut créer un nouvel ennemi
      
e[increment].y=rand()%24+1;
e[increment].x=70;
e[increment].nouveau=0;
e[increment].vieux=1;      
           }
      }

// on affiche l'ennemi :
      for (increment=0;increment<10;increment++){
           if (e[increment].vieux==1){
      gotoxy(e[increment].x,e[increment].y);
      printf("$");
      gotoxy(e[increment].x+1,e[increment].y);
      printf(" ");
      e[increment].x--; // on le fait avancer
      
     
           }
      }

       if ((e[0].x<2 && e[0].vieux==1 )|| (e[1].x<2 && e[1].vieux==1 )||(e[2].x<2 && e[2].vieux==1 )||(e[3].x<2 && e[3].vieux==1 )||(e[4].x<2 && e[4].vieux==1 )||( e[5].x<2 && e[5].vieux==1 )||(e[6].x<2 && e[6].vieux==1 )|| ( e[7].x<2 && e[7].vieux==1 )||(e[8].x<2 && e[9].vieux==1 )||( e[9].x<2 && e[9].vieux==1 )){
break; // perdu : on sort
       }

      for (temps2=0;temps2<2;temps2++) { // pour qUE LE TIR SE Deplace deux fois plus vite que le vaisseau
///////////////////////////////////////////////// affichage des tirs

for (increment=0;increment<10;increment++){ // on traite chaque tir

      if (tir[increment].nouveau==1 && tir[increment].vieux!=1){
      
           tir[increment].vieux=1;
      
     tir[increment].x=v.x+1;
     tir[increment].y=v.y;
     tir[increment].vx=v.x;
     for (incremente=0;incremente<10;incremente++){
                 if ((tir[increment].x==e[incremente].x && tir[increment].y==e[incremente].y) || (tir[increment].x-1==e[incremente].x && tir[increment].y==e[incremente].y)){  // si on touche un ennemi
                 
                      gotoxy(tir[increment].x,tir[increment].y);
                      printf("x");
                      gotoxy(tir[increment].x,tir[increment].y);
                      printf("#");                 
                      gotoxy(tir[increment].x,tir[increment].y);
                      printf("x");
                         
                   j.score++;
                    e[incremente].nouveau=1;
                    e[incremente].vieux=0;
                    tir[increment].mort=1;

     
                 }
     } //for
      }
      
      if (tir[increment].nouveau==1 && tir[increment].vieux==1 && tir[increment].mort!=1){
//  gotoxy(15,1); //tests
// printf("x:%d y:%d",tir1.x,tir1.y);
          
                 gotoxy(tir[increment].x,tir[increment].y);
                 printf("=");  // tire
                 if (tir[increment].x>tir[increment].vx+4){
                 gotoxy (tir[increment].x-4,tir[increment].y);
                 printf(" "); // efface la trainée
                 } //if
                 if (tir[increment].x==74){
                    tir[increment].mort=1;
                 
                 }
                 
     for (incremente=0;incremente<10;incremente++){

                 if ((tir[increment].x==e[incremente].x && tir[increment].y==e[incremente].y) || (tir[increment].x-1==e[incremente].x && tir[increment].y==e[incremente].y)){  // si on touche un ennemi
                 
                      gotoxy(tir[increment].x,tir[increment].y);
                      printf("x");
                      gotoxy(tir[increment].x,tir[increment].y);
                      printf("#");                 
                      gotoxy(tir[increment].x,tir[increment].y);
                      printf("x");
                         
                   j.score++;
                    e[incremente].nouveau=1;
                    e[incremente].vieux=0;
                    tir[increment].mort=1;

     
      } }
tir[increment].x++; //on le fait avancer
            
      }
      if (tir[increment].mort==1){
      
      gotoxy(tir[increment].x-5,tir[increment].y);
                 printf("       ");
                 tir[increment].nouveau=0;  // on le rend a nouveau disponible
                 tir[increment].vieux=0;
                 tir[increment].mort=0;
      
      }
      }// for temps 2

      } //for chaque tir

//aff test :
//      gotoxy (60,1);
//      printf("x: %d y: %d",e.x,e.y);

      // aff score
      gotoxy(60,25);
      printf("score= %d points",j.score);

// gestion des ennemis en fonction du score...et du niveau

       if (j.score==0 && niveau==3 && e[1].vieux!=1){ // si niveau dure, on met deux ennemis direct...
       
       e[1].nouveau=1;
       
       }

       switch (niveau) {
       
       case 1:
          
            if (j.score==30 && e[1].vieux!=1) {e[1].nouveau=1;}
            if (j.score==60 && e[2].vieux!=1){e[2].nouveau=1;}
            if (j.score==100 && e[3].vieux!=1){e[3].nouveau=1;}
            if (j.score==150 && e[4].vieux!=1){e[4].nouveau=1; }
            break;
       
       case 2:
          
            if (j.score==10 && e[1].vieux!=1) {e[1].nouveau=1;}
            if (j.score==30 && e[2].vieux!=1){e[2].nouveau=1;}
            if (j.score==50 && e[3].vieux!=1){e[3].nouveau=1;}
            if (j.score==80 && e[4].vieux!=1){e[4].nouveau=1; }
            break;
       
       case 3:
          
            if (j.score==15 && e[2].vieux!=1){e[2].nouveau=1;}
            if (j.score==30 && e[3].vieux!=1){e[3].nouveau=1;}
            if (j.score==50 && e[4].vieux!=1){e[4].nouveau=1; }
            if (j.score==80 && e[5].vieux!=1){e[5].nouveau=1; }
            break;
       
       
       }

}// boucle du jeu

// gestion des highscores :

gotoxy(10,10);
printf("votre score est de %d points",j.score);
gotoxy(8,12);
printf("veuillez entrer le chemin pour acceder au fichier highscore (ex : c:\\high.txt)");
gotoxy(10,15);
scanf("%s",chemin);

highscore=fopen(chemin,"r");

if (!highscore){

     clrscr();
     gotoxy(5,5);
     printf("entrez votre nom\n\n");
scanf("%s",j.nom);

     highscore=fopen(chemin,"w");
     for (increment=0;j.nom[increment]!='\0';increment++){
     
     fputc(j.nom[increment],highscore);
     }
fputc('.',highscore);

for (increment=0;j.nom[increment]!='\0';increment++){ // cryptage

     fputc(((2*j.nom[increment]+7)%100+100)%255,highscore);

}
fputc('.',highscore);

for (increment=0;increment<=9;increment++){
j.scorec[increment]='n';
j.scoreccrypt[increment]='n';
}
itoa(j.score,j.scorec,10);

for (increment=0;increment<=9;increment++){
     if (j.scorec[increment]!='n' && j.scorec[increment]!=' '){
     fputc(j.scorec[increment],highscore);
     }
}

fputc('.',highscore);

j.scorecrypt=((44*(j.score+4)%150+1)%99);

itoa(j.scorecrypt,j.scoreccrypt,10);

for (increment=0;increment<=9;increment++){
     if (j.scoreccrypt[increment]!='n' && j.scoreccrypt[increment]!=' '){
     fputc(j.scoreccrypt[increment],highscore);
     }
}

fputc('.',highscore);

fclose(highscore);
} // if pas de fichier highscore

else{

     for (increment=0;!feof(highscore);increment++){
     
     j.fichier[increment]=fgetc(highscore);
     
     }

j.fichier[increment+1]='\0';
int temporaire;
temporaire=j.score;
increment=0;     
//////////////////////////////////////////Décomposition de la ligne en petits tableaux correspondants a chaque element
while (j.fichier[increment]!='.'){

     j.nom[increment]=j.fichier[increment];

increment++;
}
j.nom[increment]='\0'; 

increment++;
int temp;
temp=0;

while (j.fichier[increment]!='.'){

     j.nomc[temp]=j.fichier[increment];

temp++;
increment++;
}

j.nomc[temp]='\0'; 

increment++;
temp=0;

while (j.fichier[increment]!='.'){
     

     j.scorec[temp]=j.fichier[increment];

     temp++;
     increment++;

}
j.scorec[temp-1]='\0'; 

temp=0;
increment++;

while (j.fichier[increment]!='.'){

     j.scoreccrypt[temp]=j.fichier[increment];
 // printf("%c",j.scoreccrypt[temp]);

temp++;
increment++;
}
// printf("%d",temp);
j.scoreccrypt[temp-1]='\0'; 

// on compare maintenant l'intégritée du fichier :

j.pirate=0;

for (increment=0;j.nomc[increment]!='\0';increment++){

     if (j.nomc[increment]!=((2*j.nom[increment]+7)%100+100)%255){
//     j.pirate++;       ////////////////////////////////////////////////  pb : marche jamais
     } 
}
 
//for (increment=0;j.scoreccrypt[increment]!='\0';increment++){
//printf("%c",j.scoreccrypt[increment]);

//} 
//for (temp=0;temp<1000000000;temp++){}

j.score=atoi(j.scorec);   // paske sinon ca prend en compte l'espace que ca ne convertit pas..
j.scorecrypt=atoi(j.scoreccrypt);

// printf("%d %d", j.score, j.scorecrypt);

     if (j.scorecrypt!=((44*(j.score+4)%150+1)%99)){
 j.pirate++;
     
}

fclose (highscore);
if (j.pirate>0){  // marche pas...
clrscr();
gotoxy(10,10);
printf("Vous avez modifie le fichier...");
} else {

     if (temporaire<=j.score){
     clrscr();
//     printf("temp : %d jscore :%d",temporaire,j.score); //test
     gotoxy(10,10);
     printf("vous n'avez pas le meilleur score  ");
     
     } else { // on inscrit le nouveau highscore ds le fichier
     
     clrscr();
     gotoxy(10,10);
     printf("Nouveau highscore : %d points\n",temporaire);
     highscore=fopen(chemin,"w");

     

     for (increment=0;j.nom[increment]!='\0';increment++){
     
     fputc(j.nom[increment],highscore);
     }
fputc('.',highscore);

for (increment=0;j.nom[increment]!='\0';increment++){ // cryptage

     fputc(((2*j.nom[increment]+7)%100+100)%255,highscore);

}
fputc('.',highscore);

for (increment=0;increment<=9;increment++){
j.scorec[increment]='n';
j.scoreccrypt[increment]='n';
}
itoa(temporaire,j.scorec,10);
for (increment=0;increment<=9;increment++){
     if (j.scorec[increment]!='n'){
     fputc(j.scorec[increment],highscore);
     }
}

fputc('.',highscore);

j.scorecrypt=((44*(temporaire+4)%150+1)%99);

itoa(j.scorecrypt,j.scoreccrypt,10);

for (increment=0;increment<=9;increment++){
     if (j.scoreccrypt[increment]!='n'){
     fputc(j.scoreccrypt[increment],highscore);
     }
}

fputc('.',highscore);

fclose(highscore);
     
     
     }

}

} // comparer le crc avec le fichier original , si score>highscore : marquer le nouveau score.

} //jeux()

Conclusion :


Donnez-moi votre avis.
De toutes facons, je me mets à allegro maintenant... :D

Codes Sources

A voir également

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.