graphics.h

graphics.h - Programmation

Marsh Posté le 18-05-2001 à 00:28:17    

je suis débutant en C++ et je voudrais faire un programme en utilisant graphics.h .
J'ai lu que c'était une librairie borland qui était par défaut avec Borland C++ builder; moi j'ai la version 4 et je l'ai pas.
 
J'ai bien essaillé de la télécharger mais c'est jamais la bonne !!!
Alors si qqn pouvais me dire ou je pourrais la trouver ou bien par quoi je pouvais la remplacer ça m'aiderais...
 
merci d'avance


---------------
@rthur
Reply

Marsh Posté le 18-05-2001 à 00:28:17   

Reply

Marsh Posté le 18-05-2001 à 00:46:05    

comme ca marche pas, je vire

 

[edit]--Message édité par 486dx--[/edit]


---------------
Sorry, you have insufficient access to perform that command
Reply

Marsh Posté le 18-05-2001 à 01:11:22    

ca marche pas ya un probleme avec 'far'...
j'arrive pas à le compiler sous borland.
IL vient d'ou ce fichier


---------------
@rthur
Reply

Marsh Posté le 18-05-2001 à 01:12:43    

c une librairie du borland c


---------------
Sorry, you have insufficient access to perform that command
Reply

Marsh Posté le 18-05-2001 à 01:22:51    

C'est quelle version?
 et c'est dans graphic.h?


---------------
@rthur
Reply

Marsh Posté le 18-05-2001 à 01:34:35    

es ce que tu peux compiler ca:
 
/////////////////////////
// Tetris
// Borland C++
// (c)2000 David Tanguy
/////////////////////////
 
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <iostream.h>
#include <dos.h>
#include <bios.h>
#include <time.h>
 
 
 
/////////////////////
// Variable globale
/////////////////////
int tableau[16][21];
int x_max=15;
int y_max=19;
 
int X,Y;
 
int position_brique; // position_brique= 0,1,2 ou 3
int type_brique;  // type_brique=0 ==> Brique double escalier
int niveau=0;   // nb de 1/20e de seconde pour chaque intervalle
int score=0;
 
 
//////////////
// Fonctions
//////////////
 
void initialise_graphique(void);
 
void informations(void);
void jouer(void);
 
void init_tableau(void);
int  mouvement(int);
void modif_tableau(int, int, int);
void modif_brique(int);
void nouvelle_brique(void);
void efface_ligne(void);
void verifie_game_over(void);
void augmente_niveau(void);
void augmente_score(void);
 
 
////////////////////////////
// Fonctions de validation
////////////////////////////
int valide_rotation(void);
int valide_gauche(void);
int valide_droite(void);
int valide_fixation(void);
 
int verifie_gauche(int, int);
int verifie_droite(int, int);
int verifie_fixation(int, int);
 
 
 
/////////////////
// Fonction main
/////////////////
void main(void)
{
 // Efface l'ecran en mode texte
 clrscr();
 
 // Initialise et bascule en mode graphique
 initialise_graphique();
 
 // Appel de la fonction jouer()
 jouer();
 
 // Quitte le mode graphique
 closegraph();
}
 
//////////////////////////////////////////////
// Initialise et bascule en mode graphique
//////////////////////////////////////////////
void initialise_graphique(void)
{
 // Auto-detection du driver graphique
 int gdriver = DETECT, gmode, errorcode;
 
 // Initialise les graphiques et les variables locales
 initgraph(&gdriver, &gmode, "" );
 
 // Lit les resultat de l'initialisation
 errorcode = graphresult();
 if (errorcode != grOk)  // Si erreur
 {
  clrscr();
  cout << "***************************************\n";
  cout << "Programme Tetris - (c)2000 David Tanguy\n";
  cout << "***************************************\n\n";
  cout << "Petite erreur graphique dont voici le d‚tail :\n";
  cout << "==> " <<  grapherrormsg(errorcode) << "\n";
 
  cout << "\nAppuyer sur une touche pour quitter le programme...";
  getch();
  exit(1);
   }
}
 
////////////////
// Informations
////////////////
void informations(void)
{
 // Divers
 cout << "(c)2000 David Tanguy" << endl;
 cout << "n : new" << endl;
 cout << "q : quit" << endl;
 cout << "+ : Aug. niveau" << endl << endl;
 cout << "Niveau = " << niveau << endl << endl;
 cout << "Score = " << score;
 
 
 // Affiche le message "Tetris"
 int x, y;
 x = 295;
 y = 17;
 moveto(x, y);
 outtext("Tetris" );
 
 // Dessine une ellipse entre 0ø et 360ø
 int x_ellipse=getmaxx() / 2;
 int y_ellipse=20;
 int debut_angle = 0, fin_angle = 360;
 int x_rayon = 30, y_rayon = 16;
 setcolor(10);
 
 ellipse(x_ellipse, y_ellipse, debut_angle, fin_angle, x_rayon, y_rayon);
 
 int i,j;
 setcolor(6);
 
 // Remarque : ecran 480*640 - ordonne 0-->479 - abscisse : 0 --> 639
 // Dessine les lignes horizontales : ordonn‚e : 60 ==> 460
 for (j=60;j<=460;j+=20)
 {
  line(160, j, 480, j);
 }
 
 // Dessine les lignes verticale : abcsisee : 160 ==> 480
 for (i=160;i<=480;i+=20)
 {
  line(i, 60, i, 460);
 }
 
}
 
