Bonjour !
Aidez-moi svp, je voudrais écrire un programme Pascal sur un jeu de morpion pour deux joueurs.
Aais je bloque !
Bonjour !
Aidez-moi svp, je voudrais écrire un programme Pascal sur un jeu de morpion pour deux joueurs.
Aais je bloque !
tu bloques où ?
Bonjour,
Si tu vas faire un tour parmi les codes sources Pascal et si tu fais une recherche sur le mot "morpion", tu trouveras plusieurs exemples qui pourront t'aider. Le morpion avait également été le sujet du défi Pascal 2008.
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]
merci mais retrouve dans les codes sources sontr des bouts de code dispersé dont je n'arrive pas à savoir ou est le debut! en gros je suis perdu
Et si vous commenciez par le début ? Le début, c'est la façon dont vous allez représenter le jeu. Il me semble que le jeu du morpion peut être représenté par un tableau contenant trois lignes et trois colonnes. Les cases du tableau peuvent recevoir trois valeurs différentes. Est-ce que ça vous paraît faisable ?
Mon site personnel consacré à MSEide+MSEgui : msegui.net
je pense que oui! mais quels sont les etapes pour cet algorithme! de la ddeclaration à la fin par quel etapes devrai je passer
Bonjour,
Du même avis que Roland : d'abord le début. Avant l'algorithme, Il faut essayer de définir à l'avance tout ce qui peut servir dont le tableau 3x3, si chaque case peut contenir 3 valeurs (x,o ou rien) ces cases peuvent être de n'importe quel type sauf les boolean (Par exemple en shortint avec 0 pour rien, 1 pour x et 2 pour o).
On pourra toujours rajouter des variables statiques auquel on n'a pas pensé pour tout le programme.
Pour les graphismes, je pense qu'il vaut mieux essayer le plus simple : en mode texte, en écrivant sur trois lignes les o ou les x ou rien des cases avant chaque demande pour le joueur 1 ou 2.
A chaque étape, les vérifications à faire (troix x ou troix o alignés horizontalement, verticalement ou en diagonale).
La boucle principal à faire est logiquement de type infini (Repeat... until... ou While ... do...) mais comme il y aura au maximum 9 tours, tu peux aussi utiliser For.. do ...
Fais une tentative et tu verras bien si tu es sur une bonne piste, les étapes se dévoileront au fur et à mesure en fonction des besoins.
Bon courage
bonsoir! voici ce que j'ai pu faire concernant le morpion mais d'apres le compilateur il ya des probemes et j'ai essayé de rectifier mais en vin! donc svp aidez moi à rperé les erreurs!
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 program morpion_zoe; uses crt; const vide=' '; NB_LIG=3; NB_COL=3; var pion:char; pion1,pion2:char; true,false:boolean; damier: array[1..NB_LIG,1..NB_COL] of char; grille:damier; begin clrscr; procedure initialisegrille(); var i,j:integer; begin i:=0; while i<NB_LIG do j:=0; while j<NB_COL do grille[i,j]=' '; j=j+1 end; i=i+1 end; end; procedure affichegrille(); var i,j:integer; begin i:=0; while i<NB_LIG do j:=0; while j<NB_COL do case grille[i,j] of vide: writeln(' '); pion1: writeln('*'); pion2: writeln('+') end; end; end; end, writeln(); procedure metunpionsur_la_grille(ligne,col:integer; saisie_correcte:boolean); saisie_correcte:=false; writeln('numeros de ligne et de colonne'); repeat readln(ligne,col); writeln(); if ligne>0 and ligne<NB_LIG and col>0 and col<NB_COL then ligne:=ligne-1; col:=col-1; if grille[ligne,col]<>vide then writeln('cette case a deja ete remplie. veuillez recommencer:'); else saisie_correcte:=true; grille[ligne,col]:=prochainjoueur; if prochainjoueur=pion1 then prochainjoueur:=pion2; else prochainjoueur:=pion1; else writeln('indice de ligne ou de colonne incorrecte. veuillez recommencer:') end; end; end until not saisie_correcte; function testefin_jeu(joueurgagnant:integer; estfini:boolean); var i,j:integer; begin estfini:=false; if grille[1][1]<>vide then if grille[0][1]=grille[1][1] and grille[1][1]=grille[2][1] or grille[1][0]=grille[1][1] and grille[1][1]=grille[1][2] or grille[0][0]=grille[1][1] and grille[1][1]=grille[2][2] or grille[0][2]=grille[1][1] and grille[1][1]=grille[2][0] then joueurgagant:=grille[1][1]; estfini:=true end; end; if not estfini and grille[2][2]<>vide then if grille[2][0]=grille[2][1] and grille[2][1]=grille[2][2] or grille[0][2]=grille[1][2] and grille[1][2]=grillr[2][2] then joueurgagnant:=grille[2][2] estfini:=true end; end; if estfini then writeln('felicitation au joueur ayant les'); if joueurgagnant=pion1 then write('pion1'); else write('pion2'); writeln('qui a gagne'); return true end; end; i:=0; while i<NB_LIG do j:=0; while j<NB_COL do if grille[i][j]=vide then return false end; end end; return true; function initialisegrille(); repeat metunpionsur_la_grille(); affichegrille(); until not testefinjeu return 1; end.
Bonjour,
Aïe ...
Le problème principal est que tu déclares les routines (Function ou Procedure) dans la partie principale (tout ce qui est entre Begin et End. ) alors qu'elles doivent être créées avant cette partie.
De plus, chaque routine doit commencer par Begin et se terminer par End; après sa déclaration.
Voici un exemple d'utilisation d'une petite routine additionnant deux nombres entiers, pour t'aider à comprendre le fonctionnement :
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 Program addition; Var s : integer; Function addition(i,j : integer) : integer; //Routine additionnant deux nombres Begin //Début de la routine result:=i+j; End; //Fin de la routine BEGIN //PARTIE PRINCIPALE s:=addition(8,12); //Appel de la routine 'addition' définie et créée précédemment. writeln('La somme de 8 et de 12 est : ',s); readln; END. //FIN de la partie principale
Merci pour la remarque, après vérification j'ai moi même aussi remarqué beaucoup d'erreurs que j'ai corrigées. Maintenant, ce que je voudrais faire c'est écrire une procédure qui permettra à l'ordinateur de vérifier si les lignes sont réalisables ; si c'est le cas, il y aligne les trois pions et gagne, dans le cas contraire il empêche le joueur de gagner ! Que faire ?
Bonjour,
Donc si je comprends bien, comment vérifier s'il y a trois '+' ou trois '*' alignés dans le tableau 3*3 de type char?Envoyé par scorpion el-diabloti
Comme le nombre de cas est plutôt limité (3 lignes, 3 colonnes et 2 diagonales => total 8 par joueur donc 16), on peut le faire manuellement avec des if ... then.... Ce sera certes un peu long mais l'avantage est que ce sera moins une prise de tête
Peut-être y a t-il moyen de raccourcir un peu, à voir.
La routine : je verrais -par exemple- une Function qui renvoie un shortint avec les trois valeurs possibles : 0 si rien n'est aligné, 1 si trois '+' sont alignés et 2 si trois '*' sont alignés. A toi de voir.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager