/*************************************************************************** caveHunter.c ***************************************************************************/ #include "caveHunter.h" #include #include #include // attendre un maxTime millisecondes void msleep(unsigned int maxTime) { /* struct timespec { time_t tv_sec; // secondes long tv_nsec; // nanosecondes }; */ struct timespec req; struct timespec rem; time_t secondes=0; long nanoSecondes=0; if (maxTime>=1000) { do { secondes++; maxTime-=1000; } while(maxTime>=1000); } nanoSecondes=maxTime*1000000; req.tv_sec=secondes; req.tv_nsec=nanoSecondes; nanosleep(&req,&rem); } void initPiege( char tab[LARGEUR][HAUTEUR], int nbPiege ) { int x, y, i; for ( i = 0; i < nbPiege; i++ ) { do { x = aleatoire( LARGEUR ); y = aleatoire( HAUTEUR ); } while ( tab[x][y] != 0 ); tab[x][y] = PIEGE; } } void initMonstre( char tab[LARGEUR][HAUTEUR], int nbMonstre ) { int x, y, i; for(i = 0; i < nbMonstre; i++){ do{ x = aleatoire(LARGEUR); y = aleatoire(HAUTEUR); }while(tab[x][y] != 0); tab[x][y] = MONSTRE; } } void initPotion( char tab[LARGEUR][HAUTEUR], int nbPotion ) { int x, y, i; for(i = 0; i < nbPotion; i++){ do{ x = aleatoire(LARGEUR); y = aleatoire(HAUTEUR); }while(tab[x][y] != 0); tab[x][y] = POTION; } } void initSortie(char tab[LARGEUR][HAUTEUR]) { int x, y; x = aleatoire(LARGEUR); y = aleatoire(HAUTEUR); tab[x][y] = SORTIE; } void initMonde( char tab[LARGEUR][HAUTEUR], int nbMonstre, int nbPotion, int nbPiege ) { int x, y; printf("veuillez patientez, creation du monde...\n"); for ( x = 0; x < LARGEUR; x++ ) { for ( y = 0; y < HAUTEUR; y++ ) { tab[x][y] = 0; } } // placer tresor x = aleatoire( LARGEUR ); y = aleatoire( HAUTEUR ); tab[x][y] = TRESOR; initPotion( tab, nbPotion ); initMonstre( tab, nbMonstre ); initPiege( tab, nbPiege ); initSortie(tab); } void afficheMonde( char tab[LARGEUR][HAUTEUR], int posX, int posY ) { int x, y, cadre, i; // afficher haut du cadre for(i = 0; i <= LARGEUR+1; i++){ printf("*"); } printf("\n"); //afficher les bords du cadre et l'aire de jeu for ( y = HAUTEUR - 1; y >= 0; y-- ) { // bord gauche printf( "*" ); // aire de jeu for ( x = 0; x < LARGEUR; x++ ) { // afficher un . pour representer l'aire de jeu // afficher une X si x,y sont la position du joueur if(x == posX && y == posY){ printf("X"); }else{ printf("."); } } // bord droit printf( "*" ); printf( "\n" ); } // afficher bas du cadre for(i = 0; i <= LARGEUR+1; i++){ printf("*"); } printf("\n"); // afficher les coordonnees du joueur printf( "pos(%d,%d) ", posX, posY ); } //retourne une valeur entiere E[0..maxAlea[ unsigned int aleatoire( unsigned int maxAlea ) { /* struct timeb { time_t time; unsigned short millitm; short timezone; short dstflag; };*/ struct timeb t; //long t; float a, b ; unsigned int nbmilli; ftime( &t ); nbmilli = t.time * 1000 + t.millitm; srand( nbmilli ); a = rand(); b = ( maxAlea * a ) / RAND_MAX; //printf( "in alea %i\n", nbmilli ); msleep(100); return( ( unsigned int )b ); } unsigned int getXTresor( char tab[LARGEUR][HAUTEUR] ) { int x = 0, y; int retour = -1; do { y = 0; do { if ( ( tab[x][y] ) == TRESOR ) { retour = x; } y++; } while ( y < HAUTEUR && retour == -1 ); x++; } while ( x < LARGEUR && retour == -1 ); return retour; } unsigned int getYTresor( char tab[LARGEUR][HAUTEUR] ) { int x, y=0; int retour = -1; do { x = 0; do { if ( ( tab[x][y] ) == TRESOR ) { retour = y; } x++; } while ( x < LARGEUR && retour == -1 ); y++; } while ( y < HAUTEUR && retour == -1 ); return retour; } unsigned int getXSortie( char tab[LARGEUR][HAUTEUR] ) { int x = 0, y; int retour = -1; do { y = 0; do { if ( ( tab[x][y] ) == SORTIE ) { retour = x; } y++; } while ( y < HAUTEUR && retour == -1 ); x++; } while ( x < LARGEUR && retour == -1 ); return retour; } unsigned int getYSortie( char tab[LARGEUR][HAUTEUR] ) { int x, y=0; int retour = -1; do { x = 0; do { if ( ( tab[x][y] ) == SORTIE ) { retour = y; } x++; } while ( x < LARGEUR && retour == -1 ); y++; } while ( y < HAUTEUR && retour == -1 ); return retour; } float getDistance( unsigned int xt, unsigned int yt, unsigned int xp, unsigned int yp ) { int xVecteur=xt-xp; int yVecteur=yt-yp; float module; module=sqrt((xVecteur*xVecteur+yVecteur*yVecteur)); return module; } void afficheTresor() { printf(" _______ _____ ______ _____ ____ _____ \n |__ __| __ \\| ____|/ ____|/ __ \\| __ \\ \n | | | |__) | |__ | (___ | | | | |__) |\n | | | _ /| __| \\___ \\| | | | _ / \n | | | | \\ \\| |____ ____) | |__| | | \\ \\ \n |_| |_| \\_\\______|_____/ \\____/|_| \\_\\\n"); } void afficheMonstre() { printf(" __ __ ____ _ _ _____ _______ _____ ______ \n | \\/ |/ __ \\| \\ | |/ ____|__ __| __ \\| ____|\n | \\ / | | | | \\| | (___ | | | |__) | |__ \n | |\\/| | | | | . ` |\\___ \\ | | | _ /| __| \n | | | | |__| | |\\ |____) | | | | | \\ \\| |____ \n |_| |_|\\____/|_| \\_|_____/ |_| |_| \\_\\______|\n"); } void affichePotion() { printf(" _____ _ _ _ _ \n | __ \\ | | (_) | | (_) \n | |__) |__ | |_ _ ___ _ __ __| | ___ ___ ___ _ _ __ \n | ___/ _ \\| __| |/ _ \\| '_ \\ / _` |/ _ \\ / __|/ _ \\| | '_ \\ \n | | | (_) | |_| | (_) | | | | | (_| | __/ \\__ \\ (_) | | | | |\n |_| \\___/ \\__|_|\\___/|_| |_| \\__,_|\\___| |___/\\___/|_|_| |_|\n"); } void affichePiege() { printf(" _ \n (_) \n ___ _ _ _ __ ___ _ _ _ __ _ __ _ ___ __ _ ___ \n / _ \\| | | | '_ \\/ __| | | | | '_ \\ | '_ \\| |/ _ \\/ _` |/ _ \\\n | (_) | |_| | |_) \\__ \\_ | |_| | | | | | |_) | | __/ (_| | __/\n \\___/ \\__,_| .__/|___( ) \\__,_|_| |_| | .__/|_|\\___|\\__, |\\___|\n | | |/ | | __/ | \n |_| |_| |___/ \n"); } void afficheSortie() { printf(" ________ _______ _______ \n | ____\\ \\ / /_ _|__ __|\n | |__ \\ V / | | | | \n | __| > < | | | | \n | |____ / . \\ _| |_ | | \n |______/_/ \\_\\_____| |_| \n"); } void affichePerdu() { printf(" (\\ _ /)\n ( \\ O / )\n (// \\\\)\n X\n / \\\n /___\\\n _____/ \\\\_____\n | ||\n | ||\n | ||\n | _ ___ _ ||\n | | \\ | | \\ ||\n | | | | | | ||\n | |_/ | |_/ ||\n | | \\ | | ||\n | | \\ | | ||\n | | \\. _|_. | . ||\n | ||\n * * | * ** * ** |** **\n "); }