F1rush/src/voiture.c

208 lines
3.8 KiB
C
Raw Normal View History

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