un petit programme en TC++ tres amusant
Source / Exemple :
#include<string.h>
#include<stdlib.h>
#include<iostream.h>
#include<dos.h>
#include"raouf1.h"
#include"mouse.h"
#include<graphics.h>
# define fh 72
# define fb 80
# define fd 77
# define fg 75
# define fh 72
t_screen splay;
class puzzle
{
public:
puzzle(int);//constructeur
void permute(int,int,int,int) ; //permute mat images
void permute_int(int,int,int,int) ; //permute mat entiers
void alea(); //
int Test();
void permut_possible();
void Modifier_X(int); //controler le nombre de permutation
void Charge_Bmp(); //charger une nouvelle image
void affiche();
private:
t_image M[3][3];
int t2[3][3],x;
};
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
class Stage
{public:
Stage(int level);
void Intro(); //introduction
int booleen(){return bool;} //bool= 1 quand satrt est selectionner
void mod_bool(int n){bool=n;}
private:
int level,bool;unsigned char result;
};
//.......................................................................
Stage::Stage(int)
{
INIT_MOUSE();
AFFICHE_MOUSE();
int port =0x21;
}
//.....................................................................
void Stage::Intro()
{
cleardevice();
t_image raf;
LoadImage(&splay, "raouf.bmp", &raf); //chargement bmp1
gotoxy(0,0);printf("PUZZLE");
for (int i2=0;i2<=80;i2++)
for (int j2=0;j2<=15;j2++)
{
setcolor(j2);
setfillstyle(1,j2);
if (getpixel(i2,j2)!=BLACK) {putpixel(i2,j2,0);pieslice(i2*8+120,j2*8+30,0,360,2);}
}
AFFICHE_MOUSE();
SetPalette(&splay, &raf.ihHeader);
DisplayImage(&splay, &raf,200,260,0);
delay(100);
int bab=1;
while(bab)
{
POS_MOUSE(1);
result=inportb(0x21);
outportb(0x20,0x0a);
result=inportb(0x20);
outportb(0x20,0x0b);
result=inportb(0x20);
if(result!=0)
{
}
if((x>240) && (x<380)&&(y>260) && (y<280)&&(etat==1)) {MASQUE_MOUSE();cleardevice();bab=0;bool=1;goto et;}
if((x>240) && (x<380)&&(y>325) && (y<350)&&(etat==1)) {cleardevice();bab=0;bool=0;goto et;}
DisplayImage(&splay, &raf,200,260,0);
}
et:
DestroyImage(&raf); //destruction
}
//========================================================================
puzzle::puzzle(int x1){
x=x1;
LoadImage(&splay, "d1.bmp", &M[0][0]);
LoadImage(&splay, "d2.bmp", &M[0][1]);
LoadImage(&splay, "d3.bmp", &M[0][2]);
LoadImage(&splay, "d4.bmp", &M[1][0]);
LoadImage(&splay, "d5.bmp", &M[1][1]);
LoadImage(&splay, "d6.bmp", &M[1][2]);
LoadImage(&splay, "d7.bmp", &M[2][0]);
LoadImage(&splay, "d8.bmp", &M[2][1]);
LoadImage(&splay, "d9.bmp", &M[2][2]);
int cpt=0; //matrice des entiers
//ordonne de 0 a 8
// qui sert a tester..
for(int h=0;h<3;h++)
{ for (int j=0;j<3;j++)
{ t2[h][j]=cpt;
cpt+=1;
}
}
t2[0][2]=2;
}
//----------------------------------------------------------------------
void puzzle::Modifier_X(int x1)
{
x=x1;
}
//========================================================================
int puzzle::Test()
{
int vrai=1;
int j,h=0;
int cpt=0;
while((vrai)&&(h<3))
{ j=0;
while((vrai)&&(j<3))
{if (t2[h][j] != cpt) vrai=0;
j+=1;
cpt+=1;
}
h+=1; }
return vrai;
}
//========================================================================
void puzzle::permute(int a,int b,int e,int f) //adrresse
{ t_image c;
c=M[a][b];
M[a][b]=M[e][f];
M[e][f]=c;
}
void puzzle::permute_int(int a,int b,int e,int f) //adrresse
{ int c;
c=t2[a][b];
t2[a][b]=t2[e][f];
t2[e][f]=c;
}
//=============================================================================
void puzzle::permut_possible()
{
int E,F;
E=0;F=0;
t_image win,lose;
LoadImage(&splay, "looser.bmp", &lose);
SetPalette(&splay,&lose.ihHeader);
LoadImage(&splay, "winner.bmp", &win);
char choix;
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
if(t2[i][j]==2) {E=i;F=j;}
int lin,col;
if (F==0) col=200;
if (F==1) col=290;
if (F==2) col=380;
if (E==0) lin=110;
if (E==1) lin=200;
if (E==2) lin=290;
setfillstyle(1,6);
setcolor(6);
while(choix!='x')
{
choix=getch();
switch(choix)
{
case fb: if(E!=2){DisplayImage(&splay, &M[E][F],col,lin+90,0);
DisplayImage(&splay, &M[E+1][F],col,lin,0);
lin+=90;
permute(E,F,E+1,F);
permute_int(E,F,E+1,F);
E+=1;
break; }
case fg: if(F!=0){ DisplayImage(&splay, &M[E][F],col-90,lin,0);
DisplayImage(&splay, &M[E][F-1],col,lin,0);
col-=90;
permute(E,F,E,F-1);
permute_int(E,F,E,F-1);
F-=1;
}
break;
case fh: if(E!=0){
DisplayImage(&splay, &M[E][F],col,lin-90,0);
DisplayImage(&splay, &M[E-1][F],col,lin,0);
lin-=90;
permute(E,F,E-1,F);
permute_int(E,F,E-1,F);
E-=1;
break; }
case fd: if (F!=2){DisplayImage(&splay, &M[E][F],col+90,lin,0);
// bar3d(col+90,lin,col+180,lin+90,0,0);
DisplayImage(&splay, &M[E][F+1],col,lin,0);
col+=90;
permute(E,F,E,F+1);
permute_int(E,F,E,F+1);
F+=1;
}
break;
}
/* gotoxy(1,1);printf("MAT :\n"); //affiche mat entiers
for(int i=0;i<3;i++)
{
for (int j=0;j<3;j++)
{printf(" %d",t2[i][j]);}
printf("\n");
}*/
}
// cleardevice();
if(Test()==0) {DisplayImage(&splay, &lose,0,0,0);}
else {DisplayImage(&splay, &win,0,0,0);}
for (int i2=0;i2<=60;i2++)
for (int j2=0;j2<=16;j2++)
{
setcolor(j2);
setfillstyle(1,j2);
if (getpixel(i2,j2)!=BLACK) {putpixel(i2,j2,0);pieslice(i2*8+160,j2*8+1,0,360,5);}
}
}
//===========================================================
void puzzle::alea()
{
int E,F;
E=0;F=0;
t2[0][2]=2;
char choix;
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
if(t2[i][j]==2) {E=i;F=j;}
int lin,col;
if (F==0) col=200;
if (F==1) col=290;
if (F==2) col=380;
if (E==0) lin=110;
if (E==1) lin=200;
if (E==2) lin=290;
setfillstyle(1,0);
setcolor(9);
int c;
for(int i1=1;i1<x;i1++)
{
c=rand()%4;
switch(c)
{
case 0: if(E!=2){DisplayImage(&splay, &M[E][F],col,lin+90,0);
DisplayImage(&splay, &M[E+1][F],col,lin,0);
lin+=90;
permute(E,F,E+1,F);
permute_int(E,F,E+1,F);
E+=1;
break; }
case 1: if(F!=0){ DisplayImage(&splay, &M[E][F],col-90,lin,0);
// bar3d(col-90,lin,col-180,lin+90,0,0);
DisplayImage(&splay, &M[E][F-1],col,lin,0);
col-=90;
permute(E,F,E,F-1);
permute_int(E,F,E,F-1);
F-=1;
}
break;
case 2: if(E!=0){
DisplayImage(&splay, &M[E][F],col,lin-90,0);
//bar3d(col,lin-90,col,lin,0,0);
DisplayImage(&splay, &M[E-1][F],col,lin,0);
lin-=90;
permute(E,F,E-1,F);
permute_int(E,F,E-1,F);
E-=1;
break; }
case 3: if (F!=2){DisplayImage(&splay, &M[E][F],col+90,lin,0);
// bar3d(col+90,lin,col+180,lin+90,0,0);
DisplayImage(&splay, &M[E][F+1],col,lin,0);
col+=90;
permute(E,F,E,F+1);
permute_int(E,F,E,F+1);
F+=1;
break;}
default: break;
}
/* gotoxy(1,1);printf("MAT :\n"); // afiche mat entiers
for(int i=0;i<3;i++)
{
for (int j=0;j<3;j++)
{printf(" %d",t2[i][j]);}
printf("\n");
}*/
delay(150);
}
}
//=======================================================================
void puzzle::affiche()
{ cleardevice();
SetPalette (&splay, &M[0][0].ihHeader);
DisplayImage(&splay, &M[0][0],200,110,0);
DisplayImage(&splay, &M[0][1],290,110,0);
DisplayImage(&splay, &M[0][2],380,110,0);
DisplayImage(&splay, &M[1][0],200,200,0);
DisplayImage(&splay, &M[1][1],290,200,0);
DisplayImage(&splay, &M[1][2],380,200,0);
DisplayImage(&splay, &M[2][0],200,290,0);
DisplayImage(&splay, &M[2][1],290,290,0);
DisplayImage(&splay, &M[2][2],380,290,0);
}
//========================================================================
void main()
{
InitGraphics(&splay);
cleardevice();
Stage s(1);
int bool=1;
s.Intro();
cleardevice();
puzzle puz(20);
if (s.booleen())
{
puz.affiche();
cleardevice();
setcolor(6);
rectangle(200,110,470,380);
rectangle(200,110,470,200);
rectangle(200,200,470,290);
rectangle(200,290,470,380);
rectangle(200,110,290,380);
rectangle(290,110,380,380);
rectangle(380,110,470,380);
puz.affiche();
puz.alea();
puz.permut_possible();
}
getch();
}
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.