Jeu "le lebyrinthe"

Fermé
snif - 6 mai 2012 à 14:30
 snif - 29 mai 2012 à 11:46
Bonjour,

J'ai projet demandant l'écriture du script en shell sh du jeu "le labyrinthe": un joueur s identifie, a un nombre de vies et devra passer d une étape du jeu la suivante en répondant à des questions, énigmes.... Il y a une seule entrée mais pluseurs sorties sont envidageables.
Je voudrais que vous me donniez le premier coup de pouce pour commencer l'écriture de ce script.

A voir également:

5 réponses

mamiemando Messages postés 33274 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 septembre 2024 7 782
7 mai 2012 à 01:43
A priori je pense qu'il faut simplement écrire les questions en shell avec echo, lire la réponse avec read, et traiter la réponse avec un case. Non ?
https://openclassrooms.com/fr/courses/43538-reprenez-le-controle-a-laide-de-linux/43394-les-conditions

Bonne chance
0
[Dal] Messages postés 6193 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 4 juillet 2024 1 089
7 mai 2012 à 15:00
Salut mamiemando et snif,

Le tutoriel que tu indiques concerne Bourne Again Shell (bash), alors que notre ami snif parle, apparemment, du Bourne Shell (sh).

bash comportant des d'extensions au shell qui sont des "bashisms", je le dirigerai plutôt vers une ressource qui lui permettre d'écrire un code portable, comme :

http://fr.lang.free.fr/cours/Shell_v2.0.pdf

C'est un bon document en français, qui part de la syntaxe sh, et aborde les particularités de shells plus évolués comme bash ou ksh.

Par exemple, utiliser sh ne lui permettra pas d'intégrer des variables dimensionnées (tableaux) dans son script. Cela le limite aux variables simples.


Dal
0
mamiemando Messages postés 33274 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 septembre 2024 7 782
7 mai 2012 à 15:06
Hello Dal;

En fait j'ai indiqué à snif ce tutoriel car pour moi une grande partie de la syntaxe sh et bash reste la même et son exercice est suffisamment simple pour qu'il n'ait pas à utiliser des choses "évoluées" en bash qui le confronterait justement aux nuances entre bash et sh, et parce que vue la question, snif devrait à mon avis commencer par s'imprégner de la logique shell en lisant un cours ou un tutoriel.

Ceci dit, tu as parfaitement raison de signaler qu'il devrait plutôt se baser sur un tutoriel sur "sh" s'il venait à manipuler des choses "évoluées".

En tout cas, merci pour ta vigilance !
0
et merci les amis pour les tutoriels. et excuses moi mamiemando de te contre dire, mais je truve ce projet plutot dur pour des eleves qui viennent d'etudier linux et la programmtion shell pour la premiere fois. en fait nos connaissances en classe ne dépassent pas les commandes de bases, les echo, read, grep et quelques applications des pipes, donc quand je me retrouve face au labyrinthe, j'avoue que j'ai la frousse :S
0
rebonjour les amis
voilà j'ai ecrit un petit script pour le jeu "le compte est bon", toutefois ça se plante.


#!/bin/sh
a=5
b=3
c=2
r=10

echo "voici vos entiers de base:"
echo "a=$a"
echo "b=$b"
echo "c=$c"

echo "saisissez l'operation arithmétique utilisant ces entiers afin d'avoir le résultat 5,5."
echo "l'operation devra etre de la forme a operation b operation c"
read resultat

k=$(expr'resultat')

if [$k -eq r]
then
echo "touché, vus avez 4 pts de plus "
else
echo "oups, raté. vs avez 4 pts de moins."
fi

>>je rentre la bonne opération arithmétique qui est a+b+c et comme réponse, le terminal me renvoie ce code erreur:

""
~/..../ : 16: resultat not found
expr: missing operand
try 'expr --help' for more information
[:23:missing]
oups, raté, vs avez 4 pts de moins. ""

pouvez vous m'eclaircir sur ce code.
0
Utilisateur anonyme
20 mai 2012 à 18:40
salut,

expr est inutile: k=$(( resultat ))
il faut des espaces à l'intérieur des crochets: [ $k -eq $r ]
les variables doivent commencer par un signe dollar pour être développées (sauf entre double parenthèses !)

nouveau script => nouvelle question.
0
merci pour votre reponse
voilà j'ai fait un petit effort et j'ai essayé de corriger un peu mon script:


#!/bin/sh
a=5
b=3
c=2
r=10

echo "voici vos entiers de base:"
echo "a=$a"
echo "b=$b"
echo "c=$c"

echo "saisissez l'operation arithmétique utilisant ces entiers afin d'avoir le résultat $r."
echo "l'operation devra etre de la forme a operation b operation c"

read resultat

#je devrais peut etre mettre une condition telle que les opérandes soient encadrées avec les {} afin que ça soit calculé dans le expr: si c'est une operande; la remplacer avec {op}, sinon, on passe.
#on pourrait considerer les composantes de la var resultat comme les composantes d'un tableau; si tab[i]==(a || b || c) faire tab[i]==({a} || {b] || {c}) sinn i<-i+1. reste, comment l'ecrire en shell sh.!!!!!

$k=$((expr'$resultat'))

if [$k -eq $r]
then
echo "touché, vous avez 4 pts de plus "
else
echo "oups, raté. vous avez 4 pts de moins."
fi



en fait j'ai essayé les modifications que vous m'aviez proposées mais je tombe toujours sur la meme erreur.

et une autre question: vous m'aviez dit que expr était inutile, chose que je en comprends pas. dans ce script; l utilisateur est sencé entrer l'expression a+b+c, si on n'utilise pas l'expression expr; comment peut-on veifier si cette expression vérifie bien le compte demandé ou non???!
0
copie/colle le script tel quel, enregistre-le, rend le exécutable, et exécute-le
#!/bin/sh 
a=5 
b=3 
c=2 
r=10 

echo "voici vos entiers de base:" 
echo "a=$a" 
echo "b=$b" 
echo "c=$c" 

echo "saisissez l'operation arithmétique utilisant ces entiers afin d'avoir le résultat 5,5." 
echo "l'operation devra etre de la forme a operation b operation c" 
read resultat 

k=$(( resultat )) 

if [ $k -eq $r ] 
then 
   echo "touché, vus avez 4 pts de plus " 
else 
   echo "oups, raté. vs avez 4 pts de moins." 
fi 
et observe les différences avec ce que tu as écrit.
k=$(( resultat )) #le shell opère l'évaluation arithmétique 

if [ $k -eq $r ] #il faut des espaces à l'intérieur des crochets: 
[<espace><expression><espace><opérateur><espace><expression><espace>]


le shell n'est pas un sous-langage dont les règles seraient facultatives.
Télécharge la version française de l'Advanced Bash Scripting, sur tldp.org!
0
merci pour cet éclaircissement, sauf que nous ne sommes toujours pas sur le même longueur d'onde.
en fait, l'utilisateur devra me renter une expression du genre "a+b+c" ou encore "5+3+2"; le script devra vérifier si cette opération arithmétique aura comme résultat ce que contient la variable r=10. et non de rentrer juste un nombre et vérifier si c'est le même contenu dans r.

en exécutant le script que vous m'aviez proposé, j'ai l'erreur suivante:

/home/user/projet/CEB2: 16; Illégal number: a + b + c

et ce que ce soit j'utilise les lettres (a,b,c) ou les chiffres (5,3,2) et que j'introduise ou pas des espaces entre les opérandes et les opérations.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
21 mai 2012 à 11:34
Salut,

Quel shell utilises-tu ? (echo $SHELL && readlink -f /bin/sh)

Chez moi (avec bash) le script de "qqchquicommenceparQ" fonctionne très bien.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
[Dal] Messages postés 6193 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 4 juillet 2024 1 089
21 mai 2012 à 14:35
Salut,

Avec sh sous FreeBSD :

k=$(( $resultat ))

ne donne pas d'erreur

Dal
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
21 mai 2012 à 14:38
Salut Dal,

Je confirme (ash et dash) avec un peu de fric devant ça marche ;-))

Merci.
0