#include #include #include #include #define MAX_PARTICULES 50 #define MAX_TIRS 5 typedef struct Projectile Projectile; // Alias Projectile struct Projectile { int active; // Activé ou non float vie; // Durée de vie des particules float size; // Taille des la particule long particuleX; // Coordonnées des particules long particuleY; float fondu; // Effet de fondu des particules long projectileX; // Coordonées Du projectile long projectileY; }; Projectile projectiles[MAX_PARTICULES][MAX_TIRS]; // Creation d'un tableau de particules a deux dimension une pour les particules et une pour les projectiles /****************Variables Globales*************************/ int width, height; // Variable de hauteur largeur pour garder le ratio pdt la redimension int resetI, resetJ; // Variable de deffilement Reset int i, j; // Variable de defilement des tableaux /***********************************************************/ /**************Variable de Gestion du Clavier***************/ long clavierX; // Detection du clavier long clavierY; bool Gauche; //Gestion des touches Repetées bool Droite; bool Haut; bool Bas; /***********************************************************/ /****************Declaration des Fonctions******************/ void GLFWCALL clavier( int touche, int action ); // Fonction de gestion du clavier void reset(int *i, int *j); // Fonction de gestion des particules void active (); void deplace(); void affiche(); void efface(); /***********************************************************/ int main() { int frame = 0; // Frame à 0 bool running = true; // Le programme tourne ! /*****************Variables du Jeu************************/ /*********************************************************/ glfwInit(); // Initialisation de GLFW , avec gestion des erreurs if( !glfwOpenWindow( 512, 512, 0, 0, 0, 0, 0, 0, GLFW_WINDOW ) ) // initialisation de la fennetre { glfwTerminate(); return 0; } glfwDisable( GLFW_KEY_REPEAT ); // Desactivation de la repetition des touches glfwSetWindowTitle("Projectile Test"); // Titre de la fenetre /******************Parametres OpenGL***********************/ glBlendFunc(GL_SRC_ALPHA, GL_ONE); //Active le blending et change en additif glEnable(GL_BLEND); glMatrixMode( GL_PROJECTION ); // Mode d'affichage, ici 2D alors projection glLoadIdentity(); // On initialise la matrice gluOrtho2D(0,500,0,500); // On definie le repere associé à la fenetre /**********************************************************/ /***********************Fonctions**************************/ glfwSetKeyCallback(clavier); /**********************************************************/ /*********************Initialisation***********************/ for ( j=0; j 0 ? height : 1; glViewport( 0, 0, width, height ); // Position d'ouverture de la fenetre glClearColor( 0.0, 0.0, 0.0, 0.0 ); // Couleur de fond De la fenetre glClear( GL_COLOR_BUFFER_BIT ); /********************Clavier*******************************/ if (Gauche == true) { if(clavierX > 0) clavierX--; } if (Droite == true) { if(clavierX < height ) clavierX++; } /**********************************************************/ /***************Affichage des particules*******************/ for ( j=0; j (height+20)) { for (i=0; i MAX_TIRS ) resetJ = 0; break; case GLFW_KEY_DOWN: break; case GLFW_KEY_LEFT: Gauche=true; break; case GLFW_KEY_RIGHT: Droite=true; break; } } else { switch(touche) { case GLFW_KEY_UP: break; case GLFW_KEY_DOWN: break; case GLFW_KEY_LEFT: Gauche=false; break; case GLFW_KEY_RIGHT: Droite=false; break; } } }