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
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.