#include "voiture.h" #include "display.h" #include "tales.h" #include "keyboard.h" #include "stdio.h" #include "clock.h" #include "timer.h" Obstacles obstacle[4]; // struture Obstacle & attributs Voiture voiture; // structure Voiture & caracteristiques void init() { voiture.corridor = 2; voiture.money = 0; voiture.essence = 20; voiture.distance = 0; voiture.life = 1; voiture.speed = 1; voiture.decalx = 25; compteur = 0; for(int i = 0; i<4; i++) { obstacle[i].coordx = -20; } } int main(void) { short menu=0; extern Image img_menu; while(1) { dclear(); dimage(0, 0, &img_menu); dreverse_area(62+16*menu,23+21*menu,108+16*menu,39+21*menu); dupdate(); key=getkey(); switch(key) { case KEY_UP : case KEY_DOWN : menu=!menu; break; case KEY_EXE : switch(menu) { case 0 : Jeu(); break; case 1 : /*garage();*/ break; } break; case KEY_EXIT : return 1; } } } int Jeu() { //unsigned short RTC_id; init(); // initialisation du Jeu timer_start(TIMER_USER, 16, Clock_Hz, new_frame, 0); //RTC_id = rtc_cb_add(RTCFreq_16Hz, new_frame, 0); while(1) { if (voiture.life <= 0) { key = KEY_EXIT; } else { key = getkey(); } switch(key) { case KEY_UP : voiture.corridor = (voiture.corridor<=1 ? 1 : voiture.corridor-1); break; case KEY_DOWN : voiture.corridor = (voiture.corridor>=4 ? 4 : voiture.corridor+1); break; case KEY_EXIT : timer_stop(TIMER_USER); return 1; } } } void new_frame() { extern Image img_formel1; extern Image img_obstacle; int i,j; dclear(); dimage(voiture.decalx-20, 11*voiture.corridor, &img_formel1); dprint(1, 1, "%d", compteur); dprint(40, 1, "l %d", voiture.life); //Jauge d'essence dline(25+voiture.essence, 58, 45, 58, Color_Black); dreverse_area(24, 57, 46, 59); //generation de chacun des obstacles for(i=0; i<4; i++) { if(obstacle[i].coordx < -10) { generate_obstacle(i); } dimage_part(obstacle[i].coordx, 11*i+11, &img_obstacle, 10*obstacle[i].num_obst, 0, 10, 10); obstacle[i].coordx -= voiture.speed; } //hit box if(obstacle[voiture.corridor-1].coordx < voiture.decalx - 2 && obstacle[voiture.corridor-1].coordx > voiture.decalx - 20) { switch(obstacle[voiture.corridor-1].num_obst) { case 1 : voiture.life--; break; case 2 : voiture.speed++; break; case 3 : voiture.speed = (voiture.speed <= 1 ? 1 : voiture.speed -1); break; case 4 : voiture.life++; break; case 5 : voiture.decalx = (compteur%150 ? 84 : 25); break; case 6 : voiture.essence = 20; break; case 7 : voiture.money++; break; case 8 : voiture.money += 2; break; } obstacle[voiture.corridor-1].num_obst = 0; } if(compteur%60 == 59 ) { voiture.essence -= 1; } if (voiture.essence <= 0) { voiture.life = 0; } if (voiture.life <= 0) { dclear(); dtext(10,10,"Vous etes mort"); dtext(1,20,"Appuyez sur touche"); dupdate(); return; } // dessin des lignes for(i = 1; i < 4 ; i++) { for(j = compteur%2; j < 128; j += 4) { dline(2*j, i*11+10, 2*j+3, i*11+10, Color_Black); } } dline(1, 10, 128, 10, Color_Black); dline(1, 54, 128, 54, Color_Black); dupdate(); compteur++; } void generate_obstacle(char ID_corridor) { unsigned char alea = rand(0, 100); unsigned char proba[9]={25,57,3,2,3,2,5,2,1}; unsigned char i, sum; sum = 0; i = 0; while(sum <= alea) { sum += proba[i]; i++; } obstacle[(int)ID_corridor].num_obst = i-1; obstacle[(int)ID_corridor].coordx = 128 + rand(0, 80); return; } unsigned int rand(int min, int max) { seed += seed%897255; seed = seed*1234589 + 135897; return seed%(max-min) + min; }