
Drdidji
|
en fait le probleme qui se pose c'est que je veux que l'utilisateur puissse rentrer son nom et pour ça j'ai fait un truk vite fais regardes le code ci_dessou mais je dois l'integrer a une partie qui est initialiser avec un GL_DOUBLE eyt dans ce cas quand l'utulisateur saisis son nom on voit pas les caracteres s'afficher stp esseyes de m'aimer ou de me passer une autre fonction pour la saisie stp merci d'avance c'est urgent
#include <glut.h> #include<stdlib.h> #include<stdio.h> #include<math.h> #include<glaux.h> // Header File For The GLaux Library #include<gl.h> // Header File For The OpenGL32 Library
#define WIDTH 640 #define HEIGHT 480 #define CTOI(C) (*(int*)&C) int X=130,Y=WIDTH/1.5; //coordonnées de l'affichage char nom[15]; //un pointeur vers un tableau qui contien le nom int n=0; //l'emblacement ans le tableau du nom int score=1; //temporaire juste pour tester ajouterscore en attendant de recuperer le score du min du jeu char nom1[10]="joane";
typedef struct InfoScore{ //structure qui contient le nom et le score d'un joueur char nom[40]; int score; }Score;
char chaine[50],chaine1[50]; //tableau qui sauvrede l'ecriture void DisplayEntrerScore(); void ReshapeEntrerScore(int,int);
void debut2d(unsigned int largeur,unsigned int hauteur); void fin2d(); int AfficherTexte(float x,float y,char* s);
void keyboardEntrerScore(unsigned char key, int x, int y); unsigned int ChargerBMP(char *nom); void InitialiserScore();
AjouterScore(int score,char* nom); ////////////////////////////////////////////////////////////////////////////
int main( int argc, char *argv[ ]) { glutInit(&argc,argv); //glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE); //glutInitDisplayMode( GLUT_SINGLE); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(WIDTH,HEIGHT); glutInitWindowPosition(50,50); glutCreateWindow("Fenetre OpenGL"); // init (); glutDisplayFunc(DisplayEntrerScore); glutReshapeFunc(ReshapeEntrerScore); glutKeyboardFunc(keyboardEntrerScore); //spécifie la fonction à appeler lorsqu'une touche est pressée glutMainLoop(); // lance le gestionnaire glut return 0; } /* int init(void) {
image[1]= ChargerBMP("rubix.bmp"); glEnable(GL_TEXTURE_2D); // Enable Texture Mapping ( NEW ) glClearColor(0.3f, 0.5f, 1.0f, 0.6f); // Couleur du fond de la scene glClearDepth(1.0f); // Nettoie le Depth Buffer glDepthFunc(GL_LEQUAL); // Selectionne le Type du Depth Test glShadeModel(GL_SMOOTH); // active le "Smooth Color Shading" glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Rend la perspective vraiment tres belle
glEnable(GL_DEPTH_TEST); // active le test de profondeur
return 1; }
*/ /* la fonction qui ecrit les noms dans le fichier score.txt .le probleme c'est qu'il faut pas ecraser ce qui existe deja .rajouter aussi le score qui va etre recuperer a la fin d'une partie */ /* void SauvgarderFichier(){
FILE* fichier;
fichier=fopen("score.txt","a+"); if(!fichier) printf("erreur lors de louverture du fichier\n");
fprintf(fichier,"\n"); fprintf(fichier,"%s",nom);
fclose(fichier); }
*/ void debut2d(unsigned int largeur,unsigned int hauteur) { glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glOrtho(0,largeur,hauteur,0,1,-1); }
void fin2d() { glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); }
int AfficherTexte(float x,float y,char* s) { int i,b; glColor3f(1,1,1); if(s==NULL) return 0;
i=strlen(s); glRasterPos2d(x, y); for(b=0; b<i; b++) glutBitmapCharacter(GLUT_BITMAP_8_BY_13, (s[b])); return 1; }
unsigned int ChargerBMP(char *nom) { unsigned char *Data; FILE *f = NULL; unsigned char header[0x36]; GLuint DataPos,DataSize; unsigned int Name, h,w; unsigned char t; unsigned int x;
Name = 0;
f = fopen(nom,"rb"); if(!f) { //cout << "Impossible d'ouvrir " << nom << endl; return 0; }
// lit le header du fichier if( fread(header,1,0x36,f) != 0x36 ) { // cout << "Impossible de lire " << nom << endl; fclose(f); return 0; }
if(header[0]!='B' || header[1]!='M') { // cout << nom << " n'est pas un BMP valide." << endl;; fclose(f); return 0; }
if (CTOI(header[0x1E])!=0 || CTOI(header[0x1C])!=24) { printf("probleme !\n"); fclose(f); return 0; }
//Récupère les infos du fichier DataPos = CTOI(header[0x0A]); DataSize = CTOI(header[0x22]); //Récupère les infos de l'image w = CTOI(header[0x12]); h = CTOI(header[0x16]);
//!!!! if(DataSize==0) DataSize=w*h*3; if(DataPos==0) DataPos=0x36;
//Charge l'image fseek(f,DataPos,0);
Data = (unsigned char *)malloc(DataSize * sizeof(unsigned char)); if(!Data) { fclose(f); return 0; } if(fread(Data,1,DataSize,f)!=DataSize) { free(Data); fclose(f); return 0; } fclose(f);
//Inverse R et B for(x=0;x<w*h;x++) { t=Data[x*3]; Data[x*3]=Data[x*3+2]; Data[x*3+2]=t; }
glPixelStorei(GL_UNPACK_ALIGNMENT,1); glGenTextures(1, &Name); glBindTexture(GL_TEXTURE_2D, Name); gluBuild2DMipmaps( GL_TEXTURE_2D, 3, w, h, GL_RGB, GL_UNSIGNED_BYTE, Data ); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);
free(Data);
return Name; }
void DisplayEntrerScore() { //glutDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); static float a=0; char chaine[50];
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); // nettoi les buffers d'affichages glLoadIdentity(); // crée une matrice vierge
debut2d(HEIGHT,WIDTH); sprintf(chaine,"ENTRER VOTRE NOM :"); AfficherTexte(10,WIDTH/1.5,chaine); sprintf(chaine,"VOTRE SCORE EST DE :"); AfficherTexte(10,WIDTH/1.5+20,chaine); sprintf(chaine,"A BIENTOT "); AfficherTexte(200,WIDTH/1.5+100,chaine);
fin2d(); glFlush();
glutSwapBuffers (); //glFlush();
}
void ReshapeEntrerScore(int w,int h) { float L; // Longueur entre les 2 plans de coupe verticaux float H; // Hauteur entre les 2 plans de coupe horizontaux if (w<=h) { H=(GLfloat) (10*h/w); L=10.0; } else { H=10.0; L=(GLfloat) (10*w/h); } gluOrtho2D(-L/2,L/2,-H/2,H/2); // définition de la projection }
void keyboardEntrerScore (unsigned char key, int x, int y) { //int n=0; //char nom[11]; //char chaine[50]; glClearColor(1,1,1,1); switch (key) { case 'a': case 'A': debut2d(HEIGHT,WIDTH); AfficherTexte(X,Y,"A"); fin2d(); X=X+7; glFlush(); nom[n]='A'; n=n+1;
//glFlush(); // affichage de la scène break; case 'b': case 'B': debut2d(HEIGHT,WIDTH); AfficherTexte(X,Y,"B"); fin2d(); X=X+7;
glFlush(); // affichage de la scène /* nom=(char *)realloc(nom,sizeof(char)); if ( chaine==NULL ) { printf("Erreur d'allocation mémoire !!!"); exit(2); } scanf( "%c", nom+strlen(nom));
*/ nom[n]='B'; n=n+1; break; case 'c': case 'C': debut2d(HEIGHT,WIDTH); //printf("le score est "); AfficherTexte(X,Y,"C"); X=X+7; fin2d(); glFlush(); // affichage de la scène /* nom=(char *)realloc(nom,sizeof(char)); if ( chaine==NULL ) { printf("Erreur d'allocation mémoire !!!"); exit(2); } scanf( "%c", nom+strlen(nom)); */ nom[n]='C'; n=n+1; break; case 'd': case 'D': debut2d(HEIGHT,WIDTH); //printf("le score est "); AfficherTexte(X,Y,"D"); X=X+7; fin2d(); glFlush(); // affichage de la scène /* nom=(char *)realloc(nom,sizeof(char)); if ( chaine==NULL ) { printf("Erreur d'allocation mémoire !!!"); exit(2); } scanf( "%c", nom+strlen(nom)); */ nom[n]='D'; n=n+1; break;
case 'e': case 'E': debut2d(HEIGHT,WIDTH); //printf("le score est "); AfficherTexte(X,Y,"E"); X=X+7; fin2d(); glFlush(); // affichage de la scène /* nom=(char *)realloc(nom,sizeof(char)); if ( chaine==NULL ) { printf("Erreur d'allocation mémoire !!!"); exit(2); } scanf( "%c", nom+strlen(nom)); */ nom[n]='E'; n=n+1; break; case 'f': case 'F': debut2d(HEIGHT,WIDTH); //printf("le score est "); AfficherTexte(X,Y,"F"); X=X+7; fin2d(); glFlush(); // affichage de la scène /* nom=(char *)realloc(nom,sizeof(char)); if ( chaine==NULL ) { printf("Erreur d'allocation mémoire !!!"); exit(2); } scanf( "%c", nom+strlen(nom)); */ nom[n]='F'; n=n+1; break; case 'g': case 'G': debut2d(HEIGHT,WIDTH); //printf("le score est "); AfficherTexte(X,Y,"G"); X=X+7; fin2d(); glFlush(); // affichage de la scène /* nom=(char *)realloc(nom,sizeof(char)); if ( chaine==NULL ) { printf("Erreur d'allocation mémoire !!!"); exit(2); } scanf( "%c", nom+strlen(nom)); */ nom[n]='G'; n=n+1; break; case 'h': case 'H': debut2d(HEIGHT,WIDTH); //printf("le score est "); AfficherTexte(X,Y,"H"); X=X+7; fin2d(); glFlush(); // affichage de la scène /* nom=(char *)realloc(nom,sizeof(char)); if ( chaine==NULL ) { printf("Erreur d'allocation mémoire !!!"); exit(2); } scanf( "%c", nom+strlen(nom)); */ nom[n]='H'; n=n+1; break; case 'i': case 'I': debut2d(HEIGHT,WIDTH); //printf("le score est "); AfficherTexte(X,Y,"I"); X=X+7; fin2d(); glFlush(); // affichage de la scène /* nom=(char *)realloc(nom,sizeof(char)); if ( chaine==NULL ) { printf("Erreur d'allocation mémoire !!!"); exit(2); } scanf( "%c", nom+strlen(nom)); */ nom[n]='I'; n=n+1; break; case 'j': case 'J': debut2d(HEIGHT,WIDTH); //printf("le score est "); AfficherTexte(X,Y,"J"); X=X+7; fin2d(); glFlush(); // affichage de la scène /* nom=(char *)realloc(nom,sizeof(char)); if ( chaine==NULL ) { printf("Erreur d'allocation mémoire !!!"); exit(2); } scanf( "%c", nom+strlen(nom)); */ nom[n]='J'; n=n+1; break; case 'k': case 'K': debut2d(HEIGHT,WIDTH); //printf("le score est "); AfficherTexte(X,Y,"K"); X=X+7; fin2d(); glFlush(); // affichage de la scène /* nom=(char *)realloc(nom,sizeof(char)); if ( chaine==NULL ) { printf("Erreur d'allocation mémoire !!!"); exit(2); } scanf( "%c", nom+strlen(nom)); */ nom[n]='K'; n=n+1; break; case 'l': case 'L': debut2d(HEIGHT,WIDTH); //printf("le score est "); AfficherTexte(X,Y,"L"); X=X+7; fin2d(); glFlush(); // affichage de la scène /* nom=(char *)realloc(nom,sizeof(char)); if ( chaine==NULL ) { printf("Erreur d'allocation mémoire !!!"); exit(2); } scanf( "%c", nom+strlen(nom)); */ nom[n]='L'; n=n+1; break; case 'm': case 'M': debut2d(HEIGHT,WIDTH); //printf("le score est "); AfficherTexte(X,Y,"M"); X=X+7; fin2d();
glFlush(); // affichage de la scène /* nom=(char *)realloc(nom,sizeof(char)); if ( chaine==NULL ) { printf("Erreur d'allocation mémoire !!!"); exit(2); } scanf( "%c", nom+strlen(nom)); */ nom[n]='M'; n=n+1; break; case 'n': case 'N': debut2d(HEIGHT,WIDTH); //printf("le score est "); AfficherTexte(X,Y,"N"); X=X+7; fin2d(); glFlush(); // affichage de la scène /* nom=(char *)realloc(nom,sizeof(char)); if ( chaine==NULL ) { printf("Erreur d'allocation mémoire !!!"); exit(2); } scanf( "%c", nom+strlen(nom)); */ nom[n]='N'; n=n+1; break; case 'o': case 'O': debut2d(HEIGHT,WIDTH); //printf("le score est "); AfficherTexte(X,Y,"O"); X=X+7; fin2d(); glFlush(); // affichage de la scène /* nom=(char *)realloc(nom,sizeof(char)); if ( chaine==NULL ) { printf("Erreur d'allocation mémoire !!!"); exit(2); } scanf( "%c", nom+strlen(nom)); */ nom[n]='O'; n=n+1; break; case 'p': case 'P': debut2d(HEIGHT,WIDTH); //printf("le score est "); AfficherTexte(X,Y,"P"); X=X+7; fin2d(); glFlush(); // affichage de la scène break; case 'q': case 'Q': debut2d(HEIGHT,WIDTH); //printf("le score est "); AfficherTexte(X,Y,"Q"); X=X+7; fin2d(); glFlush(); // affichage de la scène /* nom=(char *)realloc(nom,sizeof(char)); if ( chaine==NULL ) { printf("Erreur d'allocation mémoire !!!"); exit(2); } scanf( "%c", nom+strlen(nom)); */ nom[n]='Q'; n=n+1; break; case 'r': case 'R': debut2d(HEIGHT,WIDTH); //printf("le score est "); AfficherTexte(X,Y,"R"); X=X+7; fin2d(); glFlush(); // affichage de la scène /* nom=(char *)realloc(nom,sizeof(char)); if ( chaine==NULL ) { printf("Erreur d'allocation mémoire !!!"); exit(2); } scanf( "%c", nom+strlen(nom)); */ nom[n]='R'; n=n+1; break; case 's': case 'S': debut2d(HEIGHT,WIDTH); //printf("le score est "); AfficherTexte(X,Y,"S"); X=X+7; fin2d(); glFlush(); // affichage de la scène /* nom=(char *)realloc(nom,sizeof(char)); if ( chaine==NULL ) { printf("Erreur d'allocation mémoire !!!"); exit(2); } scanf( "%c", nom+strlen(nom)); */ nom[n]='S'; n=n+1; break; case 't': case 'T': debut2d(HEIGHT,WIDTH); //printf("le score est "); AfficherTexte(X,Y,"T"); X=X+7; fin2d(); glFlush(); // affichage de la scène /* nom=(char *)realloc(nom,sizeof(char)); if ( chaine==NULL ) { printf("Erreur d'allocation mémoire !!!"); exit(2); } scanf( "%c", nom+strlen(nom)); */ nom[n]='T'; n=n+1; break; case 'u': case 'U': debut2d(HEIGHT,WIDTH); //printf("le score est "); AfficherTexte(X,Y,"U"); X=X+7; fin2d(); glFlush(); // affichage de la scène /* nom=(char *)realloc(nom,sizeof(char)); if ( chaine==NULL ) { printf("Erreur d'allocation mémoire !!!"); exit(2); } scanf( "%c", nom+strlen(nom)); */ nom[n]='U'; n=n+1; break; case 'v': case 'V': debut2d(HEIGHT,WIDTH); //printf("le score est "); AfficherTexte(X,Y,"V"); X=X+7; fin2d(); glFlush(); // affichage de la scène /* nom=(char *)realloc(nom,sizeof(char)); if ( chaine==NULL ) { printf("Erreur d'allocation mémoire !!!"); exit(2); } scanf( "%c", nom+strlen(nom)); */ nom[n]='V'; n=n+1; break; case 'w': case 'W': debut2d(HEIGHT,WIDTH); //printf("le score est "); AfficherTexte(X,Y,"W"); X=X+7; fin2d(); glFlush(); // affichage de la scène /* nom=(char *)realloc(nom,sizeof(char)); if ( chaine==NULL ) { printf("Erreur d'allocation mémoire !!!"); exit(2); } scanf( "%c", nom+strlen(nom)); */ nom[n]='W'; n=n+1; break; case 'x': case 'X': debut2d(HEIGHT,WIDTH); //printf("le score est "); AfficherTexte(X,Y,"X"); X=X+7; fin2d(); glFlush(); // affichage de la scène /* nom=(char *)realloc(nom,sizeof(char)); if ( chaine==NULL ) { printf("Erreur d'allocation mémoire !!!"); exit(2); } scanf( "%c", nom+strlen(nom)); */ nom[n]='X'; n=n+1; break; case 'y': case 'Y': debut2d(HEIGHT,WIDTH);
AfficherTexte(X,Y,"Y"); X=X+7; fin2d(); glFlush(); // affichage de la scène /* nom=(char *)realloc(nom,sizeof(char)); if ( chaine==NULL ) { printf("Erreur d'allocation mémoire !!!"); exit(2); } scanf( "%c", nom+strlen(nom)); */ nom[n]='Y'; n=n+1; break; case 'z': case 'Z': debut2d(HEIGHT,WIDTH); //printf("le score est "); AfficherTexte(X,Y,"Z"); X=X+7; fin2d(); glFlush(); // affichage de la scène /* nom=(char *)realloc(nom,sizeof(char)); if ( chaine==NULL ) { printf("Erreur d'allocation mémoire !!!"); exit(2); } scanf( "%c", nom+strlen(nom)); */ nom[n]='Z'; n=n+1; break; case 27:
exit(0); break;
default: AjouterScore(score,nom); break; } }
/*fonction qui initialise le fichier dans le cas ou il est vide */
void InitialiserScore(){ int i; FILE *f; Score tab_structure[10]; f=fopen("score.txt","r");
if(f==NULL){ ; f=fopen("score.txt","w");
for(i=0;i<10;i++) { strcpy(tab_structure[i].nom,"nacer"); tab_structure[i].score=i*4;
}
for(i=0;i<10;i++) fwrite(&tab_structure[i],sizeof(Score),1,f);
fclose(f);
}
else fclose(f);
}
/*fonction qui ajoute un score et le positionne selon sa valeur*/
AjouterScore(int score,char* nom) { FILE *f; int i=0,j,k,temp; char t[15]; Score tab_structure[10]; nom[14]='\0'; InitialiserScore();
f=fopen("score.txt","r");
while(!feof(f) && i<10) {
fread(&tab_structure[i],sizeof(Score),1,f); i++; } fclose(f);
if (score<tab_structure[9].score) { tab_structure[9].score=score; strcpy(tab_structure[9].nom,nom); } for (k=0;k<9;k++) for(j=8;j>=k;j--) if(tab_structure[j+1].score<tab_structure[j].score){ //score temp=tab_structure[j+1].score; tab_structure[j+1].score=tab_structure[j].score; tab_structure[j].score=temp; //nom strcpy(t,tab_structure[j+1].nom); strcpy(tab_structure[j+1].nom,tab_structure[j].nom); strcpy(tab_structure[j].nom,t); }
f=fopen("score.txt","w");
for(i=0;i<10;i++) fwrite(&tab_structure[i],sizeof(Score),1,f);
fclose(f);
}
|