2人のプレイヤー間でwhileループを切り替えることはできますか? [閉鎖]

2人のプレイヤー間でwhileループを切り替えることはできますか? [閉鎖]

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"

関連情報