Bonjour à tous,
J'essaie de programmer en ce moment en pascal un jeu de dés inspiré du 421, qu'est le 42. Le principe est simple, il se joue avec deux dés et l'objectif est d'obtenir la combinaison 42. Une partie se joue en plusieurs manches (fixées à 3). Le score de la partie est la somme des scores obtenus dans chacune des manches. L'objectif est d'obtenir le score maximal.
Lors d'une manche, le joueur dispose de trois lancers pour établir une combinaison. Après le lancer initial des deux dés, il peut soit accepter la combinaison (0), soit relancer les deux dés (2), soit relancer uniquement le premier dé (p) ou le deuxième (d).
Le score de la manche est calculé sur la combinaison obtenue à l'issue des lancers. Les scores des combinaisons sont indiqués dans mon programme (conditionnelle case).
Voilà pour le principe. Maintenant, j'ai quelques gros soucis dans mon code. Je cherche un moyen pour inclure 2 variables en même temps dans une conditionnelle case (premier et second lancer). Je pense que c'est la cause de mes erreurs de syntaxe qui n'en finissent plus.
Voici un copier-coller de mon code édité sous GVIM et compilé sous GNU PASCAL. Me demandez pas pourquoi, c'est dans mon cahier des charges!
N.B: j'ai mis quelques numéros de ligne en marge pour vous situer par rapport aux 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 Program jeu_de_des; (*Jouer une partie de 42 avec utilisateur et afficher résultat.*) const trois = 3; Var Manches, Lancers: Integer; (*compteurs de manches et de lancers*) lancer1, lancer2: Integer; (*premier et second lancer de dès*) choix: char; (*propositions après un lancer*) score_manche, score_partie: Integer; (*scores provisoires de la manche et de la partie*) Begin score_manche:= 0; score_partie:= 0; [25] case lancer1, lancer2 of [26] '4, 2': [27] score_manche:= 10; '1, 1': score_manche:= 7; [30] '6, 6': score_manche:= 6; '5, 5': score_manche:= 5; '4, 4': [35] score_manche:= 4; '3, 3': score_manche:= 3; '2, 2'..'6, 5'..'5, 4'..'4, 3'..'3, 2'..'2, 1': score_manche:= 2 [40] else score_manche:= 1; end Manches:= 1; writeln('=============[ Manche ', Manches,' ]=============='); [45] Lancers:= 1; lancer1:= Random(6)+1; lancer2:= Random(6)+1; writeln('Lancer ', Lancers,'/', trois,': ', lancer1,' et ', lancer2); writeln('Vous pouvez :'); [50] writeln('0- accepter la combinaison'); writeln('p- relancer le premier dé, de valeur ', lancer1); writeln('d- relancer le deuxième dé, de valeur ', lancer2); writeln('2- relancer les deux dés'); write('Votre choix : '); [55] readln(choix); case choix of '0': writeln('Score de la manche : ', score_manche); [60] writeln('Score de la partie : ', score_partie); end (*fin provisoire*) end.
ERREURS SOUS GNU:
miniprojet.pas: In main program:
miniprojet.pas:25: parse error before `,'
miniprojet.pas:25: missing `of'
miniprojet.pas:25: case element expected
miniprojet.pas:26: `case' label does not reduce to a constant of ordinal type
miniprojet.pas:27: missing semicolon
miniprojet.pas:28: `case' label does not reduce to a constant of ordinal type
miniprojet.pas:30: `case' label does not reduce to a constant of ordinal type
miniprojet.pas:32: `case' label does not reduce to a constant of ordinal type
miniprojet.pas:34: `case' label does not reduce to a constant of ordinal type
miniprojet.pas:36: `case' label does not reduce to a constant of ordinal type
miniprojet.pas:38: parse error before `..'
miniprojet.pas:38: missing comma
miniprojet.pas:38: parse error before `..'
miniprojet.pas:38: missing comma
miniprojet.pas:38: lower value of `case' range does not reduce to
miniprojet.pas:38: a constant of ordinal type
miniprojet.pas:38: lower value of `case' range does not reduce to
miniprojet.pas:38: a constant of ordinal type
miniprojet.pas:38: lower value of `case' range does not reduce to
miniprojet.pas:38: a constant of ordinal type
miniprojet.pas:27: warning: unreachable code at beginning of `case' statement
miniprojet.pas:43: parse error before `Manches'
miniprojet.pas:60: parse error before `Writeln'
miniprojet.pas:60: extra semicolon
Bonne lecture;
Partager