// Méthode qui permet le déplacement d'un jeton // Renvoie true qi le jeton a été déplacé, false sinon public Boolean DeplaceJeton(int X, int Y, int numJS) { Boolean res = false; // variable de 'sécurité', // permet d'être sur que l'on déplace // et surtout si l'on supprime un unique jeton int hey = 0; // Jeton 'bidon' permettant l'appel des méthodes de la classe Jeton Jeton j = new Jeton("ROUGE", 0, 0, 99, game); // Valeurs des positions X et Y où le joueur souhaite déplacer son jeton int x = j.RenvoiePosX(X) / game.JBlancWidth; int y = j.RenvoiePosY(Y) / game.JBlancHeight; // On supprime le jeton 'NumJetonSelect' // On le redessine dans la case sélectionnée // On va donc mettre à jour la position du jeton sélectionné, // puis on va le redessiné, sans oublier de supprimer 'son ancienne image' for (int i = 0; i < 10; i++) { for (int u = 0; u < 10; u++) { if (game.Grille[i, u] != null && hey == 0) { if (game.Grille[i, u].num == numJS && game.Grille[i, u].couleur == j.CoulJeton(numJS) && hey == 0) { for (int k = 0; k < 10; k++) { for (int l = 0; l < 10; l++) { if (k == x && l == y && hey == 0) { game.Grille[k, l] = new Jeton(game.Grille[i, u].couleur, j.RenvoiePosX(X), j.RenvoiePosY(Y), numJS, game); game.Grille[i, u] = null; hey++; res = true; } } } } } } if (hey != 0) { i = 10; } } return(res); }
/// <summary> /// LoadContent will be called once per game and is the place to load /// all of your content. /// </summary> protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); TestFont = Content.Load <SpriteFont>("MyFont"); // Remplissage du tableau permettant l'affichage du damier // La couleur des cases pouvant varier au grès des envies for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { Grille[i, j] = null; CoulGrille[i, j] = 0; int a = (i % 2); int b = (j % 2); if (a == 0 && b == 0 || a == 1 && b == 1) { CoulGrille[i, j] = 1; } } } // Remplissage du tableau de Jetons // Ces derniers étant différenciés par une couleur, // une position et un numéro for (int i = 0; i < 5; i++) { Grille[0, i * 2 + 1] = new Jeton("noir", JBlancWidth * (2 * i + 1), 0, Num++, this); Grille[1, i * 2] = new Jeton("noir", JBlancWidth * (i * 2), JBlancHeight, Num++, this); Grille[2, i * 2 + 1] = new Jeton("noir", JBlancWidth * (2 * i + 1), 2 * JBlancHeight, Num++, this); Grille[3, i * 2] = new Jeton("noir", JBlancWidth * (i * 2), 3 * JBlancHeight, Num++, this); Grille[6, i * 2 + 1] = new Jeton("blanc", (2 * i * JBlancWidth), (7 * JBlancHeight), Num++, this); Grille[7, i * 2] = new Jeton("blanc", ((2 * i + 1) * JBlancWidth), (6 * JBlancHeight), Num++, this); Grille[8, i * 2 + 1] = new Jeton("blanc", (2 * i * JBlancWidth), (9 * JBlancHeight), Num++, this); Grille[9, i * 2] = new Jeton("blanc", ((2 * i + 1) * JBlancWidth), (8 * JBlancHeight), Num++, this); } }
// Méthode qui permet le déplacement d'un jeton // Renvoie true qi le jeton a été déplacé, false sinon public Boolean DeplaceJeton(int X, int Y, int numJS) { Boolean res = false; // variable de 'sécurité', // permet d'être sur que l'on déplace // et surtout si l'on supprime un unique jeton int hey = 0; // Jeton 'bidon' permettant l'appel des méthodes de la classe Jeton Jeton j = new Jeton("ROUGE", 0, 0, 99, game); // Valeurs des positions X et Y où le joueur souhaite déplacer son jeton int x = j.RenvoiePosX(X) / game.JBlancWidth; int y = j.RenvoiePosY(Y) / game.JBlancHeight; // On supprime le jeton 'NumJetonSelect' // On le redessine dans la case sélectionnée // On va donc mettre à jour la position du jeton sélectionné, // puis on va le redessiné, sans oublier de supprimer 'son ancienne image' for (int i = 0; i < 10; i++) { for (int u = 0; u < 10; u++) { if (game.Grille[i, u] != null && hey == 0) { if (game.Grille[i, u].num == numJS && game.Grille[i, u].couleur == j.CoulJeton(numJS) && hey == 0) { for (int k = 0; k < 10; k++) { for (int l = 0; l < 10; l++) { if (k == x && l == y && hey == 0) { game.Grille[k, l] = new Jeton(game.Grille[i, u].couleur, j.RenvoiePosX(X), j.RenvoiePosY(Y), numJS, game); game.Grille[i, u] = null; hey++; res = true; } } } } } } if (hey != 0) i = 10; } return res; }
/// <summary> /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// </summary> /// <param name="gameTime">Provides a snapshot of timing values.</param> protected override void Update(GameTime gameTime) { // On quitte le jeu if (Keyboard.GetState().IsKeyDown(Keys.Escape)) this.Exit(); // Jeton 'bidon' permettant l'utilisation des méthodes de la classe Jeton Jeton j = new Jeton("blanc", 150, 150, 9000, this); // Variable permettant de récupérer la position du curseur mouseState = Mouse.GetState(); // Booléen permettant de savoir si un jeton est sélectionné IsSelected = false; // Condition principale pour le déplacement d'un jeton if (mouseState.LeftButton == ButtonState.Pressed && oldMouseState.LeftButton == ButtonState.Released) { // On stocke la position actuelle du curseur PosXMouse = mouseState.X; PosYMouse = mouseState.Y; if (j.IsJetonPresent(PosXMouse, PosYMouse) != -1) { // Un jeton est selectionné IsSelected = true; // On récupère son numéro NumJetonSelect = j.IsJetonPresent(PosXMouse, PosYMouse); // mouseState.RightButton == ButtonState.Pressed if (IsSelected == true) { // On met à jour la position du curseur, // et on stocke ainsi la position de la case // où le joueur souhaite déplacer son jeton NewPosXMouse = mouseState.X; NewPosYMouse = mouseState.Y; while (Math.Abs(NewPosXMouse - PosXMouse) <= 2 && Math.Abs(NewPosYMouse - PosYMouse) <= 2 && oldMouseState.LeftButton == ButtonState.Released) { // Solution intermédiaire permettant 'de gagner du temps' // afin de récupérer la position du curseur une seconde fois System.Threading.Thread.Sleep(1500); mouseState = Mouse.GetState(); NewPosXMouse = mouseState.X; NewPosYMouse = mouseState.Y; oldMouseState = mouseState; } // Valeurs comprises entre 0 et 9 // représentant la case ciblée par le joueur // et l'ancienne case int NewX = j.RenvoiePosX(NewPosXMouse); int NewY = j.RenvoiePosY(NewPosYMouse); int OldX = j.RenvoiePosX(PosXMouse); int OldY = j.RenvoiePosY(PosYMouse); // On vérifit qu'il n'y a pas de jeton là où le joueur souhaite déplacer son jeton // Et si le déplacement est correct (en diagonale et à une case de distance) if (j.IsJetonPresent(NewPosXMouse, NewPosYMouse) == -1 && (Math.Abs(NewX - OldX) == JBlancWidth) && (Math.Abs(NewY - OldY) == JBlancHeight)) { // Le cas échéant, on déplace le jeton aux coordonnées choisies if(j.DeplaceJeton(NewPosXMouse, NewPosYMouse, NumJetonSelect)) { } } // Sinon, on vérifie toujours qu'il n'y a pas de jeton, // Que le déplacement est correct (en diagonale) // Et qu'il y a bien un jeton de la couleur opposée entre les deux positions (son ancienne et sa nouvelle) else if (j.IsJetonPresent(NewPosXMouse, NewPosYMouse) == -1 && (Math.Abs(NewX - OldX) == 2 * JBlancWidth) && (Math.Abs(NewY - OldY) == 2 * JBlancHeight)) { // Le cas échéant, on déplace le jeton aux coordonnées choisies if (j.DeplaceJeton(NewPosXMouse, NewPosYMouse, NumJetonSelect)) { // Si le jeton déplacé était blanc, // On supprime le jeton noir en question, // On retire un jeton au compteur du joueur des jetons noirs // Et on rajoute un point au joueur des jetons blancs if (j.CoulJeton(NumJetonSelect) == "blanc") { if (((NewX / JBlancWidth) - (OldX / JBlancWidth)) == -2) { Grille[((OldX / JBlancWidth) - 1), ((OldY / JBlancHeight) - 1)] = null; } else { Grille[((OldX / JBlancWidth) + 1), ((OldY / JBlancHeight) - 1)] = null; } J1.NbJetonsRestants--; J2.point++; } // Si le jeton déplacé était noir, // On supprime le jeton blanc en question, // On retire un jeton au compteur du joueur des jetons blancs // Et on rajoute un point au joueur des jetons noirs else { if (((NewX / JBlancWidth) - (OldX / JBlancWidth)) == -2) { Grille[((OldX / JBlancWidth) - 1), ((NewY / JBlancHeight) - 1)] = null; } else { Grille[((OldX / JBlancWidth) + 1), ((NewY / JBlancHeight) - 1)] = null; } J2.NbJetonsRestants--; J1.point++; } } } // Le jeton a soit été déplacé, soit le joueur souhaite déplacé un autre jeton // soit le joueur a procédé à une mauvaise sélection IsSelected = false; } } } oldMouseState = mouseState; base.Update(gameTime); }
/// <summary> /// LoadContent will be called once per game and is the place to load /// all of your content. /// </summary> protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); TestFont = Content.Load<SpriteFont>("MyFont"); // Remplissage du tableau permettant l'affichage du damier // La couleur des cases pouvant varier au grès des envies for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { Grille[i, j] = null; CoulGrille[i, j] = 0; int a = (i % 2); int b = (j % 2); if (a == 0 && b == 0 || a == 1 && b == 1) CoulGrille[i, j] = 1; } } // Remplissage du tableau de Jetons // Ces derniers étant différenciés par une couleur, // une position et un numéro for (int i = 0; i < 5; i++) { Grille[0, i * 2 + 1] = new Jeton("noir", JBlancWidth * (2 * i + 1), 0, Num++, this); Grille[1, i * 2] = new Jeton("noir", JBlancWidth * (i * 2), JBlancHeight, Num++, this); Grille[2, i * 2 + 1] = new Jeton("noir", JBlancWidth * (2 * i + 1), 2 * JBlancHeight, Num++, this); Grille[3, i * 2] = new Jeton("noir", JBlancWidth * (i * 2), 3 * JBlancHeight, Num++, this); Grille[6, i * 2 + 1] = new Jeton("blanc", (2 * i * JBlancWidth), (7 * JBlancHeight), Num++, this); Grille[7, i * 2] = new Jeton("blanc", ((2 * i + 1) * JBlancWidth), (6 * JBlancHeight), Num++, this); Grille[8, i * 2 + 1] = new Jeton("blanc", (2 * i * JBlancWidth), (9 * JBlancHeight), Num++, this); Grille[9, i * 2] = new Jeton("blanc", ((2 * i + 1) * JBlancWidth), (8 * JBlancHeight), Num++, this); } }
/// <summary> /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// </summary> /// <param name="gameTime">Provides a snapshot of timing values.</param> protected override void Update(GameTime gameTime) { // On quitte le jeu if (Keyboard.GetState().IsKeyDown(Keys.Escape)) { this.Exit(); } // Jeton 'bidon' permettant l'utilisation des méthodes de la classe Jeton Jeton j = new Jeton("blanc", 150, 150, 9000, this); // Variable permettant de récupérer la position du curseur mouseState = Mouse.GetState(); // Booléen permettant de savoir si un jeton est sélectionné IsSelected = false; // Condition principale pour le déplacement d'un jeton if (mouseState.LeftButton == ButtonState.Pressed && oldMouseState.LeftButton == ButtonState.Released) { // On stocke la position actuelle du curseur PosXMouse = mouseState.X; PosYMouse = mouseState.Y; if (j.IsJetonPresent(PosXMouse, PosYMouse) != -1) { // Un jeton est selectionné IsSelected = true; // On récupère son numéro NumJetonSelect = j.IsJetonPresent(PosXMouse, PosYMouse); // mouseState.RightButton == ButtonState.Pressed if (IsSelected == true) { // On met à jour la position du curseur, // et on stocke ainsi la position de la case // où le joueur souhaite déplacer son jeton NewPosXMouse = mouseState.X; NewPosYMouse = mouseState.Y; while (Math.Abs(NewPosXMouse - PosXMouse) <= 2 && Math.Abs(NewPosYMouse - PosYMouse) <= 2 && oldMouseState.LeftButton == ButtonState.Released) { // Solution intermédiaire permettant 'de gagner du temps' // afin de récupérer la position du curseur une seconde fois System.Threading.Thread.Sleep(1500); mouseState = Mouse.GetState(); NewPosXMouse = mouseState.X; NewPosYMouse = mouseState.Y; oldMouseState = mouseState; } // Valeurs comprises entre 0 et 9 // représentant la case ciblée par le joueur // et l'ancienne case int NewX = j.RenvoiePosX(NewPosXMouse); int NewY = j.RenvoiePosY(NewPosYMouse); int OldX = j.RenvoiePosX(PosXMouse); int OldY = j.RenvoiePosY(PosYMouse); // On vérifit qu'il n'y a pas de jeton là où le joueur souhaite déplacer son jeton // Et si le déplacement est correct (en diagonale et à une case de distance) if (j.IsJetonPresent(NewPosXMouse, NewPosYMouse) == -1 && (Math.Abs(NewX - OldX) == JBlancWidth) && (Math.Abs(NewY - OldY) == JBlancHeight)) { // Le cas échéant, on déplace le jeton aux coordonnées choisies if (j.DeplaceJeton(NewPosXMouse, NewPosYMouse, NumJetonSelect)) { } } // Sinon, on vérifie toujours qu'il n'y a pas de jeton, // Que le déplacement est correct (en diagonale) // Et qu'il y a bien un jeton de la couleur opposée entre les deux positions (son ancienne et sa nouvelle) else if (j.IsJetonPresent(NewPosXMouse, NewPosYMouse) == -1 && (Math.Abs(NewX - OldX) == 2 * JBlancWidth) && (Math.Abs(NewY - OldY) == 2 * JBlancHeight)) { // Le cas échéant, on déplace le jeton aux coordonnées choisies if (j.DeplaceJeton(NewPosXMouse, NewPosYMouse, NumJetonSelect)) { // Si le jeton déplacé était blanc, // On supprime le jeton noir en question, // On retire un jeton au compteur du joueur des jetons noirs // Et on rajoute un point au joueur des jetons blancs if (j.CoulJeton(NumJetonSelect) == "blanc") { if (((NewX / JBlancWidth) - (OldX / JBlancWidth)) == -2) { Grille[((OldX / JBlancWidth) - 1), ((OldY / JBlancHeight) - 1)] = null; } else { Grille[((OldX / JBlancWidth) + 1), ((OldY / JBlancHeight) - 1)] = null; } J1.NbJetonsRestants--; J2.point++; } // Si le jeton déplacé était noir, // On supprime le jeton blanc en question, // On retire un jeton au compteur du joueur des jetons blancs // Et on rajoute un point au joueur des jetons noirs else { if (((NewX / JBlancWidth) - (OldX / JBlancWidth)) == -2) { Grille[((OldX / JBlancWidth) - 1), ((NewY / JBlancHeight) - 1)] = null; } else { Grille[((OldX / JBlancWidth) + 1), ((NewY / JBlancHeight) - 1)] = null; } J2.NbJetonsRestants--; J1.point++; } } } // Le jeton a soit été déplacé, soit le joueur souhaite déplacé un autre jeton // soit le joueur a procédé à une mauvaise sélection IsSelected = false; } } } oldMouseState = mouseState; base.Update(gameTime); }