Upload
doankien
View
493
Download
24
Embed Size (px)
Citation preview
Master ISE –FSA – 2013-2014 – TP Visual Basic .Net – TP n 1
1
VB . NET – TP 1 - Corrigé
Objet du TP : Créer l’application « Morpion ISE FSA ci-dessus :
Celle-ci doit :
- Demander et afficher le nom des joueurs
- Permettre de les modifier
- Créer la grille de jeu (9 cases)
- Créer la logique du jeu(victoire/defaite/ nouvelle partie…)
- Sélectionner le joueur qui débute la partie
- Créer un journal de jeu
- Sauvegarder ce journal dans un fichier
Pour réussir, ce TP il est recommandé de suivre les différentes étapes décrites ci-après dans l’ordre
Master ISE –FSA – 2013-2014 – TP Visual Basic .Net – TP n 1
2
1. Créer une application Winform avec une Form comme ci-dessous :
Propriétés imposées :
• Texte de la fenêtre = « Morpion Ise Fsa -2011 »
• Nom de la form = « FormJeuMorpion»
2. Ajouter un bouton « Quitter » sur la Form comme ci-dessous
Propriétés imposées :
• Texte du bouton = « Quitter »
• Nom du bouton = « btnQuitter »
Evénement sur le clic du bouton : Fermer l’application
' Code exécuté 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
3
3. Ajouter les contrôles sur la form pour obtenir la form ci-dessous
Propriétés imposées :
1. Contrôle - GroupBox
• Nom = « gbInformationsJoueurs »
• Texte = « Informations des joueurs »
2. Contrôle – Label
• Nom = « lblLibJoueur1 »
• Texte = « Nom du joueur n°1 »
3. Contrôle – Label
• Nom = « lblLibJoueur2 »
• Texte = « Nom du joueur n°2 »
4. Contrôle – Label
• Nom = « lblNomJoueur1»
• Texte = « Nom du joueur 1 non renseigné»
5. Contrôle – Label
• Nom = « lblNomJoueur2»
• Texte = « Nom du joueur 2 non renseigné»
Master ISE –FSA – 2013-2014 – TP Visual Basic .Net – TP n 1
4
6. Contrôle – PictureBox
• Nom = « pbCouleurJoueur1»
• Couleur d’arrière plan = Bleu
7. Contrôle – PictureBox
• Nom = « pbCouleurJoueur2»
• Couleur d’arrière plan = Rouge
4. Gestion des joueurs
4. a. Créer une procédure appelée« 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
' Procédure qui demande le noms des joueurs et qui met à jour les labels destinés à 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
Propriété imposée :
• Nom = « btnChangementJoueur »
• Text =Changer les joueurs
Master ISE –FSA – 2013-2014 – TP Visual Basic .Net – TP n 1
5
Evénement sur le clic du bouton : appel à « ReInitialiserJoueurs()»
' Evenement exécuté 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 contrôles sur la form pour obtenir la form ci-dessous :
Propriétés imposées :
1. Contrôle - GroupBox
• Nom = « gbEcranPartie»
• Texte =« Ecran de la partie »
2. Contrôles – PictureBox
• Noms comme ci dessous :
pbA1 pbA2 pbA3
pbB1 pbB2 pbB3
pbC1 pbC2 pbC3
• Couleur d’arrière plan = «Blanc »
6. Ajout de la logique du jeu
Etape 1 : Créer une variable appelée « NumeroJoueurCourant » destinée à contenir le numéro
du joueur dont c’est le tour.
Public NumeroJoueurCourant As Integer = 1 'Numéro du joueur dont c'est le tour
Etape 2 : Créer une procédure appelée ReinitialiserPartie() qui :
- Initialise le numéro du joueur courant à 1 - Remet à blanc la couleur d’arrière plan de pbA1, pbA2,…. pbC3 à Blanc
-
Master ISE –FSA – 2013-2014 – TP Visual Basic .Net – TP n 1
6
'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 : Créer une fonction appelée 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 : Créer une fonction qui appelée NumeroDuVainqueur() qui :
o renvoie 1 si 3 cases bleues sont alignées
o renvoie 2 si 3 cases rouges sont alignées o renvoie -1 sinon
' Fonction qui donne le numéro 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
7
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 : Créer une procédure appelée CocherLaCaseEnfonctionDuJoueur(ByRef caseAcocher
As PictureBox) qui :
- Teste si la case est blanche :
o Si elle est blanche et que c’est le joueur 1 qui
joue alors la case se colore en bleu o Si elle est blanche et que c’est le joueur 2 qui
joue alors la case cochée se colore en rouge
Master ISE –FSA – 2013-2014 – TP Visual Basic .Net – TP n 1
8
o Sinon (case rouge ou bleu) alors on affiche dans une
MsgBox un message indiquant que la case est déjà
cochée.
- Teste s’il y a un vainqueur : o Si il y a un vainqueur et que c’est le joueur 1, on
affiche dans MsgBox « Félicitations au joueur 1 » et
on reinitialise la partie o Idem dans le cas du joueur 2
- Teste s’il reste des cases non jouées. Si ca n’est pas
le cas, alors on affiche le message « Match nul... Nouvelle partie » et on reinitialise la partie
- On modifie « NumeroJoueurCourant » pour donner celui du suivant.
'Procédure 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 déjà été sélectionnée... Veuillez en sélectionner 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("Félicitations au joueur n° 1")
ReinitialiserPartie() ElseIf NumeroDuVainqueur() = 2 Then
MsgBox("Félicitations 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 procédure CocherLaCaseEnfonctionDuJoueur pour chaque clic sur une
des 9 cases.
Master ISE –FSA – 2013-2014 – TP Visual Basic .Net – TP n 1
9
' Action sur le clic de la picturebox pbA1 => Appel de la procedure de coche de
cases avec la case en paramètre 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 paramètre
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 paramètre 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
démarrage de l’application 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
10
7. Ajouter 2 radio buttons pour indiquer quel joueur débute 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 = 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
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 : Création d’une procédure 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
11
'Ecriture du texte dans votre fichier
monStreamWriter.WriteLine(textAEcrire)
'Fermeture du StreamWriter (Trés 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 : Créer un bouton de sauvegarde avec un évènement associé qui appelle la procédure 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
12
9. Ajouter les contrôles permettant de saisir le fichier de sauvegarde
en l’initialisant à « C:/test » et modifier le code pour obtenir le
rendu suivant
Etape 1 : Créer les 3 contrôles
Etape 2 : Si la case est cochée la zone de saisie est active sinon elle est inactive
Etape 3 : Modifier la procédure de sauvegarde créée précédemment afin d’utiliser le nom de fichier
personnalisé si la case est cochée, le nom par défaut 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
13
10. Amélioration du programme (image, ajout des diagonales dans
l’algo…)