whileループを使ってゲーム内の2人のプレイヤーを切り替えることはできますか?このbash whileループがありますが、動作しません。私は「U:ユーザー」と「C」をコンピューターに使用します。
U=0; c=0;
while [[ c -eq 0 ]] && [[ u -eq 0 ]]
echo who goes first c or u
read -n 1 input
if [[ input == c ]]
then
c=1
else
if [[ input == u ]]
then
u=1
else
echo your input is not valid
fi
fi
done
答え1
そうそうできます。
ただし、まずテストでは、名前ではなく変数値を使用する必要があります。代わりに、while [[ c -eq 0 ]]
以下を使用する必要があります。
while [[ "$c" -eq 0 ]]
これは後でいくつかのテストでも機能します。たとえば、[[ input == c ]] は次のようになります。
if [[ "$input" == c ]]
また、変数宣言の先頭は(小文字)でなければなりません。
u=0; c=0;
いいえU=0; c=0;
。
第三に、do
しばらくして、次のことを見逃す。
u=0; c=0;
while [[ $c -eq 0 ]] && [[ $u -eq 0 ]]
do
echo who goes first c or u
read -n 1 input
if [[ $input == c ]]
then
c=1
else
if [[ $input == u ]]
then
u=1
else
echo your input is not valid
fi
fi
done
echo "The var u is $u"
echo "The var c is $c"
これはうまくいきます。しかし、Caseステートメントを使用すると簡単になります。
while
echo "Who goes first c or u? : "
read -n1 input
do
echo
case $input in
c) c=1; u=0; break;;
u) c=0; u=1; break;;
*) echo "your input is not valid";;
esac
done
echo "The var u is $u"
echo "The var c is $c"
または、通常のbashを使用しているので、次のようにします。
#!/bin/bash
while read -p "Who goes first c or u? : " -t10 -n1 input
do
echo
[[ $input == c ]] && { c=1; u=0; break; }
[[ $input == u ]] && { c=0; u=1; break; }
printf '%30s\n' "Your input is not valid"
done
echo "The var u is $u"
echo "The var c is $c"
または:
#!/bin/bash
u=0; c=0
echo "Who goes first user or computer ? "
select input in user computer; do
case $input in
computer ) c=1; break;;
user ) u=1; break;;
*) printf '%50s\n' "Your input \"$REPLY\" is not valid";;
esac
done
echo "The var u is $u"
echo "The var c is $c"
echo "The selection was $input"
または(中央で選択されたサインinput
)より短いです。
echo "Who goes first ? "
select input in user computer; do
[[ $input =~ user|computer ]] && break
printf '%50s\n' "Your input \"$REPLY\" is not valid"
done
echo "The selection was $input"