IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Programmer le jeu "OTHELLO" en Visual Basic


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 47
    Points : 30
    Points
    30
    Par défaut Programmer le jeu "OTHELLO" en Visual Basic
    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 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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub TourJoueur()
     
    'Gestion des tours de jeu
    If NumJoueur = False Then
    	NumJoueur = True
     
    	Else
    	NumJoueur = False
     
    End If
     
    End Sub
    INITIALISATION DE L'OTHELLIER:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    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

  2. #2
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut
    Petite question, c'est du Vb ou du Vb.NET ?

    Enfin, ça n'a pas d'importance vu que ton problème est au niveau logique

    L'ayant déjà fait en C il y a quelques années, je peux essayer de te guider vers la bonne logique :

    Tout d'abord, j'avais un tableau de 8 colonnes sur 8 lignes.
    une valeur 1 représentait pion noir, 2 pion blanc et 0 vide. (ça ne reste qu'un exemple, une énumération serait mieux)

    Lorsque je posais un pion, la première chose à faire était de faire une boucle qui allait inspecter toutes les directions (haut, haut droit, droit, bas droit, bas, bas gauche, gauche, haut gauche) donc une boucle principale qui fait 8 tours.

    Ensuite, on va prendre le cas vers le haut : il va falloir remonter dans les lignes tant qu'on voit un pion adversaire. On s'arrêtera dans 3 cas :
    • si on voit un de nos pion, on peut retourner les pions précédents;
    • si on voit une case vide, on passe à la direction suivante;
    • si on sort des limites du tableau, on passe à la direction suivante;
    Ca n'a rien de bien compliqué en fait, il faut juste mettre la logique appropriée pour chaque direction.
    Jérôme Lambert
    Développeur, Architecte, Rédacteur & Fan technologies Microsoft
    Ma boite informatique | Mon profil LinkedIn

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 47
    Points : 30
    Points
    30
    Par défaut
    Merci pour ta réponse


    J'ai procédé à une petite modification dans mes déclarations: j'ai déclaré un type énuméré regroupant les 3 états possibles d'une case. Je trouve que c’est plus propre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Option Explicit
    Const LargueurCote = 8
    'Largueur des cotés de l'othellier
     
    TableauEtatCase(1 To LargueurCote, 1 To LargueurCote) As EtatCase
    '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)
     
    Type EtatCase: Blanc , noir, vide
    'Enumération des 3 états possibles d'une case


    Citation Envoyé par Cardi
    Petite question, c'est du Vb ou du Vb.NET ?
    Etant donné que je ne sais pas ce qu'est le "VB.NET"... je pense que c'est du VB

    Lorsque je posais un pion, la première chose à faire était de faire une boucle qui allait inspecter toutes les directions (haut, haut droit, droit, bas droit, bas, bas gauche, gauche, haut gauche) donc une boucle principale qui fait 8 tours.

    Ensuite, on va prendre le cas vers le haut : il va falloir remonter dans les lignes tant qu'on voit un pion adversaire. On s'arrêtera dans 3 cas :
    • si on voit un de nos pion, on peut retourner les pions précédents;
    • si on voit une case vide, on passe à la direction suivante;
    • si on sort des limites du tableau, on passe à la direction suivante;
    Ca n'a rien de bien compliqué en fait, il faut juste mettre la logique appropriée pour chaque direction.
    Après y avoir réfléchi, j'ai abouti à une idée similaire à la tienne. Elle ne doit donc pas être si mauvaise
    Je me mets au boulot de ce pas !

    Pour le moment, je vais laisser un tableau 8*8 et si cela me pose trop de problème à la fin, je passerais à un tableau 10*10 pour que le carré de jeu soit entouré de cases "plouf dans l'eau".

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 47
    Points : 30
    Points
    30
    Par défaut
    * si on voit un de nos pion, on peut retourner les pions précédents;
    * si on voit une case vide, on passe à la direction suivante;
    * si on sort des limites du tableau, on passe à la direction suivante;
    J'ai créé ma 1ère boucle qui inspecte le haut d'un pion et j'aimerais avoir votre avis:
    - suis je sur la bonne voie ?
    - est ce qu'il y a plus simple ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Sub RecherchePionBlanc(i2 As Integer, j2 As Integer)
    'i2 et j2 représente les coordonnées du pion posé
     
     
    i = i2
    j = j2
     
    Do While ((TableauEtatCase(i, j - 1) = "blanc") And (TableauEtatCase(i, j - 1) <> "noir") Or (TableauEtatCase(i, j - 1) <> "vide"))
    'Recherche en haut
     
    j = j - 1
     
    Loop
     
    If (TableauEtatCase(i, j - 1) = "noir") Then
        Call Retournement(i2, (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

Discussions similaires

  1. Help ! Programmer un jeu vidéo
    Par Jay Bee dans le forum DirectX
    Réponses: 7
    Dernier message: 18/03/2004, 18h38
  2. Help ! Programmer un jeu vidéo...
    Par Jay Bee dans le forum OpenGL
    Réponses: 3
    Dernier message: 05/03/2004, 15h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo