private void AjouterStackActionList() { while (true) { OtherCase othr = listeCombattants[1]; Combattant comb = (Combattant)othr.Content; labyrinthe.ActionList = comb.Stack; } }
private void AjouterObjetAuCombattant(OtherCase othercase, int x, int y) { OtherCase other = (OtherCase)labyrinthe.Board[x, y]; Objet objet = (Objet)other.Content; Combattant combattant = (Combattant)othercase.Content; int val = objet.Valeur + combattant.Objet.Valeur; combattant.Objet.Valeur = val; }
private void AjoutPositionsSurQueue(OtherCase othercase)// après avoir bouger { int x = othercase.PositionX; int y = othercase.PositionY; Combattant comb = (Combattant)othercase.Content; int[] tab = { x, y }; comb.Stack.Push(tab); }
public void CombattreEnnemi(OtherCase othercase, int x, int y) { OtherCase othercasecombattant = (OtherCase)labyrinthe.Board[x, y]; Combattant combattantennemi = (Combattant)othercasecombattant.Content; Combattant moncombattant = (Combattant)othercase.Content; //"moncombattant" attaque "combattantennemi" combattantennemi.PointDeVie -= moncombattant.Objet.Valeur; }
private bool VerifCaseVisiteBas(OtherCase othercase) { Combattant combattant = (Combattant)othercase.Content; if (combattant.BoardVisite[othercase.PositionX + 1, othercase.PositionY]) { return(true); } return(false); }
private void AjoutVisiteHistorique(OtherCase othercase)// après avoir bouger { int x = othercase.PositionX; int y = othercase.PositionY; //cast du "content" de othercase Combattant comb = (Combattant)othercase.Content; //add true in the boardvisite (historic) comb.BoardVisite[x, y] = true; }
//l'othercase est déjà placé => récupère la position de othercase, add true (visite), add positions to the stack private void InitCombattantListVisitesAndQueue(OtherCase othercase) // OK { //récupérer la position de othercase int x = othercase.PositionX; int y = othercase.PositionY; //cast du "content" de othercase Combattant comb = (Combattant)othercase.Content; //add true in the boardvisite (historic) comb.BoardVisite[x, y] = true; //add the array containing the position x an y to the stack int[] tab2 = { x, y }; comb.Stack.Push(tab2); }
private void FunctionCombattant(OtherCase othercase) { //1 seul fois InitCombattantListVisitesAndQueue(othercase); //les positions que l'on va incrémenter à chaque fois int x = othercase.PositionX; int y = othercase.PositionY; entierBloque = -1; while (othercase.GetType().ToString() != "Sortie") // while case is not "Sortie" Case { int n = Decisiondeplacement(othercase); // l'idée c'est que si l'on se retrouve au bout de l'impasse on est dans le cas n = 4, on va ensuite reculer (sauf que maintenant n n'est plus egal à 4, on utilise alors entierBloque // tant que entierBloque = 4, on recule (stack.pop). La condition de sortie (entierbloque = -1) est appliquer lorsque le nombre de case non visité est > 1. // si totalement bloqué => 2 cas : soit impasse => on ne peut que revenir en arriere, soit intersection dans laquelle toutes les possiblites ont été tester (donc visitées) if (n == 4 || entierBloque == 4) { entierBloque = 4; // revenir sur nos pas tant qu'il n'y a pas de case (non visité, et libre) //vérification des cases non visitées bool[] tab = CaseDejaVisite(othercase); int l = 0; foreach (bool item in tab) { if (!item) { l++; } } Combattant comb = (Combattant)othercase.Content; if (l < 1) { entierBloque = 4; // on change entier bloque //suppression de othercase (avec combattant dans board de labyrinthe) SupprimerCombattantSurBoard(othercase); //delete the last position in the stack (the current position) comb.Stack.Pop(); int[] positions = comb.Stack.Peek(); //modify the positions of the othercase othercase.PositionX = positions[0]; othercase.PositionY = positions[1]; x = positions[0]; y = positions[1]; //réajouter sur board sur positions précédentes labyrinthe.Board[othercase.PositionX, othercase.PositionY] = othercase; } else { entierBloque = -1; } if (comb.Stack.Count == 0) { entierBloque = -1; } n = Decisiondeplacement(othercase); } // si non bloqué => n = 0,1,2,3 else { //suppression de othercase (avec combattant dans board de labyrinthe) SupprimerCombattantSurBoard(othercase); switch (n) { case 0: // gauche if (VerifCaseContientObjet(x, y - 1)) { AjouterObjetAuCombattant(othercase, x, y - 1); } if (VerifCaseContientEnnemi(othercase, x, y - 1)) { //tant que un des 2 ennemis n'est pas mort (cad que othercase du combattant ou othercase d combattant ennemi existe) //combattre //thread de mort .... CombattreEnnemi(othercase, x, y - 1); } AjouterCombattantSurBoard(othercase, x, y - 1); entierBloque = 2; y -= 1; break; case 1: // haut if (VerifCaseContientObjet(x - 1, y)) { AjouterObjetAuCombattant(othercase, x - 1, y); } if (VerifCaseContientEnnemi(othercase, x - 1, y)) { CombattreEnnemi(othercase, x - 1, y); } AjouterCombattantSurBoard(othercase, x - 1, y); entierBloque = 3; x -= 1; break; case 2: // droite if (VerifCaseContientObjet(x, y + 1)) { AjouterObjetAuCombattant(othercase, x, y + 1); } if (VerifCaseContientEnnemi(othercase, x, y + 1)) { CombattreEnnemi(othercase, x, y + 1); } AjouterCombattantSurBoard(othercase, x, y + 1); entierBloque = 0; y += 1; break; case 3: // bas if (VerifCaseContientObjet(x + 1, y)) { AjouterObjetAuCombattant(othercase, x + 1, y); } if (VerifCaseContientEnnemi(othercase, x + 1, y)) { CombattreEnnemi(othercase, x + 1, y); } AjouterCombattantSurBoard(othercase, x + 1, y); entierBloque = 1; x += 1; break; default: break; } } Thread.Sleep(delay); } }