Вы находитесь на странице: 1из 13

VB .

NET TP 1 - Corrig

Objet du TP : Crer lapplication Morpion ISE FSA ci-dessus :


Celle-ci doit :
-

Demander et afficher le nom des joueurs


Permettre de les modifier
Crer la grille de jeu (9 cases)
Crer la logique du jeu(victoire/defaite/ nouvelle partie)
Slectionner le joueur qui dbute la partie
Crer un journal de jeu
Sauvegarder ce journal dans un fichier

Pour russir, ce TP il est recommand de suivre les diffrentes tapes dcrites ci-aprs dans lordre

Master ISE FSA 2013-2014 TP Visual Basic .Net TP n 1


1

1. Crer une application Winform avec une Form comme ci-dessous :

Proprits imposes :

Texte de la fentre = Morpion Ise Fsa -2011


Nom de la form = FormJeuMorpion

2. Ajouter un bouton Quitter sur la Form comme ci-dessous

Proprits imposes :

Texte du bouton = Quitter


Nom du bouton = btnQuitter

Evnement sur le clic du bouton : Fermer lapplication


' Code excut lors du clic sur le bouton Quitter -> Ferme l'application
Private Sub btnQuitter_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnQuitter.Click
End
End Sub

Master ISE FSA 2013-2014 TP Visual Basic .Net TP n 1


2

3. Ajouter les contrles sur la form pour obtenir la form ci-dessous

Proprits imposes :
1. Contrle - GroupBox
Nom = gbInformationsJoueurs
Texte = Informations des joueurs
2. Contrle Label
Nom = lblLibJoueur1
Texte = Nom du joueur n1
3. Contrle Label
Nom = lblLibJoueur2
Texte = Nom du joueur n2
4. Contrle Label
Nom = lblNomJoueur1
Texte = Nom du joueur 1 non renseign
5. Contrle Label
Nom = lblNomJoueur2
Texte = Nom du joueur 2 non renseign

Master ISE FSA 2013-2014 TP Visual Basic .Net TP n 1


3

6. Contrle PictureBox
Nom = pbCouleurJoueur1
Couleur darrire plan = Bleu
7. Contrle PictureBox
Nom = pbCouleurJoueur2
Couleur darrire plan = Rouge

4. Gestion des joueurs


4. a. Crer une procdure appele ReInitialiserJoueurs() qui :

Demande au joueur 1 de saisir son nom


Met jour le texte de lblNomJoueur2 avec le texte saisi par le joueur 1
Demande au joueur 2 de saisir son nom
Met jour le texte de lblNomJoueur2 avec le texte saisi par le joueur 2