//////////////////
// Fonction jouer
//////////////////
void jouer(void)
{
 int i, difference, touche, temp;
 clock_t debut;
 
 
 niveau=0;
 score=0;
 
 // Afficher les informations
 informations();
 
 // Initialisation du tableau
 init_tableau();
 
 // Apparition de la 1ere brique (d'ou le 0)
 nouvelle_brique();
 
 // Attends la frappe d'une touche
 debut = clock();
 
 
 // q=7793  ; Q=7761
 // n=12654 ; N=12622
 do
 {
  // bioskey(1) renvoie 0 jusqu'a ce qu'une touche soit press‚
  // Descente automatique durant l'attente
 
 
  while (bioskey(1) == 0)
  {
   difference = ((clock() - debut) / CLK_TCK)*20;
 
   if (difference > 10-niveau)
   {
    mouvement('b');
    debut = clock();
   }
  }
 
  // bioskey(0) renvoie la touche tape
  touche=bioskey(0);
 
  switch(touche)
  {
   case 14624 :
   {
    while  ( mouvement('b') );
    break;
   }
 
   case 18432 : temp = mouvement('r'); break;
 
   case 19200 : temp = mouvement('g'); break;
 
   case 19712 : temp = mouvement('d'); break;
 
   case 20480 : temp = mouvement('b'); break;
 
   case 20011 : augmente_niveau(); break;
 
   default : debut = clock();
  }
 }
 while (touche!=7793 && touche!=7761 && touche !=12654 && touche!=12622);
 
 if (touche == 12654 || touche == 12622)
 // New
 {
  closegraph();
  initialise_graphique();
  niveau=15;
  jouer();
 }
}
 
 
 
/////////////////
// Init Tableau
/////////////////
void init_tableau(void)
{
 int i,j;
 
 for (i=0;i<=x_max;i++)
 {
  for (j=0;j<=y_max;j++)
  {
   tableau[i][j]=0;
  }
 }
}
 
 
 
//////////////
// Mouvement
//////////////
int mouvement(int sens_mouvement)
{
 int type_case;
 
 // type_case = 0 si vide 1 si occupe, 2 si fige
 // sens_mouvement='d' si droite, 'g' si gauche, 'b' si bas, 'r' si rotation
 // Rappel : position_brique=0,1,2 ou 3 suivant le degre de rotation
 
 
 /////////////
 // ROTATION
 /////////////
 if ( sens_mouvement == 'r' && valide_rotation() )
 {
  //Ancienne position_brique a effacer
  modif_brique(0);
 
  //Rotation simple
  position_brique=(++position_brique)%4;
  modif_brique(1);
 
  return(1);
 }
 
 ////////////
 //A GAUCHE
 ////////////
 if ( sens_mouvement == 'g' && valide_gauche() )
 {
  //Ancienne position_brique a effacer
  modif_brique(0);
 
  //A gauche simple
  X--;
  modif_brique(1);
 
  return(1);
 }
 
 ////////////
 //A DROITE
 ////////////
 // ==> A droite simple
 if ( sens_mouvement == 'd' && valide_droite() )
 {
  //Ancienne position_brique a effacer
  modif_brique(0);
 
  //A gauche simple
  X++;
  modif_brique(1);
 
  return(1);
 }
 
 ////////////////////////////////////////////
 // FIXATION LORS D'UNE TENTATIVE DE DECENTE
 ////////////////////////////////////////////
 if ( sens_mouvement == 'b' && valide_fixation() )
 {
 
  //On fige
  modif_brique(type_brique);
 
 
  // Apparition d'une nouvelle brique (d'ou le 1)
  nouvelle_brique();
 
  return(0);
 }
 
 
 /////////////
 // DESCENTE
 /////////////
 //Si la fixation precedente n'a pas fonctionne...
 if ( sens_mouvement =='b' )
 {
  //Ancienne position_brique a effacer
  modif_brique(0);
 
  //Descente simple
  Y--;
  modif_brique(1);
 
  return(1);
 
 }
 
}
 
