Member 12917493 Ответов: 1

Ошибка в написании сценариев для интерпретатора bash Linux для терминала на основе игры


Привет всем, я работаю с Debian уже пару месяцев для школы и потому, что с ним очень удобно работать. но теперь я хочу сделать игру для терминала. Более высокая или более низкая карточная игра (тоже для школы, но я хотел сделать это до того, как мне дали это задание). Вы должны выбрать случайную карту, а затем она спросит, хотите ли вы сделать ставку высоко или низко. Когда вы выберете ставку, он создаст еще одну случайную карту, а затем проверит, является ли новая карта выше или ниже. У меня все еще есть несколько проблем, которые я не могу найти сам, и надеюсь, что вы, ребята, сможете привести меня в правильном направлении.

Что я уже пробовал:


#!/bin/bash
score=0
uitkomst=juist
waardegok=0
echo "Hallo, welkom bij het spel {Hoger of Lager}"
echo "Het doel van het spel is om juist te kunnen gokken..."
echo "...Met kaarten."
echo "Je krijgt een kaart en jij moet gokken of de volgende kaart"
echo "hoger of lager in waarde is."
echo "Als je juist hebt geraden wordt uw juiste gok opgeslagen."
echo "veel succes!!"

Number=$(($RANDOM % 52))

KAARTEN=(Harten1 Harten2 Harten3 Harten4 Harten5 Harten6 Harten7 Harten8
Harten9 Harten10 Harten11 Harten12 Harten13 Klaver1 Klaver2 Klaver3
Klaver4 Klaver5 Klaver6 Klaver7 Klaver8 Klaver9 Klaver10 Klaver11 Klaver12
Klaver13 Schop1 Schop2 Schop3 Schop4 Schop5 Schop6 Schop7 Schop8 Schop9 
Schop10 Schop11 Schop12 Schop13 Ruit1 Ruit2 Ruit3 Ruit4 Ruit5 Ruit6 Ruit7
Ruit8 Ruit9 Ruit10 Ruit11 Ruit12 Ruit13)


Gokkaart=${KAARTEN[$Number]}
echo " "
echo "De kaart is een $Gokkaart"
waardekaart=$((Number+1))

until [ $uitkomst != juist ]
do

if [ "$score" -ge 1 ];
then
Number=$(($RANDOM % 52))
Gokkaart=${KAARTEN[$Number]}
oldNumber=$Number
echo "De kaart is $Gokkaart2"

elif [ "$score" -eq 0 ];
then
echo "Laten we beginnen"

fi

echo " "
echo -n "hoger of lager? type [H of L] > "
read gok
echo "gok: $gok"

if [ "$gok" = "H" ];
then
echo "Uw gok is hoger"
waardegok=54

elif [ "$gok" = "L" ];
then
echo "Uw gok is lager"
waardegok=-1
fi

if [ "$score" -ge 1 ];
then
oldNumber=$Number2

elif [ "$score" -eq 0 ];
then
oldNumber=$gok

fi

Number2=$(($RANDOM % 52))

KAARTEN2=(Harten1 Harten2 Harten3 Harten4 Harten5 Harten6 Harten7 Harten8
Harten9 Harten10 Harten11 Harten12 Harten13 Klaver1 Klaver2 Klaver3
Klaver4 Klaver5 Klaver6 Klaver7 Klaver8 Klaver9 Klaver10 Klaver11 Klaver12
Klaver13 Schop1 Schop2 Schop3 Schop4 Schop5 Schop6 Schop7 Schop8 Schop9 
Schop10 Schop11 Schop12 Schop13 Ruit1 Ruit2 Ruit3 Ruit4 Ruit5 Ruit6 Ruit7
Ruit8 Ruit9 Ruit10 Ruit11 Ruit12 Ruit13 )

Gokkaart2=${KAARTEN2[$Number2]}
echo "De volgende kaart ....."
waardekaart2=$((Number2+1))

if [ "$Number2" -ge 0 ] && [ "$Number2" -le 12 ];
then
echo "De volgende kaart is een harten, namelijk $Gokkaart2"
if [ $waardegok -gt $waardekaart2 ] && [ "$oldNumber -gt $Number2" ];
then
echo "goed gegokt"
score=$((score+1))
echo "uw score is nu $score"
echo " "
elif [ $waardegok -lt $waardekaart2 ] && [ "$oldNumber -lt $Number2" ];
then
echo "goed gegokt"
score=$((score+1))
echo "uw score is nu $score"
echo " "
else
echo "fout, goed geprobeert"
uitkomst=false
fi


