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; } } }
// Update is called once per frame void Update() { if (!mouvementEnCours && !mouvementActif && mainActive && (Input.GetButton("TriggerRight") || Input.GetButton("TriggerLeft"))) { mouvementEnCours = true; mouvementActif = true; gereMouvement.choisitMainActuelle(); /*GameObject murObjet = transform.parent.gameObject; * Mur murPiece = CreeNiveau.renvoieMur(murObjet); * gereMouvement.changePiece(murPiece);*/ } else if (mouvementEnCours && (!Input.GetButton("TriggerRight") && !Input.GetButton("TriggerLeft"))) { mouvementEnCours = false; mouvementActif = false; GameObject murObjet = transform.parent.gameObject; Mur murPiece = CreeNiveau.renvoieMur(murObjet); gereMouvement.choisitPiece(murPiece); } else if (mouvementEnCours) { gereMouvement.recaleCameraRig(); } }
public bool RemoveMur(Mur mur) { if (Murs.Contains(mur)) { Murs.Remove(mur); var case1 = GetCase(mur.Pos); Case case2; if (mur.IsVertical) { case2 = GetCase(mur.Pos.GetPositionBas()); case1.AddVoisine(GetCase(case1.Pos.GetPositionGauche())); case2.AddVoisine(GetCase(case2.Pos.GetPositionGauche())); } else { case2 = GetCase(mur.Pos.GetPositionDroite()); case1.AddVoisine(GetCase(case1.Pos.GetPositionHaut())); case2.AddVoisine(GetCase(case2.Pos.GetPositionHaut())); } return(true); } else { return(false); } }
public bool AddMur(Mur mur, bool noValidation = false) { if (!Murs.Contains(mur) && (noValidation || MurIsValid(mur))) { Murs.Add(mur); var case1 = GetCase(mur.Pos); Case case2; if (mur.IsVertical) { case2 = GetCase(mur.Pos.GetPositionBas()); case1.RemoveVoisine(GetCase(case1.Pos.GetPositionGauche())); case2.RemoveVoisine(GetCase(case2.Pos.GetPositionGauche())); } else { case2 = GetCase(mur.Pos.GetPositionDroite()); case1.RemoveVoisine(GetCase(case1.Pos.GetPositionHaut())); case2.RemoveVoisine(GetCase(case2.Pos.GetPositionHaut())); } return(true); } else { return(false); } }
private static Case CréerPorteFantôme(Coordonnée p_coordonnée) { Mur mur = new Mur(p_coordonnée) { EstPorteFantôme = true }; return(mur); }
void testeUnMur(Salle salle, Mur contact, Vector3 direction) { if (contact.porte == EtatPorte.EXTERIEUR) { Vector3 positionMur = salle.tuile.transform.position + direction; Quaternion directionMur = Quaternion.LookRotation(direction); Instantiate(murmur, positionMur, directionMur); } }
// Update is called once per frame void Update() { if (Input.GetButtonDown("Jump")) { murChoisi = CreeNiveau.renvoieMur(murReference); BougeCameraRig bouge = GetComponent <BougeCameraRig>(); bouge.choisitPiece(murChoisi); } }
public void choisitPiece(Mur ma) { murActuel = ma; repositionnementEnCours = true; dureeRepositionnement = 0.0f; objetSalle = trouveSalleChoisie(); positionDepart = cameraRig.transform.position; positionSouhaitee = objetSalle.transform.position; calculeValeursRotation(); }
public override string ToString() { if (Dir != null) { return(Dir.ToString()); } else { return(Mur.ToString()); } }
public override void Afficher(Graphics gr) { Escalier.Afficher(gr); barre1.Afficher(gr); barre2.Afficher(gr); barre3.Afficher(gr); barre4.Afficher(gr); Barre.Afficher(gr); Mur.Afficher(gr); vide.Afficher(gr); vider.Afficher(gr); }
public override void Cacher(IntPtr handle) { Escalier.Cacher(handle); Barre.Cacher(handle); barre1.Cacher(handle); barre2.Cacher(handle); barre3.Cacher(handle); barre4.Cacher(handle); Mur.Cacher(handle); vide.Cacher(handle); vider.Cacher(handle); }
static public Mur renvoieMur(GameObject objet) { Mur retour = null; foreach (Mur mur in contacts) { if (mur.mur == objet) { retour = mur; break; } } return(retour); }
public static void InitAvailableMur(Plateau plateau) { AvailableMur = new List <Mur>(); 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); AvailableMur.Add(mur); } } } }
public void HashCodeMur() { List <int> hashs = new List <int>(); for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { for (int k = 0; k < 2; k++) { var a = new Mur(new Position(i, j), k == 0); Assert.IsFalse(hashs.Contains(a.GetHashCode())); hashs.Add(a.GetHashCode()); } } } }
/// <summary> /// Créations des zombies, des soldats et du mur. /// </summary> public void Init() { IsFini = false; EquipeHumain = new List <Personnages>(); EquipeZombie = new List <Personnages>(); Defense = new Mur(); for (int i = 0; i < nbZombieBase; ++i) { Zombie zombie = new Zombie(i + 1); EquipeZombie.Add(zombie); } for (int i = 0; i < nbHumainBase; ++i) { Soldat soldat = new Soldat(i + 1); EquipeHumain.Add(soldat); } }
public void changePiece(Mur porte) { Salle nouvelleSalle = null; if (porte.salle1 != salleActive) { nouvelleSalle = porte.salle1; } else { nouvelleSalle = porte.salle2; } cameraRig.transform.position = nouvelleSalle.tuile.transform.position; Vector3 eulerRig = cameraRig.transform.rotation.eulerAngles; eulerRig.y += 180.0f; cameraRig.transform.rotation = Quaternion.Euler(eulerRig); salleActive = nouvelleSalle; }
void Start() { if (S == 1) //Sud { Mur murS = Instantiate(prefabMur) as Mur; //Instancie le prefab mur murS.transform.parent = transform; //récupere la position de la case murS.name = "Mur Sud " + x + ", " + z; //changement de nom de l'objet murS.transform.localPosition = new Vector3(1f, 1.5f, 0.05f); //postion du mur par rapport a la case murS.transform.localRotation = new Quaternion(0f, 90f, 0f, 90f); // rotation du mur } if (N == 1) //Nord { Mur murN = Instantiate(prefabMur) as Mur; //Instancie le prefab mur murN.transform.parent = transform; //récupere la position de la case murN.name = "Mur Nord " + x + ", " + z; //changement de nom de l'objet murN.transform.localPosition = new Vector3(1f, 1.5f, 1.95f); //postion du mur par rapport a la case murN.transform.localRotation = new Quaternion(0f, 90f, 0f, 90f); // rotation du mur } if (O == 1) //Ouest { Mur murO = Instantiate(prefabMur) as Mur; //Instancie le prefab mur murO.transform.parent = transform; //récupere la position de la case murO.name = "Mur Ouest " + x + ", " + z; //changement de nom de l'objet murO.transform.localPosition = new Vector3(0.05f, 1.5f, 1); //postion du mur par rapport a la case } if (E == 1) { Mur murE = Instantiate(prefabMur) as Mur; //Instancie le prefab mur murE.transform.parent = transform; //récupere la position de la case murE.name = "Mur Est " + x + ", " + z; //changement de nom de l'objet murE.transform.localPosition = new Vector3(1.95f, 1.5f, 1f); //postion du mur par rapport a la case } if (C == 1) { Cheat cheat = Instantiate(prefabCheat) as Cheat; //Instancie le prefab cheat cheat.transform.parent = transform; //récupere la position de la case cheat.name = "Cheat " + x + ", " + z; //changement de nom de l'objet cheat.transform.localPosition = new Vector3(1f, -0.2f, 1f); //postion du mur par rapport a la case } }
void trouveSallesVoisines() { foreach (Salle salle in salles) { foreach (Salle salle2 in salles) { difference = salle2.tuile.transform.position - salle.tuile.transform.position; if (difference.magnitude == distanceDeReference) { contactActuel = new Mur(); contactActuel.salle1 = salle; contactActuel.salle2 = salle2; contactActuel.porte = EtatPorte.MITOYEN; contactActuel.position = salle.tuile.transform.position + (difference / 2.0f); contactActuel.direction = Quaternion.LookRotation(difference); verifieContactActuel(); } } } }
public void TestMurHorizontalBloqueCase() { Plateau plateau = new Plateau(2, 2); var case1 = plateau.GetCase(0, 0); var case2 = plateau.GetCase(1, 0); var case3 = plateau.GetCase(0, 1); var case4 = plateau.GetCase(1, 1); var mur = new Mur(new Position(0, 1), false); Assert.IsTrue(mur.BloqueCases(case1, case3, plateau)); Assert.IsTrue(mur.BloqueCases(case2, case4, plateau)); Assert.IsTrue(mur.BloqueCases(case3, case1, plateau)); Assert.IsTrue(mur.BloqueCases(case4, case2, plateau)); Assert.IsFalse(mur.BloqueCases(case1, case2, plateau)); Assert.IsFalse(mur.BloqueCases(case1, case4, plateau)); Assert.IsFalse(mur.BloqueCases(case2, case3, plateau)); Assert.IsFalse(mur.BloqueCases(case2, case1, plateau)); Assert.IsFalse(mur.BloqueCases(case3, case4, plateau)); Assert.IsFalse(mur.BloqueCases(case3, case2, plateau)); Assert.IsFalse(mur.BloqueCases(case4, case1, plateau)); Assert.IsFalse(mur.BloqueCases(case4, case3, plateau)); }
// A l'initialisation, le monde est en mode physique, on passe tout // les objets de la scene en mode physique void Start() { isTimerOn = false; isActivating = false; hasJumped = false; period = 0.1f; rb = GetComponent <Rigidbody2D>(); animator = GetComponent <Animator>(); //- On recupere les tableaux des elements de notre GameObject Level. //- Pour chaque tableau, on parcourt les elements //- On recupere l’element, on change son attribut isSpirit. //- On desactive l’element si c’est un element physique et qu’on est en mode esprit, ou si c’est //un element spirituel et qu’on est en mode physique. On active l’element sinon int lengthActionneurs = level.actionneurs.Length; int lengthEnnemis = level.ennemis.Length; int lengthCadavres = level.cadavres.Length; int lengthPlateformes = level.plateformes.Length; int lengthMurs = level.murs.Length; int lengthBackground = level.backgrounds.Length; Physics2D.IgnoreLayerCollision(9, 10); animator.SetBool("isSpirit", isSpirit); for (int i = 0; i < lengthActionneurs; i++) { Actionneur actionneur = (Actionneur)level.actionneurs[i]; actionneur.isSpirit = isSpirit; actionneur.gameObject.SetActive(actionneur.statut == 0 || isSpirit && actionneur.statut == 2 || !isSpirit && actionneur.statut == 1); } for (int i = 0; i < lengthEnnemis; i++) { Ennemi ennemi = (Ennemi)level.ennemis[i]; ennemi.isSpirit = isSpirit; ennemi.gameObject.SetActive(ennemi.statut == 0 || isSpirit && ennemi.statut == 2 || !isSpirit && ennemi.statut == 1); } for (int i = 0; i < lengthCadavres; i++) { Cadavre cadavre = (Cadavre)level.cadavres[i]; cadavre.isSpirit = isSpirit; cadavre.gameObject.SetActive(cadavre.statut == 0 || isSpirit && cadavre.statut == 2 || !isSpirit && cadavre.statut == 1); } for (int i = 0; i < lengthPlateformes; i++) { Plateforme plateforme = (Plateforme)level.plateformes[i]; plateforme.isSpirit = isSpirit; if (!(plateforme.statut == 0 || isSpirit && plateforme.statut == 2 || !isSpirit && plateforme.statut == 1)) { for (int j = 0; j < plateforme.transform.childCount; j++) { Transform objet = plateforme.transform.GetChild(j); if (objet.name == "Player") { groundChecker.getTriggers().Clear(); objet.transform.parent = null; } } } plateforme.gameObject.SetActive(plateforme.statut == 0 || isSpirit && plateforme.statut == 2 || !isSpirit && plateforme.statut == 1); } for (int i = 0; i < lengthMurs; i++) { Mur mur = (Mur)level.murs[i]; mur.isSpirit = isSpirit; mur.gameObject.SetActive(mur.statut == 0 || isSpirit && mur.statut == 2 || !isSpirit && mur.statut == 1); } for (int i = 0; i < lengthBackground; i++) { backgroundAdapter back = (backgroundAdapter)level.backgrounds[i]; back.changeUnivers(isSpirit); } }
// Update is called once per frame void Update() { // On ecrit le texte des ames et morts. setText(); // Menu Pause if (Input.GetKeyDown(KeyCode.Escape)) { if (Time.timeScale != 0) { pause(); } else { reprendre(); } } // Gere le changement de direction du joueur Flip(); // On allour un temps entre chaque action du joueur pour eviter 2 actions consecutives non voulues if (isActivating) { timer = Time.time; isActivating = false; isTimerOn = true; } if (isTimerOn && Time.time > timer + period) { isTimerOn = false; } // Si le joueur peut sauter et qu'il veut sauter, il saute if ((rb.velocity.y == 0 || isGrounded) && Input.GetButtonDown("Jump")) { rb.isKinematic = false; animator.SetBool("isGround", false); rb.AddForce(new Vector2(0f, jumpSpeed), ForceMode2D.Impulse); } // Changement de vue //- Verification de l’appui du bouton « touche haut » clavier. //- Changement de l’attribut booleen isSpirit du player, correspondant au mode Physique ou Esprit. //- Changement de l’animation du player. //- On recupere les tableaux des elements de notre GameObject Level. //- Pour chaque tableau, on parcourt les elements //- On recupere l’element, on change son attribut isSpirit. //- On desactive l’element si c’est un element physique et qu’on est en mode esprit, ou si c’est //un element spirituel et qu’on est en mode physique. On active l’element sinon. if (Input.GetButtonDown("Switch")) { isSpirit = !isSpirit; animator.SetBool("isSpirit", isSpirit); int lengthActionneurs = level.actionneurs.Length; int lengthEnnemis = level.ennemis.Length; int lengthCadavres = level.cadavres.Length; int lengthPlateformes = level.plateformes.Length; int lengthMurs = level.murs.Length; int lengthBackground = level.backgrounds.Length; for (int i = 0; i < lengthActionneurs; i++) { Actionneur actionneur = (Actionneur)level.actionneurs[i]; actionneur.isSpirit = isSpirit; actionneur.gameObject.SetActive(actionneur.statut == 0 || isSpirit && actionneur.statut == 2 || !isSpirit && actionneur.statut == 1); } for (int i = 0; i < lengthEnnemis; i++) { Ennemi ennemi = (Ennemi)level.ennemis[i]; ennemi.isSpirit = isSpirit; ennemi.gameObject.SetActive(ennemi.statut == 0 || isSpirit && ennemi.statut == 2 || !isSpirit && ennemi.statut == 1); } for (int i = 0; i < lengthCadavres; i++) { Cadavre cadavre = (Cadavre)level.cadavres[i]; cadavre.isSpirit = isSpirit; } for (int i = 0; i < lengthPlateformes; i++) { Plateforme plateforme = (Plateforme)level.plateformes[i]; plateforme.isSpirit = isSpirit; if (!(plateforme.statut == 0 || isSpirit && plateforme.statut == 2 || !isSpirit && plateforme.statut == 1)) { for (int j = 0; j < plateforme.transform.childCount; j++) { Transform objet = plateforme.transform.GetChild(j); if (objet.name == "Player") { groundChecker.getTriggers().Clear(); objet.transform.parent = null; } } } plateforme.gameObject.SetActive(plateforme.statut == 0 || isSpirit && plateforme.statut == 2 || !isSpirit && plateforme.statut == 1); } for (int i = 0; i < lengthMurs; i++) { Mur mur = (Mur)level.murs[i]; mur.isSpirit = isSpirit; mur.gameObject.SetActive(mur.statut == 0 || isSpirit && mur.statut == 2 || !isSpirit && mur.statut == 1); } for (int i = 0; i < lengthBackground; i++) { backgroundAdapter back = (backgroundAdapter)level.backgrounds[i]; back.changeUnivers(isSpirit); } } }
public Coup(Mur mur) { Mur = mur; Dir = null; }
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); }
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]); } }
static void Main(string[] args) { string[] inputs; inputs = Console.ReadLine().Split(' '); int w = int.Parse(inputs[0]); // width of the board int h = int.Parse(inputs[1]); // height of the board int playerCount = int.Parse(inputs[2]); // number of players (2 or 3) int myId = int.Parse(inputs[3]); // id of my player (0 = 1st player, 1 = 2nd player, ...) Plateau plateau = new Plateau(w, h); InitAvailableMur(plateau); // game loop while (true) { Joueur moi = null; List <Joueur> opposants = new List <Joueur>(); for (int i = 0; i < playerCount; i++) { inputs = Console.ReadLine().Split(' '); int x = int.Parse(inputs[0]); // x-coordinate of the player int y = int.Parse(inputs[1]); // y-coordinate of the player int wallsLeft = int.Parse(inputs[2]); // number of walls available for the player if (i == myId) { moi = new Joueur(new Position(x, y), myId, wallsLeft); } else if (x != -1 && y != -1) { opposants.Add(new Joueur(new Position(x, y), i, wallsLeft)); } } plateau.Joueurs = GetAllJoueurOrder(moi, opposants); int wallCount = int.Parse(Console.ReadLine()); // number of walls on the board for (int i = 0; i < wallCount; i++) { inputs = Console.ReadLine().Split(' '); int wallX = int.Parse(inputs[0]); // x-coordinate of the wall int wallY = int.Parse(inputs[1]); // y-coordinate of the wall string wallOrientation = inputs[2]; // wall orientation ('H' or 'V') Mur mur = new Mur(new Position(wallX, wallY), wallOrientation == "V"); plateau.AddMur(mur); } /*foreach (var item in plateau.Murs) * { * Console.Error.WriteLine(item.ToString()); * } * * Console.Error.WriteLine("Dikjstra"); * var dik = plateau.Dikstra(moi.Pos, moi.Objectif); * foreach (var item in dik) * { * Console.Error.WriteLine(item.Pos.ToString()); * }*/ // Write an action using Console.WriteLine() // To debug: Console.Error.WriteLine("Debug messages..."); Coup coup; int r; Console.Error.WriteLine("Start MinMax"); var trace = MinMax(plateau, 0, 2, int.MinValue, int.MaxValue, out coup, out r); Console.Error.WriteLine("End MinMax"); Console.Error.WriteLine(trace); Console.Error.WriteLine(r); Console.Error.WriteLine(coup.ToString()); coup.JouerLeCoup(); } }