You are not allowed to do this.
Programmer le jeu "OTHELLO" en Visual Basic
Dernière réponse : dans Programmation
Bonsoir à tous,
Je dois programmer le jeu othello en utilisant le langage Visual Basic. Mon niveau n'est pas particulièrement exceptionnel mais je maîtrise plutôt bien les conditionnel et les boucles (For...next, do...while, loop...until).
J'ai déjà fait:
- Les déclarations de base.
- La gestion des tours de jeu (joueur 1 ou joueur 2).
- Recherche de case possible à jouer.
J'ai déjà cherché des exemples sur internet (cf: www.vbfrance.com) mais ces derniers étaient un peu trop élaboré et j'ai eu quelques problèmes de compréhension.
Je bloque un peu sur un élément essentiel de ce jeu: la gestion des pions à retourner (prenant la couleur adverse) après chaque tour.
Merci de m’apporter un peu d’aide
Voilà mon code:
(Pas de moqueries please
)
LES DECLARATIONS:
TOUR DE JEU:
INITIALISATION DE L'OTHELLIER:
DEBUT DE LA PARTIE:
RECHERCHE D'UN PION ADVERSE ADJACENT:
Je dois programmer le jeu othello en utilisant le langage Visual Basic. Mon niveau n'est pas particulièrement exceptionnel mais je maîtrise plutôt bien les conditionnel et les boucles (For...next, do...while, loop...until).
J'ai déjà fait:
- Les déclarations de base.
- La gestion des tours de jeu (joueur 1 ou joueur 2).
- Recherche de case possible à jouer.
J'ai déjà cherché des exemples sur internet (cf: www.vbfrance.com) mais ces derniers étaient un peu trop élaboré et j'ai eu quelques problèmes de compréhension.
Je bloque un peu sur un élément essentiel de ce jeu: la gestion des pions à retourner (prenant la couleur adverse) après chaque tour.
Merci de m’apporter un peu d’aide
Voilà mon code:
(Pas de moqueries please
)LES DECLARATIONS:
Option Explicit Const LargueurCote = 8 'Largueur des cotés de l'othellier TableauEtatCase(1 To LargueurCote, 1 To LargueurCote) As String 'Tableau non visible par l'utilisateur indiquant les cases vides et non vides ainsi que la couleur du pion présent Dim NumJoueur As Boolean 'Booléen gérant les joueurs(Faux = au tour du joueur 1)
TOUR DE JEU:
Sub TourJoueur() 'Gestion des tours de jeu If NumJoueur = False Then NumJoueur = True Else NumJoueur = False End If End Sub
INITIALISATION DE L'OTHELLIER:
Private Sub Form_Load() 'Initialisation de l'othellier Dim i As Integer Dim j As Integer NumJoueur = False For i = 1 To LargueurCote For j = 1 To LargueurCote TableauEtatCase(i, j) = "vide" Next j Next i TableauEtatCase(4, 5) = "noir" TableauEtatCase(5, 4) = "noir" TableauEtatCase(4, 4) = "blanc" TableauEtatCase(5, 5) = "blanc" End Sub
DEBUT DE LA PARTIE:
Private Sub Command2_Click() 'Début du jeu Do abcisse = Input("Quelle est l'abcisse de la case à jouer ?", Saisie) ordonne = Input("Quelle est l'ordonnée de la case à jouer ?", Saisie) If ((abcisse >= 1) And (abcisse <= 8) And (ordonnee >= 1) And (ordonnee <= 8) And (TableauEtatCase(abcisse, ordonne) = "vide") And (adjacent(abcisse, ordonnee) = True)) Then '.....la suite prochainement End Sub
RECHERCHE D'UN PION ADVERSE ADJACENT:
Function adjacent(i As Integer, j As Integer) As Boolean adjacent(i, j) = False 'Recherche d'un pion adjacent de couleur adverse 'Côté gauche If ((NumJoueur = False) And (i = 1) And (j > 1) And (j < 8)) And ((TableauEtatCase(i, j - 1) = "blanc") Or (TableauEtatCase(i, j + 1) = "blanc") Or (TableauEtatCase(i + 1, j) = "blanc") Or (TableauEtatCase(i + 1, j - 1) = "blanc") Or (TableauEtatCase(i + 1, j + 1) = "blanc")) Then adjacent(i, j) = True 'Côté droit ElseIf ((NumJoueur = False) And (i = 8) And (j > 1) And (j < 8)) And ((TableauEtatCase(i, j - 1) = "blanc") Or (TableauEtatCase(i, j + 1) = "blanc") Or (TableauEtatCase(i - 1, j) = "blanc") Or (TableauEtatCase(i - 1, j - 1) = "blanc") Or (TableauEtatCase(i - 1, j + 1) = "blanc")) Then adjacent(i, j) = True 'Haut ElseIf ((NumJoueur = False) And (j = 1) And (i > 1) And (i < 8)) And ((TableauEtatCase(i - 1, j) = "blanc") Or (TableauEtatCase(i + 1, j) = "blanc") Or (TableauEtatCase(i, j + 1) = "blanc") Or (TableauEtatCase(i - 1, j + 1) = "blanc") Or (TableauEtatCase(i + 1, j + 1) = "blanc")) Then adjacent(i, j) = True 'Bas ElseIf ((NumJoueur = False) And (j = 8) And (i > 1) And (i < 8)) And ((TableauEtatCase(i - 1, j) = "blanc") Or (TableauEtatCase(i + 1, j) = "blanc") Or (TableauEtatCase(i, j - 1) = "blanc") Or (TableauEtatCase(i - 1, j - 1) = "blanc") Or (TableauEtatCase(i + 1, j - 1) = "blanc")) Then adjacent(i, j) = True 'Coin haut gauche ElseIf ((NumJoueur = False) And (i = 1) And (j = 1)) And ((TableauEtatCase(2, 1) = "blanc") Or (TableauEtatCase(1, 2) = "blanc") Or (TableauEtatCase(2, 2) = "blanc")) Then adjacent(i, j) = True 'Coin haut droit ElseIf ((NumJoueur = False) And (i = 8) And (j = 1)) And ((TableauEtatCase(7, 1) = "blanc") Or (TableauEtatCase(8, 2) = "blanc") Or (TableauEtatCase(7, 2) = "blanc")) Then adjacent(i, j) = True 'Coin bas gauche ElseIf ((NumJoueur = False) And (i = 1) And (j = 8)) And ((TableauEtatCase(1, 7) = "blanc") Or (TableauEtatCase(2, 8) = "blanc") Or (TableauEtatCase(2, 7) = "blanc")) Then adjacent(i, j) = True 'Coin bas droit ElseIf ((NumJoueur = False) And (i = 8) And (j = 8)) And ((TableauEtatCase(8, 7) = "blanc") Or (TableauEtatCase(7, 8) = "blanc") Or (TableauEtatCase(7, 7) = "blanc")) Then adjacent(i, j) = True 'Reste de l'othellier ElseIf ((NumJoueur = False) And (i > 1) And (i < 8) And (j > 1) And (j < 8)) And ((TableauEtatCase(i - 1, j) = "blanc") Or (TableauEtatCase(i + 1, j) = "blanc") Or (TableauEtatCase(i, j - 1) = "blanc") Or (TableauEtatCase(i, j + 1) = "blanc") Or (TableauEtatCase(i - 1, j - 1) = "blanc") Or (TableauEtatCase(i + 1, j - 1) = "blanc") Or (TableauEtatCase(i - 1, j + 1) = "blanc") Or (TableauEtatCase(i + 1, j + 1) = "blanc")) Then adjacent(i, j) = True End If 'Côté gauche If ((NumJoueur = True) And (i = 1) And (j > 1) And (j < 8)) And ((TableauEtatCase(i, j - 1) = "noir") Or (TableauEtatCase(i, j + 1) = "blanc") Or (TableauEtatCase(i + 1, j) = "noir") Or (TableauEtatCase(i + 1, j - 1) = "noir") Or (TableauEtatCase(i + 1, j + 1) = "noir")) Then adjacent(i, j) = True 'Côté droit ElseIf ((NumJoueur = True) And (i = 8) And (j > 1) And (j < 8)) And ((TableauEtatCase(i, j - 1) = "noir") Or (TableauEtatCase(i, j + 1) = "noir") Or (TableauEtatCase(i - 1, j) = "noir") Or (TableauEtatCase(i - 1, j - 1) = "noir") Or (TableauEtatCase(i - 1, j + 1) = "noir")) Then adjacent(i, j) = True 'Haut ElseIf ((NumJoueur = True) And (j = 1) And (i > 1) And (i < 8)) And ((TableauEtatCase(i - 1, j) = "noir") Or (TableauEtatCase(i + 1, j) = "noir") Or (TableauEtatCase(i, j + 1) = "noir") Or (TableauEtatCase(i - 1, j + 1) = "noir") Or (TableauEtatCase(i + 1, j + 1) = "noir")) Then adjacent(i, j) = True 'Bas ElseIf ((NumJoueur = True) And (j = 8) And (i > 1) And (i < 8)) And ((TableauEtatCase(i - 1, j) = "noir") Or (TableauEtatCase(i + 1, j) = "noir") Or (TableauEtatCase(i, j - 1) = "noir") Or (TableauEtatCase(i - 1, j - 1) = "noir") Or (TableauEtatCase(i + 1, j - 1) = "noir")) Then adjacent(i, j) = True 'Coin haut gauche ElseIf ((NumJoueur = True) And (i = 1) And (j = 1)) And ((TableauEtatCase(2, 1) = "noir") Or (TableauEtatCase(1, 2) = "noir") Or (TableauEtatCase(2, 2) = "noir")) Then adjacent(i, j) = True 'Coin haut droit ElseIf ((NumJoueur = True) And (i = 8) And (j = 1)) And ((TableauEtatCase(7, 1) = "noir") Or (TableauEtatCase(8, 2) = "noir") Or (TableauEtatCase(7, 2) = "noir")) Then adjacent(i, j) = True 'Coin bas gauche ElseIf ((NumJoueur = True) And (i = 1) And (j = 8)) And ((TableauEtatCase(1, 7) = "noir") Or (TableauEtatCase(2, 8) = "noir") Or (TableauEtatCase(2, 7) = "noir")) Then adjacent(i, j) = True 'Coin bas droit ElseIf ((NumJoueur = True) And (i = 8) And (j = 8)) And ((TableauEtatCase(8, 7) = "noir") Or (TableauEtatCase(7, 8) = "noir") Or (TableauEtatCase(7, 7) = "noir")) Then adjacent(i, j) = True 'Reste de l'othellier ElseIf ((NumJoueur = True) And (i > 1) And (i < 8) And (j > 1) And (j < 8)) And ((TableauEtatCase(i - 1, j) = "noir") Or (TableauEtatCase(i + 1, j) = "noir") Or (TableauEtatCase(i, j - 1) = "noir") Or (TableauEtatCase(i, j + 1) = "noir") Or (TableauEtatCase(i - 1, j - 1) = "noir") Or (TableauEtatCase(i + 1, j - 1) = "noir") Or (TableauEtatCase(i - 1, j + 1) = "noir") Or (TableauEtatCase(i + 1, j + 1) = "noir")) Then adjacent(i, j) = True End If End Function
Autres pages sur : programmer jeu othello visual basic
Lassé par la pub ? Créez un compte
Citation :
Je bloque un peu sur un élément essentiel de ce jeu: la gestion des pions à retourner (prenant la couleur adverse) après chaque tour.
Merci de m’apporter un peu d’aide
J'ai pas lu le code, j'ai jamais joué à Othello et je ne sais pas faire de VB, mais:
pour la gestion des pions à retourner, tu peux faire une fonction/méthode/je sais pas... qui est appellée à la fin d'un tour, et qui parcourt toutes les cases en effectuant une série de tests pour chacune d'entre elles? Ou alors, des tests uniquement sur les cases récemment modifiées?
Ou alors c'est pas ce que tu demandes...
je vois pas trop ou tu bloques, par contre tu peux simplifier ton code:
pour la fonction adjacent, ca serait plus lisible si tu regroupais les conditions du genre, un
pour toutes les conditions comportant un if numjoueur = false ...
ca sera plus facile de t'aider
Sub TourJoueur() 'Gestion des tours de jeu NumJoueur = not NumJoueur End Sub
pour la fonction adjacent, ca serait plus lisible si tu regroupais les conditions du genre, un
IF not NumJoueur THEN ... END IF
pour toutes les conditions comportant un if numjoueur = false ...
ca sera plus facile de t'aider
pour la gestion des pions a retourner, il faut juste dérouler un algo dans ce genre la :
- parcourir les 8 direction autour du pion placé.
- vérifier si la couleur est différente du pion placé.
si oui, continuer dans la meme direction, si on trouve un pion d'une couleur différente avant la fin de tablea.
si oui, changer les couleur.
en gros (en pseudo java) :
bon, c'est l'algo naif non optimiser.
mais ça devrait te permettre de débloquer.
- parcourir les 8 direction autour du pion placé.
- vérifier si la couleur est différente du pion placé.
si oui, continuer dans la meme direction, si on trouve un pion d'une couleur différente avant la fin de tablea.
si oui, changer les couleur.
en gros (en pseudo java) :
// direction gauche // x, y les coord du pion placé // tab ton tableau if (tab[x-1][y].pion.exist && tab[x-1][y].pion.color != pionCourant.color) { int i = x-1; for ( ; i < 0 && tab[x-i][y].pion.exist && tab[x-i][y].pion.color != pionCourant.color; i--) { // ne rien faire ; } if (if i >= 0 && tab[x-i].pion.color == pionCourant.color) // reboucle en changeant la couleur des pions }
bon, c'est l'algo naif non optimiser.
mais ça devrait te permettre de débloquer.
Citation :
pour la gestion des pions a retourner, il faut juste dérouler un algo dans ce genre la : - parcourir les 8 direction autour du pion placé.
Merci de ta réponse.
Alors je me suis creusé la tête et j'ai créé une série de boucles qui parcoure chaque direction:
Sub RecherchePionNoir(i2 As Integer, j2 As Integer) 'i2 et j2 représente les coordonnées du pion posé Dim i As Integer Dim j As Integer 'Recherche en haut i = i2 j = j2 Do While ((TableauEtatCase(i, j - 1) = "blanc") And (TableauEtatCase(i, j - 1) <> "noir") Or (TableauEtatCase(i, j - 1) <> "vide")) j = j - 1 Loop If (TableauEtatCase(i, j - 1) = "noir") Then Call Retournement(i2, (j2 - 1), i, j) End If 'Recherche haut droit i = i2 j = j2 Do While ((TableauEtatCase(i + 1, j - 1) = "blanc") And (TableauEtatCase(i + 1, j - 1) <> "vide")) i = i + 1 j = j - 1 Loop If (TableauEtatCase(i + 1, j - 1) = "noir") Then Call Retournement((i2 + 1), (j2 - 1), i, j) End If 'Recherche à droite i = i2 j = j2 Do While ((TableauEtatCase(i + 1, j) = "blanc") And (TableauEtatCase(i + 1, j) <> "vide")) i = i + 1 Loop If (TableauEtatCase(i + 1, j) = "noir") Then Call Retournement((i2 + 1), j2, i, j) End If 'Recherche bas droit i = i2 j = j2 Do While ((TableauEtatCase(i + 1, j + 1) = "blanc") And (TableauEtatCase(i + 1, j + 1) <> "vide")) i = i + 1 j = j + 1 Loop If (TableauEtatCase(i + 1, j + 1) = "noir") Then Call Retournement((i2 + 1), (j2 + 1), i, j) End If 'Recherche bas i = i2 j = j2 Do While ((TableauEtatCase(i, j + 1) = "blanc") And (TableauEtatCase(i, j + 1) <> "vide")) j = j + 1 Loop If (TableauEtatCase(i, j + 1) = "noir") Then Call Retournement(i2, (j2 + 1), i, j) End If 'Recherche bas gauche i = i2 j = j2 Do While ((TableauEtatCase(i - 1, j + 1) = "blanc") And (TableauEtatCase(i - 1, j + 1) <> "vide")) i = i - 1 j = j + 1 Loop If (TableauEtatCase(i - 1, j + 1) = "noir") Then Call Retournement((i2 - 1), (j2 + 1), i, j) End If 'Recherche à gauche i = i2 j = j2 Do While ((TableauEtatCase(i - 1, j) = "blanc") And (TableauEtatCase(i - 1, j) <> "vide")) i = i - 1 Loop If (TableauEtatCase(i - 1, j) = "noir") Then Call Retournement((i2 - 1), j2, i, j) End If 'Recherche haut gauche i = i2 j = j2 Do While ((TableauEtatCase(i - 1, j - 1) = "blanc") And (TableauEtatCase(i - 1, j - 1) <> "vide")) i = i - 1 j = j - 1 Loop If (TableauEtatCase(i - 1, j - 1) = "noir") Then Call Retournement((i2 - 1), (j2 - 1), i, j) End If End Sub
Sub Retournement(a As Integer, b As Integer, c As Integer, d As Integer) 'Procédure retournant les pions gagnés par l'adversaire Dim i As Integer Dim j As Integer For i = a To c For j = b To d If (TableauEtatCase(i, j) = "blanc") Then TableauEtatCase(i, j) = "noir" ElseIf (TableauEtatCase(i, j) = "noir") Then TableauEtatCase(i, j) = "blanc" End If Next j Next i End Sub
Lassé par la pub ? Créez un compte
- Contenus similaires :
- ForumUn programme comme Visual basic 6 ?
- Solutions[Visual Basic] Suppression ligne tableau
- SolutionsProblème avec Visual Basic pour Excel
- SolutionsTelecharger Visual Basic 6.0
- Forumprobleme fonction case en visual basic
- Solutionsj'ai un problème sur visual basic je ne sais pas comment faire pour créer un document avec visual
- ForumCOMMENT PROGRAMME SUR LE VISUAL BASIC
- ForumProbleme avec Microsoft Visual Basic C++ runtime library
- ForumTrier feuille excel avec visual basic express (VB .Net)
- Voir plus