Rev 1535 |
Go to most recent revision |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
/*
* Project: S.Ha.R.K.
*
* Coordinators: Giorgio Buttazzo <giorgio@sssup.it>
*
* ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
*
* http://www.sssup.it
* http://retis.sssup.it
* http://hartik.sssup.it
*/
#include <kernel/func.h>
#include <stdlib.h>
#include <semaphore.h>
#include "sem/sem/sem.h"
#include "hartport/hartport/hartport.h"
#include <drivers/shark_keyb26.h>
#include <drivers/shark_fb26.h>
#include <math.h>
#define ASTRO_MOVE/* If defined then astro else defender */
#define FRAME_BUFFER_DEVICE 0
// DA CALCOLARE
#define RGB_BLACK rgb16( 0, 0, 0)
#define RGB_GRAY rgb16(127,127,127)
#define RGB_WHITE rgb16(255,255,255)
#define RGB_RED rgb16(255, 0, 0)
#define RGB_GREEN rgb16( 0,255, 0)
#define RGB_BLUE rgb16( 0, 0,255)
#define RGB_YELLOW rgb16(255,255, 0)
#define RGB_MAGENTA rgb16(255, 0,255)
#define RGB_CYAN rgb16( 0,255,255)
#define RGB_D_RED rgb16(127, 0, 0)
#define RGB_D_GREEN rgb16( 0,127, 0)
#define RGB_D_BLUE rgb16( 0, 0,127)
#define RGB_D_YELLOW rgb16(127,127, 0)
#define RGB_D_MAGENTA rgb16(127, 0,127)
#define RGB_D_CYAN rgb16( 0,127,127)
#define LIVE_0 " "
#define LIVE_1 " *"
#define LIVE_2 " **"
#define LIVE_3 " ***"
#define LIVE_4 " ****"
#define LIVE_5 " *****"
#define LIVE_6 "******"
#define LIVE_X "------"
/* GameBoard constants */
#define GB_YMIN 65 /* position of the top */
#define GB_YMAX 460 /* position of the bottom */
#define GB_XMIN 5 /* min position X of the asteroid */
#define GB_XMAX 505 /* max position X of the asteroid */
/* Asteroid constants */
#define ASTEROID_RADIUS 4 /* radius of the asteroid */
#define ASTEROID_NMAX 60 /* max number of asteroids */
#define ASTEROID_GROUP 2 /* task group of asteroids */
/* Astro constants */
#ifdef ASTRO_MOVE
#define ASTRO_Y (GB_YMAX+GB_YMIN)/2 /* Y position of the astro */
#else
#define ASTRO_Y GB_YMAX-22 /* Y position of the astro */
#endif
#define ASTRO_X (GB_XMAX+GB_XMIN)/2 /* X position of the astro */
#define ASTRO_MAX_VEL ASTRO_VEL_INC*5 /* Max astro velocity */
#ifdef ASTRO_MOVE
#define ASTRO_MAX_GRAD 180 /* Max astro angle */
#else
#define ASTRO_MAX_GRAD 80 /* Max astro angle */
#endif
#define ASTRO_GRAD_INC 10 /* angular variation */
#define ASTRO_VEL_INC 3 /* velocity variation */
#define ASTRO_RADIUS 16 /* Dimension of the astro */
#define ASTRO_PERIOD 10000
#define ASTRO_MOVE_PERIOD 10000
#define ASTRO_WCET 1500
/* Shot constants */
#define SHOT_RADIUS 1 /* radius of the shot */
#define SHOT_VEL 35 /* speed of the shot */
#define SHOT_NMAX 30 /* max number of shots */
#define SHOT_GROUP 3 /* task group of shots */
#define SHOT_PERIOD 30000
#define SHOT_WCET 2000
/* Rock constants */
#define ROCK_RADIUS_I 8 /* initial radius of the rock */
#define ROCK_RADIUS_S 4 /* radius of the rock after one shot */
#define ROCK_VEL 6 /* speed of the rock */
#define ROCK_NMAX 8 /* max number of rocks */
#define ROCK_GROUP 4 /* task group of rocks */
#define ROCK_PERIOD 30000
#define ROCK_WCET 2000
/* Statistic constants */
#define ENERGY_INIT 200
#define ENERGY_SHOT 2
#define ENERGY_GOT 10
#define SCORE_GOT 2
#define LIVES_INIT 3
#define STAT_PERIOD 400000
#define STAT_WCET 2000
/* Statistic constants */
#define LOOK_PERIOD 30000
#define LOOK_WCET 4000
typedef struct {
PID pid;
int x, y, r;
} rock_pos;
typedef struct {
int i;
int x, y, r;
} rock_ini;
double dist_xy(int x1, int y1, int x2, int y2);
void draw_rock(int x, int y, int r, int c);
void rock_create(rock_ini* ri);
void frame_astro();
void frame_stat();
void init_astro();
void init_stat();
void init_rock();
void reset_astro();
void reset_rock();
void start_astro();
void start_rock();
void reset_game();
extern sem_t mx_mat, mx_grf; /* mutex semaphores */
extern sem_t mx_pos, mx_vel; /* mutex semaphores */
extern sem_t mx_xy, mx_rk, mx_rn; /* mutex semaphores */
extern sem_t mx_st_scr, mx_st_nrg; /* mutex semaphores */
extern sem_t mx_st_kil, mx_st_liv; /* mutex semaphores */
extern int nshot; /* number of shot active */
extern int nrock; /* number of rock active */
extern int astro_x, astro_y; /* astro position */
extern int astro_grad; /* astro angolar position */
extern int astro_vel; /* astro velocity */
extern int score; /* current player score */
extern int energy; /* current player energy */
extern int enemy; /* current player strikes */
extern int lives; /* current player lives*/
extern int kill_rock; /* kill active rocks */
extern int kill_shot; /* kill active shots */
extern int freez_astro; /* turn of control pad */
extern int crash; /* astro vs. rock */
extern rock_pos rocks[ROCK_NMAX]; /* rocks position */
extern rock_ini rock_new;