Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Apr 21, 2019, 7:58:47 PM (6 years ago)
Author:
peterf
Message:

improved red pacman behavior, but still segmentation fault sometimes

Location:
code/branches/3DPacman_FS19/src/modules/pacman
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • code/branches/3DPacman_FS19/src/modules/pacman/PacmanGhost.cc

    r12317 r12318  
    241241            return player->getWorldPosition();
    242242        }
     243        //std::cout<<"bug ??"<<endl;
    243244        return Vector3(0,0,0); //default, should not be used
    244245   
     
    745746    }
    746747
     748
     749    bool PacmanGhost::playerFindPos(Vector3 one, Vector3 other){
     750       if((abs(one.x - other.x)<15) && (abs(one.z - other.z)<15)) return true;
     751        return false;
     752        }
     753
     754
     755
     756
    747757    int PacmanGhost::findPlayerTravDir (Vector3 playerPosBefore, Vector3 playerPos){
    748758        //return 0 for south, 1 for west, 2 for north, 3 for east
    749759
    750         Vector3 difference = diffVector(playerPosBefore, playerPos);
    751 
    752 
     760
     761        if(playerFindPos(playerPosBefore, playerPos)){
     762            //if player is still near last crossed point
     763
     764            return 4; //return the last crossed point for simplicity
     765        }
     766
     767
     768        if(abs(playerPos.x-playerPosBefore.x)<14){ //player is moving vertically
     769            if((playerPos.z-playerPosBefore.z)<0){//move west
     770                return 0;
     771            }
     772            if((playerPos.z-playerPosBefore.z)>0){//move east
     773                return 2;
     774            }
     775        }
     776
     777        if(abs(playerPos.z-playerPosBefore.z)<14){ //player is moving horizontally
     778            if((playerPos.x-playerPosBefore.x)<0){//move south
     779                return 1;
     780            }
     781            if((playerPos.x-playerPosBefore.x)>0){//move north
     782                return 3;
     783            }
     784        }
     785
     786
     787        /*Vector3 difference = diffVector(playerPosBefore, playerPos);
    753788        if((difference.z < 0)&&(difference.z>difference.x)){ //move south
    754789
     
    772807
    773808        return 1;
    774             }
     809            }*/
    775810       
    776811        }
     
    779814        //return the Vector3 point that Pinky should target to
    780815        //be in front of pacman
     816
     817        if(indexForSWNE==4){
     818            std::cout<<"Ryukyu"<<endl;
     819            return pacLasVisPos;
     820        }
    781821
    782822        Vector3 listOfNeighboors[4];
     
    840880            }
    841881            else if(findpos(pacLasVisPos,possibleposition[10])){
     882
     883                if(indexForSWNE==3){ //nothing eastward
     884                    return pacLasVisPos;
     885                }
     886
    842887                listOfNeighboors[0]=possibleposition[9]; //south
    843888                listOfNeighboors[1]=possibleposition[45]; //west
     
    10201065            }
    10211066            else if(findpos(pacLasVisPos,possibleposition[42])){
     1067
     1068                if(indexForSWNE==1){//nothing westward
     1069                    return pacLasVisPos;
     1070                }
     1071
    10221072                listOfNeighboors[0]=possibleposition[39]; //south
    10231073                listOfNeighboors[2]=possibleposition[59]; //north
  • code/branches/3DPacman_FS19/src/modules/pacman/PacmanGhost.h

    r12317 r12318  
    8989        Vector3 playerPos;
    9090
    91         Vector3 lastPlayerPassedPoint;/*
     91        Vector3 lastPlayerPassedPoint;
     92
     93        Vector3 pointInFrontOfPlayer;
     94        /*
     95
    9296
    9397        //Vector3 pathAlgorithm;
     
    120124    Vector3 diffVector (Vector3 start, Vector3 goal);
    121125
     126    bool playerFindPos(Vector3 one, Vector3 other);
     127
    122128
    123129    };
  • code/branches/3DPacman_FS19/src/modules/pacman/PacmanRed.cc

    r12317 r12318  
    1717        this->target_z=15;
    1818        this->lastPlayerPassedPoint=Vector3(70,10,-135);
     19        this->isNearPlayer=false;
    1920         
    2021    }
     
    4243    void PacmanRed::tick(float dt)
    4344    {
     45        std::cout<<"LemanExpress5"<<endl;
    4446        SUPER(PacmanGhost, tick, dt);
    4547
     
    5254            }
    5355
    54        
     56
     57        /*if((playerFindPos(this->actuelposition, this->getPlayerPos()))&&(isNearPlayer==false)){
     58            isNearPlayer=true;
     59            setNewTargetRed(this->getPlayerPos());
     60        }
     61        else if (!(playerFindPos(this->actuelposition, this->getPlayerPos())&&(isNearPlayer==true))){
     62            isNearPlayer=false;
     63            setNewTargetRed(this->pointInFrontOfPlayer);
     64        }*/
     65
     66
     67
     68
    5569        //Stop, if target arrived
    5670        if((abs(this->actuelposition.x - this->target_x)<0.5) && (abs(this->actuelposition.z - this->target_z)<0.5)){
     71            std::cout<<"LemanExpress1"<<endl;
    5772                 this->ismoving = false;
    5873        }
     
    6075        //Move, if ghost hasn't arrived yet
    6176        if(this->ismoving){
     77            std::cout<<"LemanExpress2"<<endl;
    6278            if(!(abs(this->actuelposition.z-target_z)<0.5)) {
    6379                velocity = Vector3(0,0,-sgn(this->actuelposition.z-this->target_z));
     
    6884                move(dt, actuelposition, velocity);
    6985            }
     86            std::cout<<"LemanExpress4"<<endl;
    7087        }
    71        
     88
    7289        //Check on which position the ghost has arrived and set new target
    7390        else{
     91            std::cout<<"LemanExpress3"<<endl;
    7492
    7593            while(lockmove){};
     
    83101
    84102            int directionV = findPlayerTravDir (lastPlayerPassedPoint, this->getPlayerPos());
     103            this->pointInFrontOfPlayer=getPointInFrontOfPacman(lastPlayerPassedPoint, directionV);
    85104
    86105
    87             if(this->actuelposition!=lastPlayerPassedPoint){
     106            if(!findpos(this->actuelposition, lastPlayerPassedPoint)){
    88107               
    89108                std::cout<<this->getPlayerPos()<<endl;
    90109                std::cout<<this->lastPlayerPassedPoint<<endl;
    91                 std::cout<<getPointInFrontOfPacman(lastPlayerPassedPoint, directionV)<<endl;
     110                std::cout<<this->pointInFrontOfPlayer<<endl;
     111                std::cout<<this->actuelposition<<endl;
    92112            nextMove(redPos, lastPlayerPassedPoint);
     113            std::cout<<"hiuddi"<<endl;
    93114            }
    94             else{// red pacman is at lastPlayerPassedPoint
     115            else if(findpos(this->actuelposition, lastPlayerPassedPoint)){// red pacman is at lastPlayerPassedPoint
    95116
    96             //int directionV = findPlayerTravDir (lastPlayerPassedPoint, this->getPlayerPos());
     117                std::cout<<"dhdidjop"<<endl;
     118                std::cout<<this->getPlayerPos()<<endl;
     119                std::cout<<this->lastPlayerPassedPoint<<endl;
     120                std::cout<<this->pointInFrontOfPlayer<<endl;
     121                std::cout<<this->actuelposition<<endl;
    97122
    98             Vector3 pointInFrontOfPlayer = getPointInFrontOfPacman(lastPlayerPassedPoint, directionV);
    99 
    100             nextMove(redPos, pointInFrontOfPlayer);
    101 
    102             //nextMove(this->getPlayerPos(), redPos);
     123                nextMove(lastPlayerPassedPoint, pointInFrontOfPlayer);
     124                std::cout<<"ogslodm"<<endl;
    103125            }
    104126
  • code/branches/3DPacman_FS19/src/modules/pacman/PacmanRed.h

    r12316 r12318  
    2626                        bool jeanfindpos(Vector3 one, Vector3 other);
    2727
     28                        bool isNearPlayer;
     29
    2830
    2931
Note: See TracChangeset for help on using the changeset viewer.