catte application intitulée extraction est exploitation de l'information spatiale dans les modéle de séléction d'action,consiste à etudier le comportement d'un humanoide dans un environnement virtuel c'est à dire l'intéraction de cet humain virtuel avec les objets de son environement . alors on parle ici d'aspet sémantique
Source / Exemple :
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "projet.h"
#include "evrm.h"
#define NORD 0
#define SUD 1
#define EST 2
#define OUEST 3
#define TDN 4
#define TGN 5
#define TDS 6
#define TGS 7
#define TDE 8
#define TGE 9
#define TGO 10
#define TDO 11
#define confrontation 0
#define perpendicularite 1
#define blocage 2
#define move 0
#define arrest 1
const int nbcelI=40;
const nbcelJ=60;
const int D=0;
const int HV=1;
coordonne pospi[30],pospj[30];
int posi,posj,nbcel,indicef,indicev,indice;
int maxcar=0,nbmaxind=0,maxlamp=0,maxarb=0;
bool but1=false,decoupage1=false,off=true,first=false;
cellule chemin[44*80];bool aller=false,vs=false,draw=false,pre=false,creer_obs=false,pre_ob=true,creer_ind=false,pre_ind=true,creer_but=false,pre_but=true;
bool start=false,go=true,pause=false;
bool one=false,twoo=false,three=false,four=false,choisir=false;
cellule elem1;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFormMain *FormMain;
int submenid,menid;
static int primitive = 0;
evrm *e;
//agent *a;
GLuint tex[21];
point pt ;
int c,cc;
float xx,yy=10;
bool geni =false;
bool arret=false;
bool agt_dess=false;
bool cam=false;
bool agt=false;
bool v2d=true,v3d=false;
//int nbmaxind=0;
const float piover180 = 0.0174532925f;
float heading;
float xpos=0;
float zpos=18;
int Xpos,Ypos;//position de l'agent
bool But1=false;
GLfloat yrot; // Y Rotation
GLfloat walkbias = 0;
GLfloat walkbiasangle = 0;
GLfloat lookupdown = 0.0f;
GLfloat z = 0.0f;
//---------------------------------------------------------------------------
__fastcall TFormMain::TFormMain(TComponent* Owner)
: TForm(Owner)
{
Application->OnIdle = IdleLoop;
size = 50.0f;
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::IdleLoop(TObject*, bool& done)
{
done = false;
RenderGLScene();
SwapBuffers(hdc);
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::FormCreate(TObject *Sender)
{
hdc = GetDC(Panel1->Handle);
SetPixelFormatDescriptor();
hrc = wglCreateContext(hdc);
if(hrc == NULL)
ShowMessage(":-)~ hrc == NULL");
if(wglMakeCurrent(hdc, hrc) == false)
ShowMessage("Could not MakeCurrent");
w = ClientWidth;
h = ClientHeight;
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
//LoadGLTextures(tex); // Jump to texture loading routine ( NEW )
texturage(tex);
// SetupLighting();
//glClearColor(0.623f, 0.623f,1.0f, 1.0f);
//glClearColor(0.733333f, 0.733333f,1.0f, 1.0f);
//glClearColor(1.0f,1.0f,1.0f, 1.0f);
glClearColor(0.792157f,0.894118f,1.0f, 1.0f);
//glClearColor(0.823529f,0.909804f,0.968627f, 1.0f);
V2D->Checked=true;
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::SetPixelFormatDescriptor()
{
PIXELFORMATDESCRIPTOR pfd = {
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA,
24,
0,0,0,0,0,0,
0,0,
0,0,0,0,0,
32,
0,
0,
PFD_MAIN_PLANE,
0,
0,0,
};
PixelFormat = ChoosePixelFormat(hdc, &pfd);
SetPixelFormat(hdc, PixelFormat, &pfd);
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::FormResize(TObject *Sender)
{
GLfloat nRange = 10.0;
w = Panel1->Width;
h = Panel1->Height;
glViewport ( 0, 0, w, h );
glMatrixMode ( GL_PROJECTION ); // Select The Projection Matrix
glLoadIdentity ( ); // Reset The Projection Matrix
if (w <= h)
glOrtho (-nRange, nRange, -nRange*h/w, nRange*h/w, -nRange, nRange);
else
glOrtho (-nRange*w/h, nRange*w/h, -nRange, nRange, -nRange, nRange);
glMatrixMode ( GL_MODELVIEW ); // Select The Model View Matrix
glLoadIdentity ( ); // Reset The Model View Matrix
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::RenderGLScene()
{
GLfloat nRange = 10.0;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode ( GL_PROJECTION ); // Select The Projection Matrix
glLoadIdentity ( ); // Reset The Projection Matrix
if(v3d) gluPerspective ( 80, ( float ) w / ( float ) h, 1.0, 5000.0 );
if(v2d) glOrtho (-nRange*w/h, nRange*w/h, -nRange, nRange, -nRange, nRange);
glMatrixMode ( GL_MODELVIEW ); // Select The Model View Matrix
glLoadIdentity();
if (v2d)
gluLookAt(0.0,1.0,0.0,0.0,0.0,0.0 ,0.0,0.0,-1.0);
if (v3d)
{
if (cam==true )
{ GLfloat x_m, y_m, z_m, u_m, v_m;
GLfloat xtrans = -xpos;
GLfloat ztrans = -zpos;
GLfloat ytrans = -walkbias-0.25f;
GLfloat sceneroty = 360.0f - yrot;
int numtriangles;
glRotatef(lookupdown,1.0f,0,0);
glRotatef(sceneroty,0,1.0f,0);
glTranslatef(xtrans, ytrans, ztrans);
}
else
gluLookAt(xx,yy+2,12.0,0.0,0.0,0.0 ,0.0,0.0,-1.0);
}
DrawObjects();
glFlush();
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::DrawObjects()
{
if(Scene->Checked==true)
Draw_maison();
if(agt==true)
{
//aff_individus();
Draw_agent();
//aff_but();
}
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::FormPaint(TObject *Sender)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// glClearColor(1.0f,1.0f,1.0f, 0.0f);
// glClearColor(0.623f, 0.623f,1.0f, 1.0f);
//glClearColor(0.733333f, 0.733333f,1.0f, 1.0f);
glClearColor(0.1f,0.3f,0.8f, 1.0f);
//glClearColor(0.792157f,0.894118f,1.0f, 1.0f);
//glClearColor(0.823529f,0.909804f,0.968627f, 1.0f);
DrawObjects();
glFlush();
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//--------------------------------------------------------------------------*/
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TFormMain::Draw_maison()
{
maison ma_scene;
ma_scene.Dessiner(tex,e);
creat(e);
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::Draw_agent()
{point p;
glPushMatrix();
glTranslatef(-(e->col)/4,0.0,-(e->lig)/4);
aff_individus();
glPopMatrix();
creat(e);
glPushMatrix();
glTranslatef(-(e->col)/4,0.0,-(e->lig)/4);
aff_but();
glPopMatrix();
creat(e);
}
///////////////////////////////////:
void TFormMain::set_centre(point p)
{
set_point(&pt,p.x,p.y,p.z);
}
/////////////////////////////
void TFormMain::set_point(point *p,GLfloat x,GLfloat y,GLfloat z)
{p->x=x;
p->y=y;
p->z=z;
}
/////////////////////////////////
/////////////dessiner individus////
void TFormMain::aff_individus()
{
GLfloat h_p=1.5,h_v=(2*h_p)/3,h_m=h_v,h_c=h_v/6,rad_v=0.4,rad_p=rad_v/2.3,rad_m=rad_p/2,rad_t=(2*rad_v)/3,rad_c=rad_v/3;
GLint ang=4;
GLUquadricObj *quadratic;
quadratic=gluNewQuadric();
point pt;
float angle=-90;
int x,y;
int nb=1,i;
for(i=1;i<=nbmaxind;i++)
{ //set_point(&pt,Xpos,-2.0,Ypos);
//monde[i].priorite=i;
// angle=monde[i].angle;
e->init_ag(monde[i].position.I,monde[i].position.J,0.5,0.5);
glPushMatrix();
// glTranslatef(pt.x+0.25,pt.y,pt.z+0.25);
// glTranslatef(pt.x,pt.y,pt.z);
// glTranslatef(Xpos,-2,Ypos);
/////////////////////////tete ////////////////////////////////////
// glColor3f(1.0f,1.0f,1.0f);
glPushMatrix();
glTranslated((monde[i].position.J/2),-2.0,(monde[i].position.I/2));
glTranslatef(0.0,h_p+h_v+h_c+rad_t,0.0);
// gluSphere(quadratic,rad_t,32,32);
glCallList(nb);nb++;
glPopMatrix();
/////////////////////////////cou //////////////////////////
//glColor3f(1.0f,1.0f,1.0f);
glPushMatrix();
glTranslated((monde[i].position.J/2),-2.0,(monde[i].position.I/2));
glTranslatef(0.0,h_p+h_v+rad_c/2,0.0);
//glRotatef(-90,1.0,0.0,0.0);
glRotatef(angle,1.0,0.0,0.0);
//gluCylinder(quadratic,rad_c,rad_c,h_c,32,32);
glCallList(nb);nb++;
glPopMatrix();
////////////////////////ventre//////////////////////////
glColor3f(0.4f,0.21f,0.6f);
glPushMatrix();
glTranslated((monde[i].position.J/2),-2.0,(monde[i].position.I/2));
glTranslatef(0.0,h_p,0.0);
// glRotatef(-90,1.0,0.0,0.0);
glRotatef(angle,1.0,0.0,0.0);
//gluCylinder(quadratic,rad_v,rad_v,h_v,32,32);
glCallList(nb);nb++;
glPopMatrix();
///////////////////////////////////////////
glPushMatrix();
glTranslated((monde[i].position.J/2),-2.0,(monde[i].position.I/2));
glTranslatef(0.0,h_p+h_v,0.0);
// glRotatef(-90,1.0,0.0,0.0);
glRotatef(angle,1.0,0.0,0.0);
//Circle(rad_v);
glCallList(nb);nb++;
glPopMatrix();
/////////////////////////main_g///////////////////////////
glPushMatrix();
glTranslated((monde[i].position.J/2),-2.0,(monde[i].position.I/2));
glTranslatef(-(rad_v+rad_m+0.02),h_p,0.0);
//glRotatef(-90,1.0,0.0,0.0);
glRotatef(angle,1.0,0.0,0.0);
glRotatef(ang,0.0,1.0,0.0);
//gluCylinder(quadratic,rad_m,rad_m,h_m,32,32);
glCallList(nb);nb++;
glPopMatrix();
///////////////////////////main_d //////////////////////////
glPushMatrix();
glTranslated((monde[i].position.J/2),-2.0,(monde[i].position.I/2));
glTranslatef(+(rad_v+rad_m+0.02),h_p,0.0);
//glRotatef(-90,1.0,0.0,0.0);
glRotatef(-90,1.0,0.0,0.0);
glRotatef(-ang,0.0,1.0,0.0);
//gluCylinder(quadratic,rad_m,rad_m,h_m,32,32);
glCallList(nb);nb++;
glPopMatrix();
////////////////////////::::/pied-g ///////////////////////////
glColor3f(0.0f,0.0f,0.0f);
glPushMatrix();
glTranslated((monde[i].position.J/2),-2.0,(monde[i].position.I/2));
glTranslatef(-(rad_v-rad_p),0.0,0.0);
// glRotatef(-90,1.0,0.0,0.0);
glRotatef(angle,1.0,0.0,0.0);
//gluCylinder(quadratic,rad_p,rad_p,h_p,32,32);
glCallList(nb);nb++;
glPopMatrix();
/////////////////////:/pied-d/////////////////////////:
glColor3f(0.0f,0.0f,0.0f);
glPushMatrix();
glTranslated((monde[i].position.J/2),-2.0,(monde[i].position.I/2));
glTranslatef(+(rad_v-rad_p),0.0,0.0);
//glRotatef(-90,1.0,0.0,0.0);
glRotatef(angle,1.0,0.0,0.0);
//gluCylinder(quadratic,rad_p,rad_p,h_p,32,32);
glCallList(nb);nb++;
glPopMatrix();
glPopMatrix();
e->init_ag(pt.x,pt.z,0.5,0.5);
//e->new_obs(pt.x,pt.z,0.5,0.5);
}
}
/////////////////////////////////////////////////
void TFormMain::individus_creation()
{
GLfloat h_p=1.4,h_v=(2*h_p)/3,h_m=h_v,h_c=h_v/6,rad_v=0.4,rad_p=rad_v/2.3,rad_m=rad_p/2,rad_t=(2*rad_v)/3,rad_c=rad_v/3;
GLUquadricObj *quadObj;
GLUquadricObj *quadratic;
quadratic=gluNewQuadric();
GLint ang=4;
int nb=1;
//int h_p=1.0, h_v= 0.5,h_m=0.5;
for(int i=1;i<=nbmaxind;i++)
{
monde[i].priorite=i;
//************************* tete *************************************
glNewList( nb, GL_COMPILE);nb++;
//glColor3f(monde[i].color.r,monde[i].color.v,0.4);
glColor3f(1.0f,1.0f,1.0f);
quadObj = gluNewQuadric ();
gluQuadricDrawStyle (quadObj, GLU_FILL);
gluQuadricNormals (quadObj, GLU_SMOOTH);
//gluCylinder (quadObj,0.15,0.13,0.35, 16, 16);
gluSphere(quadratic,rad_t,32,32);
glEndList();
//************************* cou *************************************
glNewList( nb, GL_COMPILE);nb++;
//glColor3f(monde[i].color.r,monde[i].color.v,0.4);
glColor3f(1.0f,1.0f,1.0f);
quadObj = gluNewQuadric ();
gluQuadricDrawStyle (quadObj, GLU_FILL);
gluQuadricNormals (quadObj, GLU_SMOOTH);
// gluCylinder (quadObj,0.15,0.13,0.35, 16, 16);
gluCylinder(quadratic,rad_c,rad_c,h_c,32,32);
glEndList();
//************************* vente *************************************
glNewList( nb, GL_COMPILE);nb++;
glColor3f(monde[i].color.r,monde[i].color.v,0.4);
quadObj = gluNewQuadric ();
gluQuadricDrawStyle (quadObj, GLU_FILL);
gluQuadricNormals (quadObj, GLU_SMOOTH);
// gluCylinder (quadObj,0.15,0.13,0.35, 16, 16);
gluCylinder(quadratic,rad_v,rad_v,h_v,32,32);
glEndList();
/////////////////////////////////////////////////////////////
glNewList( nb, GL_COMPILE);nb++;
glColor3f(monde[i].color.r,monde[i].color.v,0.4);
quadObj = gluNewQuadric ();
gluQuadricDrawStyle (quadObj, GLU_FILL);
gluQuadricNormals (quadObj, GLU_SMOOTH);
// gluCylinder (quadObj,0.15,0.13,0.35, 16, 16);
//gluCylinder(quadratic,rad_v,rad_v,h_v,32,32);
Circle(rad_v);
glEndList();
//************************* mais_g *************************************
glNewList( nb, GL_COMPILE);nb++;
glColor3f(monde[i].color.r,monde[i].color.v,0.4);
quadObj = gluNewQuadric ();
gluQuadricDrawStyle (quadObj, GLU_FILL);
gluQuadricNormals (quadObj, GLU_SMOOTH);
gluCylinder(quadratic,rad_m,rad_m,h_m,32,32);
//gluCylinder (quadObj,0.15,0.13,0.35, 16, 16);
glEndList();
//************************* main_d *************************************
glNewList( nb, GL_COMPILE);nb++;
glColor3f(monde[i].color.r,monde[i].color.v,0.4);
quadObj = gluNewQuadric ();
gluQuadricDrawStyle (quadObj, GLU_FILL);
gluQuadricNormals (quadObj, GLU_SMOOTH);
gluCylinder(quadratic,rad_m,rad_m,h_m,32,32);
//gluCylinder (quadObj,0.15,0.13,0.35, 16, 16);
glEndList();
//************************* pied_g *************************************
glNewList( nb, GL_COMPILE);nb++;
// glColor3f(monde[i].color.r,monde[i].color.v,0.4);
glColor3f(1.0f,1.0f,1.0f);
quadObj = gluNewQuadric ();
gluQuadricDrawStyle (quadObj, GLU_FILL);
gluQuadricNormals (quadObj, GLU_SMOOTH);
gluCylinder(quadratic,rad_p,rad_p,h_p,32,32);
// gluCylinder (quadObj,0.15,0.13,0.35, 16, 16);
glEndList();
//************************* pied_d *************************************
glNewList( nb, GL_COMPILE);nb++;
// glColor3f(monde[i].color.r,monde[i].color.v,0.4);
glColor3f(1.0f,1.0f,1.0f);
quadObj = gluNewQuadric ();
gluQuadricDrawStyle (quadObj, GLU_FILL);
gluQuadricNormals (quadObj, GLU_SMOOTH);
gluCylinder(quadratic,rad_p,rad_p,h_p,32,32);
//gluCylinder (quadObj,0.15,0.13,0.35, 16, 16);
glEndList();
}
}
/////////////////
//-------------------------------------------------------------------------
void TFormMain::aff_but()
{
int x,y,i,j;
for(int t=1;t<=nbmaxind;t++)
{
glPushMatrix();
i=monde[t].goal.I/2;
j=monde[t].goal.J/2;
x=j;
y=i;
glColor3f(monde[t].color.r,monde[t].color.v,0.4);
glTranslated(x,-1.9,y);
glScaled(1,0.1,1);
glutSolidCube(1);
glPopMatrix();
}
}
//////////////////////////////:::
//---------------------------------------------------------------------------
void __fastcall TFormMain::FormKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if(Key == VK_UP)
{
xpos -= (float)sin(heading*piover180) * 0.05f;
zpos -= (float)cos(heading*piover180) * 0.05f;
if (walkbiasangle >= 359.0f)
{
walkbiasangle = 0.0f;
}
else
{
walkbiasangle+= 30;
}
walkbias = (float)sin(walkbiasangle * piover180)/20.0f;
}
if(Key == VK_DOWN)
{
xpos += (float)sin(heading*piover180) * 0.05f;
zpos += (float)cos(heading*piover180) * 0.05f;
if (walkbiasangle <= 1.0f)
{
walkbiasangle = 359.0f;
}
else
{
walkbiasangle-= 30;
}
walkbias = (float)sin(walkbiasangle * piover180)/20.0f;
}
if(Key == VK_LEFT)
{
heading +=4.0f;
yrot = heading;
}
if(Key == VK_RIGHT)
{
heading -= 4.0f;
yrot = heading;
}
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::SetupLighting()
{
GLfloat MaterialAmbient[] = {0.5, 0.5, 0.5, 1.0};
GLfloat MaterialDiffuse[] = {1.0, 1.0, 1.0, 1.0};
GLfloat MaterialSpecular[] = {1.0, 1.0, 1.0, 1.0};
GLfloat MaterialShininess[] = {50.0};
GLfloat AmbientLightPosition0[] = {3.0, 6.0, 5.0, 0.0};
GLfloat LightAmbient0[] = {1.0, 1.0, 1.0, 1.0};
GLfloat AmbientLightPosition1[] = {-3.0, 6.0, 5.0, 0.0};
GLfloat LightAmbient1[] = {1.0, 1.0, 1.0, 1.0};
GLfloat AmbientLightPosition2[] = {3.0,6.0, -5.0, 0.0};
GLfloat LightAmbient2[] = {1.0, 1.0, 1.0, 1.0};
GLfloat AmbientLightPosition3[] = {-3.0, 6.0, -5.0, 0.0};
GLfloat LightAmbient3[] = {1.0, 1.0, 1.0, 1.0};
glMaterialfv(GL_FRONT, GL_AMBIENT, MaterialAmbient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, MaterialDiffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, MaterialSpecular);
glMaterialfv(GL_FRONT, GL_SHININESS, MaterialShininess);
glLightfv(GL_LIGHT0, GL_POSITION, AmbientLightPosition0);
glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient0);
glLightfv(GL_LIGHT0, GL_POSITION, AmbientLightPosition1);
glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient1);
glLightfv(GL_LIGHT0, GL_POSITION, AmbientLightPosition2);
glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient2);
glLightfv(GL_LIGHT0, GL_POSITION, AmbientLightPosition3);
glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient3);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);
glEnable(GL_LIGHT2);
glEnable(GL_LIGHT3);
glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
glShadeModel(GL_SMOOTH);
}
//---------------------------------------------------------------------------
////////////////////////creation de la scene//////////////////
//---------------------------------------------------------------------------
/////////////////////////
//==========================================================================
// RECHERCHE DU CHEMIN
//===========================================================================
//+++++++++++++++++++++++++++++FONCTIONS POUR LES PILES++++++++++++++++++++++
void empiler(cellule pile[nbcelI*nbcelJ],cellule element,int *indice)
{
(*indice)++;
pile[*indice]=element;
}
//------------------------------------------------------------------------
cellule depiler(cellule pile[nbcelI*nbcelJ],int *indice)
{ cellule cel3;
cel3=pile[*indice];
(*indice)--;
return(cel3);
}
//------------------------------------------------------------------------
bool pile_vide(cellule pile[nbcelI*nbcelJ],int indice)
{
if(indice==-1)
return(true);
else
return(false);
}
//------------------------------------------------------------------------
trier_la_pile_des_visites()
{ //???????????????????
cellule element;
for(int i=indicev;i>=0;i--)
{
if(pile_des_visites[i].F<pile_des_visites[indicev].F)
{
element=pile_des_visites[indicev];
pile_des_visites[indicev]=pile_des_visites[i];
pile_des_visites[i]=element;
}
}
}
//------------------------------------------------------------------------
int exist_dans_pile(cellule pile[nbcelI*nbcelJ],cellule element,int indice)
{
for(int i=0;i<=indice;i++)
if(element.ID.I==pile[i].ID.I&&element.ID.J==pile[i].ID.J)
return i; //l'element existe dans la pile et on retourne son emplecement
return(-1); //l'element n'existe pas
}
//+++++++++++++++++++++++++++++CALCULE DES COUTS DES CHEMINS ET TESTS ++++++++++++++++++++++++++++
int calcule_de_H(cellule element)
{ int n;
n=(abs(but.ID.I-element.ID.I)+abs(but.ID.J-element.ID.J))*10;
return(n);
}
//---------------------------------------------------------------------------
int teste_adjacente(cellule celadj)
{
int i,j;
//cellule elem1,elem2,elem3,elem4;
i=celadj.ID.I;
j=celadj.ID.J;
cellule elem1=matENV[i-1][j];
cellule elem2=matENV[i+1][j];
cellule elem3=matENV[i][j-1];
cellule elem4=matENV[i][j+1];
if(elem1.L==1||elem2.L==1)
return 0;
return 1;
}
//-----------------------------------------------------------------------------------------
bool cellule_limite(cellule celcour)
{ if(celcour.ID.I==0||celcour.ID.I==nbcelI-1||celcour.ID.J==0||celcour.ID.J==nbcelJ-1) //je doit ajouter le teste si la cellule est en 0,0........
return true;
else
return false;
}
//------------------------------------------------------------------------------------------
traitement_cellule(int type,cellule celadj,cellule celcour)
{ int pos;
if(celadj.L==0)
{
if(exist_dans_pile(pile_finale,celadj,indicef)==(-1))
{
if(pos=exist_dans_pile(pile_des_visites,celadj,indicev)==(-1))
{
celadj.pere=celcour.ID;
if(type==D&&teste_adjacente(celadj)==1)
//if(teste_adjacente(celadj)==1)
{
celadj.G=celcour.G+14;
celadj.H=calcule_de_H(celadj);
celadj.F=celadj.H+celadj.G;
empiler(pile_des_visites,celadj,&indicev);
}
if(type==HV)
{
celadj.G=celcour.G+10;
celadj.H=calcule_de_H(celadj);
celadj.F=celadj.H+celadj.G;
empiler(pile_des_visites,celadj,&indicev);
}
}
else //l'element existe dans la pile des visité
{
if(type==HV)
{
if(celcour.G+10<celadj.G)
{
celadj.G=celcour.G+10;
celadj.F=celadj.G+celadj.H;
celadj.pere=celcour.ID;
pile_des_visites[pos]=celadj;
}
}
else //type ==D "diagonale"
{
if(celcour.G+14<celadj.G)
{
celadj.G=celcour.G+14;
celadj.F=celadj.G+celadj.H;
celadj.pere=celcour.ID;
pile_des_visites[pos]=celadj;
}
}
}
}
}
}
//------------------------------------------------------------------------------------------
recherch_cases_valide(cellule celcour)
{ int i=celcour.ID.I;
int j=celcour.ID.J;
cellule cel1,cel2,cel3;
if(!cellule_limite(celcour)) // la cellule n'est une cellule limite
{ matENV[i][j-1].ID.I=i;
matENV[i][j-1].ID.J=j-1;
traitement_cellule(HV,matENV[i][j-1],celcour);
matENV[i][j+1].ID.I=i;
matENV[i][j+1].ID.J=j+1;
traitement_cellule(HV,matENV[i][j+1],celcour);
matENV[i-1][j].ID.I=i-1;
matENV[i-1][j].ID.J=j;
traitement_cellule(HV,matENV[i-1][j],celcour);
matENV[i+1][j].ID.I=i+1;
matENV[i+1][j].ID.J=j;
traitement_cellule(HV,matENV[i+1][j],celcour);
matENV[i+1][j-1].ID.I=i+1;
matENV[i+1][j-1].ID.J=j-1;
traitement_cellule(D,matENV[i+1][j-1],celcour);
matENV[i-1][j-1].ID.I=i-1;
matENV[i-1][j-1].ID.J=j-1;
traitement_cellule(D,matENV[i-1][j-1],celcour);
matENV[i+1][j+1].ID.I=i+1;
matENV[i+1][j+1].ID.J=j+1;
traitement_cellule(D,matENV[i+1][j+1],celcour);
matENV[i-1][j+1].ID.I=i-1;
matENV[i-1][j+1].ID.J=j+1;
traitement_cellule(D,matENV[i-1][j+1],celcour);
}
else
{
switch (i)
{
case 0: matENV[i][j-1].ID.I=i;
matENV[i][j-1].ID.J=j-1;
traitement_cellule(HV,matENV[i][j-1],celcour);
matENV[i][j+1].ID.I=i;
matENV[i][j+1].ID.J=j+1;
traitement_cellule(HV,matENV[i][j+1],celcour);
matENV[i+1][j].ID.I=i+1;
matENV[i+1][j].ID.J=j;
traitement_cellule(HV,matENV[i+1][j],celcour);
matENV[i+1][j-1].ID.I=i+1;
matENV[i+1][j-1].ID.J=j-1;
traitement_cellule(D,matENV[i+1][j-1],celcour);
matENV[i+1][j+1].ID.I=i+1;
matENV[i+1][j+1].ID.J=j+1;
traitement_cellule(D,matENV[i+1][j+1],celcour);
break;
case nbcelI-1: matENV[i][j-1].ID.I=i;
matENV[i][j-1].ID.J=j-1;
traitement_cellule(HV,matENV[i][j-1],celcour);
matENV[i][j+1].ID.I=i;
matENV[i][j+1].ID.J=j+1;
traitement_cellule(HV,matENV[i][j+1],celcour);
matENV[i-1][j].ID.I=i-1;
matENV[i-1][j].ID.J=j;
traitement_cellule(HV,matENV[i-1][j],celcour);
matENV[i-1][j-1].ID.I=i-1;
matENV[i-1][j-1].ID.J=j-1;
traitement_cellule(D,matENV[i-1][j-1],celcour);
matENV[i-1][j+1].ID.I=i-1;
matENV[i-1][j+1].ID.J=j+1;
traitement_cellule(D,matENV[i-1][j+1],celcour);
break;
}
switch (j)
{
case 0: matENV[i-1][j].ID.I=i-1;
matENV[i-1][j].ID.J=j;
traitement_cellule(HV,matENV[i-1][j],celcour);
matENV[i+1][j].ID.I=i+1;
matENV[i+1][j].ID.J=j;
traitement_cellule(HV,matENV[i+1][j],celcour);
matENV[i][j+1].ID.I=i;
matENV[i][j+1].ID.J=j+1;
traitement_cellule(HV,matENV[i][j+1],celcour);
matENV[i+1][j+1].ID.I=i+1;
matENV[i+1][j+1].ID.J=j+1;
traitement_cellule(D,matENV[i+1][j+1],celcour);
matENV[i-1][j+1].ID.I=i-1;
matENV[i-1][j+1].ID.J=j+1;
traitement_cellule(D,matENV[i-1][j+1],celcour);
break;
case nbcelJ-1: matENV[i-1][j].ID.I=i-1;
matENV[i-1][j].ID.J=j;
traitement_cellule(HV,matENV[i-1][j],celcour);
matENV[i+1][j].ID.I=i+1;
matENV[i+1][j].ID.J=j;
traitement_cellule(HV,matENV[i+1][j],celcour);
matENV[i][j-1].ID.I=i;
matENV[i][j-1].ID.J=j-1;
traitement_cellule(HV,matENV[i][j-1],celcour);
matENV[i+1][j-1].ID.I=i+1;
matENV[i+1][j-1].ID.J=j-1;
traitement_cellule(D,matENV[i+1][j-1],celcour);
matENV[i-1][j-1].ID.I=i-1;
matENV[i-1][j-1].ID.J=j-1;
traitement_cellule(D,matENV[i-1][j-1],celcour);
break;
}
}
}
//----------------------------------------------------------------------------------------------
bool recherche_chemin(coordonne d,coordonne b)
{ cellule cel;
indicev=indicef=-1;
but.ID=b;
bool resultat=false;
empiler(pile_des_visites,matENV[d.I][d.J],&indicev);
while(!resultat)
{
cel=pile_des_visites[indicev];
if(cel.ID.I==b.I&&cel.ID.J==b.J) //la cellule est cel du but
{
empiler(pile_finale,depiler(pile_des_visites,&indicev),&indicef);
resultat=true;
return resultat;
}
else
{
if(!pile_vide(pile_des_visites,indicev)) //la pile des visite n'est pas vide
{
empiler(pile_finale,depiler(pile_des_visites,&indicev),&indicef);
recherch_cases_valide(cel);
trier_la_pile_des_visites();
}
else
return false;
}
}
}
//---------------------------------------------------------------------------
void back_to_home() //tous les individus cherchent leur chemin
{
for(int i=1;i<=nbmaxind;i++)
{
bool found=recherche_chemin(monde[i].start,monde[i].goal);
if(found)
{
extraire_chemin(i);
monde[i].butaccessible=true;
monde[i].position=monde[i].start;
}
else
monde[i].butaccessible=false;
}
aller=true;
}
////////////////////////////////////////////////////
void back_to_home1() //tous les individus cherchent leur chemin
{
for(int i=1;i<=nbmaxind;i++)
{
bool found=recherche_chemin(monde[i].start,monde[i].goal);
if(found)
{
extraire_chemin(i);
monde[i].butaccessible=true;
monde[i].position=monde[i].start;
}
else
monde[i].butaccessible=false;
}
aller=true;
}
//---------------------------------------------------------------------------
extraire_chemin(int ind)
{
coordonne inter[3000],interm;
cellule element,ident;
int pos=0,c=0,i=indicef;
bool trouve=false;
element=pile_finale[indicef];
inter[c++]=pile_finale[indicef].ID;
while(!trouve)
{
ident.ID=element.pere;
pos=exist_dans_pile(pile_finale,ident,indicef);
element=pile_finale[pos];
inter[c++]=element.ID;
if(element.ID.I==monde[ind].start.I&&element.ID.J==monde[ind].start.J)
trouve=true;
nbcel=c;
}
monde[ind].longueurchemin=c;
monde[ind].parser=0;
//inverser et copier dans le tableau chemin
for(int i=0;i<nbcel;i++)
{
monde[ind].chemin[i]=inter[--c];
}
}
//---------------------------------------------------------------------------
float direction(int i)
{
int proch=0;
switch (monde[i].position.I-monde[i].chemin[i].I)
{
case 1: if(monde[i].position.J-monde[i].chemin[i].J == 0)proch=3;
if(monde[i].position.J-monde[i].chemin[i].J == 1)proch=2;
if(monde[i].position.J-monde[i].chemin[i].J ==-1)proch=4;
break;
case 0:
if(monde[i].position.J-monde[i].chemin[i].J == 1)proch=1;
else proch=5;
break;
case -1: if(monde[i].position.J-monde[i].chemin[i].J == 0)proch=7;
if(monde[i].position.J-monde[i].chemin[i].J == 1)proch=8;
if(monde[i].position.J-monde[i].chemin[i].J == -1)proch=6;
break;
}
return(45 *(proch-monde[i].direction));
}
//===========================================================================
//FIN RECHERCHE DU CHEMIN
//===========================================================================
//-FONCTION DE DEPLACEMENT D'INDIVIDU------------------------------------------------------
void TFormMain::se_deplacer()
{
//ici d'abord on fait un appel a la procedure de perception
for(int i=1;i<=nbmaxind;i++) //tous les individus sont supposé en mouvement sauf s'il y aura une action de bloquer qlq'1
{
monde[i].action=move;
matENV[monde[i].position.I][monde[i].position.J].L=0;
// e->matENV[monde[i].position.I][monde[i].position.J].L=0;
monde[i].lieu=matENV[monde[i].position.I][monde[i].position.J].lieu;
}
trouver_zone_securite(); //perception
recherche_collision(); //perception decision action
//nettoyer la matENV des traces d'individus
for(int i=1;i<=nbmaxind;i++)
{
if(!monde[i].chez_lui&&monde[i].butaccessible&&monde[i].action==move)
{
if(monde[i].longueurchemin==monde[i].parser+1)
monde[i].chez_lui=true;
else
monde[i].parser++;
point p;
monde[i].angle=direction(i);
matENV[monde[i].position.I][monde[i].position.J].L=2;
pospi[i].I= monde[i].position.I;
pospj[i].J= monde[i].position.J;
e->matENV[monde[i].position.I][monde[i].position.J].L=2;
}
}
}
//==============================================================================================
//==============================================================================================
void trouver_zone_securite()
{
for(int i=1;i<=nbmaxind;i++)
{
if(!monde[i].chez_lui&&monde[i].butaccessible)
{
monde[i].position=monde[i].chemin[monde[i].parser];
if(monde[i].parser+1==monde[i].longueurchemin) //but attein
{
monde[i].zone_securite[0].I=-1;
monde[i].zone_securite[0].J=-1;
monde[i].zone_securite[1].I=-1;
monde[i].zone_securite[1].J=-1;
}
else
{
if(monde[i].parser+2==monde[i].longueurchemin)
{
monde[i].zone_securite[0]=monde[i].chemin[monde[i].parser+1];
monde[i].zone_securite[1].I=-1;
monde[i].zone_securite[1].J=-1;
}
else
{
monde[i].zone_securite[0]=monde[i].chemin[monde[i].parser+1];
monde[i].zone_securite[1]=monde[i].chemin[monde[i].parser+2];
}
}
}
}
}
//==========================================================================================
//RECHERCHE DES COLLISIONS POSSIBLE
//==========================================================================================
void recherche_collision()
{ int num_tab;
for(int i=0;i<=nb_tab;i++)
tab_pieton_coll[i].taille_tab=0;
nb_tab=0;
for(int ind1=1;ind1<=nbmaxind;ind1++)
{
for(int ind2=ind1;ind2<=nbmaxind;ind2++)
{
if(ind1!=ind2&&!(monde[ind1].chez_lui||monde[ind2].chez_lui)) //j'aurai un pb ici car l'affectation des valeur de chez lui se fait avant cette operation donc" je doit la reviser
{
bool collision=false;
if((monde[ind1].position.I==monde[ind2].zone_securite[0].I&&monde[ind1].position.J==monde[ind2].zone_securite[0].J)||(monde[ind1].position.I==monde[ind2].zone_securite[1].I&&monde[ind1].position.J==monde[ind2].zone_securite[1].J)||(monde[ind1].position.I==monde[ind2].position.I&&monde[ind1].position.J==monde[ind2].position.J))
collision=true;
if((monde[ind1].zone_securite[0].I==monde[ind2].zone_securite[0].I&&monde[ind1].zone_securite[0].J==monde[ind2].zone_securite[0].J&&monde[ind2].zone_securite[0].J!=-1)||(monde[ind1].zone_securite[0].I==monde[ind2].zone_securite[1].I&&monde[ind1].zone_securite[0].J==monde[ind2].zone_securite[1].J&&monde[ind2].zone_securite[1].J!=-1)||(monde[ind1].zone_securite[0].I==monde[ind2].position.I&&monde[ind1].zone_securite[0].J==monde[ind2].position.J))
collision=true;
if((monde[ind1].zone_securite[1].I==monde[ind2].zone_securite[0].I&&monde[ind1].zone_securite[1].J==monde[ind2].zone_securite[0].J&&monde[ind2].zone_securite[0].J!=-1)||(monde[ind1].zone_securite[1].I==monde[ind2].zone_securite[1].I&&monde[ind1].zone_securite[1].J==monde[ind2].zone_securite[1].J&&monde[ind2].zone_securite[1].J!=-1)||(monde[ind1].zone_securite[1].I==monde[ind2].position.I&&monde[ind1].zone_securite[1].J==monde[ind2].position.J))
collision=true;
if(collision) //il ya une collision
{
//traitement_collision(ind1,ind2);//??????????????????
num_tab=recherche_tab_pieton(ind1);
if(num_tab!=0)
inserer_pietons(ind1,ind2,num_tab);
else
{
num_tab=recherche_tab_pieton(ind2);
if(num_tab!=0)
inserer_pietons(ind1,ind2,num_tab);
else
{
nb_tab++;
num_tab=nb_tab;
inserer_pietons(ind1,ind2,num_tab);
}
}
}
}
}
}
for(int i=1;i<=nb_tab;i++)
{
if(tab_pieton_coll[i].taille_tab==1)
{
traitement_collision(tab_pieton_coll[i].tab_pair_collision[1].pieton1,tab_pieton_coll[i].tab_pair_collision[1].pieton2);
}
}
for(int i=1;i<=nb_tab;i++)
{
if(tab_pieton_coll[i].taille_tab!=1)
{
for(int j=1;j<=tab_pieton_coll[i].taille_tab;j++)
{
individus indiv1=monde[tab_pieton_coll[i].tab_pair_collision[j].pieton1];
individus indiv2=monde[tab_pieton_coll[i].tab_pair_collision[j].pieton2];
int Tcoll=type_collision(indiv1,indiv2);
if(Tcoll==blocage)
traitement_collision(tab_pieton_coll[i].tab_pair_collision[j].pieton1,tab_pieton_coll[i].tab_pair_collision[j].pieton2);
}
}
}
for(int i=1;i<=nb_tab;i++)
{
if(tab_pieton_coll[i].taille_tab!=1)
{
for(int j=1;j<=tab_pieton_coll[i].taille_tab;j++)
{
individus indiv1=monde[tab_pieton_coll[i].tab_pair_collision[j].pieton1];
individus indiv2=monde[tab_pieton_coll[i].tab_pair_collision[j].pieton2];
int Tcoll=type_collision(indiv1,indiv2);
if(Tcoll!=blocage)
traitement_collision(tab_pieton_coll[i].tab_pair_collision[j].pieton1,tab_pieton_coll[i].tab_pair_collision[j].pieton2);
}
}
}
}
//=============================================================================================
bool rec_col(int ind1,int ind2)
{ bool col;
if(ind1!=ind2&&!(monde[ind1].chez_lui||monde[ind2].chez_lui)) //j'aurai un pb ici car l'affectation des valeur de chez lui se fait avant cette operation donc" je doit la reviser
{
if((monde[ind1].position.I==monde[ind2].zone_securite[0].I&&monde[ind1].position.J==monde[ind2].zone_securite[0].J)||(monde[ind1].position.I==monde[ind2].zone_securite[1].I&&monde[ind1].position.J==monde[ind2].zone_securite[1].J)||(monde[ind1].position.I==monde[ind2].position.I&&monde[ind1].position.J==monde[ind2].position.J))
col=true;
if((monde[ind1].zone_securite[0].I==monde[ind2].zone_securite[0].I&&monde[ind1].zone_securite[0].J==monde[ind2].zone_securite[0].J&&monde[ind2].zone_securite[0].J!=-1)||(monde[ind1].zone_securite[0].I==monde[ind2].zone_securite[1].I&&monde[ind1].zone_securite[0].J==monde[ind2].zone_securite[1].J&&monde[ind2].zone_securite[1].J!=-1)||(monde[ind1].zone_securite[0].I==monde[ind2].position.I&&monde[ind1].zone_securite[0].J==monde[ind2].position.J))
col=true;
if((monde[ind1].zone_securite[1].I==monde[ind2].zone_securite[0].I&&monde[ind1].zone_securite[1].J==monde[ind2].zone_securite[0].J&&monde[ind2].zone_securite[0].J!=-1)||(monde[ind1].zone_securite[1].I==monde[ind2].zone_securite[1].I&&monde[ind1].zone_securite[1].J==monde[ind2].zone_securite[1].J&&monde[ind2].zone_securite[1].J!=-1)||(monde[ind1].zone_securite[1].I==monde[ind2].position.I&&monde[ind1].zone_securite[1].J==monde[ind2].position.J))
col=true;
if(col) //il ya une collision
{
return true;
}
}
}
//=============================================================================================
//TRAITEMENT DES COLLISIONS
//=============================================================================================
void traitement_collision(int ind1,int ind2)
{
int i,pmoins,pplus;
coordonne celcomp;
monde[ind1].direction=ma_direction(monde[ind1]);
monde[ind2].direction=ma_direction(monde[ind2]);
individus indiv1=monde[ind1];
individus indiv2=monde[ind2];
if(monde[ind1].priorite>=monde[ind2].priorite) {pplus=ind1; pmoins=ind2;}
else {pplus=ind2;pmoins=ind1;}
int Tcoll=type_collision(indiv1,indiv2);
switch(Tcoll)
{
case confrontation:
celcomp=droite_ou_gauche(monde[pmoins]);
if(celcomp.I==-1&&celcomp.J==-1||monde[pmoins].action==arrest)//le moins prioritaire ne peut pas bouger ou il est bloquer
{
//on essay avec le plus prioritaire
celcomp=droite_ou_gauche(monde[pplus]);
if(celcomp.I==-1&&celcomp.J==-1) //le plus prioritaire ne peut pas bouger aussi
{
//reculer le moin prioritaire
monde[pmoins].parser=monde[pmoins].parser-2;
monde[pmoins].position=monde[pmoins].chemin[monde[pmoins].parser];
}
else //le plus prioritaire peut bouger er le moins prioritairte ne peut pas
{ if(monde[pplus].action!=arrest)
{
coordonne c=monde[pplus].start;
monde[pplus].start=celcomp;
recherche_chemin(monde[pplus].start,monde[pplus].goal);
extraire_chemin(pplus);
monde[pplus].position=monde[pplus].chemin[monde[pplus].parser];
monde[pplus].parser--;
monde[pplus].start=c;
}
}
}
else // le moin prioritaire peut bouger)
{
coordonne c=monde[pmoins].start;
monde[pmoins].start=celcomp;
recherche_chemin(monde[pmoins].start,monde[pmoins].goal);
extraire_chemin(pmoins);
monde[pmoins].position=monde[pmoins].chemin[monde[pmoins].parser];
monde[pmoins].parser;
monde[pmoins].start=c;
}
break;
case perpendicularite:
if(monde[pplus].action!=arrest)//si le plus prioritaire n'est pas bloqué
bloquer(pmoins);
break;
case blocage: if(monde[ind1].direction==NORD)
if(monde[ind1].position.I<=monde[ind2].position.I) bloquer(ind1);
//else bloquer(ind2);
if(monde[ind1].direction==SUD)
if(monde[ind1].position.I<=monde[ind2].position.I) bloquer(ind2);
//else bloquer(ind1);
if(monde[ind1].direction==EST)
if(monde[ind1].position.J<=monde[ind2].position.I) bloquer(ind1);
//else bloquer(ind2);
if(monde[ind1].direction==OUEST)
if(monde[ind1].position.I<=monde[ind2].position.I) bloquer(ind1);
//else bloquer(ind2);
if(monde[ind1].direction==TDN||monde[ind1].direction==TGN)
if(monde[ind1].position.I<=monde[ind2].position.I) bloquer(ind1);
//else bloquer(ind2);
if(monde[ind1].direction==TDS||monde[ind1].direction==TGS)
if(monde[ind1].position.I<=monde[ind2].position.I) bloquer(ind2);
//else bloquer(ind1);
if(monde[ind1].direction==TDE||monde[ind1].direction==TGE)
if(monde[ind1].position.J<=monde[ind2].position.J) bloquer(ind1);
//else bloquer(ind2);
if(monde[ind1].direction==TDO||monde[ind1].direction==TGO)
if(monde[ind1].position.J<=monde[ind2].position.J) bloquer(ind2);
//else bloquer(ind1);
break;
}
}
//=====================================================================================================
int ma_direction(individus indiv) // quel est la direction du piéton EST ou OUEST........
{
if(indiv.position.I==indiv.zone_securite[0].I&&indiv.position.I==indiv.zone_securite[1].I)//horizontale
{
if(indiv.position.J<indiv.zone_securite[0].J&&indiv.zone_securite[0].J<indiv.zone_securite[1].J)
return(EST);
else
return(OUEST);
}
else
{
if(indiv.position.J==indiv.zone_securite[0].J&&indiv.position.J==indiv.zone_securite[1].J)//verticale
if(indiv.position.I<indiv.zone_securite[0].I&&indiv.zone_securite[0].I<indiv.zone_securite[1].I)
return(NORD);
else
return(SUD);
else //ni horizontale ni verticale
if(indiv.position.I<indiv.zone_securite[1].I) //vers le nord
if(indiv.position.J<indiv.zone_securite[1].J)
if(indiv.position.I==indiv.zone_securite[0].I)
return(TGN);
else
return(TDE); // indiv.zone_securite[0].I==indiv.zone_securite[1].I
else
if(indiv.position.I==indiv.zone_securite[0].I)
return(TDN);
else
return(TGO);
else
if(indiv.position.J<indiv.zone_securite[1].J) //tourner vers le sud
if(indiv.position.I==indiv.zone_securite[0].I)
return(TGS);
else
return(TGE);
else
if(indiv.position.I==indiv.zone_securite[0].I)
return(TDS);
else
return(TDO);
}
}
//============================================================================================
void bloquer(int i)
{
monde[i].action=arrest;
}
//============================================================================================
coordonne droite_ou_gauche(individus indiv) // rendre la case libre adjacente ; retourner la drote si elle est libre sinon la gauche
{
coordonne Case;
int i=indiv.position.I;
int j=indiv.position.J;
switch(indiv.direction)
{
case NORD: if(matENV[i][j+1].L==0)
{ matENV[i][j+1].ID.I=i;
matENV[i][j+1].ID.J=j+1;
return(matENV[i][j+1].ID); //droite
}
else
{
if(matENV[i+1][j+1].L==0)
{
matENV[i+1][j+1].ID.I=i+1;
matENV[i+1][j+1].ID.J=j+1;
return(matENV[i+1][j+1].ID); //droite diagonnale
}
else
if(matENV[i][j-1].L==0) //gauche
{ matENV[i][j-1].ID.I=i;
matENV[i][j-1].ID.J=j-1;
return(matENV[i][j-1].ID);
}
else
if(matENV[i+1][j-1].L==0) //gauche diagonnale
{ matENV[i+1][j-1].ID.I=i+1;
matENV[i+1][j-1].ID.J=j-1;
return (matENV[i+1][j-1].ID);
}
else
{
Case.I=-1;Case.J=-1;
return(Case);
}
}
break;
case SUD: if(matENV[i][j-1].L==0)
{ matENV[i][j-1].ID.I=i;
matENV[i][j-1].ID.J=j-1;
return(matENV[i][j-1].ID); //droite
}
else
{
if(matENV[i-1][j-1].L==0)
{ matENV[i-1][j-1].ID.I=i-1;
matENV[i-1][j-1].ID.J=j-1;
return(matENV[i-1][j-1].ID); //droite diagonnale
}
else
if(matENV[i][j+1].L==0) //gauche
{ matENV[i][j+1].ID.I=i;
matENV[i][j+1].ID.J=j+1;
return(matENV[i][j+1].ID);
}
else
if(matENV[i-1][j+1].L==0) //gauche diagonnale
{ matENV[i-1][j+1].ID.I=i-1;
matENV[i-1][j+1].ID.J=j+1;
return (matENV[i-1][j+1].ID);
}
else
{ Case.I=-1;Case.J=-1;
return(Case);
}
}
break;
case EST: if(matENV[i-1][j].L==0)
{ matENV[i-1][j].ID.I=i-1;
matENV[i-1][j].ID.J=j;
return(matENV[i-1][j].ID); //droite
}
else
{
if(matENV[i-1][j+1].L==0)
{ matENV[i-1][j+1].ID.I=i-1;
matENV[i-1][j+1].ID.J=j+1;
return(matENV[i-1][j+1].ID); //droite diagonnale
}
else
if(matENV[i+1][j].L==0) //gauche
{ matENV[i+1][j].ID.I=i+1;
matENV[i+1][j].ID.J=j;
return(matENV[i+1][j].ID);
}
else
if(matENV[i+1][j+1].L==0) //gauche diagonnale
{ matENV[i+1][j+1].ID.I=i+1;
matENV[i+1][j+1].ID.J=j+1;
return (matENV[i+1][j+1].ID);
}
else
{
Case.I=-1;Case.J=-1;
return(Case);
}
}
break;
case OUEST: if(matENV[i+1][j].L==0)
{ matENV[i+1][j].ID.I=i+1;
matENV[i+1][j].ID.J=j;
return(matENV[i+1][j].ID); //droite
}
else
{
if(matENV[i+1][j-1].L==0)
{ matENV[i+1][j-1].ID.I=i+1;
matENV[i+1][j-1].ID.J=j-1;
return(matENV[i+1][j-1].ID); //droite diagonnale
}
else
if(matENV[i-1][j].L==0) //gauche
{ matENV[i-1][j].ID.I=i-1;
matENV[i-1][j].ID.J=j;
return(matENV[i-1][j].ID);
}
else
if(matENV[i-1][j-1].L==0) //gauche diagonnale
{ matENV[i-1][j-1].ID.I=i-1;
matENV[i-1][j-1].ID.J=j-1;
return (matENV[i-1][j-1].ID);
}
else
{
Case.I=-1;Case.J=-1;
return(Case);
}
}
break;
case TDN: if(matENV[i+1][j].L==0)
{ matENV[i+1][j].ID.I=i+1;
matENV[i+1][j].ID.J=j;
return(matENV[i+1][j].ID);
}
else
if(matENV[i+1][j+1].L==0)
{ matENV[i+1][j+1].ID.I=i+1;
matENV[i+1][j+1].ID.J=j+1;
return(matENV[i+1][j+1].ID);
}
else
{
Case.I=-1;Case.J=-1;
return(Case);
}
break;
case TGN: if(matENV[i+1][j].L==0)
{ matENV[i+1][j].ID.I=i+1;
matENV[i+1][j].ID.J=j;
return(matENV[i+1][j].ID);
}
else
if(matENV[i+1][j-1].L==0)
{ matENV[i+1][j-1].ID.I=i+1;
matENV[i+1][j-1].ID.J=j-1;
return(matENV[i+1][j-1].ID);
}
else
{
Case.I=-1;Case.J=-1;
return(Case);
}
break;
case TDS: if(matENV[i-1][j].L==0)
{ matENV[i-1][j].ID.I=i-1;
matENV[i-1][j].ID.J=j;
return(matENV[i-1][j].ID);
}
else
if(matENV[i-1][j-1].L==0)
{ matENV[i-1][j-1].ID.I=i-1;
matENV[i-1][j-1].ID.J=j-1;
return(matENV[i-1][j-1].ID);
}
else
{
Case.I=-1;Case.J=-1;
return(Case);
}
break;
case TGS: if(matENV[i-1][j].L==0)
{ matENV[i-1][j].ID.I=i-1;
matENV[i-1][j].ID.J=j;
return(matENV[i-1][j].ID);
}
else
if(matENV[i-1][j+1].L==0)
{ matENV[i-1][j+1].ID.I=i-1;
matENV[i-1][j+1].ID.J=j+1;
return(matENV[i-1][j+1].ID);
}
else
{
Case.I=-1;Case.J=-1;
return(Case);
}
break;
case TDE: if(matENV[i][j+1].L==0)
{ matENV[i][j+1].ID.I=i;
matENV[i][j+1].ID.J=j+1;
return(matENV[i][j+1].ID);
}
else
if(matENV[i-1][j+1].L==0)
{ matENV[i-1][j+1].ID.I=i-1;
matENV[i-1][j+1].ID.J=j+1;
return(matENV[i-1][j+1].ID);
}
else
{
Case.I=-1;Case.J=-1;
return(Case);
}
break;
case TGE: if(matENV[i][j+1].L==0)
{ matENV[i][j+1].ID.I=i;
matENV[i][j+1].ID.J=j+1;
return(matENV[i][j+1].ID);
}
else
if(matENV[i+1][j+1].L==0)
{ matENV[i+1][j+1].ID.I=i+1;
matENV[i+1][j+1].ID.J=j+1;
return(matENV[i+1][j+1].ID);
}
else
{
Case.I=-1;Case.J=-1;
return(Case);
}
break;
case TDO: if(matENV[i][j-1].L==0)
{ matENV[i][j-1].ID.I=i;
matENV[i][j-1].ID.J=j-1;
return(matENV[i][j-1].ID);
}
else
if(matENV[i+1][j-1].L==0)
{ matENV[i+1][j-1].ID.I=i+1;
matENV[i+1][j-1].ID.J=j-1;
return(matENV[i+1][j-1].ID);
}
else
{
Case.I=-1;Case.J=-1;
return(Case);
}
break;
case TGO: if(matENV[i][j-1].L==0)
{ matENV[i][j-1].ID.I=i;
matENV[i][j-1].ID.J=j-1;
return(matENV[i][j-1].ID);
}
else
if(matENV[i+1][j-1].L==0)
{ matENV[i+1][j-1].ID.I=i+1;
matENV[i+1][j-1].ID.J=j-1;
return(matENV[i+1][j-1].ID);
}
else
{
Case.I=-1;Case.J=-1;
return(Case);
}
break;
}
}
//----------------------------------------------------------------------------------------------
int type_collision(individus indiv1,individus indiv2)
{
if(indiv1.direction==indiv2.direction)
return(blocage);
switch(indiv1.direction)
{
case NORD:switch(indiv2.direction){
case NORD: return(blocage);
break;
case SUD: return(confrontation);
break;
default : return(perpendicularite);
break;
}
break;
case SUD: switch(indiv2.direction){
case NORD: return(confrontation);
break;
case SUD: return(blocage);
break;
default : return(perpendicularite);
break;
}
break;
case EST: switch(indiv2.direction){
case OUEST: return(confrontation);
break;
case EST: return(blocage);
break;
default : return(perpendicularite);
break;
}
break;
case OUEST:switch(indiv2.direction){
case EST: return(confrontation);
break;
case OUEST: return(blocage);
break;
default : return(perpendicularite);
break;
}
break;
default: return(perpendicularite);
break;
}
}
//============================================================================================================
int recherche_tab_pieton(int pieton)
{
for(int i=1;i<=nb_tab;i++)
for(int j=1;j<=tab_pieton_coll[i].taille_tab;j++)
{
if(tab_pieton_coll[i].tab_pair_collision[j].pieton1==pieton||tab_pieton_coll[i].tab_pair_collision[j].pieton2==pieton)
return (i); //retourne le numero de tableau
}
return 0; // le pieton n'existe pas
}
//---------------------------------------------------------------------------------------
void inserer_pietons(int p1,int p2,int num)
{
tab_pieton_coll[num].taille_tab++;
tab_pieton_coll[num].tab_pair_collision[tab_pieton_coll[num].taille_tab].pieton1=p1;
tab_pieton_coll[num].tab_pair_collision[tab_pieton_coll[num].taille_tab].pieton2=p2;
}
//---------------------------------------------------------------------------
//=========================================================================================//
//---------------------------------------------------------------------------
void __fastcall TFormMain::SceneClick(TObject *Sender)
{
//indiv->Enabled=true;
individus->Enabled=true;
Reinit->Enabled=true;
vu2d->Enabled=true;
V2D->Enabled=true;
vu3d->Enabled=true;
V3D->Enabled=true;
init->Enabled=true;
e=new evrm;
e->set_taille(40,60);
e->init();
Scene->Checked=true;
//Timer3 ->Enabled=true;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TFormMain::QuitterClick(TObject *Sender)
{
// a->bs.m_a_j_f(a->bs.type) ;
Close();
}
//////////////////////////////////////
void __fastcall TFormMain::individusClick(TObject *Sender)
{
if(Scene->Checked)
individus->Down=true;
// a=new agent(e);
agt_dess=true;
//indiv->Enabled=false;
//individus->Enabled=false;
Reinit->Enabled=true;
/*
a=new agent(e);
agt_dess=true;
supp_agn->Enabled=true;
s_agent->Enabled=true;
Ajou_agn->Enabled=false;
a_agent->Enabled=false;
Reinit->Enabled=true;
l_anim->Enabled=true;
p_anim->Enabled=true;
a_anim->Enabled=true;
Lancer1->Enabled=true;
Pause1->Enabled=true;
Arreter1->Enabled=true;*/
}
///////////////////////////////////////
//---------------------------------------------------------------------------
void __fastcall TFormMain::indivClick(TObject *Sender)
{
//individus->Click();
/*if(Scene->Checked)
indiv->Checked=true;
// a=new agent(e);
//agt_dess=true;
indiv->Enabled=false;
individus->Enabled=false;
Reinit->Enabled=true;*/
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::supp_agnClick(TObject *Sender)
{
if(Scene->Enabled==false)
Scene->Enabled=true;
//a->clean();
//free(a);
agt=false;
//supp_agn->Enabled=false;
//s_agent->Enabled=false;
if(V2D->Checked)
{
indiv->Enabled=true;
individus->Enabled=true;
}
//l_anim->Enabled=false;
//p_anim->Enabled=false;
dem->Enabled=false;
//a_anim->Enabled=false;
//Lancer1->Enabled=false;
//Pause1->Enabled=false;
//Arreter1->Enabled=false;
//Evenement_de_panique1->Enabled=false;
}
//---------------------------------------------------------------------------
/////////////////////////////////////////////////:
void __fastcall TFormMain::ReinitClick(TObject *Sender)
{
Scene->Enabled=true;
Timer1->Enabled=false;
Timer2->Enabled=false;
free(e);
//free(a);
Scene->Checked=false;
agt=false;
//
// supp_agn->Enabled=false;
//s_agent->Enabled=false;
//indiv->Enabled=false;
individus->Enabled=false;
Reinit->Enabled=true;
//l_anim->Enabled=false;
//p_anim->Enabled=false;
dem->Enabled=false;
//a_anim->Enabled=false;
//Lancer1->Enabled=false;
//Pause1->Enabled=false;
//Arreter1->Enabled=false;
//Evenement_de_panique1->Enabled=false;
vu2d->Enabled=false;
V2D->Enabled=false;
vu3d->Enabled=false;
V3D->Enabled=false;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TFormMain::V2DClick(TObject *Sender)
{
indiv->Enabled=true;
individus->Enabled=true;
V2D->Checked=true ;
V3D->Checked=false ;
v2d=true ;
v3d=false ;
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::V3DClick(TObject *Sender)
{
indiv->Enabled=false;
individus->Enabled=false;
V3D->Checked=true ;
V2D->Checked=false ;
vu2d->Enabled=true;
vu3d->Enabled=false;
v3d=true ;
v2d=false ;
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::Timer1Timer(TObject *Sender)
{
if(aller)
{
se_deplacer();
}
//FormMain->DrawObjects();
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::AnimClick(TObject *Sender)
{
//Timer1->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::Lancer1Click(TObject *Sender)
{
initial_matENV();
individus-> Down=false;
indicev=indicef=-1;
if(nbmaxind)
{
if(!pause)
{
for(int i=1;i<=nbmaxind;i++)
{
monde[i].position.I = monde[i].start.I ;
monde[i].position.J = monde[i].start.J ;
monde[i].chez_lui=false;
}
back_to_home();
Timer1->Enabled=true;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::Pause1Click(TObject *Sender)
{
Timer1->Enabled=false;
//Timer2->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::Arreter1Click(TObject *Sender)
{
Timer1->Enabled=false;
//Timer2->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::initClick(TObject *Sender)
{
Timer1->Enabled=false;
Timer2->Enabled=false;
free(e);
//free(a);
Scene->Checked=false;
agt=false;
//
//supp_agn->Enabled=false;
//s_agent->Enabled=false;
//indiv->Enabled=false;
individus->Enabled=false;
Reinit->Enabled=true;
//l_anim->Enabled=false;
//p_anim->Enabled=false;
dem->Enabled=false;
//a_anim->Enabled=false;
//Lancer1->Enabled=false;
//Pause1->Enabled=false;
//Arreter1->Enabled=false;
//Evenement_de_panique1->Enabled=false;
vu2d->Enabled=false;
V2D->Enabled=false;
vu3d->Enabled=false;
V3D->Enabled=false;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TFormMain::s_agentClick(TObject *Sender)
{
//s_agent->Down=true;
if(Scene->Enabled==false)
Scene->Enabled=true;
//a ->clean();
//free(a);
agt=false;
//supp_agn->Enabled=false;
//s_agent->Enabled=false;
if(V2D->Checked)
{
//indiv->Enabled=true;
individus->Enabled=true;
}
//l_anim->Enabled=false;
//p_anim->Enabled=false;
dem->Enabled=false;
//a_anim->Enabled=false;
//Lancer1->Enabled=false;
//Pause1->Enabled=false;
//Arreter1->Enabled=false;
//Evenement_de_panique1->Enabled=false;
//agt_dess=false;
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::l_animClick(TObject *Sender)
{
Timer1->Enabled=true;
Timer2->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::p_animClick(TObject *Sender)
{
Timer1->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::a_animClick(TObject *Sender)
{
Timer1->Enabled=false;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TFormMain::vu2dClick(TObject *Sender)
{
indiv->Enabled=true;
individus->Enabled=true;
V2D->Checked=true ;
V3D->Checked=false ;
vu2d->Enabled=false;
vu3d->Enabled=true;
v2d=true ;
v3d=false ;
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::vu3dClick(TObject *Sender)
{
indiv->Enabled=false;
individus->Enabled=false;
V3D->Checked=true ;
V2D->Checked=false ;
vu2d->Enabled=true;
vu3d->Enabled=false;
v3d=true ;
v2d=false ;
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::Timer3Timer(TObject *Sender)
{
Timer3->Enabled=false;
//int r= Application->MessageBox("Vous voulez continuer ?","Test d'acceptation", MB_YESNO);
//if(r==IDNO)
//{
//free(e);
//free(a);
//Scene->Checked=false;
agt=false;
//supp_agn->Enabled=false;
//s_agent->Enabled=false;
//indiv->Enabled=false;
individus->Enabled=false;
Reinit->Enabled=true;
//l_anim->Enabled=false;
//p_anim->Enabled=false;
dem->Enabled=false;
//a_anim->Enabled=false;
//Lancer1->Enabled=false;
//Pause1->Enabled=false;
//Arreter1->Enabled=false;
//Evenement_de_panique1->Enabled=false;
vu2d->Enabled=false;
V2D->Enabled=false;
vu3d->Enabled=false;
V3D->Enabled=false;
//}
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::Timer4Timer(TObject *Sender)
{
Timer4->Enabled=false;
Timer1->Enabled=false;
Timer2->Enabled=false;
free(e);
//free(a);
Scene->Checked=false;
Scene->Enabled=true;
agt=false;
//
//supp_agn->Enabled=false;
//s_agent->Enabled=false;
indiv->Enabled=false;
individus->Enabled=false;
Reinit->Enabled=true;
//l_anim->Enabled=false;
//p_anim->Enabled=false;
dem->Enabled=false;
//a_anim->Enabled=false;
//Lancer1->Enabled=false;
//Pause1->Enabled=false;
//Arreter1->Enabled=false;
//Evenement_de_panique1->Enabled=false;
vu2d->Enabled=false;
V2D->Enabled=false;
vu3d->Enabled=false;
V3D->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::RienitClick(TObject *Sender)
{
Scene->Enabled=true;
Timer1->Enabled=false;
Timer2->Enabled=false;
free(e);
//free(a);
Scene->Checked=false;
agt=false;
//
individus->Down=false;
//supp_agn->Enabled=false;
//s_agent->Enabled=false;
//indiv->Enabled=false;
individus->Enabled=false;
Reinit->Enabled=true;
//l_anim->Enabled=false;
//p_anim->Enabled=false;
dem->Enabled=false;
//a_anim->Enabled=false;
//Lancer1->Enabled=false;
//Pause1->Enabled=false;
//Arreter1->Enabled=false;
//Evenement_de_panique1->Enabled=false;
vu2d->Enabled=false;
V2D->Enabled=false;
vu3d->Enabled=false;
V3D->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::Panel1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
int ixpos,iypos;
GLfloat r1 = (20.0 / Panel1->Width);
GLfloat r2 = (20.0 / Panel1->Height);
GLfloat r, W;
// point p;
if(agt_dess )
{
if (r1 < r2)
{
r = r2;
W = Panel1->Height;
}
else
{
r = r1;
W = Panel1->Width;
}
Xpos = ((X - W / 2.0) * r)+((e->col)/4.0)-3.5 ;
Ypos = ((Y- W / 2.0 ) * r)+((e->lig)/4);;
ixpos=Xpos-int(Xpos);
if(ixpos>0.5)
Xpos=int(Xpos)+1;
else
Xpos=int(Xpos) ;
iypos=Ypos-int(Ypos);
if(ixpos>0.5)
Xpos=int(Xpos)+1;
else
Xpos=int(Xpos);
if( individus->Down && nbmaxind<30)
{
if(!But1)
{
if((Xpos<e->col)&&(Ypos<e->lig)&&(e->get_val(Ypos*2,Xpos*2)==0) )
{
nbmaxind++; // e->get_val_id(Xpos,Ypos)
monde[nbmaxind].start.I=monde[nbmaxind].position.I=Ypos*2;
e->matENV[Ypos*2][Xpos*2].ID.I=Ypos*2;
matENV[Ypos*2][Xpos*2].ID.I=Ypos*2;
monde[nbmaxind].start.J=monde[nbmaxind].position.J=Xpos*2;
e->matENV[Ypos*2][Xpos*2].ID.J=Xpos*2;
matENV[Ypos*2][Xpos*2].ID.J=Xpos*2;
monde[nbmaxind].action=arrest;
monde[nbmaxind].chez_lui=false;
monde[nbmaxind].color.r=random(255)/255.0; monde[nbmaxind].color.v=random(200)/255.0;
monde[nbmaxind].angle=0;
monde[nbmaxind].butaccessible=false;
monde[nbmaxind].longueurchemin=0;
monde[nbmaxind].direction=1;
point p;
set_point(&p,Ypos,-2.0,Xpos);
//aff_individus();
//e->init_ag(Xpos*2,Ypos*2,0.5,0.5);
e->matENV[Ypos*2][Xpos*2].L=2; //occupée par un individu
individus_creation();
set_centre(p);
glPopMatrix();
agt=true;
But1=true;
}
/*else
{
ShowMessage("Place occupée ! ");
}*/
}
else
if((Xpos<e->col)&&(Ypos<e->lig)&&(e->get_val(Ypos*2,Xpos*2)==0) )
{
point p;
set_point(&p,Ypos,-2.0,Xpos);
glPushMatrix();
monde[nbmaxind].goal.I=Ypos*2;
e->matENV[Ypos*2][Xpos*2].ID.I=Ypos*2;
monde[nbmaxind].goal.J= Xpos*2;
e->matENV[Ypos*2][Xpos*2].ID.J=Xpos*2;
aff_but();
set_centre(p);
glPopMatrix();
But1=false;
}
/*else
ShowMessage("Place occupée ! ");*/
}
if(nbmaxind==2)
{
//ShowMessage("Il y a assez de population");
individus->Down = false;
individus->Enabled = false;
}
//supp_agn->Enabled=true;
//s_agent->Enabled=true;
//l_anim->Enabled=true;
//p_anim->Enabled=true;
dem->Enabled=true;
//a_anim->Enabled=true;
//Lancer1->Enabled=true;
//Pause1->Enabled=true;
//Arreter1->Enabled=true;
//Evenement_de_panique1->Enabled=true;
}
}
//---------------------------------------------------------------------------
void initial_matENV()
{ int i,j;
for(i=0;i<40;i++)
{
for(j=0;j<60;j++)
{
matENV[i][j].L=e->get_val(i,j);
//matENV[i][j].ID.I=e->matENV[i][j].ID.I;
//matENV[i][j].ID.J=e->matENV[i][j].ID.J;
}
}
}
//////////////////////////
void __fastcall TFormMain::Timer2Timer(TObject *Sender)
{
if(aller)
{
se_deplacer();
}
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::demClick(TObject *Sender)
{
Timer1->Enabled=false; aller=false;
int k=1,i;
indicev=indicef=-1;
for(i=1;i<=nbmaxind ;i++)
{
monde[i].goal.I=0;
monde[i].goal.J=0;
}
for(i=1;i<=nbmaxind ;i++)
{ monde[i].start.I=monde[i].position.I=pospi[i].I;
e->matENV[pospi[i].I][pospj[i].J].ID.I=pospi[i].I;
matENV[pospi[i].I][pospj[i].J].ID.I=pospi[i].I;
monde[i].start.J=monde[i].position.J=pospj[i].J;
e->matENV[pospi[i].I][pospj[i].J].ID.J=pospj[i].J;
matENV[pospi[i].I][pospj[i].J].ID.J=pospj[i].J;
monde[i].action=arrest;
monde[i].chez_lui=false;
//monde[i].color.r=random(255)/255.0; monde[nbmaxind].color.v=random(200)/255.0;
monde[i].angle=0;
monde[i].butaccessible=false;
monde[i].longueurchemin=0;
monde[i].direction=1;
if(pospi[i].I<20)
{
monde[i].goal.I=2;
monde[i].goal.J=30;
}
if(pospi[i].I>=20)
{
monde[i].goal.I=39;
monde[i].goal.J=14;
}
}
if(nbmaxind)
{
if(!pause)
{
for(i=1;i<=nbmaxind;i++)
{
monde[i].position.I = monde[i].start.I;//=pospi[i].I ;
monde[i].position.J = monde[i].start.J;//=pospj[i].J ;
monde[i].chez_lui=false;
}
back_to_home1();
Timer2->Enabled=true;
}
}
}
//---------------------------------------------------------------------------
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.