Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Programmer le jeu "OTHELLO" en Visual Basic


Messages recommandés

Invité mauriiiiice
Posté(e) (modifié)

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

 

 

Voilà mon code:

(Pas de moqueries please :P

 

 

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

Modifié par mauriiiiice

Posté(e)

Salut,

 

Eh pour commencer tu devrais declarer le tableau en integer ou en long.

C'est beaucoup plus rapide de comparer des valeurs numerique que des valeurs chaines et tu peux par exemple leur donner directement les codes couleur plutot que "blanc", "noir", "vide" ce qui t'evitera de devoir reconvertir ta valeur chaine en code couleur pour colorer les pions

 

Sub TourJoueur()

 

'Gestion des tours de jeu

If NumJoueur = False Then

NumJoueur = True

 

Else

NumJoueur = False

 

End If

 

End Sub

Eh ici tu fais une sub pour rien, pour inverser un Boolean il suffit de faire Boolean = Not Boolean

 

Ce qui ici donnerait NumJoueur = Not NumJoueur

 

Sinon je ne sais plus bien comment ce jeu fonctionne, donc je ne peux pas trop te dire pour la fonction Adjacente, mais tu devrais pouvoir facilement l'optimisee et la simplifiee en faisant une boucle et un Select Case, car la c'est vraiment pas lisible.

 

++

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...