' Procdure qui demande le noms des joueurs et qui met jour les labels destins
les afficher dans la form
Private Sub ReInitialiserJoueurs()
Dim nomJoueur1 As String = InputBox("Donnez le nom du joueur 1", "Joueur
1")
lblNomJoueur1.Text = nomJoueur1
Dim nomJoueur2 As String = InputBox("Donnez le nom du joueur 2", "Joueur
2")
LblNomJoueur2.Text = nomJoueur2
End Sub

4. b Ajouter le bouton sur la form pour obtenir la form ci-dessous

Proprit impose :

Nom = btnChangementJoueur
Text =Changer les joueurs

Master ISE FSA 2013-2014 TP Visual Basic .Net TP n 1


4

Evnement sur le clic du bouton : appel ReInitialiserJoueurs()


' Evenement excut lors du clic sur le bouton de changement de joueur
Private Sub btnChangementJoueur_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnChangementJoueur.Click
ReInitialiserJoueurs()
End Sub

5. Ajouter les contrles sur la form pour obtenir la form ci-dessous :

Proprits imposes :
1. Contrle - GroupBox
Nom = gbEcranPartie
Texte = Ecran de la partie
2.

Contrles PictureBox
Noms comme ci dessous :
pbA1
pbA2
pbA3
pbB1
pbB2
pbB3
pbC1
pbC2
pbC3
Couleur darrire plan = Blanc

6. Ajout de la logique du jeu


Etape 1 : Crer une variable appele NumeroJoueurCourant destine contenir le numro
du joueur dont cest le tour.
Public NumeroJoueurCourant As Integer = 1 'Numro du joueur dont c'est le tour

Etape 2 : Crer une procdure appele ReinitialiserPartie() qui :


- Initialise le numro du joueur courant 1
- Remet blanc la couleur darrire plan de pbA1, pbA2,. pbC3 Blanc
-

Master ISE FSA 2013-2014 TP Visual Basic .Net TP n 1


5

'Procedure qui reinitialise la partie modifiee pour radio button --- Etape 2
Private Sub ReinitialiserPartie()
NumeroJoueurCourant = 1
pbA1.BackColor = Color.White
pbA2.BackColor = Color.White
pbA3.BackColor = Color.White
pbB1.BackColor = Color.White
pbB2.BackColor = Color.White
pbB3.BackColor = Color.White
pbC1.BackColor = Color.White
pbC2.BackColor = Color.White
pbC3.BackColor = Color.White
End Sub

Etape 3 : Crer une fonction appele CalculerNombreCaseNonJouees qui renvoie le nombre


de cases qui sont encore blanches.
'Fonction qui calcule le nb de cases non jouees
Private Function CalculerNombreCaseNonJouees() As Integer
Dim resultat As Integer = 9
If pbA1.BackColor <> Color.White Then
resultat = resultat - 1
End If
If pbA2.BackColor <> Color.White Then
resultat = resultat - 1
End If
If pbA3.BackColor <> Color.White Then
resultat = resultat - 1
End If
If pbB1.BackColor <> Color.White Then
resultat = resultat - 1
End If
If pbB2.BackColor <> Color.White Then
resultat = resultat - 1
End If
If pbB3.BackColor <> Color.White Then
resultat = resultat - 1
End If
If pbC1.BackColor <> Color.White Then
resultat = resultat - 1
End If
If pbC2.BackColor <> Color.White Then
resultat = resultat - 1
End If
If pbC3.BackColor <> Color.White Then
resultat = resultat - 1
End If
CalculerNombreCaseNonJouees = resultat
End Function

Etape 4 : Crer une fonction qui appele NumeroDuVainqueur() qui :


o renvoie 1 si 3 cases bleues sont alignes
o renvoie 2 si 3 cases rouges sont alignes
o renvoie -1 sinon
' Fonction qui donne le numro du vainqueur s'il y en a un ; renvoie -1 sinon
Private Function NumeroDuVainqueur() As Integer
Dim numeroVainqueur As Integer = -1
'Test sur les lignes

Master ISE FSA 2013-2014 TP Visual Basic .Net TP n 1


6

If pbA1.BackColor = pbA2.BackColor And pbA2.BackColor = pbA3.BackColor Then


If pbA1.BackColor = Color.Blue Then
numeroVainqueur = 2
ElseIf pbA1.BackColor = Color.Red Then
numeroVainqueur = 1
End If
End If
If pbB1.BackColor = pbB2.BackColor And pbB2.BackColor = pbB3.BackColor Then
If pbB1.BackColor = Color.Blue Then
numeroVainqueur = 2
ElseIf pbB1.BackColor = Color.Red Then
numeroVainqueur = 1
End If
End If
If pbC1.BackColor = pbC2.BackColor And pbC2.BackColor = pbC3.BackColor Then
If pbC1.BackColor = Color.Blue Then
numeroVainqueur = 2
ElseIf pbC1.BackColor = Color.Red Then
numeroVainqueur = 1
End If
End If
'Test sur les colonnes
If pbA1.BackColor = pbB1.BackColor And pbB1.BackColor = pbC1.BackColor Then
If pbA1.BackColor = Color.Blue Then
numeroVainqueur = 2
ElseIf pbA1.BackColor = Color.Red Then
numeroVainqueur = 1
End If
End If
If pbA2.BackColor = pbB2.BackColor And pbB2.BackColor = pbC2.BackColor Then
If pbB2.BackColor = Color.Blue Then
numeroVainqueur = 2
ElseIf pbB2.BackColor = Color.Red Then
numeroVainqueur = 1
End If
End If
If pbA3.BackColor = pbB3.BackColor And pbB3.BackColor = pbC3.BackColor Then
If pbA3.BackColor = Color.Blue Then
numeroVainqueur = 2
ElseIf pbA3.BackColor = Color.Red Then
numeroVainqueur = 1
End If
End If
NumeroDuVainqueur = numeroVainqueur
End Function

Etape 5 : Crer une procdure appele CocherLaCaseEnfonctionDuJoueur(ByRef caseAcocher


As PictureBox) qui :
-

Teste si la case est blanche :


o Si elle est blanche et que cest le joueur 1 qui
joue alors la case se colore en bleu
o Si elle est blanche et que cest le joueur 2 qui
joue alors la case coche se colore en rouge

Master ISE FSA 2013-2014 TP Visual Basic .Net TP n 1


7

Sinon (case rouge ou bleu) alors on affiche dans une


MsgBox un message indiquant que la case est dj
coche.
Teste sil y a un vainqueur :
o Si il y a un vainqueur et que cest le joueur 1, on
affiche dans MsgBox Flicitations au joueur 1 et
on reinitialise la partie
o Idem dans le cas du joueur 2
Teste sil reste des cases non joues. Si ca nest pas
le cas, alors on affiche le message Match nul...
Nouvelle partie et on reinitialise la partie
o

On modifie NumeroJoueurCourant pour donner celui du


suivant.

'Procdure qui coche la case en fonction du joueur


Private Sub CocherLaCaseEnfonctionDuJoueur(ByRef caseAcocher As PictureBox)
' Colore la case si possible
If caseAcocher.BackColor = Color.White Then
If NumeroJoueurCourant = 2 Then
caseAcocher.BackColor = Color.Blue
Else
caseAcocher.BackColor = Color.Red
End If
Else
MsgBox("Cette case a dj t slectionne... Veuillez en slectionner une
autre", MsgBoxStyle.Exclamation)
End If
' Y a t'il un vainqueur
If NumeroDuVainqueur() = 1 Then
listBoxJournal.Items.Add("Joueur 1 gagne " & DateTime.Now)
MsgBox("Flicitations au joueur n 1")
ReinitialiserPartie()
ElseIf NumeroDuVainqueur() = 2 Then
MsgBox("Flicitations au joueur n 2")
listBoxJournal.Items.Add("Joueur 2 gagne " & DateTime.Now)
ReinitialiserPartie()
End If
' Est-ce fini?
If CalculerNombreCaseNonJouees() = 0 Then
MsgBox("Match nul... Nouvelle partie")
listBoxJournal.Items.Add("Nul " & DateTime.Now)
ReinitialiserPartie()
End If
' Faire passer le tour au joueur suivant
If NumeroJoueurCourant = 1 Then
NumeroJoueurCourant = 2
Else
NumeroJoueurCourant = 1
End If

End Sub

Etape 6 : appeler la procdure CocherLaCaseEnfonctionDuJoueur pour chaque clic sur une


des 9 cases.

Master ISE FSA 2013-2014 TP Visual Basic .Net TP n 1


8

' Action sur le clic de la picturebox pbA1 => Appel de la procedure de coche de
cases avec la case en paramtre
Private Sub pbA1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles pbA1.Click
CocherLaCaseEnfonctionDuJoueur(pbA1)
End Sub
' Action sur le clic de la picturebox pbA2 => Appel de la procedure de coche de
cases avec la case en paramtre
Private Sub pbA2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles pbA2.Click
CocherLaCaseEnfonctionDuJoueur(pbA2)
End Sub
' Action sur le clic de la picturebox pbA3 => Appel de la procedure de coche de
cases avec la case en paramtre
Private Sub pbA3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles pbA3.Click
CocherLaCaseEnfonctionDuJoueur(pbA3)
End Sub
Private Sub pbB1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles pbB1.Click
CocherLaCaseEnfonctionDuJoueur(pbB1)
End Sub
Private Sub pbB2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles pbB2.Click
CocherLaCaseEnfonctionDuJoueur(pbB2)
End Sub
Private Sub pbB3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles pbB3.Click
CocherLaCaseEnfonctionDuJoueur(pbB3)
End Sub
Private Sub pbC1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles pbC1.Click
CocherLaCaseEnfonctionDuJoueur(pbC1)
End Sub
Private Sub pbC2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles pbC2.Click
CocherLaCaseEnfonctionDuJoueur(pbC2)
End Sub
Private Sub pbC3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles pbC3.Click
CocherLaCaseEnfonctionDuJoueur(pbC3)
End Sub

6. Demander le nom des joueurs au chargement de la form au


dmarrage de lapplication
Private Sub FormJeuMorpion_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
ReInitialiserJoueurs()
End Sub

Master ISE FSA 2013-2014 TP Visual Basic .Net TP n 1


9

7. Ajouter 2 radio buttons pour indiquer quel joueur dbute la partie


suivante en modifiant reinitialiserpartie()

'Procedure qui reinitialise la partie modifiee pour radio button --- Etape 2
Private Sub ReinitialiserPartie()
NumeroJoueurCourant = 1
If rbCommenceJ2.Checked Then
NumeroJoueurCourant = 2
Else
NumeroJoueurCourant = 1
End If
pbA1.BackColor
pbA2.BackColor
pbA3.BackColor
pbB1.BackColor
pbB2.BackColor
pbB3.BackColor
pbC1.BackColor
pbC2.BackColor
pbC3.BackColor
End Sub

=
=
=
=
=
=
=
=
=

Color.White
Color.White
Color.White
Color.White
Color.White
Color.White
Color.White
Color.White
Color.White

8. Ajouter une liste box gardant le journal des parties et permettant


de le sauvegarder dans un fichier (c:/Test.txt).
Etape 1 : Ajout du composant
Etape 2 : Cration dune procdure de sauvegarde dans un fichier
Private Sub EcritureLigneDansFichier(ByVal fichier As String, ByVal textAEcrire As
String)
Try
'Instanciation du StreamWriter avec passage du nom du fichier
Dim monStreamWriter As System.IO.StreamWriter = New
System.IO.StreamWriter(fichier, True)

Master ISE FSA 2013-2014 TP Visual Basic .Net TP n 1


10

'Ecriture du texte dans votre fichier


monStreamWriter.WriteLine(textAEcrire)
'Fermeture du StreamWriter (Trs important)
monStreamWriter.Close()
Catch ex As Exception
MsgBox("Erreur Ecriture Fichier!", MsgBoxStyle.Exclamation, "Impossible
d'crire la chaine " & textAEcrire & " dans le fichier " & fichier & "pour la raison "
& ex.Message)
End Try
End Sub

Etape 3 : Crer un bouton de sauvegarde avec un vnement associ qui appelle la procdure de
sauvegarde

Private Sub btnSauvegarderJournal_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles btnSauvegarderJournal.Click
Dim nomFichier As String = "C:/test.txt"
EcritureLigneDansFichier(nomFichier, "Sauvegarde du " & DateTime.Now)
For Each item In listBoxJournal.Items
EcritureLigneDansFichier(nomFichier, item)
Next
End Sub

Master ISE FSA 2013-2014 TP Visual Basic .Net TP n 1


11

9. Ajouter les contrles permettant de saisir le fichier de sauvegarde


en linitialisant C:/test et modifier le code pour obtenir le
rendu suivant

Etape 1 : Crer les 3 contrles


Etape 2 : Si la case est coche la zone de saisie est active sinon elle est inactive
Etape 3 : Modifier la procdure de sauvegarde cre prcdemment afin dutiliser le nom de fichier
personnalis si la case est coche, le nom par dfaut sinon.
'Action sur le clic du bouton de sauvegarde => on appelle la procedure de sauvegarde
dans un fichier avec en parametre la chaine qu'on souhaite sauvegarder
Private Sub btnSauvegarderJournal_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnSauvegarderJournal.Click
Dim nomFichier As String = "C:/test.txt"
If checkBoxFichierPersonnalise.Checked Then
nomFichier = txtBoxNomFichierSpecifie.Text
End If
EcritureLigneDansFichier(nomFichier, "Sauvegarde du " & DateTime.Now)
For Each item In listBoxJournal.Items
EcritureLigneDansFichier(nomFichier, item)
Next
End Sub

Master ISE FSA 2013-2014 TP Visual Basic .Net TP n 1


12

10. Amlioration du programme (image, ajout des diagonales dans


lalgo)

Master ISE FSA 2013-2014 TP Visual Basic .Net TP n 1


13

Вам также может понравиться