////////////////////
// Nouvelle brique
////////////////////
void nouvelle_brique(void)
{
 
 // Type aleatoire pour une brique (5 types de briques dispo);
 type_brique=random(7)+2;
 
 // Position aleatoire pour une brique (4 positions);
 position_brique=random(4);
 
 
 //Verifie si on peut effacer une ligne
 efface_ligne();
 
 
 // Position initiale
 X=7;
 
 
 switch(type_brique)
 {
  case 2 : // Brique en double escalier
  {
   switch (position_brique)
   {
    case 0 : Y=18; break;
    case 1 : Y=18; break;
    case 2 : Y=19; break;
    case 3 : Y=18; break;
   }
   verifie_game_over();
   modif_brique(1);
   break;
  }
  case 3 : // Brique en carre
  {
   Y=19;
 
   verifie_game_over();
   modif_brique(1);
   break;
  }
  case 4 : // Brique en L normal
  {
   switch (position_brique)
   {
    case 0 : Y=18; break;
    case 1 : Y=19; break;
    case 2 : Y=18; break;
    case 3 : Y=18; break;
   }
 
   verifie_game_over();
   modif_brique(1);
   break;
  }
  case 5 : // Brique en L inverse
  {
   switch (position_brique)
   {
    case 0 : Y=18; break;
    case 1 : Y=18; break;
    case 2 : Y=18; break;
    case 3 : Y=19; break;
   }
   verifie_game_over();
   modif_brique(1);
   break;
  }
  case 6 : // Brique en barre
  {
   switch (position_brique%2)
   {
    case 0 : Y=18; break;
    case 1 : Y=19; break;
 
   }
   verifie_game_over();
   modif_brique(1);
   break;
  }
  case 7 : // Brique en escalier droit
  {
   switch (position_brique%2)
   {
    case 0 : Y=19; break;
    case 1 : Y=18; break;
 
   }
   verifie_game_over();
   modif_brique(1);
   break;
  }
  case 8 : // Brique en escalier gauche
  {
   switch (position_brique%2)
   {
    case 0 : Y=19; break;
    case 1 : Y=18; break;
 
   }
   verifie_game_over();
   modif_brique(1);
   break;
  }
 
 
 }
}
 
 
///////////////////////////////////////////////
// Fonction modifiant et affichant le tableau
///////////////////////////////////////////////
void modif_tableau(int i, int j, int valeur)
{
 tableau[i][j]=valeur;
 
 // Dessin d'une croix de couleur aux coordonne (i,j)
 int x,y;
 
 x=166+20*i;
 y=446-20*j;
 
 
 switch (tableau[i][j])
 {
  case 0 : setcolor(0); break; // Couleur noire
  case 1 :      // Brique en mouvement
  {
   switch(type_brique)
   {
    case 2 : setcolor(9);  break;
    case 3 : setcolor(10); break;
    case 4 : setcolor(11); break;
    case 5 : setcolor(13); break;
    case 6 : setcolor(14); break;
    case 7 : setcolor(2); break;
    case 8 : setcolor(3); break;
 
   }
   break;
  }
  case 2 : setcolor(9);  break;
  case 3 : setcolor(10); break;
  case 4 : setcolor(11); break;
  case 5 : setcolor(13); break;
  case 6 : setcolor(14); break;
  case 7 : setcolor(2); break;
  case 8 : setcolor(3); break;
 
 
 }
 moveto(x, y);
 outtext("x" );
}
 
 
 
