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

Free Pascal Discussion :

Soucis avec le jeu du Morpion [Free Pascal]


Sujet :

Free Pascal

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2018
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Soucis avec le jeu du Morpion
    Bonjour

    j'ai un exercice à réaliser, j'ai fait l'algo & le source Pascal du jeu du Morpion comme il me la été demandé mais mon problème est le suivant : mon Pascal a décidé de trouver toutes les possibilités existantes pour me faire des erreurs inconnues au bataillon !
    Si quelqu'un peut vérifier et m'aider a corriger mes erreurs ce serait génial !

    Merci d'avance :
    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    {
    ALGORITHME morpion
     
    //BUT faire le jeu du morpion (deux joueurs)
    //ENTREE la case choisi par l'utilisateur
    //SORTIE l'affichage du morpion en temps réel, la non-posibilité de sélection d'une case, et l'annonce du gagnant en fin de partie
     
     
    TYPE forme = (X,O)														// Dans un premier temps je prépare mes énumération pour proteger le contenue des variables et n'avoir que se que je veut pouvoir y avoir
    TYPE tableausafe = (X,O,I,-)
    TYPE choix = (hg,hm,hd,mg,mm,md,bg,bm,bd,valider)
     
    PROCEDURE initTableau (morpion : tableausafe)							//Je fait ensuite une procedure qui prépare le contenue du tableau donc la partie visuel du tableau
     
    	VAR
    		i,j : ENTIER	
     
    	DEBUT																//Pour se faire je parcours grace aux deux "POUR" les différentes lignes et je les remplie d'espace ou de traits pour l'effet visuel demandé
    		POUR i de 1 a 5 FAIRE
    			POUR j de 1 a 5 FAIRE
    				SI (i modulo 2 = 0) ALORS
    					morpion.[i.j] <- "_"
    				SI (j modulo 2 = 0) ALORS
    					morpion.[i.j] <- "I"
    				SI (i modulo 2 <> 0) ALORS
    					morpion.[i.j] <- " "
    				SI (j modulo 2 <> 0) ALORS
    					morpion.[i.j] <- " "
     
    			FINPOUR
    		FINPOUR
    	FIN
    FINPROCEDURE
     
    PROCEDURE affichageMorpion (morpion : tableausafe)						//Une fois le tableau initialisé je fait une procedure qui affiche le tableau comme il est en temps réel avec les modifications apportée
     
    	DEBUT
    		ECRIRE (morpion.[1.1],morpion.[1.2],morpion.[1.3],morpion.[1.4],morpion.[1.5])
    		ECRIRE (morpion.[2.1],morpion.[2.2],morpion.[2.3],morpion.[2.4],morpion.[2.5])
    		ECRIRE (morpion.[3.1],morpion.[3.2],morpion.[3.3],morpion.[3.4],morpion.[3.5])
    		ECRIRE (morpion.[4.1],morpion.[4.2],morpion.[4.3],morpion.[4.4],morpion.[4.5])
    		ECRIRE (morpion.[5.1],morpion.[5.2],morpion.[5.3],morpion.[5.4],morpion.[5.5])
    	FIN
     
    FINPROCEDURE
     
    PROCEDURE jouer (morpion : tableausafe,joueur : forme)					//Ici la procedure Jouer qui à la fois vérifi si la case est vide (donc est remplie d'un espace) et qui la remplie dans le cas ou elle est vide
     
    	VAR
    		choix : choixEmplacement
     
    	DEBUT
     
    		ECRIRE "Choisissez votre emplacement a l'aide des premieres lettre de celui, exemple : si hd = haut droit, bg = bas gauche, mm = milieu milieu ..."
    		ECRIRE "h pour haut, m pour milieu, b pour bas ensuite une fois la premiere lettre entrer collé y la seconde : "
    		ECRIRE "g pour gauche, m pour milieu, d pour droite."
    		LIRE choix
     
    		REPETER
    			SI (choix = hg) ALORS
    				SI (morpion.[1.1] = " ") ALORS
    					morpion.[1.1] <- joueur
    					choix <- valider									//Ici nous validons le choix pour pouvoir sortir de la boucle dans le cas ou les conditions sont respectée
     
    			SI (choix = hm) ALORS
    				SI (morpion.[1.3] = " ") ALORS
    					morpion.[1.3] <- joueur
    					choix <- valider
     
    			SI (choix = hd) ALORS
    				SI (morpion.[1.5] = " ") ALORS
    					morpion.[1.5] <- joueur
    					choix <- valider
    			SI (choix = hg) ALORS
    				SI (morpion.[3.1] = " ") ALORS
    					morpion.[3.1] <- joueur
    					choix <- valider
     
    			SI (choix = hm) ALORS
    				SI (morpion.[3.3] = " ") ALORS
    					morpion.[3.3] <- joueur
    					choix <- valider
     
    			SI (choix = hd) ALORS
    				SI (morpion.[3.5] = " ") ALORS
    					morpion.[3.5] <- joueur
    					choix <- valider
    			SI (choix = hg) ALORS
    				SI (morpion.[5.1] = " ") ALORS
    					morpion.[5.1] <- joueur
    					choix <- valider
     
    			SI (choix = hm) ALORS
    				SI (morpion.[5.3] = " ") ALORS
    					morpion.[5.3] <- joueur
    					choix <- valider
     
    			SI (choix = hd) ALORS
    				SI (morpion.[5.5] = " ") ALORS
    					morpion.[5.5] <- joueur
    					choix <- valider
     
    				SINON
    						ECRIRE "Veuillez saisir une autre case car celle-ci est prise."			//Dans le cas ou l'utilisateur se trompe de saisis nous lui faisons recommencer une nouvelle saisis jusqu'a en trouver une bonne
    						affichageMorpion (morpion : tableausafe)
    						LIRE choix
    		JUSQUA (choix = valider)
     
    	FIN
    FINPROCEDURE
     
     
    // PROGRAMME PRINCIPAL
     
     
    VAR
    	cpt : ENTIER
    	j1,j2,joueur : forme
     
    	morpion : TABLEAU [1..5] [1..5] : tableausafe
     
    DEBUT
     
    	cpt <- 1																		//CPT nous permet de savoir qui doit jouer entre le joueur un (impaires) et le joueur deux (paire)
     
    	ECRIRE "Bienvenue sur le jeu du morpion"
    	ECRIRE "Joueur 1 veuillez choisir la croix ou le rond en écrivant X ou O"		//Le joueur 1 choisi la Croix ou le Rond et le joueur 2 est assigné de l'autre possibilitée
    	LIRE j1
    	ECRIRE "Le Joueur 1 seras donc : ", j1
     
    	SI (j1 = X) ALORS
    		j2 <- "O"
    		ECRIRE "Le Joueur 2 seras alors : ",j2
    	SINON
    		j2 <- "X"
    		ECRIRE "Le Joueur 2 seras alors : ",j2
    	FINSI
     
    	initTableau (morpion : tableausafe)												//Une fois les deux joueurs prévenue de leurs symbol nous initialisons le tableau vide
    	affichageMorpion (morpion : tableausafe)										//Nous affichons donc une premiere fois le tableau
     
     
    	REPETER
     
    		SI (cpt modulo 2 = 0)														//Si le joueur 2 (cpt Modulo 2 =0) doit jouer on lui demande ou veut-t-il placer son symbol
    			ECRIRE "Au tour de : ",j2," de jouer."
    			ECRIRE "Ou voullez vous placer votre ",j2," ?"
    			joueur <- j2
    			jouer (morpion : tableausafe,joueur : forme)							//Une fois que tout est prêt on appelle alors la procedure jouer pour faire les vérifications et le remplissage
    		SINON
    			ECRIRE " Au tour de : ",j1," de jouer."									//De même pour le joueur 1
    			ECRIRE "Ou voullez vous placer votre ",j1," ?"
    			joueur <- j1
    			jouer (morpion : tableausafe,joueur : forme)
    		FINSI
     
    		cpt <- cpt +1
     
    																					//Ici nous faisons les vérifications, nous vérifions si une des 8 possibilitées est remplie si oui alors la partie se termine et on annonce le vainqueur sinon si cpt = 10 donc le 9eme placement de symbol n'est pas gagnant alors 
    																					//cpt prendras cpt + 1, donc aucuns des deux joueurs n'a fait d'allignement donc la partie est une égalitée.
    	JUSQUA (((morpion.[1.1] = morpion.[3.1] = morpion.[5.1]) ET <> " ") OU ((morpion.[1.3] = morpion.[3.3] = morpion.[5.3]) ET <> " ") OU ((morpion.[1.5] = morpion.[3.5] = morpion.[5.5]) ET <> " ") OU ((morpion.[1.1] = morpion.[1.3] = morpion.[1.5]) ET <> " "
    ) OU ((morpion.[3.1] = morpion.[3.3] = morpion.[3.5]) ET <> " ") OU ((morpion.[5.1] = morpion.[5.3] = morpion.[5.5]) ET <> " ") OU ((morpion.[1.1] = morpion.[3.3] = morpion.[5.5]) ET <> " ") OU ((morpion.[5.1] = morpion.[3.3] = morpion.[1.5]) ET <> " ")) OU (cpt = 10)
     
    	SI (cpt <> 10) ALORS 															// Ici on annonce le gnagnant ou l'égalitée
    		ECRIRE "Félicitation a : ",joueur," pour avoir gagné la partie !"
    	SINON
    		ECRIRE "Egalitée ! aucun gagnant sur cette partie !"
    	FINSI
    FIN
    }
     
     
     
     
     
     
     
     
     
    PROGRAM morpion;
    uses crt;
     
    //BUT faire le jeu du morpion (deux joueurs)
    //ENTREE la case choisi par l'utilisateur
    //SORTIE l'affichage du morpion en temps réel, la non-posibilité de sélection d'une case, et l'annonce du gagnant en fin de partie
     
    Type
    	 forme=(X,O);														// Dans un premier temps je prépare mes énumération pour proteger le contenue des variables et n'avoir que se que je veut pouvoir y avoir
    	 tableausafe=(X,O,I,_);
    	 choix=(hg,hm,hd,mg,mm,md,bg,bm,bd,valider);
     
    PROCEDURE initTableau (morpion : tableausafe)							//Je fait ensuite une procedure qui prépare le contenue du tableau donc la partie visuel du tableau
     
    	VAR
    		i,j : INTEGER;
     
    	BEGIN																//Pour se faire je parcours grace aux deux "POUR" les différentes lignes et je les remplie d'espace ou de traits pour l'effet visuel demandé
    		FOR i := 1 TO 5 DO
    			BEGIN
    				FOR j := 1 TO 5 DO
    					BEGIN
    						IF (i MOD 2 = 0) THEN
    							morpion.[i.j] := '_';
    						IF (j MOD 2 = 0) THEN
    							morpion.[i.j] := 'I';
    						IF (i MOD 2 <> 0) THEN
    							morpion.[i.j] := ' ';
    						IF (j MOD 2 <> 0) THEN
    							morpion.[i.j] := ' ';
     
    					END;
    			END;
    	END;
    END;
     
    PROCEDURE affichageMorpion (morpion : tableausafe)						//Une fois le tableau initialisé je fait une procedure qui affiche le tableau comme il est en temps réel avec les modifications apportée
     
    	BEGIN
    		WRITELN (morpion.[1.1],morpion.[1.2],morpion.[1.3],morpion.[1.4],morpion.[1.5]);
    		WRITELN (morpion.[2.1],morpion.[2.2],morpion.[2.3],morpion.[2.4],morpion.[2.5]);
    		WRITELN (morpion.[3.1],morpion.[3.2],morpion.[3.3],morpion.[3.4],morpion.[3.5]);
    		WRITELN (morpion.[4.1],morpion.[4.2],morpion.[4.3],morpion.[4.4],morpion.[4.5]);
    		WRITELN (morpion.[5.1],morpion.[5.2],morpion.[5.3],morpion.[5.4],morpion.[5.5]);
    	END;
     
    END;
     
    PROCEDURE jouer (morpion : tableausafe,joueur : forme)					//Ici la procedure Jouer qui à la fois vérifi si la case est vide (donc est remplie d'un espace) et qui la remplie dans le cas ou elle est vide			
     
    	VAR
    		choix : choixEmplacement;
     
    	BEGIN
     
    		WRITELN ("Choisissez votre emplacement a l'aide des premieres lettre de celui, exemple : si hd = haut droit, bg = bas gauche, mm = milieu milieu ...");
    		WRITELN ("h pour haut, m pour milieu, b pour bas ensuite une fois la premiere lettre entrer collé y la seconde : ");
    		WRITELN ("g pour gauche, m pour milieu, d pour droite.");
    		READLN (choix);
     
    		REPEAT
    			IF (choix = hg) THEN
    				IF (morpion.[1.1] = ' ') THEN
    					morpion.[1.1] := joueur;
    					choix := valider;									//Ici nous validons le choix pour pouvoir sortir de la boucle dans le cas ou les conditions sont respectée
     
    			IF (choix = hm) THEN
    				IF (morpion.[1.3] = ' ') THEN
    					morpion.[1.3] := joueur;
    					choix := valider;
     
    			IF (choix = hd) THEN
    				IF (morpion.[1.5] = ' ') THEN
    					morpion.[1.5] := joueur;
    					choix := valider;
    			IF (choix = hg) THEN
    				IF (morpion.[3.1] = ' ') THEN
    					morpion.[3.1] := joueur;;
    					choix := valider;;
     
    			IF (choix = hm) THEN
    				IF (morpion.[3.3] = ' ') THEN
    					morpion.[3.3] := joueur;
    					choix := valider;
     
    			IF (choix = hd) THEN
    				IF (morpion.[3.5] = ' ') THEN
    					morpion.[3.5] := joueur;
    					choix := valider;
     
    			IF (choix = hg) THEN
    				IF (morpion.[5.1] = ' ') THEN
    					morpion.[5.1] := joueur;
    					choix := valider;
     
    			IF (choix = hm) THEN
    				IF (morpion.[5.3] = ' ') THEN
    					morpion.[5.3] := joueur;
    					choix := valider;
     
    			IF (choix = hd) THEN
    				IF (morpion.[5.5] = ' ') THEN
    					morpion.[5.5] := joueur;
    					choix := valider
     
    				ELSE
    						WRITELN ("Veuillez saisir une autre case car celle-ci est prise.");			//Dans le cas ou l'utilisateur se trompe de saisis nous lui faisons recommencer une nouvelle saisis jusqu'a en trouver une bonne
    						affichageMorpion (morpion : tableausafe);
    						READLN (choix);
    		UNTIL (choix = valider);
     
    	END;
    END;
     
     
    // PROGRAMME PRINCIPAL
     
     
    VAR
    	cpt : INTEGER;
    	j1,j2,joueur : forme;
     
    	morpion : ARRAY [1..5,1..5] OF tableausafe;
     
     
    BEGIN
     
    	cpt := 1																					//CPT nous permet de savoir qui doit jouer entre le joueur un (impaires) et le joueur deux (paire)
     
    	WRITELN ("Bienvenue sur le jeu du morpion");
    	WRITELN ("Joueur 1 veuillez choisir la croix ou le rond en écrivant X ou O");				//Le joueur 1 choisi la Croix ou le Rond et le joueur 2 est assigné de l'autre possibilitée
    	READLN (j1);
    	WRITELN ("Le Joueur 1 seras donc : ", j1);
     
    	IF (j1 = X) THEN
    		j2 := "O";
    		WRITELN ("Le Joueur 2 seras alors : ",j2)
    	ELSE
    		j2 := "X";
    		WRITELN ("Le Joueur 2 seras alors : ",j2);
    	END;
     
    	initTableau (morpion : tableausafe);														//Une fois les deux joueurs prévenue de leurs symbol nous initialisons le tableau vide
    	affichageMorpion (morpion : tableausafe);													//Nous affichons donc une premiere fois le tableau
     
     
    	REPEAT
     
    		IF (cpt MOD 2 = 0)THEN																	//Si le joueur 2 (cpt Modulo 2 =0) doit jouer on lui demande ou veut-t-il placer son symbol
    			WRITELN ("Au tour de : ",j2," de jouer.");
    			WRITELN ("Ou voullez vous placer votre ",j2," ?");
    			joueur := j2;
    			jouer (morpion : tableausafe,joueur : forme)										//Une fois que tout est prêt on appelle alors la procedure jouer pour faire les vérifications et le remplissage
    		ELSE
    			WRITELN (" Au tour de : ",j1," de jouer.");											//De même pour le joueur 1
    			WRITELN ("Ou voullez vous placer votre ",j1," ?");
    			joueur := j1;
    			jouer (morpion : tableausafe,joueur : forme);
     
    		cpt := cpt + 1;
     
    																					//Ici nous faisons les vérifications, nous vérifions si une des 8 possibilitées est remplie si oui alors la partie se termine et on annonce le vainqueur sinon si cpt = 10 donc le 9eme placement de symbol n'est pas gagnant alors 
    																					//cpt prendras cpt + 1, donc aucuns des deux joueurs n'a fait d'allignement donc la partie est une égalitée.
    	UNTIL (((morpion.[1.1] = morpion.[3.1] = morpion.[5.1]) AND <> " ") OR ((morpion.[1.3] = morpion.[3.3] = morpion.[5.3]) AND <> " ") OR ((morpion.[1.5] = morpion.[3.5] = morpion.[5.5]) AND <> " ") OR ((morpion.[1.1] = morpion.[1.3] = morpion.[1.5]) AND <>
    " ") OR ((morpion.[3.1] = morpion.[3.3] = morpion.[3.5]) AND <> " ") OR ((morpion.[5.1] = morpion.[5.3] = morpion.[5.5]) AND <> " ") OR ((morpion.[1.1] = morpion.[3.3] = morpion.[5.5]) AND <> " ") OR ((morpion.[5.1] = morpion.[3.3] = morpion.[1.5]) AND <>
     " ")) OR (cpt = 10)
     
    	IF (cpt <> 10) THEN 															// Ici on annonce le gnagnant ou l'égalitée
    		WRITELN ("Félicitation a : ",joueur," pour avoir gagné la partie !")
    	ELSE
    		WRITELN ("Egalitée ! aucun gagnant sur cette partie !");
    END.

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 418
    Points : 5 816
    Points
    5 816
    Par défaut
    Citation Envoyé par Shaøling Voir le message
    Bonjour j'ai un exercice à réaliser, j'ai fait l'algo & le pascal du jeu du morpion comme il me la été demandé mais mon problème est le suivant : Mon pascal a décidé de trouver toutes les possibilités existantes pour me faire des erreurs inconnue au bataillon !
    Si quelqu'un peut vérifier et m'aider a corriger mes erreurs sa serais génial ! merci d'avance :


    {
    ALGORITHME morpion

    //BUT faire le jeu du morpion (deux joueurs)
    //ENTREE la case choisi par l'utilisateur
    //SORTIE l'affichage du morpion en temps réel, la non-posibilité de sélection d'une case, et l'annonce du gagnant en fin de partie


    TYPE forme = (X,O) // Dans un premier temps je prépare mes énumération pour proteger le contenue des variables et n'avoir que se que je veut pouvoir y avoir
    TYPE tableausafe = (X,O,I,-)
    TYPE choix = (hg,hm,hd,mg,mm,md,bg,bm,bd,valider)

    PROCEDURE initTableau (morpion : tableausafe) //Je fait ensuite une procedure qui prépare le contenue du tableau donc la partie visuel du tableau

    VAR
    i,j : ENTIER

    DEBUT //Pour se faire je parcours grace aux deux "POUR" les différentes lignes et je les remplie d'espace ou de traits pour l'effet visuel demandé
    POUR i de 1 a 5 FAIRE
    POUR j de 1 a 5 FAIRE
    SI (i modulo 2 = 0) ALORS
    morpion.[i.j] <- "_"
    SI (j modulo 2 = 0) ALORS
    morpion.[i.j] <- "I"
    SI (i modulo 2 <> 0) ALORS
    morpion.[i.j] <- " "
    SI (j modulo 2 <> 0) ALORS
    morpion.[i.j] <- " "

    FINPOUR
    FINPOUR
    FIN
    FINPROCEDURE

    PROCEDURE affichageMorpion (morpion : tableausafe) //Une fois le tableau initialisé je fait une procedure qui affiche le tableau comme il est en temps réel avec les modifications apportée

    DEBUT
    ECRIRE (morpion.[1.1],morpion.[1.2],morpion.[1.3],morpion.[1.4],morpion.[1.5])
    ECRIRE (morpion.[2.1],morpion.[2.2],morpion.[2.3],morpion.[2.4],morpion.[2.5])
    ECRIRE (morpion.[3.1],morpion.[3.2],morpion.[3.3],morpion.[3.4],morpion.[3.5])
    ECRIRE (morpion.[4.1],morpion.[4.2],morpion.[4.3],morpion.[4.4],morpion.[4.5])
    ECRIRE (morpion.[5.1],morpion.[5.2],morpion.[5.3],morpion.[5.4],morpion.[5.5])
    FIN

    FINPROCEDURE

    PROCEDURE jouer (morpion : tableausafe,joueur : forme) //Ici la procedure Jouer qui à la fois vérifi si la case est vide (donc est remplie d'un espace) et qui la remplie dans le cas ou elle est vide

    VAR
    choix : choixEmplacement

    DEBUT

    ECRIRE "Choisissez votre emplacement a l'aide des premieres lettre de celui, exemple : si hd = haut droit, bg = bas gauche, mm = milieu milieu ..."
    ECRIRE "h pour haut, m pour milieu, b pour bas ensuite une fois la premiere lettre entrer collé y la seconde : "
    ECRIRE "g pour gauche, m pour milieu, d pour droite."
    LIRE choix

    REPETER
    SI (choix = hg) ALORS
    SI (morpion.[1.1] = " ") ALORS
    morpion.[1.1] <- joueur
    choix <- valider
    //Ici nous validons le choix pour pouvoir sortir de la boucle dans le cas ou les conditions sont respectée

    SI (choix = hm) ALORS
    SI (morpion.[1.3] = " ") ALORS
    morpion.[1.3] <- joueur
    choix <- valider

    SI (choix = hd) ALORS
    SI (morpion.[1.5] = " ") ALORS
    morpion.[1.5] <- joueur
    choix <- valider
    SI (choix = hg) ALORS
    SI (morpion.[3.1] = " ") ALORS
    morpion.[3.1] <- joueur
    choix <- valider

    SI (choix = hm) ALORS
    SI (morpion.[3.3] = " ") ALORS
    morpion.[3.3] <- joueur
    choix <- valider

    SI (choix = hd) ALORS
    SI (morpion.[3.5] = " ") ALORS
    morpion.[3.5] <- joueur
    choix <- valider
    SI (choix = hg) ALORS
    SI (morpion.[5.1] = " ") ALORS
    morpion.[5.1] <- joueur
    choix <- valider

    SI (choix = hm) ALORS
    SI (morpion.[5.3] = " ") ALORS
    morpion.[5.3] <- joueur
    choix <- valider

    SI (choix = hd) ALORS
    SI (morpion.[5.5] = " ") ALORS
    morpion.[5.5] <- joueur
    choix <- valider



    SINON
    ECRIRE "Veuillez saisir une autre case car celle-ci est prise." //Dans le cas ou l'utilisateur se trompe de saisis nous lui faisons recommencer une nouvelle saisis jusqu'a en trouver une bonne
    affichageMorpion (morpion : tableausafe)
    LIRE choix
    JUSQUA (choix = valider)

    FIN
    FINPROCEDURE


    // PROGRAMME PRINCIPAL


    VAR
    cpt : ENTIER
    j1,j2,joueur : forme

    morpion : TABLEAU [1..5] [1..5] : tableausafe

    DEBUT

    cpt <- 1 //CPT nous permet de savoir qui doit jouer entre le joueur un (impaires) et le joueur deux (paire)

    ECRIRE "Bienvenue sur le jeu du morpion"
    ECRIRE "Joueur 1 veuillez choisir la croix ou le rond en écrivant X ou O" //Le joueur 1 choisi la Croix ou le Rond et le joueur 2 est assigné de l'autre possibilitée
    LIRE j1
    ECRIRE "Le Joueur 1 seras donc : ", j1

    SI (j1 = X) ALORS
    j2 <- "O"
    ECRIRE "Le Joueur 2 seras alors : ",j2
    SINON
    j2 <- "X"
    ECRIRE "Le Joueur 2 seras alors : ",j2
    FINSI

    initTableau (morpion : tableausafe) //Une fois les deux joueurs prévenue de leurs symbol nous initialisons le tableau vide
    affichageMorpion (morpion : tableausafe) //Nous affichons donc une premiere fois le tableau


    REPETER

    SI (cpt modulo 2 = 0) //Si le joueur 2 (cpt Modulo 2 =0) doit jouer on lui demande ou veut-t-il placer son symbol
    ECRIRE "Au tour de : ",j2," de jouer."
    ECRIRE "Ou voullez vous placer votre ",j2," ?"
    joueur <- j2
    jouer (morpion : tableausafe,joueur : forme) //Une fois que tout est prêt on appelle alors la procedure jouer pour faire les vérifications et le remplissage
    SINON
    ECRIRE " Au tour de : ",j1," de jouer." //De même pour le joueur 1
    ECRIRE "Ou voullez vous placer votre ",j1," ?"
    joueur <- j1
    jouer (morpion : tableausafe,joueur : forme)
    FINSI

    cpt <- cpt +1

    //Ici nous faisons les vérifications, nous vérifions si une des 8 possibilitées est remplie si oui alors la partie se termine et on annonce le vainqueur sinon si cpt = 10 donc le 9eme placement de symbol n'est pas gagnant alors
    //cpt prendras cpt + 1, donc aucuns des deux joueurs n'a fait d'allignement donc la partie est une égalitée.
    JUSQUA (((morpion.[1.1] = morpion.[3.1] = morpion.[5.1]) ET <> " ") OU ((morpion.[1.3] = morpion.[3.3] = morpion.[5.3]) ET <> " ") OU ((morpion.[1.5] = morpion.[3.5] = morpion.[5.5]) ET <> " ") OU ((morpion.[1.1] = morpion.[1.3] = morpion.[1.5]) ET <> " "
    ) OU ((morpion.[3.1] = morpion.[3.3] = morpion.[3.5]) ET <> " ") OU ((morpion.[5.1] = morpion.[5.3] = morpion.[5.5]) ET <> " ") OU ((morpion.[1.1] = morpion.[3.3] = morpion.[5.5]) ET <> " ") OU ((morpion.[5.1] = morpion.[3.3] = morpion.[1.5]) ET <> " ")) OU (cpt = 10)

    SI (cpt <> 10) ALORS // Ici on annonce le gnagnant ou l'égalitée
    ECRIRE "Félicitation a : ",joueur," pour avoir gagné la partie !"
    SINON
    ECRIRE "Egalitée ! aucun gagnant sur cette partie !"
    FINSI
    FIN
    }

    Le programe pascal commence ici

    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    
    
    
    PROGRAM morpion;
    uses crt;
    
    //BUT faire le jeu du morpion (deux joueurs)
    //ENTREE la case choisi par l'utilisateur
    //SORTIE l'affichage du morpion en temps réel, la non-posibilité de sélection d'une case, et l'annonce du gagnant en fin de partie
    
    Type
       forme=(X,O);// Dans un premier temps je prépare mes énumération pour proteger le contenue des variables et n'avoir que se que je veut pouvoir y avoir
       tableausafe=(X,O,I,_);
       choix=(hg,hm,hd,mg,mm,md,bg,bm,bd,valider);
    
    PROCEDURE initTableau (morpion : tableausafe);	
    //Je fait ensuite une procedure qui prépare le contenue du tableau donc la partie visuel du tableau
    VAR
      i,j : INTEGER;
    BEGIN		
    //Pour se faire je parcours grace aux deux "POUR" les différentes lignes et je les remplie d'espace ou de traits pour l'effet visuel demandé
      FOR i := 1 TO 5 DO
     BEGIN
        FOR j := 1 TO 5 DO
        BEGIN
    	IF (i MOD 2 = 0) THEN
    	   morpion.[i.j] := '_';
    	IF (j MOD 2 = 0) THEN
     	  morpion.[i.j] := 'I';
    	IF (i MOD 2 <> 0) THEN
    	  morpion.[i.j] := ' ';
    	IF (j MOD 2 <> 0) THEN
    	  morpion.[i.j] := ' ';
        END;
      END;
    	END;
    //END;
    
    PROCEDURE affichageMorpion (morpion : tableausafe)	;					
    //Une fois le tableau initialisé je fait une procedure qui affiche le tableau comme il est en temps réel avec les modifications apportée
    
    	BEGIN
    		WRITELN (morpion.[1.1],morpion.[1.2],morpion.[1.3],morpion.[1.4],morpion.[1.5]);
    		WRITELN (morpion.[2.1],morpion.[2.2],morpion.[2.3],morpion.[2.4],morpion.[2.5]);
    		WRITELN (morpion.[3.1],morpion.[3.2],morpion.[3.3],morpion.[3.4],morpion.[3.5]);
    		WRITELN (morpion.[4.1],morpion.[4.2],morpion.[4.3],morpion.[4.4],morpion.[4.5]);
    		WRITELN (morpion.[5.1],morpion.[5.2],morpion.[5.3],morpion.[5.4],morpion.[5.5]);
    	END;
    
    END;
    
    PROCEDURE jouer (morpion : tableausafe,joueur : forme) ;
    //Ici la procedure Jouer qui à la fois vérifi si la case est vide (donc est remplie d'un espace) et qui la remplie dans le cas ou elle est vide			
    
    	VAR
    		choix : choixEmplacement;
    
    	BEGIN
    
    		WRITELN ("Choisissez votre emplacement a l'aide des premieres lettre de celui, exemple : si hd = haut droit, bg = bas gauche, mm = milieu milieu ...");
    		WRITELN ("h pour haut, m pour milieu, b pour bas ensuite une fois la premiere lettre entrer collé y la seconde : ");
    		WRITELN ("g pour gauche, m pour milieu, d pour droite.");
    		READLN (choix);
    
    		REPEAT
    			IF (choix = hg) THEN
    				IF (morpion.[1.1] = ' ') THEN
    					morpion.[1.1] := joueur;
    					choix := valider;		
    		//Ici nous validons le choix pour pouvoir sortir de la boucle dans le cas ou les conditions sont respectée
    
    			IF (choix = hm) THEN
    				IF (morpion.[1.3] = ' ') THEN
    					morpion.[1.3] := joueur;
    					choix := valider;
    
    			IF (choix = hd) THEN
    				IF (morpion.[1.5] = ' ') THEN
    					morpion.[1.5] := joueur;
    					choix := valider;
    			IF (choix = hg) THEN
    				IF (morpion.[3.1] = ' ') THEN
    					morpion.[3.1] := joueur;;
    					choix := valider;;
    
    			IF (choix = hm) THEN
    				IF (morpion.[3.3] = ' ') THEN
    					morpion.[3.3] := joueur;
    					choix := valider;
    
    			IF (choix = hd) THEN
    				IF (morpion.[3.5] = ' ') THEN
    					morpion.[3.5] := joueur;
    					choix := valider;
    
    			IF (choix = hg) THEN
    				IF (morpion.[5.1] = ' ') THEN
    					morpion.[5.1] := joueur;
    					choix := valider;
    
    			IF (choix = hm) THEN
    				IF (morpion.[5.3] = ' ') THEN
    					morpion.[5.3] := joueur;
    					choix := valider;
    
    			IF (choix = hd) THEN
    				IF (morpion.[5.5] = ' ') THEN
    					morpion.[5.5] := joueur;
    					choix := valider
    
    
              
                ////////// ici tu ne fait pas toutes les cases 
                 HG HM HD
                 MG MM MD 
    	     BG BM BD
            	
    
    
    				ELSE
    						WRITELN ("Veuillez saisir une autre case car celle-ci est prise.");			//Dans le cas ou l'utilisateur se trompe de saisis nous lui faisons recommencer une nouvelle saisis jusqu'a en trouver une bonne
    						affichageMorpion (morpion : tableausafe);
    						READLN (choix);
    		UNTIL (choix = valider);
    
    	END;
    END;
    
    j'abandonne la lecture il ya des possibilité de simplification 
    // PROGRAMME PRINCIPAL
    
    
    VAR
    	cpt : INTEGER;
    	j1,j2,joueur : forme;
    
    	morpion : ARRAY [1..5,1..5] OF tableausafe;
    
    
    BEGIN
    
    	cpt := 1																					//CPT nous permet de savoir qui doit jouer entre le joueur un (impaires) et le joueur deux (paire)
    
    	WRITELN ("Bienvenue sur le jeu du morpion");
    	WRITELN ("Joueur 1 veuillez choisir la croix ou le rond en écrivant X ou O");				//Le joueur 1 choisi la Croix ou le Rond et le joueur 2 est assigné de l'autre possibilitée
    	READLN (j1);
    	WRITELN ("Le Joueur 1 seras donc : ", j1);
    
    	IF (j1 = X) THEN
    		j2 := "O";
    		WRITELN ("Le Joueur 2 seras alors : ",j2)
    	ELSE
    		j2 := "X";
    		WRITELN ("Le Joueur 2 seras alors : ",j2);
    	END;
    
    	initTableau (morpion : tableausafe);														//Une fois les deux joueurs prévenue de leurs symbol nous initialisons le tableau vide
    	affichageMorpion (morpion : tableausafe);													//Nous affichons donc une premiere fois le tableau
    
    
    	REPEAT
    
    		IF (cpt MOD 2 = 0)THEN																	//Si le joueur 2 (cpt Modulo 2 =0) doit jouer on lui demande ou veut-t-il placer son symbol
    			WRITELN ("Au tour de : ",j2," de jouer.");
    			WRITELN ("Ou voullez vous placer votre ",j2," ?");
    			joueur := j2;
    			jouer (morpion : tableausafe,joueur : forme)										//Une fois que tout est prêt on appelle alors la procedure jouer pour faire les vérifications et le remplissage
    		ELSE
    			WRITELN (" Au tour de : ",j1," de jouer.");											//De même pour le joueur 1
    			WRITELN ("Ou voullez vous placer votre ",j1," ?");
    			joueur := j1;
    			jouer (morpion : tableausafe,joueur : forme);
    
    		cpt := cpt + 1;
    
    																					//Ici nous faisons les vérifications, nous vérifions si une des 8 possibilitées est remplie si oui alors la partie se termine et on annonce le vainqueur sinon si cpt = 10 donc le 9eme placement de symbol n'est pas gagnant alors 
    																					//cpt prendras cpt + 1, donc aucuns des deux joueurs n'a fait d'allignement donc la partie est une égalitée.
    	UNTIL (((morpion.[1.1] = morpion.[3.1] = morpion.[5.1]) AND <> " ") OR ((morpion.[1.3] = morpion.[3.3] = morpion.[5.3]) AND <> " ") OR ((morpion.[1.5] = morpion.[3.5] = morpion.[5.5]) AND <> " ") OR ((morpion.[1.1] = morpion.[1.3] = morpion.[1.5]) AND <>
    " ") OR ((morpion.[3.1] = morpion.[3.3] = morpion.[3.5]) AND <> " ") OR ((morpion.[5.1] = morpion.[5.3] = morpion.[5.5]) AND <> " ") OR ((morpion.[1.1] = morpion.[3.3] = morpion.[5.5]) AND <> " ") OR ((morpion.[5.1] = morpion.[3.3] = morpion.[1.5]) AND <>
     " ")) OR (cpt = 10)
    
    	IF (cpt <> 10) THEN 															// Ici on annonce le gnagnant ou l'égalitée
    		WRITELN ("Félicitation a : ",joueur," pour avoir gagné la partie !")
    	ELSE
    		WRITELN ("Egalitée ! aucun gagnant sur cette partie !");
    END.
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2018
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Réponse
    Merci beaucoup pour l'aide, le souci est que j'ai des erreurs lors du lancement du programme sur FreePascal et je ne trouve pas comment les résoudre, j'ai réussi à corriger certaines erreurs mais je suis comme qui dirait bloqué et n'étant pas très très bon en FreePascal c'est pour moi une galère de trouver même une "simple" faute.

    Si vous pouviez essayer de votre côté ce serait super car, comme dit précédemment, j'ai beaucoup de mal avec cette correction de programme ; en soi le programme n'est pas faux mais je pense qu'il y a des erreurs d'écriture légères qui peuvent me coûter le fonctionnement de celui-ci.

    Le début de correction de mon programme :
    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    PROGRAM morpion;
    uses crt;
     
    //BUT faire le jeu du morpion (deux joueurs)
    //ENTREE la case choisi par l'utilisateur
    //SORTIE l'affichage du morpion en temps réel, la non-posibilité de sélection d'une case, et l'annonce du gagnant en fin de partie
     
    Type
    	 forme=(X,O,I,_);																			// Dans un premier temps je prépare mes énumération pour proteger le contenue des variables et n'avoir que se que je veut pouvoir y avoir
    	 choix=(hg,hm,hd,mg,mm,md,bg,bm,bd,valider);
     
    PROCEDURE initTableau (morpion : forme);														//Je fait ensuite une procedure qui prépare le contenue du tableau donc la partie visuel du tableau
     
    	VAR
    		i,j : ShortInt;
     
    	BEGIN
    		i:=1;
    		j:=1;
    																								//Pour se faire je parcours grace aux deux "POUR" les différentes lignes et je les remplie d'espace ou de traits pour l'effet visuel demandé
    		FOR i := 1 TO 5 DO
    			BEGIN
    				FOR j := 1 TO 5 DO
    					BEGIN
    						IF (i MOD 2 = 0) THEN
    							morpion.[i.j] := '_';
    						IF (j MOD 2 = 0) THEN
    							morpion.[i.j] := 'I';
    						IF (i MOD 2 <> 0) THEN
    							morpion.[i.j] := ' ';
    						IF (j MOD 2 <> 0) THEN
    							morpion.[i.j] := ' ';
     
    					END;
    			END;
    	END;
     
    PROCEDURE affichageMorpion (morpion : forme);													//Une fois le tableau initialisé je fait une procedure qui affiche le tableau comme il est en temps réel avec les modifications apportée
     
    	BEGIN
    		WRITELN (morpion.[1.1],morpion.[1.2],morpion.[1.3],morpion.[1.4],morpion.[1.5]);
    		WRITELN (morpion.[2.1],morpion.[2.2],morpion.[2.3],morpion.[2.4],morpion.[2.5]);
    		WRITELN (morpion.[3.1],morpion.[3.2],morpion.[3.3],morpion.[3.4],morpion.[3.5]);
    		WRITELN (morpion.[4.1],morpion.[4.2],morpion.[4.3],morpion.[4.4],morpion.[4.5]);
    		WRITELN (morpion.[5.1],morpion.[5.2],morpion.[5.3],morpion.[5.4],morpion.[5.5]);
    	END;
     
    END;
     
    PROCEDURE jouer (morpion : forme,joueur : forme);												//Ici la procedure Jouer qui à la fois vérifi si la case est vide (donc est remplie d'un espace) et qui la remplie dans le cas ou elle est vide			
     
    	VAR
    		choix : choixEmplacement;
     
    	BEGIN
     
    		WRITELN ("Choisissez votre emplacement a l'aide des premieres lettre de celui, exemple : si hd = haut droit, bg = bas gauche, mm = milieu milieu ...");
    		WRITELN ("h pour haut, m pour milieu, b pour bas ensuite une fois la premiere lettre entrer collé y la seconde : ");
    		WRITELN ("g pour gauche, m pour milieu, d pour droite.");
    		READLN (choix);
     
    		REPEAT
    			IF (choix = hg) THEN
    				IF (morpion.[1.1] = ' ') THEN
    					morpion.[1.1] := joueur;
    					choix := valider;															//Ici nous validons le choix pour pouvoir sortir de la boucle dans le cas ou les conditions sont respectée
     
    			IF (choix = hm) THEN
    				IF (morpion.[1.3] = ' ') THEN
    					morpion.[1.3] := joueur;
    					choix := valider;
     
    			IF (choix = hd) THEN
    				IF (morpion.[1.5] = ' ') THEN
    					morpion.[1.5] := joueur;
    					choix := valider;
    			IF (choix = mg) THEN
    				IF (morpion.[3.1] = ' ') THEN
    					morpion.[3.1] := joueur;;
    					choix := valider;;
     
    			IF (choix = mm) THEN
    				IF (morpion.[3.3] = ' ') THEN
    					morpion.[3.3] := joueur;
    					choix := valider;
     
    			IF (choix = md) THEN
    				IF (morpion.[3.5] = ' ') THEN
    					morpion.[3.5] := joueur;
    					choix := valider;
     
    			IF (choix = bg) THEN
    				IF (morpion.[5.1] = ' ') THEN
    					morpion.[5.1] := joueur;
    					choix := valider;
     
    			IF (choix = bm) THEN
    				IF (morpion.[5.3] = ' ') THEN
    					morpion.[5.3] := joueur;
    					choix := valider;
     
    			IF (choix = bd) THEN
    				IF (morpion.[5.5] = ' ') THEN
    					morpion.[5.5] := joueur;
    					choix := valider
     
    				ELSE
    						WRITELN ("Veuillez saisir une autre case car celle-ci est prise.");			//Dans le cas ou l'utilisateur se trompe de saisis nous lui faisons recommencer une nouvelle saisis jusqu'a en trouver une bonne
    						affichageMorpion (morpion : forme);
    						READLN (choix);
    		UNTIL (choix = valider);
     
    	END;
    END;
     
     
    // PROGRAMME PRINCIPAL
     
     
    VAR
    	cpt : INTEGER;
    	j1,j2,joueur : forme;
     
    	morpion : ARRAY [1..5,1..5] OF forme;
     
     
    BEGIN
     
    	cpt := 1																					//CPT nous permet de savoir qui doit jouer entre le joueur un (impaires) et le joueur deux (paire)
    	clrscr;
     
    	WRITELN ("Bienvenue sur le jeu du morpion");
    	WRITELN ("Joueur 1 veuillez choisir la croix ou le rond en écrivant X ou O");				//Le joueur 1 choisi la Croix ou le Rond et le joueur 2 est assigné de l'autre possibilitée
    	READLN (j1);
    	WRITELN ("Le Joueur 1 seras donc : ", j1);
     
    	IF (j1 = X) THEN
    		j2 := "O";
    		WRITELN ("Le Joueur 2 seras alors : ",j2)
    	ELSE
    		j2 := "X";
    		WRITELN ("Le Joueur 2 seras alors : ",j2);
    	END;
     
    	initTableau (morpion : forme);																//Une fois les deux joueurs prévenue de leurs symbol nous initialisons le tableau vide
    	affichageMorpion (morpion : forme);															//Nous affichons donc une premiere fois le tableau
     
     
    	REPEAT
     
    		IF (cpt MOD 2 = 0)THEN																	//Si le joueur 2 (cpt Modulo 2 =0) doit jouer on lui demande ou veut-t-il placer son symbol
    			WRITELN ("Au tour de : ",j2," de jouer.");
    			WRITELN ("Ou voullez vous placer votre ",j2," ?");
    			joueur := j2;
    			jouer (morpion : forme,joueur : forme)												//Une fois que tout est prêt on appelle alors la procedure jouer pour faire les vérifications et le remplissage
    		ELSE
    			WRITELN (" Au tour de : ",j1," de jouer.");											//De même pour le joueur 1
    			WRITELN ("Ou voullez vous placer votre ",j1," ?");
    			joueur := j1;
    			jouer (morpion : forme,joueur : forme);
     
    		cpt := cpt + 1;
     
    																							//Ici nous faisons les vérifications, nous vérifions si une des 8 possibilitées est remplie si oui alors la partie se termine et on annonce le vainqueur sinon si cpt = 10 donc le 9eme placement de symbol n'est pas gagnant alors 
    																							//cpt prendras cpt + 1, donc aucuns des deux joueurs n'a fait d'allignement donc la partie est une égalitée.
    	UNTIL (((morpion.[1.1] = morpion.[3.1] = morpion.[5.1]) AND <> " ") OR ((morpion.[1.3] = morpion.[3.3] = morpion.[5.3]) AND <> " ") OR ((morpion.[1.5] = morpion.[3.5] = morpion.[5.5]) AND <> " ") OR ((morpion.[1.1] = morpion.[1.3] = morpion.[1.5]) AND <>
    " ") OR ((morpion.[3.1] = morpion.[3.3] = morpion.[3.5]) AND <> " ") OR ((morpion.[5.1] = morpion.[5.3] = morpion.[5.5]) AND <> " ") OR ((morpion.[1.1] = morpion.[3.3] = morpion.[5.5]) AND <> " ") OR ((morpion.[5.1] = morpion.[3.3] = morpion.[1.5]) AND <>
     " ")) OR (cpt = 10)
     
    	IF (cpt <> 10) THEN 																	// Ici on annonce le gnagnant ou l'égalitée
    		WRITELN ("Félicitation a : ",joueur," pour avoir gagné la partie !")
    	ELSE
    		WRITELN ("Egalitée ! aucun gagnant sur cette partie !");
    END.

  4. #4
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Je ne voudrais pas te vexer mais je pense qu'il te manque des notions fondamentales, notamment sur les tableaux et les types énumérés. Un petit rafraîchissement te serait profitable : https://pascal.developpez.com/cours/cyberzoide/.

    Il y a trop de problèmes de syntaxe pour aller en profondeur dans ton code source. Voici quelques remarques issues de ma lecture en diagonale.

    L'identificateur morpion est utilisé dans différents contextes : c'est tour à tour le nom du programme, une variable locale de type forme et une variable globale de type tableau. Je te conseille de revoir les principes de la portée des identificateurs.

    Évite, dans une procédure ou fonction, de travailler sur des variables globales : considère la procédure ou fonction comme une boîte hermétique, qui doit recevoir comme paramètres toutes les variables dont elle a besoin.

    Bon courage.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  5. #5
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut

    J'ai survoler le code vite fait. Pas regarder la partie algo.

    Le tableau du morpion est une matrice de 3x3 :

    1) Definition du tableau de jeu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Const
       cEtatCaseVide = 0;
       cEtatCaseJoueur1 = 1;
       cEtatCaseJoueur1 = 2;
    Type    
        // Les valeurs a inscrire seront donc les constantes ci-dessus
        TMorpionTable = Array[0..2,0..2] of Byte; // [Ligne,Colonne]
    2) Les possibilités pour gagner ne sont pas nombreuses :

    petit code vite fait sur la tas :

    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
    // Cas spéciaux les diagonales
    (* Const
      cWinDiagonal1 : TMorpionTable = (1,0,0;
                                                         0,1,0;
                                                         0,0,1)
     
      cWinDiagonal1 : TMorpionTable = (0,0,1;
                                                         0,1,0;
                                                         1,0,0) *)
     
    Var
       Morpion :  TMorpionTable;
     
    function Test_Si_Joueur_Gagne(Const NumeroJoueur : Byte):Boolean; //NumeroJoueur = 1 ou 2
    var
      i : byte;
      isWin : Boolean;
     
      function TestDiagonale1: Boolean;
      begin
         result := ((Morpion[0,0]=NumeroJoueur) and (Morpion[1,1]=NumeroJoueur) and (Morpion[2,2]=NumeroJoueur));
      end;
     
      function TestDiagonale2: Boolean;
      begin
         result :=  ((Morpion[0,2]=NumeroJoueur) and (Morpion[1,1]=NumeroJoueur) and (Morpion[2,0]=NumeroJoueur));
      end;
     
    begin
      Result:=TestDiagonal1 or TestDiagonal2;
      if not(result) then 
      begin
        For i:=0 to 2 do // Ligne
        Begin
           result := ((Morpion[i,0]=NumeroJoueur) and (Morpion[i,1]=NumeroJoueur) and (Morpion[i,2]=NumeroJoueur))
           if result then break;
        end;
        // Maintenant faire la même chose a l'horizontale
        For i:=0 to 2 do // Colonne
        Begin
           result := ((Morpion[0,i]=NumeroJoueur) and (Morpion[1,i]=NumeroJoueur) and (Morpion[2,i]=NumeroJoueur))
           if result then break;
        end;    
     
      end;
    end;
    Pour le reste je te laisse faire

    Pour savoir si une case est vide ou pas il te suffit de faire un petit test if Morpion[Ligne,Colonne]=cEtatCaseVide then CaseVide := True;
    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2018
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Merci
    Merci pour l'aide fournit ! j'ai corriger au mieux mes erreurs dans tout les cas le jour de remise de travail est demain j’aurais au moins un programme plus fonctionnel qu'au début grâce à vous !
    Merci encore et en vous souhaitant une bonne continuation
    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Jeu Othello et quelque soucis avec une structure
    Par AliFirat91 dans le forum C
    Réponses: 4
    Dernier message: 26/04/2012, 19h27
  2. Soucis avec les collisions (jeu)
    Par poussinphp dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 27/04/2007, 08h19
  3. quelques soucis avec word 2000
    Par ramchou dans le forum Word
    Réponses: 3
    Dernier message: 06/09/2004, 18h13
  4. [LG]Un jeu du morpion
    Par yffick dans le forum Langage
    Réponses: 10
    Dernier message: 23/12/2003, 18h52
  5. Réponses: 4
    Dernier message: 16/02/2003, 12h16

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