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!

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.
N.B: j'ai mis quelques numéros de ligne en marge pour vous situer par rapport aux erreurs.
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;