///////////////////////
// Modifie une brique
///////////////////////
void modif_brique(int type_case)
{
 switch (type_brique)
 {
  case 2 : // Brique en escalier
  {
   switch (position_brique)
   {
    case 0 :
    {
     modif_tableau(X-1, Y , type_case);
     modif_tableau( X ,Y+1, type_case);
     modif_tableau( X , Y , type_case);
     modif_tableau(X+1, Y , type_case);
     break;
    }
 
    case 1 :
    {
     modif_tableau( X ,Y-1, type_case);
     modif_tableau( X , Y , type_case);
     modif_tableau( X ,Y+1, type_case);
     modif_tableau(X+1, Y , type_case);
     break;
    }
 
    case 2 :
    {
     modif_tableau(X-1, Y , type_case);
     modif_tableau( X ,Y-1, type_case);
     modif_tableau( X , Y , type_case);
     modif_tableau(X+1, Y , type_case);
     break;
    }
 
    case 3 :
    {
     modif_tableau(X-1, Y , type_case);
     modif_tableau( X ,Y-1, type_case);
     modif_tableau( X , Y , type_case);
     modif_tableau( X ,Y+1, type_case);
     break;
    }
   }
   break;
  }
 
  case 3 : // Brique en carre
  {
   // Les 4 position_briques sont identiques
 
   modif_tableau( X ,Y-1, type_case);
   modif_tableau( X , Y , type_case);
   modif_tableau(X+1,Y-1, type_case);
   modif_tableau(X+1, Y , type_case);
 
   break;
  }
 
  case 4 : // Brique en L
   {
   switch (position_brique)
   {
    case 0 :
    {
     modif_tableau(X-1,Y+1, type_case);
     modif_tableau( X ,Y-1, type_case);
     modif_tableau( X , Y , type_case);
     modif_tableau( X ,Y+1, type_case);
     break;
    }
 
    case 1 :
    {
     modif_tableau(X-1,Y-1, type_case);
     modif_tableau(X-1, Y , type_case);
     modif_tableau( X , Y , type_case);
     modif_tableau(X+1, Y , type_case);
     break;
    }
 
    case 2 :
    {
     modif_tableau( X ,Y-1, type_case);
     modif_tableau( X , Y , type_case);
     modif_tableau( X ,Y+1, type_case);
     modif_tableau(X+1,Y-1, type_case);
     break;
    }
 
    case 3 :
    {
     modif_tableau(X-1, Y , type_case);
     modif_tableau( X , Y , type_case);
     modif_tableau(X+1, Y , type_case);
     modif_tableau(X+1,Y+1, type_case);
     break;
    }   }
   break;
  }
 
  case 5 : // Brique en L inverve
  {
   switch (position_brique)
   {
    case 0 :
    {
     modif_tableau( X ,Y-1, type_case);
     modif_tableau( X , Y , type_case);
     modif_tableau( X ,Y+1, type_case);
     modif_tableau(X+1,Y+1, type_case);
     break;
    }
 
    case 1 :
    {
     modif_tableau(X-1,Y+1, type_case);
     modif_tableau(X-1, Y , type_case);
     modif_tableau( X , Y , type_case);
     modif_tableau(X+1, Y , type_case);
     break;
    }
 
    case 2 :
    {
     modif_tableau(X-1,Y-1, type_case);
     modif_tableau( X ,Y-1, type_case);
     modif_tableau( X , Y , type_case);
     modif_tableau( X ,Y+1, type_case);
     break;
    }
 
    case 3 :
    {
     modif_tableau(X-1, Y , type_case);
     modif_tableau( X , Y , type_case);
     modif_tableau(X+1, Y , type_case);
     modif_tableau(X+1,Y-1, type_case);
     break;
    }
   }
   break;
  }
 
  case 6 : // Brique en barre
  {
   switch (position_brique%2)
   {
    case 0 :
    {
     modif_tableau( X ,Y-2, type_case);
     modif_tableau( X ,Y-1, type_case);
     modif_tableau( X , Y , type_case);
     modif_tableau( X ,Y+1, type_case);
     break;
    }
 
    case 1 :
    {
     modif_tableau(X-1, Y , type_case);
     modif_tableau( X , Y , type_case);
     modif_tableau(X+1, Y , type_case);
     modif_tableau(X+2, Y , type_case);
     break;
    }
   }
   break;
  }
 
  case 7 : // Brique en escalier droit
  {
   switch (position_brique%2)
   {
    case 0 :
    {
     modif_tableau(X-1,Y-1, type_case);
     modif_tableau( X ,Y-1, type_case);
     modif_tableau( X , Y , type_case);
     modif_tableau(X+1, Y , type_case);
     break;
    }
 
    case 1 :
    {
     modif_tableau( X , Y , type_case);
     modif_tableau( X ,Y+1, type_case);
     modif_tableau(X+1,Y-1, type_case);
     modif_tableau(X+1, Y , type_case);
     break;
    }
   }
   break;
  }
 
  case 8 : // Brique en escalier gauche
  {
   switch (position_brique%2)
   {
    case 0 :
    {
     modif_tableau(X-1, Y , type_case);
     modif_tableau( X ,Y-1, type_case);
     modif_tableau( X , Y , type_case);
     modif_tableau(X+1,Y-1, type_case);
     break;
    }
 
    case 1 :
    {
     modif_tableau( X ,Y-1, type_case);
     modif_tableau( X , Y , type_case);
     modif_tableau(X+1, Y , type_case);
     modif_tableau(X+1,Y+1 , type_case);
     break;
    }
   }
   break;
  }
 }
}
 
 
/////////////////////////////////////////////
// Efface une (des) ligne(s) si neccessaire
/////////////////////////////////////////////
void efface_ligne(void)
{
 int i,j;
 int i0,j0;
 int nb_case_fige;
 
 int ligne_a_supprimer;
 
 for (j=0;j<=y_max;j++)
 {
  nb_case_fige=0;
  for (i=0;i<=x_max;i++)
  {
 
   if (tableau[i][j] >= 2) nb_case_fige++;
  }
 
  if (nb_case_fige==16)
  {
   // Efface la ligne
   for (j0=j;j0<=y_max-1;j0++)
   {
    for (i0=0;i0<=x_max;i0++)
    {
     modif_tableau(i0 ,j0 ,tableau[i0][j0+1]);
    }
   }
   j--; //Permet de rexaminer la ligne en question
 
   // Augmente le score
   augmente_score();
  }
 }
}
 
 
////////////////////////
// Verifie si Game Over
////////////////////////
void verifie_game_over(void)
{
 // position_brique represente la position_brique de la brique a apparaitre
 
 Y--;
 
 int touche;
 int resultat=0;
 
 
 switch(type_brique)
 {
  case 2 : // Brique en escalier
  {
   switch (position_brique)
   {
    case 0 :
    {
     if (
     tableau[ X ][Y+1] >= 2 ||
     tableau[X-1][ Y ] >= 2 ||
     tableau[ X ][ Y ] >= 2 ||
     tableau[X+1][ Y ] >= 2 )
     resultat=1;
     break;
    }
 
    case 1 :
    {
     if (
     tableau[ X ][Y-1] >= 2 ||
     tableau[ X ][ Y ] >= 2 ||
     tableau[ X ][Y+1] >= 2 ||
     tableau[X+1][ Y ] >= 2 )
     resultat=1;
     break;
    }
 
    case 2 :
    {
     if (
     tableau[ X ][Y-1] >= 2 ||
     tableau[X-1][ Y ] >= 2 ||
     tableau[ X ][ Y ] >= 2 ||
     tableau[X+1][ Y ] >= 2
     )
     resultat=1;
     break;
    }
 
    case 3 :
    {
     if (
     tableau[ X ][Y-1] >= 2 ||
     tableau[ X ][ Y ] >= 2 ||
     tableau[ X ][Y+1] >= 2 ||
     tableau[X-1][ Y ] >= 2 )
     resultat=1;
     break;
    }
   }
   break;
  }
 
  case 3 : // Brique en carre
  {
   // Les 4 position_briques sont identiques
 
   if (
   tableau[ X ][ Y ] >= 2 ||
   tableau[X+1][ Y ] >= 2 ||
   tableau[ X ][Y-1] >= 2 ||
   tableau[X+1][Y-1] >= 2 )
   resultat=1;
   break;
  }
 
  case 4 : // Brique en L
   {
   switch (position_brique)
   {
    case 0 :
    {
     if (
     tableau[X-1][Y+1] >= 2 ||
     tableau[ X ][Y-1] >= 2 ||
     tableau[ X ][ Y ] >= 2 ||
     tableau[ X ][Y+1] >= 2
     )
     resultat=1;
     break;
    }
 
    case 1 :
    {
     if (
     tableau[X-1][Y-1] >= 2 ||
     tableau[X-1][ Y ] >= 2 ||
     tableau[ X ][ Y ] >= 2 ||
     tableau[X+1][ Y ] >= 2 )
     resultat=1;
     break;
    }
 
    case 2 :
    {
     if (
     tableau[X+1][Y-1] >= 2 ||
     tableau[ X ][Y-1] >= 2 ||
     tableau[ X ][ Y ] >= 2 ||
     tableau[ X ][Y+1] >= 2 )
     resultat=1;
     break;
    }
 
    case 3 :
    {
     if (
     tableau[X+1][Y+1] >= 2 ||
     tableau[X-1][ Y ] >= 2 ||
     tableau[ X ][ Y ] >= 2 ||
     tableau[X+1][ Y ] >= 2 )
     resultat=1;
     break;
    }
   }
   break;
  }
 
  case 5 : // Brique en L inverve
  {
   switch (position_brique)
   {
    case 0 :
    {
     if (
     tableau[X+1][Y+1] >= 2 ||
     tableau[ X ][Y-1] >= 2 ||
     tableau[ X ][ Y ] >= 2 ||
     tableau[ X ][Y+1] >= 2 )
     resultat=1;
     break;
    }
 
    case 1 :
    {
     if (
     tableau[X-1][Y+1] >= 2 ||
     tableau[X-1][ Y ] >= 2 ||
     tableau[ X ][ Y ] >= 2 ||
     tableau[X+1][ Y ] >= 2 )
     resultat=1;
     break;
    }
 
    case 2 :
    {
     if (
     tableau[X-1][Y-1] >= 2 ||
     tableau[ X ][Y-1] >= 2 ||
     tableau[ X ][ Y ] >= 2 ||
     tableau[ X ][Y+1] >= 2 )
     resultat=1;
     break;
    }
 
    case 3 :
    {
     if (
     tableau[X+1][Y-1] >= 2 ||
     tableau[X-1][ Y ] >= 2 ||
     tableau[ X ][ Y ] >= 2 ||
     tableau[X+1][ Y ] >= 2 )
     resultat=1;
     break;
    }
   }
   break;
  }
 
  case 6 : // Brique en barre
  {
   switch (position_brique%2)
   {
    case 0 :
    {
     if (
     tableau[ X ][Y+1] >= 2 ||
     tableau[ X ][ Y ] >= 2 ||
     tableau[ X ][Y-1] >= 2 ||
     tableau[ X ][Y-2] >= 2 )
     resultat=1;
     break;
    }
 
    case 1 :
    {
     if (
     tableau[X-1][ Y ] >= 2 ||
     tableau[ X ][ Y ] >= 2 ||
     tableau[X+1][ Y ] >= 2 ||
     tableau[X+2][ Y ] >= 2 )
     resultat=1;
     break;
    }
   }
   break;
  }
 
  case 7 : // Brique en escalier droit
  {
   switch (position_brique%2)
   {
    case 0 :
    {
     if (
     tableau[X-1][Y-1] >= 2 ||
     tableau[ X ][Y-1] >= 2 ||
     tableau[ X ][ Y ] >= 2 ||
     tableau[X+1][ Y ] >= 2 )
     break;
    }
 
    case 1 :
    {
     if (
     tableau[ X ][ Y ] >= 2 ||
     tableau[ X ][Y+1] >= 2 ||
     tableau[X+1][Y-1] >= 2 ||
     tableau[X+1][ Y ] >= 2 )
     break;
    }
   }
   break;
  }
 
  case 8 : // Brique en escalier gauche
  {
   switch (position_brique%2)
   {
    case 0 :
    {
     if (
     tableau[X-1][ Y ] >= 2 ||
     tableau[ X ][Y-1] >= 2 ||
     tableau[ X ][ Y ] >= 2 ||
     tableau[X+1][Y-1] >= 2 )
     break;
    }
 
    case 1 :
    {
     if (
     tableau[ X ][Y-1] >=2 ||
     tableau[ X ][ Y ] >=2 ||
     tableau[X+1][ Y ] >=2 ||
     tableau[X+1][Y+1] >=2 )
     break;
    }
   }
   break;
  }
 }
 
 
 Y++;
 
 if (resultat==1 )
 {
  gotoxy(1,10);
  cout << "GAME OVER";
 
  // q=7793  ; Q=7761
  // n=12654 ; N=12622
  do
  {
   // bioskey(0) renvoie la touche tape
   touche = bioskey(0);
  }
  while (touche!=7793 && touche!=7761 && touche !=12654 && touche!=12622);
 
  if (touche == 12654 || touche == 12622)
  // New
  {
   closegraph();
   initialise_graphique();
   niveau=15;
   jouer();
  }
  else
  // Quit
  {
   exit(1);
  }
 }
}
 
 
//////////////////////////////
// Augmenter de niveau
//////////////////////////////
void augmente_niveau(void)
{
 if (niveau <= 8) niveau++;
 
 gotoxy(1,6);
 cout << "Niveau = " << niveau;
 
}
 
