Se connecter / S'enregistrer
Votre question

Programmer le jeu "OTHELLO" en Visual Basic

Tags :
  • element
  • Programmation
Dernière réponse : dans Programmation
17 Janvier 2007 18:34:20

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 :D 


Voilà mon code:
(Pas de moqueries please ;) )


LES DECLARATIONS:
  1. Option Explicit
  2. Const LargueurCote = 8
  3. 'Largueur des cotés de l'othellier
  4.  
  5. TableauEtatCase(1 To LargueurCote, 1 To LargueurCote) As String
  6. 'Tableau non visible par l'utilisateur indiquant les cases vides et non vides ainsi que la couleur du pion présent
  7.  
  8. Dim NumJoueur As Boolean
  9. 'Booléen gérant les joueurs(Faux = au tour du joueur 1)


TOUR DE JEU:
  1. Sub TourJoueur()
  2.  
  3. 'Gestion des tours de jeu
  4. If NumJoueur = False Then
  5. NumJoueur = True
  6.  
  7. Else
  8. NumJoueur = False
  9.  
  10. End If
  11.  
  12. End Sub


INITIALISATION DE L'OTHELLIER:
  1. Private Sub Form_Load()
  2.  
  3.  
  4. 'Initialisation de l'othellier
  5. Dim i As Integer
  6. Dim j As Integer
  7.  
  8. NumJoueur = False
  9.  
  10. For i = 1 To LargueurCote
  11. For j = 1 To LargueurCote
  12. TableauEtatCase(i, j) = "vide"
  13. Next j
  14. Next i
  15.  
  16. TableauEtatCase(4, 5) = "noir"
  17. TableauEtatCase(5, 4) = "noir"
  18. TableauEtatCase(4, 4) = "blanc"
  19. TableauEtatCase(5, 5) = "blanc"
  20.  
  21.  
  22.  
  23. End Sub


DEBUT DE LA PARTIE:
  1. Private Sub Command2_Click()
  2.  
  3.  
  4. 'Début du jeu
  5. Do
  6.  
  7. abcisse = Input("Quelle est l'abcisse de la case à jouer ?", Saisie)
  8. ordonne = Input("Quelle est l'ordonnée de la case à jouer ?", Saisie)
  9.  
  10. If ((abcisse >= 1) And (abcisse <= 8) And (ordonnee >= 1) And (ordonnee <= 8) And (TableauEtatCase(abcisse, ordonne) = "vide") And (adjacent(abcisse, ordonnee) = True)) Then
  11.  
  12.  
  13.  
  14. '.....la suite prochainement
  15.  
  16.  
  17. End Sub


RECHERCHE D'UN PION ADVERSE ADJACENT:
  1. Function adjacent(i As Integer, j As Integer) As Boolean
  2.  
  3. adjacent(i, j) = False
  4.  
  5. 'Recherche d'un pion adjacent de couleur adverse
  6.  
  7. 'Côté gauche
  8. 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
  9. adjacent(i, j) = True
  10.  
  11. 'Côté droit
  12. 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
  13. adjacent(i, j) = True
  14.  
  15. 'Haut
  16. 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
  17. adjacent(i, j) = True
  18.  
  19. 'Bas
  20. 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
  21. adjacent(i, j) = True
  22.  
  23. 'Coin haut gauche
  24. 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
  25. adjacent(i, j) = True
  26.  
  27. 'Coin haut droit
  28. 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
  29. adjacent(i, j) = True
  30.  
  31. 'Coin bas gauche
  32. 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
  33. adjacent(i, j) = True
  34.  
  35. 'Coin bas droit
  36. 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
  37. adjacent(i, j) = True
  38.  
  39. 'Reste de l'othellier
  40. 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
  41. adjacent(i, j) = True
  42.  
  43. End If
  44.  
  45.  
  46. 'Côté gauche
  47. 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
  48. adjacent(i, j) = True
  49.  
  50. 'Côté droit
  51. 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
  52. adjacent(i, j) = True
  53.  
  54. 'Haut
  55. 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
  56. adjacent(i, j) = True
  57.  
  58. 'Bas
  59. 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
  60. adjacent(i, j) = True
  61.  
  62. 'Coin haut gauche
  63. 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
  64. adjacent(i, j) = True
  65.  
  66. 'Coin haut droit
  67. 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
  68. adjacent(i, j) = True
  69.  
  70. 'Coin bas gauche
  71. 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
  72. adjacent(i, j) = True
  73.  
  74. 'Coin bas droit
  75. 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
  76. adjacent(i, j) = True
  77.  
  78.  
  79. 'Reste de l'othellier
  80. 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
  81. adjacent(i, j) = True
  82.  
  83. End If
  84.  
  85. End Function

Autres pages sur : programmer jeu othello visual basic

17 Janvier 2007 18:54:05

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 :D 

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...
17 Janvier 2007 21:22:21

je vois pas trop ou tu bloques, par contre tu peux simplifier ton code:
  1. Sub TourJoueur()
  2. 'Gestion des tours de jeu
  3. NumJoueur = not NumJoueur
  4. End Sub

pour la fonction adjacent, ca serait plus lisible si tu regroupais les conditions du genre, un
  1. IF not NumJoueur THEN
  2. ...
  3. END IF

