Example #1
0
        protected Direction ThreeWays(Ghost g, Ways w, Point pacPoint)
        {
            Direction secondary;
            Direction primary1 = Direction.up;
            Direction primary2 = Direction.down;
            bool was = false;
            byte decision;

            secondary = Reverse(g.direction);
            w.ways[(int) secondary] = false;

            for(int i = 0; i <=3;i++)
            {
                if(w.ways[i]) {
                    if(!was) { primary1 = ((Direction) i); was =true; }
                    else primary2 = ((Direction) i);
                }
            }

            if(rnd.Next(0,9) == 4) decision = (byte) rnd.Next(1,3);
            else
                if(rnd.Next(0,5) == 2) decision = PacmanNear( Figure.Shift(primary1 , g.position), Figure.Shift( primary2 , g.position ), Figure.Shift(secondary, g.position), pacPoint);
                else decision = PacmanNear( Figure.Shift(primary1,g.position), Figure.Shift( primary2, g.position ), pacPoint);

            if(decision == 1) return primary1;
            if(decision == 2) return primary2;
            return secondary;
        }
Example #2
0
        public virtual Direction MakeDecision(Ghost g, Point pacPoint, Map map)
        {
            this.ways = g.mapa.PosibleWay( g.position ); 		// Bool array of posible way
            this.rnd = new Random();

            if( rnd.Next(1,9) == 5) return ((Direction) rnd.Next(0,4));  // Random element

            bool pravda = true;
            switch( this.ways.free )
            {
            case 1:				/* Turn round */
                if(pravda) return OneWay(g);
                break;
            case 2: 			/* go straight */
                if(pravda) return TwoWays(g);
                break;
            case 3: 			/* prefer 2 ways */
                if (pravda) return ThreeWays(g, this.ways);
                break;
            case 4: 			/* totaly random */
                if(pravda) return FourWays(g.direction);
                break;
            default :
                return ((Direction) rnd.Next(0,4));
            }

            return (Direction) rnd.Next(0,3);
        }
Example #3
0
 protected Direction FourWays(Ghost g, Point pacPoint)
 {
     return (Direction) PacmanNear( Figure.Shift(Direction.up, g.position),
         Figure.Shift(Direction.down, g.position),
         Figure.Shift(Direction.left, g.position),
         Figure.Shift(Direction.right, g.position), pacPoint);
 }
Example #4
0
        protected Direction TwoWays(Ghost g, Ways w, Point pacPoint)
        {
            Direction first = Direction.down;
            Direction second = Direction.up;
            bool was = false;
            for(int i = 0; i <=3;i++)
                if(w.ways[i]) {
                    if(!was) { first = (Direction) i; was =true; }
                    else second = ((Direction) i);
                }

            if(1 == PacmanNear( Figure.Shift(first, g.position), Figure.Shift(second, g.position), pacPoint)) return (Direction) first;
            else return (Direction) second;
        }
Example #5
0
        public Map(Ghost[] ghosts)
            : base(new Vector2(16, 16))
        {
            _ghosts = ghosts;

            _offset = 3 * (int)TileSize.Y;

            ResetMap();

            _elroyDotsLeft = new int[] {
                20, 30, 40, 40, 40, 50, 50, 50, 60, 60, 60, 80, 80, 80, 100, 100, 100, 100, 120
            };

            _fruitPos = MapToWin(new Vector2(14, 17)) - new Vector2(TileSize.X / 2, 0);
            //Console.WriteLine("\t" + _map[23, 11]);
            //Console.WriteLine(_map[23,6]);
        }
Example #6
0
 protected virtual Direction OneWay(Ghost g)
 {
     return(Reverse(g.direction));
 }
Example #7
0
        protected virtual Direction TwoWays(Ghost g)
        {
            foreach(Ghost ga in g.mapa.ghosts)
                if( g.Shift() == ga.position ) return DecisionTurn(g);

            if( g.mapa.CheckIn( g.Shift() )) return g.direction;
            else return DecisionTurn(g);
        }
Example #8
0
        protected virtual Direction ThreeWays(Ghost g, Ways w )
        {
            Direction secondary;
            Direction primary1 = Direction.up;
            Direction primary2 = Direction.down;
            bool was = false;

            secondary = Reverse(g.direction);

            for(int i = 0; i <=3;i++)
                if(w.ways[i]) {
                    if(!was) { primary1 = (Direction) i; was =true; }
                    else primary2 = ((Direction) i);
                }

            switch(rnd.Next(0,7))
            {
            case 0:
            case 2:
            case 4:
                return primary1;
                break;
            case 1:
            case 3:
            case 5:
                return primary2;
                break;
            default :
                return secondary;
                break;
            }
        }
Example #9
0
 protected virtual Direction OneWay(Ghost g)
 {
     return Reverse( g.direction );
 }
Example #10
0
 protected virtual Direction DecisionTurn(Ghost g)
 {
     switch(g.direction)
     {
     case Direction.up :
     case Direction.down :
         if( ways.ways[ 3 ] ) return Direction.right;
         if( ways.ways[ 2 ] ) return Direction.left;
         break;
     case Direction.left:
     case Direction.right:
         if( ways.ways[0] ) return Direction.up;
         if( ways.ways[1] ) return Direction.down;
         break;
     }
     return Direction.right;
 }
Example #11
0
 public void Ghost_OnPlayerKilled(Ghost ghost)
 {
     ghost.SetVisible();
     GAME_OVER();
 }