///////////////////////
// Augmenter le score
///////////////////////
void augmente_score(void)
{
 score+=10*(niveau+1);
 
 gotoxy(1,8);
 cout << "Score = " << score;
 
}
 
 
//////////////////////////////
// Valide une rotation simple
//////////////////////////////
int valide_rotation(void)
{
 switch(type_brique)
 {
  case 2 : // Brique en double escalier
  {
   switch (position_brique)
   {
    case 0 : return ( tableau[ X ][Y-1] < 2 && Y-1 >= 0 );
    case 1 : return ( tableau[X-1][ Y ] < 2 && X-1 >= 0 );
    case 2 : return ( tableau[ X ][Y+1] < 2 && Y+1 <= y_max );
    case 3 : return ( tableau[X+1][ Y ] < 2 && X+1 <= x_max );
   }
  }
 
  case 3 : return(1); // Brique carre
 
  case 4 : // Brique en L normal
  {
   switch (position_brique)
   {
    case 0 : return ( tableau[X-1][Y-1] < 2 && tableau[X-1][ Y ] < 2 && tableau[X+1][ Y ] < 2 && X+1 <= x_max );
    case 1 : return ( tableau[ X ][Y-1] < 2 && tableau[X+1][Y-1] < 2 && tableau[ X ][Y+1] < 2 && Y+1 <= y_max );
    case 2 : return ( tableau[X-1][Y-1] < 2 && tableau[X+1][ Y ] < 2 && tableau[X+1][Y+1] < 2 && X-1 >= 0     );
    case 3 : return ( tableau[ X ][Y-1] < 2 && tableau[X-1][Y+1] < 2 && tableau[ X ][Y+1] < 2 && Y-1 >= 0     );
   }
  }
 
  case 5 : // Brique en L inverse
  {
   switch (position_brique)
   {
    case 0 : return ( tableau[X-1][Y+1] < 2 && tableau[X-1][ Y ] < 2 && tableau[X+1][ Y ] < 2 && X-1 >= 0     );
    case 1 : return ( tableau[ X ][Y-1] < 2 && tableau[X-1][Y-1] < 2 && tableau[ X ][Y+1] < 2 && Y-1 >= 0     );
    case 2 : return ( tableau[X-1][Y-1] < 2 && tableau[X+1][ Y ] < 2 && tableau[X+1][Y-1] < 2 && X+1 <= x_max );
    case 3 : return ( tableau[ X ][Y-1] < 2 && tableau[X+1][Y+1] < 2 && tableau[ X ][Y+1] < 2 && Y+1 <= y_max );
   }
  }
  case 6 : // Brique en barre
  {
   switch (position_brique%2)
   {
    case 0 : return ( tableau[X-1][ Y ] < 2 && tableau[X+1][ Y ] < 2 && tableau[X+2][ Y ] < 2 && X-1 >=0 && X+2 <= x_max );
    case 1 : return ( tableau[ X ][Y-2] < 2 && tableau[ X ][Y-1] < 2 && tableau[ X ][Y+1] < 2 && Y-2 >=0 && Y+1 <= y_max );
   }
  }
 
  case 7 : // Brique en escalier droit
  {
   switch (position_brique%2)
   {
    case 0 : return ( tableau[ X ][Y+1] < 2 && tableau[X+1][Y-1] < 2 && Y+1 <= y_max );
    case 1 : return ( tableau[ X ][Y-1] < 2 && X-1 >= 0 );
   }
  }
 
  case 8 : // Brique en escalier gauche
  {
   switch (position_brique%2)
   {
    case 0 : return ( tableau[X+1][Y+1] < 2 && Y+1 <= y_max );
    case 1 : return ( tableau[X-1][ Y ] < 2 && tableau[X+1][Y-1] < 2 && X+1 <= x_max );
   }
  }
 }
}
 
 
////////////////////////////////////////
// Valide un mouvement a gauche simple
////////////////////////////////////////
int valide_gauche()
{
 switch(type_brique)
 {
  case 2 : // Brique double escalier
  {
   switch (position_brique)
   {
    case 0 : return ( verifie_gauche( X ,Y+1) * verifie_gauche(X-1, Y ) );
    case 1 : return ( verifie_gauche( X ,Y+1) * verifie_gauche( X , Y ) * verifie_gauche( X ,Y-1) );
    case 2 : return ( verifie_gauche( X ,Y-1) * verifie_gauche(X-1, Y ) );
    case 3 : return ( verifie_gauche( X ,Y+1) * verifie_gauche(X-1, Y ) * verifie_gauche( X ,Y-1) );
   }
  }
 
  case 3 : // Brique carre
  {
   return ( verifie_gauche(X,Y) * verifie_gauche(X,Y-1) );
  }
 
  case 4 : // Brique L normal
  {
   switch (position_brique)
   {
    case 0 : return ( verifie_gauche( X ,Y-1) * verifie_gauche( X , Y ) * verifie_gauche(X-1,Y+1) );
    case 1 : return ( verifie_gauche(X-1,Y-1) * verifie_gauche(X-1, Y ) );
    case 2 : return ( verifie_gauche( X ,Y-1) * verifie_gauche( X , Y ) * verifie_gauche( X ,Y+1) );
    case 3 : return ( verifie_gauche(X-1, Y ) * verifie_gauche(X+1,Y+1) );
 
   }
  }
 
  case 5 : // Brique L inverse
  {
   switch (position_brique)
   {
    case 0 : return ( verifie_gauche( X ,Y-1) * verifie_gauche( X , Y ) * verifie_gauche( X ,Y+1) );
    case 1 : return ( verifie_gauche(X-1, Y ) * verifie_gauche(X-1,Y+1) );
    case 2 : return ( verifie_gauche(X-1,Y-1) * verifie_gauche( X , Y ) * verifie_gauche( X ,Y+1) );
    case 3 : return ( verifie_gauche(X+1,Y-1) * verifie_gauche(X-1, Y ) );
 
   }
  }
 
  case 6 : // Brique en barre
  {
   switch (position_brique%2)
   {
    case 0 : return ( verifie_gauche( X ,Y-2) * verifie_gauche( X ,Y-1) * verifie_gauche( X , Y) * verifie_gauche( X ,Y+1) );
    case 1 : return ( verifie_gauche(X-1, Y )  );
   }
  }
 
  case 7 : // Brique en escalier droit
  {
   switch (position_brique%2)
   {
    case 0 : return ( verifie_gauche(X-1,Y-1) * verifie_gauche( X , Y ) );
    case 1 : return ( verifie_gauche( X , Y ) * verifie_gauche( X ,Y+1) * verifie_gauche(X+1,Y-1)  );
   }
  }
 
  case 8 : // Brique en escalier gauche
  {
   switch (position_brique%2)
   {
    case 0 : return ( verifie_gauche(X-1, Y ) * verifie_gauche( X ,Y-1) );
    case 1 : return ( verifie_gauche( X ,Y-1) * verifie_gauche( X , Y ) * verifie_gauche(X+1,Y+1) );
   }
  }
 }
}
 
 
////////////////////////////////////////
// Valide un mouvement a droite simple
////////////////////////////////////////
int valide_droite()
{
 switch(type_brique)
 {
  case 2 : // Brique en double escalier
  {
   switch (position_brique)
   {
    case 0 : return ( verifie_droite( X ,Y+1) * verifie_droite(X+1, Y ) );
    case 1 : return ( verifie_droite( X ,Y+1) * verifie_droite(X+1, Y ) * verifie_droite( X ,Y-1) );
    case 2 : return ( verifie_droite( X ,Y-1) * verifie_droite(X+1, Y ) );
    case 3 : return ( verifie_droite( X ,Y+1) * verifie_droite( X , Y ) * verifie_droite( X ,Y-1) );
   }
  }
 
  case 3 : // Brique en carre
  {
   return ( verifie_droite(X+1,Y) * verifie_droite(X+1,Y-1) );
  }
 
  case 4 : // Brique en L normal
  {
   switch (position_brique)
   {
    case 0 : return ( verifie_droite( X ,Y-1) * verifie_droite( X , Y ) * verifie_droite( X ,Y+1) );
    case 1 : return ( verifie_droite(X-1,Y-1) * verifie_droite(X+1,Y) );
    case 2 : return ( verifie_droite(X+1,Y-1) * verifie_droite( X , Y ) * verifie_droite( X ,Y+1) );
    case 3 : return ( verifie_droite(X+1, Y ) * verifie_droite(X+1,Y+1) );
   }
  }
 
  case 5 : // Brique en L inverse
  {
   switch (position_brique)
   {
    case 0 : return ( verifie_droite( X ,Y-1) * verifie_droite( X , Y ) * verifie_droite(X+1,Y+1) );
    case 1 : return ( verifie_droite(X+1, Y ) * verifie_droite(X-1,Y+1) );
    case 2 : return ( verifie_droite( X ,Y-1) * verifie_droite( X , Y ) * verifie_droite( X ,Y+1) );
    case 3 : return ( verifie_droite(X+1,Y-1) * verifie_droite(X+1, Y ) );
   }
  }
 
  case 6 : // Brique en barre
  {
   switch (position_brique%2)
   {
    case 0 : return ( verifie_droite( X ,Y-2) * verifie_droite( X ,Y-1) * verifie_droite( X , Y) * verifie_droite( X ,Y+1) );
    case 1 : return ( verifie_droite(X+2, Y )  );
   }
  }
 
  case 7 : // Brique en escalier droit
  {
   switch (position_brique%2)
   {
    case 0 : return ( verifie_droite( X ,Y-1) * verifie_droite(X+1, Y ) );
    case 1 : return ( verifie_droite(X+1, Y ) * verifie_droite( X ,Y+1) * verifie_droite(X+1,Y-1)  );
   }
  }
 
  case 8 : // Brique en escalier droite
  {
   switch (position_brique%2)
   {
    case 0 : return ( verifie_droite( X , Y ) * verifie_droite(X+1,Y-1) );
    case 1 : return ( verifie_droite( X ,Y-1) * verifie_droite(X+1, Y ) * verifie_droite(X+1,Y+1) );
   }
  }
 
 }
}
 