elif [ "$Number2" -ge 13 ] && [ "$Number2" -le 25 ];
then
echo "De volgende kaart is een klaver, namelijk $Gokkaart2"
if [ $waardegok -gt $waardekaart2 ] && [ "$oldNumber -gt $Number2" ];
then
echo "goed gegokt"
score=$((score+1))
echo "uw score is nu $score"
echo " "
elif [ $waardegok -lt $waardekaart2 ] && [ "$oldNumber -lt $Number2" ];
then
echo "goed gegokt"
score=$((score+1))
echo "uw score is nu $score"
echo " "
else
echo "fout, goed geprobeert"
uitkomst=false
fi

elif [ "$Number2" -ge 26 ] &&  [ "$Number2" -le 38 ];
then
echo "De volgende kaart is een Schoppen, namelijk $Gokkaart2"
if [ $waardegok -gt $waardekaart2 ] && [ "$oldNumber -gt $Number2" ] ;
then
echo "goed gegokt"
score=$((score+1))
echo "uw score is nu $score"
echo " "
elif [ $waardegok  -lt  $waardekaart2 ] && [ "$oldNumber -lt $Number2" ];
then
echo "goed gegokt"
score=$((score+1))
echo "uw score is nu $score"
echo " "
else
echo "fout, goed geprobeert"
uitkomst=false
fi

elif [ "$Number2" -ge 39 ] && [ "$Number2" -le 52 ];
then
echo "De volgende kaart is een Ruiten, namelijk $Gokkaart2"
if [ $waardegok -gt $waardekaart2 ] && [ "$oldNumber -gt $Number2" ];
then
echo "goed gegokt"
score=$((score+1))
echo "uw score is nu $score"
echo " "
elif [ $waardegok -lt $waardekaart2 ] && [ "$oldNumber -lt $Number2" ];
then
echo "goed gegokt"
score=$((score+1))
echo "uw score is nu $score"
echo " "
else
echo "fout, goed geprobeert"
uitkomst=false
fi
fi
done
echo " uw score is $score"

Richard MacCutchan

Правильное направление-это сделать некоторую отладку и сказать нам точно, в чем проблема; мы не можем ожидать, что догадаемся.

1 Ответов

Рейтинг:
0

Jochen Arndt

Я не проверял весь код, но это выглядит подозрительно:

if [ "$score" -ge 1 ]; then
    Number=$(($RANDOM % 52))
    Gokkaart=${KAARTEN[$Number]}
    oldNumber=$Number
    echo "De kaart is $Gokkaart2"
fi

Вы назначаете новое случайное число $Number. Таким образом, старый номер больше не доступен и присвоение нового значения $oldNumber позже нет смысла.

Вы получаете имя карты для нового номера в $Gokkart но печать $Gokkart2.

Таким образом, вышеприведенный блок, вероятно, должен быть чем-то вроде:
if [ "$score" -ge 1 ]; then
    oldNumber=$Number
    Number=$(($RANDOM % 52))
    Gokkaart2=${KAARTEN[$Number]}
    echo "De kaart is $Gokkaart2"
fi

Обратите также внимание, что я использовал общий удар форматирование (размещение then в ту же линию, что и if и отступы условных блоков).

Наконец два совета:
Вы также можете взглянуть на функции bash. Если вы этого еще не знаете, взгляните также на Программирование BASH-введение HOW-TO[^].


Member 12917493

Спасибо за ответ. Тем временем я переписал код, и теперь у меня есть только одна ошибка, и это целочисленный expressen в моих больших циклах if в конце кода. И спасибо Вам за вводные документы,они действительно помогли мне понять некоторые части сценариев оболочки.
это код:


#! / bin/bash
результат=0
uitkomst=juist
ваардегок=0
echo " Hallo, welkom bij het spel {Hoger of Lager}"
echo "Het doel van het spel is om juist te kunnen gokken..."
Эхо "...встретил kaarten."
Эхо "Je krijgt een kaart en jij moet gokken of de volgende kaart"
Эхо " хогер лагера в ваарде есть."
Эхо " Als je juist hebt geraden wordt uw juiste gok opgeslagen."
Эхо "veel succes!!"

Число=$(($RANDOM % 52))

KAARTEN=(Harten1 Harten2 Harten3 Harten4 Harten5 Harten6 Harten7 Harten8
Harten9 Harten10 Harten11 Harten12 Harten13 Klaver1 Klaver2 Klaver3
Клавер4 Клавер5 Клавер6 Клавер7 Клавер8 Клавер9 Клавер10 Клавер11 Клавер12
Клавер13 Шоп1 Шоп2 Шоп3 Шоп4 Шоп5 Шоп6 Шоп7 Шоп8 Шоп9
Schop10 Schop11 Schop12 Schop13 Ruit1 Ruit2 Ruit3 Ruit4 Ruit5 Ruit6 Ruit7
Ruit8 Ruit9 Ruit10 Ruit11 Ruit12 Ruit13)


Gokkaart=${KAARTEN[$Number]}
эхо " "
если [ "$количество" -Ге 0 ] &ампер;&ампер; [ "$количество" -Ле 12 ];тогда
кейс $Gokkaart in
Harten1) waarde=1;;
Harten2) waarde=2;;
Harten3) waarde=3;;
Harten4) waarde=4;;
Harten5) waarde=5;;
Harten6) waarde=6;;
Harten7) waarde=7;;
Harten8) waarde=8;;
Harten9) waarde=9;;
Harten10) waarde=10;;
Harten11) waarde=11;;
Harten12) waarde=12;;
Harten13) waarde=13;;
эсок

Элиф [ "$количество" -Гэ 13 ] &ампер;&ампер; [ "$количество" -Ле 25 ];тогда
кейс $Gokkaart in
Клавер1) ваарде=1;;
Klaver2) waarde=2;;
Klaver3) waarde=3;;
Klaver4) waarde=4;;
Klaver5) waarde=5;;
Klaver6) waarde=6;;
Klaver7) waarde=7;;
Klaver8) waarde=8;;
Klaver9) waarde=9;;
Klaver10) waarde=10;;
Klaver11) waarde=11;;
Klaver12) waarde=12;;
Klaver13) waarde=13;;
эсок

Элиф [ "$количество" -Ге 26 ] &ампер;&ампер; [ "$количество" -Ле 38 ];тогда
кейс $Gokkaart in
Schoppen1) waarde=1;;
Schoppen2) waarde=2;;
Schoppen3) waarde=3;;
Schoppen4) waarde=4;;
Schoppen5) waarde=5;;
Schoppen6) waarde=6;;
Schoppen7) waarde=7;;
Schoppen8) waarde=8;;
Schoppen9) waarde=9;;
Schoppen10) waarde=10;;
Schoppen11) waarde=11;;
Schoppen12) waarde=12;;
Schoppen13) waarde=13;;
эсок

Элиф [ "$количество" -Гэ 39 ] &ампер;&ампер; [ "$количество" -Ле 52 ];тогда
кейс $Gokkaart in
Ruiten1) waarde=1;;
Ruiten2) waarde=2;;
Ruiten3) waarde=3;;
Ruiten4) waarde=4;;
Ruiten5) waarde=5;;
Ruiten6) waarde=6;;
Ruiten7) waarde=7;;
Ruiten8) waarde=8;;
Ruiten9) waarde=9;;
Ruiten10) waarde=10;;
Ruiten11) waarde=11;;
Ruiten12) waarde=12;;
Ruiten13) waarde=13;;
эсок
fi
Эхо "Ди Эрсте карты-это е $Gokkaart"
эхо " "
пока [ $uitkomst != juist ]
делать
эхо " "
echo-n " hoger of lager? тип [ч. л] и GT; "
читать ГОК
Эхо "ГОК: $ГОК"

если ["$gok " = "H"]; то

Эхо " уу ГОК - это хогер"
ваардегок=14

elif ["$gok " = "L"]; затем
Эхо " Uw gok - это лагер"
ваардегок=0
fi

если ["$score " - ge 1 ]; то

vorigekaart=$Gokkaart2
vorigewaarde=$waarde2
echo " De vorige kaart was een $Gokkaart2"
эхо " "
elif ["$score " - eq 0 ]; затем

vorigekaart=$Gokkaart
vorigewaarde=$waarde
Эхо " Laten we beginnen"
эхо " "
fi

Number2=$(($RANDOM % 52))

КААРТЕН2=(Хартен1 Хартен2 Хартен3 Хартен4 Хартен5 Хартен6 Хартен7 Хартен8
Harten9 Harten10 Harten11 Harten12 Harten13 Klaver1 Klaver2 Klaver3
Клавер4 Клавер5 Клавер6 Клавер7 Клавер8 Клавер9 Клавер10 Клавер11 Клавер12
Клавер13 Шоп1 Шоп2 Шоп3 Шоп4 Шоп5 Шоп6 Шоп7 Шоп8 Шоп9
Schop10 Schop11 Schop12 Schop13 Ruit1 Ruit2 Ruit3 Ruit4 Ruit5 Ruit6 Ruit7
Ruit8 Ruit9 Ruit10 Ruit11 Ruit12 Ruit13 )

Gokkaart2=${KAARTEN2[$Number2]}
Эхо " De volgende kaart ....."
если [ "$Число2" -эквалайзер "$количество" ];затем

Number2=$(($RANDOM % 52))
Gokkaart2=${KAARTEN2[$Number2]}

elif ["$Number2 " - ge 0 ] && ["$Number2 " - le 12 ]; затем

echo " De volgende kaart is een harten, namelijk $Gokkaart2"
дело Gokkaart2 $в
Harten1) waarde2=1;;
Harten2) waarde2=2;;
Harten3) waarde2=3;;
Harten4) waarde2=4;;
Harten5) waarde2=5;;
Harten6) waarde2=6;;
Harten7) waarde2=7;;
Harten8) waarde2=8;;
Harten9) waarde2=9;