Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/3DPacman_FS19/src/modules/pacman/PacmanGhost.cc @ 12316

Last change on this file since 12316 was 12316, checked in by peterf, 5 years ago

Red Pacman seems to work partially

  • Property svn:executable set to *
File size: 38.7 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *                    > www.orxonox.net <
4 *
5 *
6 *   License notice:
7 *
8 *   This program is free software; you can redistribute it and/or
9 *   modify it under the terms of the GNU General Public License
10 *   as published by the Free Software Foundation; either version 2
11 *   of the License, or (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU General Public License for more details.
17 *
18 *   You should have received a copy of the GNU General Public License
19 *   along with this program; if not, write to the Free Software
20 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21 *
22 *   Author:
23 *      Marc Dreher
24 *   Co-authors:
25 *      ..
26 *
27 */
28
29#include "PacmanGhost.h"
30
31#include "core/CoreIncludes.h"
32#include "BulletDynamics/Dynamics/btRigidBody.h"
33
34namespace orxonox
35{
36
37
38    struct PacmanGhost::graphVertex {
39
40        public:
41
42            Vector3 position;
43            graphVertex *adjacentVertices[4]; //neighbooring vertices
44
45            //would a vector of vector storing the neighboors not be more suitable ?
46
47            int shortestDistanceToStart; //actual shortest distance to start point
48            graphVertex* actuelPredecessor; //the predecessor giving the for now shortest
49                                            //path to start
50            graphVertex* currentNearestNonVisitedNeighboor; 
51            bool alreadyVisited;
52            graphVertex(){ //default constructor
53                position=0;
54                shortestDistanceToStart= std::numeric_limits<int>::max();
55                actuelPredecessor=nullptr;
56                alreadyVisited=false;
57                for(int kl =0; kl <4;kl++){
58                    adjacentVertices[kl]=nullptr;  //first put all position in array listing neighboors to 0
59                }
60            }
61            graphVertex(Vector3 wantedPosition){  //normal constructor
62                position=wantedPosition;
63                shortestDistanceToStart= std::numeric_limits<int>::max(); //default distance is infinity
64                actuelPredecessor=nullptr;
65                alreadyVisited=false;
66                for(int kl =0; kl <4;kl++){
67                    adjacentVertices[kl]=nullptr;  //first put all position in array listing neighboors to 0
68                }
69            }
70            graphVertex& operator = (const graphVertex &rightSide){
71            this->position=rightSide.position;
72    this->shortestDistanceToStart=rightSide.shortestDistanceToStart;
73            this->actuelPredecessor=rightSide.actuelPredecessor;
74    this->currentNearestNonVisitedNeighboor=rightSide.currentNearestNonVisitedNeighboor;
75    this->alreadyVisited=rightSide.alreadyVisited;
76   
77            return *this;
78        }
79
80        };
81
82
83    static PacmanGhost::graphVertex listOfVertices[67];
84
85    //Check if there is a collision
86        bool findpos(Vector3 one, Vector3 other){
87       if((abs(one.x - other.x)<0.5) && (abs(one.y - other.y)<0.5) && (abs(one.z - other.z)<0.5)) return true;
88        return false;
89        }
90
91    //All positions in the map, see documentation
92     Vector3 possibleposition[67] = {Vector3(20,10,245),Vector3(215,10,245),Vector3(215,10,195),Vector3(185,10,195),Vector3(135,10,195), //0-4
93        Vector3(185,10,150),Vector3(135,10,150),Vector3(215,10,150),Vector3(215,10,105),Vector3(135,10,105), //5-9
94        Vector3(135,10,15),Vector3(135,10,-85),Vector3(215,10,-85),Vector3(135,10,-135),Vector3(215,10,-135), //10-14
95        Vector3(215,10,-195),Vector3(135,10,-195),Vector3(20,10,195),Vector3(-20,10,195),Vector3(-20,10,245), //15-19
96        Vector3(-215,10,245),Vector3(-215,10,195),Vector3(-185,10,195),Vector3(-135,10,195),Vector3(-70,10,195), //20-24
97        Vector3(70,10,195),Vector3(70,10,150),Vector3(20,10,150),Vector3(-20,10,150),Vector3(-70,10,150), //25-29
98        Vector3(-135,10,150),Vector3(-185,10,150),Vector3(-215,10,150),Vector3(-215,10,105),Vector3(-135,10,105), //30-34
99        Vector3(-70,10,105),Vector3(-20,10,105),Vector3(20,10,105),Vector3(70,10,105),Vector3(70,10,60), //35-39
100        Vector3(0,10,60),Vector3(-70,10,60),Vector3(-135,10,15),Vector3(-70,10,60),Vector3(0,10,15), //40-44
101        Vector3(70,10,15),Vector3(-70,10,-35),Vector3(-20,10,-35),Vector3(20,10,-35),Vector3(70,10,-35), //45-49
102        Vector3(70,10,-85),Vector3(20,10,-85),Vector3(-20,10,-85),Vector3(-70,10,-85),Vector3(-135,10,-85), //50-54
103        Vector3(-215,10,-85),Vector3(-215,10,-135),Vector3(-135,10,-135),Vector3(-70,10,-135),Vector3(-20,10,-135), //55-59
104        Vector3(20,10,-135),Vector3(70,10,-135),Vector3(20,10,-195),Vector3(-20,10,-195),Vector3(-135,10,-195), //60-64
105        Vector3(-215,10,-195),Vector3(0,10,-35)}; //65-66
106
107    RegisterClass(PacmanGhost);
108
109    /**
110    @brief
111        Constructor. Registers the object and initializes some default values.
112    @param creator
113        The creator of this object.
114    */
115    PacmanGhost::PacmanGhost(Context* context) : ControllableEntity(context)
116    {
117        RegisterObject(PacmanGhost);
118
119        //this->pathAlgorithm = new GetShortestPathAlgorithm;
120
121
122        this->velocity = Vector3(0, 0, 0);
123
124        this->setCollisionType(CollisionType::Dynamic);
125       
126        this->actuelposition = this->getPosition();
127
128        if(findpos(actuelposition, Vector3(0,-20,0)))
129            dontmove = true;
130       
131        this->target_x = actuelposition.x;
132        this->target_z = actuelposition.z; 
133
134        //this->lastPlayerPassedPoint=Vector3(185,10,150); //no idea what to put
135
136    }
137
138    /**
139    @brief
140        Destructor. Destroys ghost, if present.
141    */
142    PacmanGhost::~PacmanGhost()
143    {
144        // Deletes the controller if the object was initialized and the pointer to the controller is not nullptr.
145    }
146
147    /**
148    @brief
149        Method for creating a ghost through XML.
150    */
151     void PacmanGhost::XMLPort(Element& xmlelement, XMLPort::Mode mode)
152    {
153        SUPER(PacmanGhost, XMLPort, xmlelement, mode);
154    }
155
156    //Change this with other ghost
157    void PacmanGhost::changewith(PacmanGhost* otherghost){
158
159        while(lockmove){};
160        lockmove = true;    //Prevent change of target while ghost is changed
161
162        otherghost->setPosition(this->getPosition());
163        this->setPosition(0,-20,0);
164        otherghost->target_x = this->target_x;   
165        otherghost->target_z = this->target_z;
166        otherghost->ismoving = this->ismoving;
167
168        this->dontmove = true;
169        otherghost->dontmove = false;
170
171        lockmove = false;
172    }
173
174    //Move ghost with rotation
175    void PacmanGhost::move(float dt, Vector3 actuelposition, Vector3 velocity){
176        if(!dontmove){
177            this->setPosition(Vector3(actuelposition.x+speed*velocity.x*dt,10,actuelposition.z+speed*velocity.z*dt));
178       
179        //Rotate ghost in the direction of movement
180        if((abs(abs(velocity.x)-1)<0.1) && (abs(velocity.z-0)<0.1)){
181            if(velocity.x<0){
182                 this->setOrientation(Quaternion(Radian(-1.57), Vector3(0, 1, 0))); 
183            }
184            else{
185                 this->setOrientation(Quaternion(Radian(1.57), Vector3(0, 1, 0))); 
186            }
187        }
188        if((abs(abs(velocity.z)-1)<0.1) && (abs(velocity.x-0)<0.1)){
189            if(velocity.z<0){
190                 this->setOrientation(Quaternion(Radian(3.14), Vector3(0, 1, 0))); 
191            }
192            else{
193                 this->setOrientation(Quaternion(Radian(0), Vector3(0, 1, 0))); 
194            }
195        }
196                     
197     }
198    }
199
200    //Change ability to move
201    void PacmanGhost::changemovability(){
202        if(dontmove){
203         dontmove = false;}
204        else{
205         dontmove = true;   
206        }
207    }
208
209    //ResetGhost
210    void PacmanGhost::resetGhost(){
211   
212        this->setPosition(this->resetposition);
213        this->ismoving = false;
214        this->actuelposition = this->getPosition();
215       
216        this->target_x = actuelposition.x;
217        this->target_z = actuelposition.z;
218   
219    }
220
221    //Increase speed of ghosts
222    void PacmanGhost::levelupvelo(){
223        speed ++;
224    }
225
226    /*Vector3 PacmanGhost::setPureArrayPos(Vector3 &posToSet){
227        //given that the position of a pacman is generally not "neat",
228        //we need to set it to the nearest point on the map
229        // if the pacman is not moving anymore, i.e. has reached a point
230        int i=0;
231        while(!(findpos(possibleposition[i], posToSet))){
232            i++;
233        }
234        return possibleposition[i];
235    }*/
236
237    Vector3 PacmanGhost::getPlayerPos()
238    {
239        for (PacmanGelb* player : ObjectList<PacmanGelb>())
240        {
241            return player->getWorldPosition();
242        }
243        return Vector3(0,0,0); //default, should not be used
244   
245    }
246
247
248
249
250    ///
251    //// getShortestPath   /////////
252    ///
253
254       
255       
256
257        Vector3 PacmanGhost::getShortestPath(Vector3 start, Vector3 goal){
258        //this function should then somehow produce the algorithm and call all other functions
259        //and finally return the best neighboor of the actual position of the pacman
260       
261
262    graphVertex listOfVerticesM[67]; //our list of all possible graphs
263    graphVertex* actualVertex;// = new graphVertex(); //we will walk through the array with a pointer
264   
265        if(start==goal){ // basic case
266            return start; 
267        }
268
269        for(int an=0; an < 67; an++){
270      listOfVerticesM[an]= graphVertex(possibleposition[an]); //same position order as in other file
271    if(start==possibleposition[an]){
272     actualVertex= &listOfVerticesM[an]; //our pointer points to the graph with position start in array
273    //cout<<an<<endl;
274            }
275        }
276
277        actualVertex->alreadyVisited=true; //our start point is now visited
278        actualVertex->shortestDistanceToStart=0; //At our start point, distance from start is 0
279        findNeighboorVertices(actualVertex->position, actualVertex->adjacentVertices, listOfVerticesM); 
280        // second parameter is an array ! //third is our global array
281
282        while(actualVertex->position!=goal){
283            for(int h=0;h < 4; h++){
284                if(actualVertex->adjacentVertices[h]!=nullptr){ //check all neighboors of our current graphVertex
285 
286         //h=2 and 3 never reached
287                    updateShortestDistanceToStart(*actualVertex, *actualVertex->adjacentVertices[h]);
288                } //we "update" the neighboors of our new visited vertex
289       
290            }
291           
292            actualVertex=findNextVertexToConsider(listOfVerticesM);
293            actualVertex->alreadyVisited=true;
294    //cout<<actualVertex->position<<endl;
295            if(actualVertex->position!=goal){
296                findNeighboorVertices(actualVertex->position, actualVertex->adjacentVertices, listOfVerticesM); 
297                //we find the neighboors of our new visited vertex
298                }
299        }
300
301    //cout<<"meuejeeke"<<endl; never reached
302
303        //we should have reached our goal at this point
304
305        while(actualVertex->actuelPredecessor->actuelPredecessor!=nullptr){ //the predecessor of our predecessor
306            actualVertex=actualVertex->actuelPredecessor;
307        }
308        // the predecessor is our starting point, in other words we are now on an
309        //adjacent vertex of the start
310
311        return actualVertex->position; //we return the position of this - adjacent to start - vertex
312    }
313
314//end of getShortestPath
315
316
317    int PacmanGhost::graphDistance(Vector3 start, Vector3 goal){
318    //cout<<hgj++<<endl;
319        Vector3 differenceVector= Vector3(abs(goal.x-start.x), 0,abs(goal.z-start.z));
320
321        return differenceVector.x+differenceVector.z;
322    }
323
324    void PacmanGhost::updateShortestDistanceToStart(graphVertex &vertex, graphVertex &neighboor){
325        //apply this method to all non visited neighboors of a vertex.
326        // This method should always be run on a vertex after we marked it as visited.
327        if(neighboor.alreadyVisited==false){ //we only consider non visited neighboors.
328            if((vertex.shortestDistanceToStart!=std::numeric_limits<int>::max())&&
329        (neighboor.shortestDistanceToStart > vertex.shortestDistanceToStart + 
330                graphDistance(vertex.position, neighboor.position))){ //need to consider overflow case !
331       
332                neighboor.shortestDistanceToStart= vertex.shortestDistanceToStart + 
333                graphDistance(vertex.position, neighboor.position);
334                neighboor.actuelPredecessor = &vertex;
335            }
336        }
337    }
338
339    void PacmanGhost::findNearestNonVisitedNeighboor (graphVertex &vertex){ 
340            //find nearest non visited neighboor of a given already visited vertex
341        int shortestDistance = -1;
342        graphVertex* nearestNonVisitedNeighboor=nullptr;//=graphVertex(); //by default there is not any.
343        //Also, if all neighboors are already visited, we return nullptr, i.e. there is no
344        //nearest non visited neighboor.
345        for(int i=0; i < 4; i++){
346            if((vertex.adjacentVertices[i]!=nullptr)&&(vertex.adjacentVertices[i]->alreadyVisited==false)){
347                if(shortestDistance==-1){   //(concerns line above) we want a non visited neighboor
348                    shortestDistance= graphDistance(vertex.position, vertex.adjacentVertices[i]->position);
349                    nearestNonVisitedNeighboor=vertex.adjacentVertices[i]; //warning, both sides are pointer adresses !
350    //cout<<shortestDistance<<endl;
351                }
352                else if(graphDistance(vertex.position, vertex.adjacentVertices[i]->position)<shortestDistance){
353                    shortestDistance= graphDistance(vertex.position, vertex.adjacentVertices[i]->position);
354                    nearestNonVisitedNeighboor=vertex.adjacentVertices[i]; //warning, both sides are pointer adresses !
355        //cout<<(hgj++)%4<<endl;
356                }
357            }
358        }
359        vertex.currentNearestNonVisitedNeighboor = nearestNonVisitedNeighboor; //warning, both sides are pointer adresses !
360    //cout<<hgj++<<endl;
361    }
362
363
364    PacmanGhost::graphVertex* PacmanGhost::findNextVertexToConsider(graphVertex listOfVerticesP[]){ //find next, nearest from start, non visited vertex in our listOfVertices array
365
366        int shortestDistance = -1;
367        graphVertex* nextVertexToConsider;
368
369        for(int i=0; i < 67; i++){ //we loop over all possible positions
370
371            if(listOfVerticesP[i].alreadyVisited==true){ //vertex should already be visited
372
373                findNearestNonVisitedNeighboor(listOfVerticesP[i]); //we update nearest neighboor
374                //of all visited vertices given that one of the nearest neighboor of a visited
375                // vertex is now also visited because it was chosen as next optimal vertex
376
377                if(listOfVerticesP[i].currentNearestNonVisitedNeighboor!=nullptr){ //we want a candidate!
378                if(shortestDistance==-1){ //our first possible candidate
379
380            shortestDistance=graphDistance(listOfVerticesP[i].position, 
381            listOfVerticesP[i].currentNearestNonVisitedNeighboor->position) + 
382            listOfVerticesP[i].shortestDistanceToStart;
383
384            nextVertexToConsider=listOfVerticesP[i].currentNearestNonVisitedNeighboor;
385    //adress of nextVertexToConsider is that of pointer currentNearestNonVisitedNeighboor
386
387                }
388                else if(shortestDistance > graphDistance(listOfVerticesP[i].position, 
389                listOfVerticesP[i].currentNearestNonVisitedNeighboor->position) + 
390                    listOfVerticesP[i].shortestDistanceToStart){//if better candidate than our first candidate available
391
392            shortestDistance=graphDistance(listOfVerticesP[i].position, 
393            listOfVerticesP[i].currentNearestNonVisitedNeighboor->position) + 
394            listOfVerticesP[i].shortestDistanceToStart;
395
396            nextVertexToConsider=listOfVerticesP[i].currentNearestNonVisitedNeighboor;
397    //we dont need the & because we are not giving the adress of the array element
398    //listOfVerticesP[i] but that of the pointer currentNearestNonVisitedNeighboor
399                    }
400                }
401            }
402            //we want after all to return the nearest non visited neighboor
403        }
404
405        return nextVertexToConsider; //returns adress nextVertexToConsider is pointing to in array
406    }
407
408    //////////////////////////////////////////////////////////////////////////////////////////////
409
410    //if vertex already visited, call function on it and reapeat until you reach non visited vertex
411    // ---> not sure if a good idea because we risk infinite loop
412
413    //-215 -185 -135 -70 -20 0 20 70 135 185 215
414
415    //-195 -135 -85 -35 15 60 105 150 195 245
416
417    void PacmanGhost::findNeighboorVertices(Vector3 actuelposition, graphVertex* adjacentVertices[], graphVertex listOfVerticesP2[]){     
418
419
420            if(findpos(actuelposition,possibleposition[0])){
421                // we should use listOfVerticesP2[i] instead of possibleposition[i] I think
422                // so that all neighboors are "the same"
423                adjacentVertices[0]=&listOfVerticesP2[1]; //graphVertex(possibleposition[1]);  //need to do it everywhere !!!
424                adjacentVertices[1]=&listOfVerticesP2[17]; //graphVertex(possibleposition[17]);
425                adjacentVertices[2]=&listOfVerticesP2[19]; //graphVertex(possibleposition[19]); //maybe a vector would be more suitable ?
426            }
427            else if(findpos(actuelposition,possibleposition[1])){
428                adjacentVertices[0]=&listOfVerticesP2[0]; //graphVertex(possibleposition[0]);
429                adjacentVertices[1]=&listOfVerticesP2[2]; //graphVertex(possibleposition[2]);
430            }
431            else if(findpos(actuelposition,possibleposition[2])){
432                adjacentVertices[0]=&listOfVerticesP2[1]; //graphVertex(possibleposition[1]);
433                adjacentVertices[1]=&listOfVerticesP2[3]; //graphVertex(possibleposition[3]);
434            }
435            else if(findpos(actuelposition,possibleposition[3])){
436                adjacentVertices[0]=&listOfVerticesP2[2]; //graphVertex(possibleposition[2]);
437                adjacentVertices[1]=&listOfVerticesP2[4]; //graphVertex(possibleposition[4]);
438                adjacentVertices[2]=&listOfVerticesP2[5]; //graphVertex(possibleposition[5]);
439            }
440            else if(findpos(actuelposition,possibleposition[4])){
441                adjacentVertices[0]=&listOfVerticesP2[3]; //graphVertex(possibleposition[3]);
442                adjacentVertices[1]=&listOfVerticesP2[6]; //graphVertex(possibleposition[6]);
443            }
444            else if(findpos(actuelposition,possibleposition[5])){
445                adjacentVertices[0]=&listOfVerticesP2[3]; //graphVertex(possibleposition[3]);
446                adjacentVertices[1]=&listOfVerticesP2[7]; //graphVertex(possibleposition[7]);
447            }
448            else if(findpos(actuelposition,possibleposition[6])){
449                adjacentVertices[0]=&listOfVerticesP2[4]; //graphVertex(possibleposition[4]);
450                adjacentVertices[1]=&listOfVerticesP2[9]; //graphVertex(possibleposition[9]);
451                adjacentVertices[2]=&listOfVerticesP2[26]; //graphVertex(possibleposition[26]);
452            }
453            else if(findpos(actuelposition,possibleposition[7])){
454                adjacentVertices[0]=&listOfVerticesP2[5]; //graphVertex(possibleposition[5]);
455                adjacentVertices[1]=&listOfVerticesP2[8]; //graphVertex(possibleposition[8]);
456            }
457            else if(findpos(actuelposition,possibleposition[8])){
458                adjacentVertices[0]=&listOfVerticesP2[7]; //graphVertex(possibleposition[7]);
459                adjacentVertices[1]=&listOfVerticesP2[9]; //graphVertex(possibleposition[9]);
460            }
461            else if(findpos(actuelposition,possibleposition[9])){
462                adjacentVertices[0]=&listOfVerticesP2[6]; //graphVertex(possibleposition[6]);
463                adjacentVertices[1]=&listOfVerticesP2[8]; //graphVertex(possibleposition[8]);
464                adjacentVertices[2]=&listOfVerticesP2[10]; //graphVertex(possibleposition[10]);
465                adjacentVertices[3]=&listOfVerticesP2[38]; //graphVertex(possibleposition[38]);
466            }
467            else if(findpos(actuelposition,possibleposition[10])){
468                adjacentVertices[0]=&listOfVerticesP2[9]; //graphVertex(possibleposition[9]);
469                adjacentVertices[1]=&listOfVerticesP2[11]; //graphVertex(possibleposition[11]);
470                adjacentVertices[2]=&listOfVerticesP2[45]; //graphVertex(possibleposition[45]);
471            }
472            else if(findpos(actuelposition,possibleposition[11])){
473                adjacentVertices[0]=&listOfVerticesP2[10]; //graphVertex(possibleposition[10]);
474                adjacentVertices[1]=&listOfVerticesP2[12]; //graphVertex(possibleposition[12]);
475                adjacentVertices[2]=&listOfVerticesP2[13]; //graphVertex(possibleposition[13]);
476            }
477            else if(findpos(actuelposition,possibleposition[12])){
478                adjacentVertices[0]=&listOfVerticesP2[11]; //graphVertex(possibleposition[11]);
479                adjacentVertices[1]=&listOfVerticesP2[14]; //graphVertex(possibleposition[14]);
480            }
481            else if(findpos(actuelposition,possibleposition[13])){
482                adjacentVertices[0]=&listOfVerticesP2[11]; //graphVertex(possibleposition[11]);
483                adjacentVertices[1]=&listOfVerticesP2[14]; //graphVertex(possibleposition[14]);
484                adjacentVertices[2]=&listOfVerticesP2[16]; //graphVertex(possibleposition[16]);
485                adjacentVertices[3]=&listOfVerticesP2[61]; //graphVertex(possibleposition[61]);
486            }
487            else if(findpos(actuelposition,possibleposition[14])){
488                adjacentVertices[0]=&listOfVerticesP2[12]; //graphVertex(possibleposition[12]);
489                adjacentVertices[1]=&listOfVerticesP2[13]; //graphVertex(possibleposition[13]);
490                adjacentVertices[2]=&listOfVerticesP2[15]; //graphVertex(possibleposition[15]);
491            }
492            else if(findpos(actuelposition,possibleposition[15])){
493                adjacentVertices[0]=&listOfVerticesP2[14]; //graphVertex(possibleposition[14]);
494                adjacentVertices[1]=&listOfVerticesP2[16]; //graphVertex(possibleposition[16]);
495            }
496            else if(findpos(actuelposition,possibleposition[16])){
497                adjacentVertices[0]=&listOfVerticesP2[13]; //graphVertex(possibleposition[13]);
498                adjacentVertices[1]=&listOfVerticesP2[15]; //graphVertex(possibleposition[15]);
499                adjacentVertices[2]=&listOfVerticesP2[62]; //graphVertex(possibleposition[62]);
500            }
501            else if(findpos(actuelposition,possibleposition[17])){
502                adjacentVertices[0]=&listOfVerticesP2[0]; //graphVertex(possibleposition[0]);
503                adjacentVertices[1]=&listOfVerticesP2[25]; //graphVertex(possibleposition[25]);
504            }
505            else if(findpos(actuelposition,possibleposition[18])){
506                adjacentVertices[0]=&listOfVerticesP2[19]; //graphVertex(possibleposition[19]);
507                adjacentVertices[1]=&listOfVerticesP2[24]; //graphVertex(possibleposition[24]);               
508            }
509            else if(findpos(actuelposition,possibleposition[19])){
510                adjacentVertices[0]=&listOfVerticesP2[0]; //graphVertex(possibleposition[0]);
511                adjacentVertices[1]=&listOfVerticesP2[18]; //graphVertex(possibleposition[18]);
512                adjacentVertices[2]=&listOfVerticesP2[20]; //graphVertex(possibleposition[20]);
513                         }
514            else if(findpos(actuelposition,possibleposition[20])){
515                adjacentVertices[0]=&listOfVerticesP2[19]; //graphVertex(possibleposition[19]);
516                adjacentVertices[1]=&listOfVerticesP2[21]; //graphVertex(possibleposition[21]);
517                       }
518            else if(findpos(actuelposition,possibleposition[21])){
519                adjacentVertices[0]=&listOfVerticesP2[20]; //graphVertex(possibleposition[20]);
520                adjacentVertices[1]=&listOfVerticesP2[22]; //graphVertex(possibleposition[22]);
521                       }
522            else if(findpos(actuelposition,possibleposition[22])){
523                adjacentVertices[0]=&listOfVerticesP2[21]; //graphVertex(possibleposition[21]);
524                adjacentVertices[1]=&listOfVerticesP2[23]; //graphVertex(possibleposition[23]);
525                adjacentVertices[2]=&listOfVerticesP2[31]; //graphVertex(possibleposition[31]);
526                          }
527            else if(findpos(actuelposition,possibleposition[23])){
528                adjacentVertices[0]=&listOfVerticesP2[22]; //graphVertex(possibleposition[22]);
529                adjacentVertices[1]=&listOfVerticesP2[30]; //graphVertex(possibleposition[30]);
530                       }
531            else if(findpos(actuelposition,possibleposition[24])){
532                adjacentVertices[0]=&listOfVerticesP2[18]; //graphVertex(possibleposition[18]);
533                adjacentVertices[1]=&listOfVerticesP2[29]; //graphVertex(possibleposition[29]);
534                       }
535            else if(findpos(actuelposition,possibleposition[25])){
536                adjacentVertices[0]=&listOfVerticesP2[17]; //graphVertex(possibleposition[17]);
537                adjacentVertices[1]=&listOfVerticesP2[26]; //graphVertex(possibleposition[26]);
538                       }
539            else if(findpos(actuelposition,possibleposition[26])){
540                adjacentVertices[0]=&listOfVerticesP2[6]; //graphVertex(possibleposition[6]);
541                adjacentVertices[1]=&listOfVerticesP2[25]; //graphVertex(possibleposition[25]);
542                adjacentVertices[2]=&listOfVerticesP2[27]; //graphVertex(possibleposition[27]);
543                         }
544            else if(findpos(actuelposition,possibleposition[27])){
545                adjacentVertices[0]=&listOfVerticesP2[26]; //graphVertex(possibleposition[26]);
546                adjacentVertices[1]=&listOfVerticesP2[28]; //graphVertex(possibleposition[28]);
547                adjacentVertices[2]=&listOfVerticesP2[37]; //graphVertex(possibleposition[37]);
548                          }
549            else if(findpos(actuelposition,possibleposition[28])){
550                adjacentVertices[0]=&listOfVerticesP2[27]; //graphVertex(possibleposition[27]);
551                adjacentVertices[1]=&listOfVerticesP2[29]; //graphVertex(possibleposition[29]);
552                adjacentVertices[2]=&listOfVerticesP2[36]; //graphVertex(possibleposition[36]);
553                          }
554            else if(findpos(actuelposition,possibleposition[29])){
555                adjacentVertices[0]=&listOfVerticesP2[24]; //graphVertex(possibleposition[24]);
556                adjacentVertices[1]=&listOfVerticesP2[28]; //graphVertex(possibleposition[28]);
557                adjacentVertices[2]=&listOfVerticesP2[30]; //graphVertex(possibleposition[30]);
558                          }
559            else if(findpos(actuelposition,possibleposition[30])){
560                adjacentVertices[0]=&listOfVerticesP2[23]; //graphVertex(possibleposition[23]);
561                adjacentVertices[1]=&listOfVerticesP2[29]; //graphVertex(possibleposition[29]);
562                adjacentVertices[2]=&listOfVerticesP2[34]; //graphVertex(possibleposition[34]);
563                          }
564            else if(findpos(actuelposition,possibleposition[31])){
565                adjacentVertices[0]=&listOfVerticesP2[22]; //graphVertex(possibleposition[22]);
566                adjacentVertices[1]=&listOfVerticesP2[32]; //graphVertex(possibleposition[32]);
567                       }
568            else if(findpos(actuelposition,possibleposition[32])){
569                adjacentVertices[0]=&listOfVerticesP2[31]; //graphVertex(possibleposition[31]);
570                adjacentVertices[1]=&listOfVerticesP2[33]; //graphVertex(possibleposition[33]);
571                       }
572            else if(findpos(actuelposition,possibleposition[33])){
573                adjacentVertices[0]=&listOfVerticesP2[32]; //graphVertex(possibleposition[32]);
574                adjacentVertices[1]=&listOfVerticesP2[34]; //graphVertex(possibleposition[34]);
575                       }
576            else if(findpos(actuelposition,possibleposition[34])){
577                adjacentVertices[0]=&listOfVerticesP2[30]; //graphVertex(possibleposition[30]);
578                adjacentVertices[1]=&listOfVerticesP2[33]; //graphVertex(possibleposition[33]);
579                adjacentVertices[2]=&listOfVerticesP2[35]; //graphVertex(possibleposition[35]);
580                adjacentVertices[3]=&listOfVerticesP2[42]; //graphVertex(possibleposition[42]);
581               
582            }
583            else if(findpos(actuelposition,possibleposition[35])){
584                adjacentVertices[0]=&listOfVerticesP2[34]; //graphVertex(possibleposition[34]);
585                adjacentVertices[1]=&listOfVerticesP2[36]; //graphVertex(possibleposition[36]);
586                adjacentVertices[2]=&listOfVerticesP2[41]; //graphVertex(possibleposition[41]);
587                          }
588            else if(findpos(actuelposition,possibleposition[36])){
589                adjacentVertices[0]=&listOfVerticesP2[28]; //graphVertex(possibleposition[28]);
590                adjacentVertices[1]=&listOfVerticesP2[35]; //graphVertex(possibleposition[35]);
591                       }
592            else if(findpos(actuelposition,possibleposition[37])){
593                adjacentVertices[0]=&listOfVerticesP2[27]; //graphVertex(possibleposition[27]);
594                adjacentVertices[1]=&listOfVerticesP2[38]; //graphVertex(possibleposition[38]);
595                       }
596            else if(findpos(actuelposition,possibleposition[38])){
597                adjacentVertices[0]=&listOfVerticesP2[9]; //graphVertex(possibleposition[9]);
598                adjacentVertices[1]=&listOfVerticesP2[37]; //graphVertex(possibleposition[37]);
599                adjacentVertices[2]=&listOfVerticesP2[39]; //graphVertex(possibleposition[39]);
600                         }
601            else if(findpos(actuelposition,possibleposition[39])){
602                adjacentVertices[0]=&listOfVerticesP2[38]; //graphVertex(possibleposition[38]);
603                adjacentVertices[1]=&listOfVerticesP2[40]; //graphVertex(possibleposition[40]);
604                adjacentVertices[2]=&listOfVerticesP2[45]; //graphVertex(possibleposition[45]);
605                          }
606            else if(findpos(actuelposition,possibleposition[40])){
607                adjacentVertices[0]=&listOfVerticesP2[39]; //graphVertex(possibleposition[39]);
608                adjacentVertices[1]=&listOfVerticesP2[41]; //graphVertex(possibleposition[41]);
609            }
610            else if(findpos(actuelposition,possibleposition[41])){
611                adjacentVertices[0]=&listOfVerticesP2[35]; //graphVertex(possibleposition[35]);
612                adjacentVertices[1]=&listOfVerticesP2[43]; //graphVertex(possibleposition[43]);
613                       }
614            else if(findpos(actuelposition,possibleposition[42])){
615                adjacentVertices[0]=&listOfVerticesP2[34]; //graphVertex(possibleposition[34]);
616                adjacentVertices[1]=&listOfVerticesP2[43]; //graphVertex(possibleposition[43]);
617                adjacentVertices[2]=&listOfVerticesP2[54]; //graphVertex(possibleposition[54]);
618                          }
619            else if(findpos(actuelposition,possibleposition[43])){
620                adjacentVertices[0]=&listOfVerticesP2[41]; //graphVertex(possibleposition[41]);
621                adjacentVertices[1]=&listOfVerticesP2[46]; //graphVertex(possibleposition[46]);
622                       }
623            else if(findpos(actuelposition,possibleposition[44])){
624                adjacentVertices[0]=&listOfVerticesP2[40]; //graphVertex(possibleposition[40]);
625                adjacentVertices[1]=&listOfVerticesP2[66]; //graphVertex(possibleposition[66]);
626                       }
627            else if(findpos(actuelposition,possibleposition[45])){
628                adjacentVertices[0]=&listOfVerticesP2[10]; //graphVertex(possibleposition[10]);
629                adjacentVertices[1]=&listOfVerticesP2[39]; //graphVertex(possibleposition[39]);
630                adjacentVertices[2]=&listOfVerticesP2[49]; //graphVertex(possibleposition[49]);
631                          }
632            else if(findpos(actuelposition,possibleposition[46])){
633                adjacentVertices[0]=&listOfVerticesP2[43]; //graphVertex(possibleposition[43]);
634                adjacentVertices[1]=&listOfVerticesP2[47]; //graphVertex(possibleposition[47]);
635                       }
636            else if(findpos(actuelposition,possibleposition[47])){
637                adjacentVertices[0]=&listOfVerticesP2[46]; //graphVertex(possibleposition[46]);
638                adjacentVertices[1]=&listOfVerticesP2[52]; //graphVertex(possibleposition[52]);
639                adjacentVertices[2]=&listOfVerticesP2[66]; //graphVertex(possibleposition[66]);
640                          }
641            else if(findpos(actuelposition,possibleposition[48])){
642                adjacentVertices[0]=&listOfVerticesP2[49]; //graphVertex(possibleposition[49]);
643                adjacentVertices[1]=&listOfVerticesP2[51]; //graphVertex(possibleposition[51]);
644                adjacentVertices[2]=&listOfVerticesP2[66]; //graphVertex(possibleposition[66]);
645                          }
646            else if(findpos(actuelposition,possibleposition[49])){
647                adjacentVertices[0]=&listOfVerticesP2[45]; //graphVertex(possibleposition[45]);
648                adjacentVertices[1]=&listOfVerticesP2[48]; //graphVertex(possibleposition[48]);
649                       }
650            else if(findpos(actuelposition,possibleposition[50])){
651                adjacentVertices[0]=&listOfVerticesP2[51]; //graphVertex(possibleposition[51]);
652                adjacentVertices[1]=&listOfVerticesP2[61]; //graphVertex(possibleposition[61]);
653                       }
654            else if(findpos(actuelposition,possibleposition[51])){
655                adjacentVertices[0]=&listOfVerticesP2[48]; //graphVertex(possibleposition[48]);
656                adjacentVertices[1]=&listOfVerticesP2[50]; //graphVertex(possibleposition[50]);
657                       }
658            else if(findpos(actuelposition,possibleposition[52])){
659                adjacentVertices[0]=&listOfVerticesP2[47]; //graphVertex(possibleposition[47]);
660                adjacentVertices[1]=&listOfVerticesP2[53]; //graphVertex(possibleposition[53]);
661                       }
662            else if(findpos(actuelposition,possibleposition[53])){
663                adjacentVertices[0]=&listOfVerticesP2[52]; //graphVertex(possibleposition[52]);
664                adjacentVertices[1]=&listOfVerticesP2[58]; //graphVertex(possibleposition[58]);
665                       }
666            else if(findpos(actuelposition,possibleposition[54])){
667                adjacentVertices[0]=&listOfVerticesP2[42]; //graphVertex(possibleposition[42]);
668                adjacentVertices[1]=&listOfVerticesP2[55]; //graphVertex(possibleposition[55]);
669                adjacentVertices[2]=&listOfVerticesP2[57]; //graphVertex(possibleposition[57]);
670                          }
671            else if(findpos(actuelposition,possibleposition[55])){
672                adjacentVertices[0]=&listOfVerticesP2[54]; //graphVertex(possibleposition[54]);
673                adjacentVertices[1]=&listOfVerticesP2[56]; //graphVertex(possibleposition[56]);
674                       }
675            else if(findpos(actuelposition,possibleposition[56])){
676                adjacentVertices[0]=&listOfVerticesP2[55]; //graphVertex(possibleposition[55]);
677                adjacentVertices[1]=&listOfVerticesP2[57]; //graphVertex(possibleposition[57]);
678                adjacentVertices[2]=&listOfVerticesP2[65]; //graphVertex(possibleposition[65]);
679                          }
680            else if(findpos(actuelposition,possibleposition[57])){
681                adjacentVertices[0]=&listOfVerticesP2[54]; //graphVertex(possibleposition[54]);
682                adjacentVertices[1]=&listOfVerticesP2[56]; //graphVertex(possibleposition[56]);
683                adjacentVertices[2]=&listOfVerticesP2[58]; //graphVertex(possibleposition[58]);
684                adjacentVertices[3]=&listOfVerticesP2[64]; //graphVertex(possibleposition[64]);
685               
686            }
687            else if(findpos(actuelposition,possibleposition[58])){
688                adjacentVertices[0]=&listOfVerticesP2[53]; //graphVertex(possibleposition[53]);
689                adjacentVertices[1]=&listOfVerticesP2[57]; //graphVertex(possibleposition[57]);
690                adjacentVertices[2]=&listOfVerticesP2[59]; //graphVertex(possibleposition[59]);
691                          }
692            else if(findpos(actuelposition,possibleposition[59])){
693                adjacentVertices[0]=&listOfVerticesP2[58]; //graphVertex(possibleposition[58]);
694                adjacentVertices[1]=&listOfVerticesP2[59]; //graphVertex(possibleposition[59]);
695                adjacentVertices[2]=&listOfVerticesP2[63]; //graphVertex(possibleposition[63]);
696                          }
697            else if(findpos(actuelposition,possibleposition[60])){
698                adjacentVertices[0]=&listOfVerticesP2[59]; //graphVertex(possibleposition[59]);
699                adjacentVertices[1]=&listOfVerticesP2[61]; //graphVertex(possibleposition[61]);
700                adjacentVertices[2]=&listOfVerticesP2[62]; //graphVertex(possibleposition[62]);
701                          }
702            else if(findpos(actuelposition,possibleposition[61])){
703                adjacentVertices[0]=&listOfVerticesP2[13]; //graphVertex(possibleposition[13]);
704                adjacentVertices[1]=&listOfVerticesP2[50]; //graphVertex(possibleposition[50]);
705                adjacentVertices[2]=&listOfVerticesP2[60]; //graphVertex(possibleposition[60]);
706                          }
707            else if(findpos(actuelposition,possibleposition[62])){
708                adjacentVertices[0]=&listOfVerticesP2[16]; //graphVertex(possibleposition[16]);
709                adjacentVertices[1]=&listOfVerticesP2[60]; //graphVertex(possibleposition[60]);
710                       }
711            else if(findpos(actuelposition,possibleposition[63])){
712                adjacentVertices[0]=&listOfVerticesP2[59]; //graphVertex(possibleposition[59]);
713                adjacentVertices[1]=&listOfVerticesP2[64]; //graphVertex(possibleposition[64]);
714                       }
715            else if(findpos(actuelposition,possibleposition[64])){
716                adjacentVertices[0]=&listOfVerticesP2[57]; //graphVertex(possibleposition[57]);
717                adjacentVertices[1]=&listOfVerticesP2[63]; //graphVertex(possibleposition[63]);
718                adjacentVertices[2]=&listOfVerticesP2[65]; //graphVertex(possibleposition[65]);
719                          }
720            else if(findpos(actuelposition,possibleposition[65])){
721                adjacentVertices[0]=&listOfVerticesP2[56]; //graphVertex(possibleposition[56]);
722                adjacentVertices[1]=&listOfVerticesP2[64]; //graphVertex(possibleposition[64]);
723                       }
724            else if(findpos(actuelposition,possibleposition[66])){
725                adjacentVertices[0]=&listOfVerticesP2[47]; //graphVertex(possibleposition[47]);
726                adjacentVertices[1]=&listOfVerticesP2[48]; //graphVertex(possibleposition[48]);
727                       }
728    }
729
730
731}
Note: See TracBrowser for help on using the repository browser.