/////////////////////////////////////////////////////////
// Valide un figement (lors d'une tentative de descente)
/////////////////////////////////////////////////////////
int valide_fixation(void)
{
 switch(type_brique)
 {
  case 2 : // Brique double escalier
  {
   switch (position_brique)
   {
    case 0 : return ( verifie_fixation(X-1, Y ) + verifie_fixation( X , Y ) + verifie_fixation(X+1, Y ) );
    case 1 : return ( verifie_fixation( X ,Y-1) + verifie_fixation(X+1, Y ) );
    case 2 : return ( verifie_fixation( X ,Y-1) + verifie_fixation(X-1, Y ) + verifie_fixation(X+1, Y ) );
    case 3 : return ( verifie_fixation( X ,Y-1) + verifie_fixation(X-1, Y )  );
   }
  }
 
  case 3 : // Brique carre
  {
   return ( verifie_fixation( X ,Y-1) + verifie_fixation(X+1,Y-1) );
  }
 
  case 4 : // Brique L normal
  {
   switch (position_brique)
   {
    case 0 : return ( verifie_fixation(X-1,Y+1) + verifie_fixation( X ,Y-1) );
    case 1 : return ( verifie_fixation(X-1,Y-1) + verifie_fixation( X , Y ) + verifie_fixation(X+1, Y ) );
    case 2 : return ( verifie_fixation( X ,Y-1) + verifie_fixation(X+1,Y-1) );
    case 3 : return ( verifie_fixation(X-1, Y ) + verifie_fixation( X , Y ) + verifie_fixation(X+1, Y ) );
   }
  }
 
  case 5 : // Brique L inverse
  {
   switch (position_brique)
   {
    case 0 : return ( verifie_fixation( X ,Y-1) + verifie_fixation(X+1,Y+1) );
    case 1 : return ( verifie_fixation(X-1, Y ) + verifie_fixation( X , Y ) + verifie_fixation(X+1, Y ) );
    case 2 : return ( verifie_fixation(X-1,Y-1) + verifie_fixation( X ,Y-1) );
    case 3 : return ( verifie_fixation(X-1, Y ) + verifie_fixation( X , Y ) + verifie_fixation(X+1,Y-1) );
 
   }
  }
 
  case 6 : // Brique en barre
  {
   switch (position_brique%2)
   {
    case 0 : return ( verifie_fixation( X ,Y-2) );
    case 1 : return ( verifie_fixation(X-1, Y ) + verifie_fixation( X , Y ) + verifie_fixation(X+1, Y ) + verifie_fixation(X+2, Y ) );
   }
  }
 
  case 7 : // Brique en escalier droit
  {
   switch (position_brique%2)
   {
    case 0 : return ( verifie_fixation(X-1,Y-1) + verifie_fixation( X ,Y-1) + verifie_fixation(X+1, Y ) );
    case 1 : return ( verifie_fixation( X , Y ) + verifie_fixation(X+1,Y-1) );
   }
  }
 
  case 8 : // Brique en escalier gauche
  {
   switch (position_brique%2)
   {
    case 0 : return ( verifie_fixation(X-1, Y ) + verifie_fixation( X ,Y-1) + verifie_fixation(X+1,Y-1));
    case 1 : return ( verifie_fixation( X ,Y-1) + verifie_fixation(X+1, Y ) );
   }
  }
 
 }
}
 
/////////////////////////////
// Verification de la gauche
/////////////////////////////
int verifie_gauche(int x, int y)
{
 //1 case a gauche de libre ET brique non fige
 return ( x >= 1 && tableau[x-1][y] < 2 );
}
 
/////////////////////////////
// Verification de la droite
/////////////////////////////
int verifie_droite(int x, int y)
{
 //1 case a droite de libre ET brique non fige
 return ( x <= x_max-1 && tableau[x+1][y] < 2 );
}
 
 
////////////////////////////////
// Verification de la fixation
////////////////////////////////
int verifie_fixation(int x, int y)
{
 //0 case en bas de libre OU case au dessous fig‚
 return ( y == 0 || tableau[x][y-1] >= 2 );
}


---------------
@rthur
Reply

Marsh Posté le 18-05-2001 à 02:11:53    

D'ailleur si qqn  d'autre arrive a compiler Ca.Ca serait sympa qu'il m'envoie son Graphics.h une  sa solution personnelle.......
merci


---------------
@rthur
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed