public void JouerLeCoup() { if (Dir == null) { Console.WriteLine(Mur.ToString()); } else { switch (Dir) { case Direction.DROITE: Console.WriteLine("RIGHT"); break; case Direction.GAUCHE: Console.WriteLine("LEFT"); break; case Direction.HAUT: Console.WriteLine("UP"); break; case Direction.BAS: Console.WriteLine("DOWN"); break; } } }
public override string ToString() { if (Dir != null) { return(Dir.ToString()); } else { return(Mur.ToString()); } }
public static void Play(Plateau plateau, Joueur myPlayer, List <Joueur> opposants) { var move = plateau.Dikstra(myPlayer.Pos, myPlayer.Objectif); var vainqueur = myPlayer; var coupVainqueur = move.Count(); foreach (var joueur in opposants) { var result = plateau.Dikstra(joueur.Pos, joueur.Objectif).Count; if (result < coupVainqueur) { vainqueur = joueur; coupVainqueur = result; } } Mur bestMur = null; int bestCoup = coupVainqueur; if (vainqueur != myPlayer && myPlayer.MurRestant > 0) { var monCoup = move.Count(); Console.Error.WriteLine(" on bloque " + vainqueur.PlayerId); for (int i = 0; i < plateau.Width; i++) { for (int j = 0; j < plateau.Height; j++) { for (int k = 0; k < 2; k++) { var mur = new Mur(new Position(i, j), k == 0); if (plateau.AddMur(mur)) { try { var resultWithMur = plateau.Dikstra(vainqueur.Pos, vainqueur.Objectif).Count; if (resultWithMur > bestCoup) { var monCoupWithMur = plateau.Dikstra(myPlayer.Pos, myPlayer.Objectif).Count; if (monCoup >= monCoupWithMur) { resultWithMur = bestCoup; bestMur = mur; } } } catch (NoPathException) { Console.Error.WriteLine("no issue"); } finally { plateau.RemoveMur(mur); } } } } } if (bestMur != null) { Console.WriteLine(bestMur.ToString()); } else { Console.Error.WriteLine("no wall : try to go " + move[move.Count - 1].Pos.ToString()); myPlayer.MoveToNextCase(move[0]); } } else { Console.Error.WriteLine("try to go " + move[move.Count - 1].Pos.ToString()); myPlayer.MoveToNextCase(move[0]); } }
public bool MurIsValid(Mur murAdd) { if (murAdd.ToString() == "") { Console.Error.WriteLine("validation"); } // vérification qu'il est bien sur le plateu var x = murAdd.Pos.X; var y = murAdd.Pos.Y; if (murAdd.IsVertical) { if (!(y < Height - 1 && x > 0 && x < Width)) { return(false); } } else { if (!(x < Width - 1 && y > 0 && y < Width)) { return(false); } } // vérification des intersections (inclus le cas ou le mur existe déjà) var pointCentral = murAdd.PointCentral; foreach (var mur in Murs) { if (pointCentral == mur.PointCentral || (mur.IsVertical == murAdd.IsVertical && (pointCentral == mur.Pos || murAdd.Pos == mur.PointCentral))) { return(false); } } if (murAdd.ToString() == "") { Console.Error.WriteLine("placement ok"); } foreach (var joueur in Joueurs) { if (murAdd.ToString() == "") { Console.Error.WriteLine("test joueur " + joueur.PlayerId); } if (AddMur(murAdd, true)) { try { var result = Dikstra(joueur.Pos, joueur.Objectif); if (murAdd.ToString() == "") { foreach (var item in result) { Console.Error.WriteLine(item.Pos.ToString()); } } } catch (NoPathException) { if (murAdd.ToString() == "") { Console.Error.WriteLine("No Path"); } return(false); } catch (Exception e) { Console.Error.WriteLine(e.Message); return(false); } finally { RemoveMur(murAdd); } } } return(true); }