graphics.h - Programmation
Marsh Posté le 18-05-2001 à 00:46:05
comme ca marche pas, je vire
[edit]--Message édité par 486dx--[/edit]
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
Marsh Posté le 18-05-2001 à 01:12:43
c une librairie du borland c
Marsh Posté le 18-05-2001 à 01:22:51
C'est quelle version?
et c'est dans graphic.h?
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 );
}
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
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