pour toutes les conditions comportant un if numjoueur = false ...
ca sera plus facile de t'aider :) 
Contenus similaires
18 Janvier 2007 15:32:28

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) :

  1. // direction gauche
  2. // x, y les coord du pion placé
  3. // tab ton tableau
  4. if (tab[x-1][y].pion.exist && tab[x-1][y].pion.color != pionCourant.color)
  5. {
  6. int i = x-1;
  7. for ( ; i < 0 && tab[x-i][y].pion.exist && tab[x-i][y].pion.color != pionCourant.color; i--)
  8. {
  9. // ne rien faire
  10. ;
  11. }
  12. if (if i >= 0 && tab[x-i].pion.color == pionCourant.color)
  13. // reboucle en changeant la couleur des pions
  14. }


bon, c'est l'algo naif non optimiser.
mais ça devrait te permettre de débloquer.
18 Janvier 2007 17:21:54

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:

  1. Sub RecherchePionNoir(i2 As Integer, j2 As Integer)
  2. 'i2 et j2 représente les coordonnées du pion posé
  3.  
  4. Dim i As Integer
  5. Dim j As Integer
  6.  
  7. 'Recherche en haut
  8. i = i2
  9. j = j2
  10.  
  11. Do While ((TableauEtatCase(i, j - 1) = "blanc") And (TableauEtatCase(i, j - 1) <> "noir") Or (TableauEtatCase(i, j - 1) <> "vide"))
  12. j = j - 1
  13. Loop
  14.  
  15. If (TableauEtatCase(i, j - 1) = "noir") Then
  16. Call Retournement(i2, (j2 - 1), i, j)
  17. End If
  18.  
  19.  
  20.  
  21. 'Recherche haut droit
  22. i = i2
  23. j = j2
  24.  
  25. Do While ((TableauEtatCase(i + 1, j - 1) = "blanc") And (TableauEtatCase(i + 1, j - 1) <> "vide"))
  26. i = i + 1
  27. j = j - 1
  28. Loop
  29.  
  30. If (TableauEtatCase(i + 1, j - 1) = "noir") Then
  31. Call Retournement((i2 + 1), (j2 - 1), i, j)
  32. End If
  33.  
  34.  
  35.  
  36. 'Recherche à droite
  37. i = i2
  38. j = j2
  39.  
  40. Do While ((TableauEtatCase(i + 1, j) = "blanc") And (TableauEtatCase(i + 1, j) <> "vide"))
  41. i = i + 1
  42. Loop
  43.  
  44. If (TableauEtatCase(i + 1, j) = "noir") Then
  45. Call Retournement((i2 + 1), j2, i, j)
  46. End If
  47.  
  48.  
  49.  
  50. 'Recherche bas droit
  51. i = i2
  52. j = j2
  53.  
  54. Do While ((TableauEtatCase(i + 1, j + 1) = "blanc") And (TableauEtatCase(i + 1, j + 1) <> "vide"))
  55. i = i + 1
  56. j = j + 1
  57. Loop
  58.  
  59. If (TableauEtatCase(i + 1, j + 1) = "noir") Then
  60. Call Retournement((i2 + 1), (j2 + 1), i, j)
  61. End If
  62.  
  63.  
  64.  
  65. 'Recherche bas
  66. i = i2
  67. j = j2
  68.  
  69. Do While ((TableauEtatCase(i, j + 1) = "blanc") And (TableauEtatCase(i, j + 1) <> "vide"))
  70. j = j + 1
  71. Loop
  72.  
  73. If (TableauEtatCase(i, j + 1) = "noir") Then
  74. Call Retournement(i2, (j2 + 1), i, j)
  75. End If
  76.  
  77.  
  78.  
  79. 'Recherche bas gauche
  80. i = i2
  81. j = j2
  82.  
  83. Do While ((TableauEtatCase(i - 1, j + 1) = "blanc") And (TableauEtatCase(i - 1, j + 1) <> "vide"))
  84. i = i - 1
  85. j = j + 1
  86. Loop
  87.  
  88. If (TableauEtatCase(i - 1, j + 1) = "noir") Then
  89. Call Retournement((i2 - 1), (j2 + 1), i, j)
  90. End If
  91.  
  92.  
  93.  
  94. 'Recherche à gauche
  95. i = i2
  96. j = j2
  97.  
  98. Do While ((TableauEtatCase(i - 1, j) = "blanc") And (TableauEtatCase(i - 1, j) <> "vide"))
  99. i = i - 1
  100. Loop
  101.  
  102. If (TableauEtatCase(i - 1, j) = "noir") Then
  103. Call Retournement((i2 - 1), j2, i, j)
  104. End If
  105.  
  106.  
  107.  
  108. 'Recherche haut gauche
  109. i = i2
  110. j = j2
  111.  
  112. Do While ((TableauEtatCase(i - 1, j - 1) = "blanc") And (TableauEtatCase(i - 1, j - 1) <> "vide"))
  113. i = i - 1
  114. j = j - 1
  115. Loop
  116.  
  117. If (TableauEtatCase(i - 1, j - 1) = "noir") Then
  118. Call Retournement((i2 - 1), (j2 - 1), i, j)
  119. End If
  120. End Sub


  1. Sub Retournement(a As Integer, b As Integer, c As Integer, d As Integer)
  2. 'Procédure retournant les pions gagnés par l'adversaire
  3.  
  4. Dim i As Integer
  5. Dim j As Integer
  6.  
  7. For i = a To c
  8. For j = b To d
  9.  
  10. If (TableauEtatCase(i, j) = "blanc") Then
  11. TableauEtatCase(i, j) = "noir"
  12.  
  13. ElseIf (TableauEtatCase(i, j) = "noir") Then
  14. TableauEtatCase(i, j) = "blanc"
  15. End If
  16.  
  17. Next j
  18. Next i
  19.  
  20. End Sub
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS