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; }
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); }
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); }
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; }
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]); }
protected virtual Direction OneWay(Ghost g) { return(Reverse(g.direction)); }
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); }
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; } }
protected virtual Direction OneWay(Ghost g) { return Reverse( g.direction ); }
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; }
public void Ghost_OnPlayerKilled(Ghost ghost) { ghost.SetVisible(); GAME_OVER(); }