在我的滚动代码中,您只需编写 r ,然后按 Enter 键,但似乎不会读取该内容并转到重新启动 while 循环的 else 。让它滚动的唯一方法是输入除 r 之外的其他内容,而不是 (standard_in) 1: 解析错误。
#!/bin/bash
#this is a game that is two player and it is a race to get to
#100 before the other player
echo "Player 1 name?"
read p1
echo "Player 2 name?"
read p2
echo "Okay $p1 and $p2. $p1 will go first"
p1s=0
p2s=0
pt=1
while [ $pt -eq 1 ]; do
echo "roll or stay"
read choice
if [ $choice == r ]; then
die=$(($RANDOM%6+1))
elif [ $die -eq 1 ]; then
p1s=$(echo "$p1s-$count" |bc)
echo "You rolled a 1. Your score is $p1s"
echo "$p2 turn now."
sleep 1
count=0
pt=2
elif [ $die -gt 1 ]; then
p1s=$(echo "$p1s+$die" |bc)
count=$(echo "$count+$die" |bc)
echo "You rolled a $die. Your score is $p1s"
pt=1
else
if [ $choice == s ]; then
echo "Okay $p1 your score is $p1s"
echo "$p2 turn now"
sleep 1
count=0
pt=2
else
if [ $p1s -gt 99 ]; then
echo "$p1 won. $p2 lost"
echo "would you like to play again?"
read again
elif [ $again yes ]; then
echo "Okay one second."
sleep 1
clear
bash num.sh
elif [ $again == no ]; then
exit
else
pt=1
fi
fi
fi
done
不用担心他们不是第二个玩家的第二个。我把它删掉了,因为它与玩家二的代码完全相同。
输入/输出示例
Player 1 name?
guy1
Player 2 name?
guy2
Okay guy1 and guy2. guy1 will go first
roll or stay
r
roll or stay
rr
(standard_in) 1: parse error
You rolled a 5. Your score is 5
roll or stay
roll
(standard_in) 1: parse error
You rolled a 5. Your score is 10
roll or stay
s
(standard_in) 1: parse error
You rolled a 5. Your score is 15
roll or stay
好的,关于您的代码的一些评论。
- 由于缺乏缩进,这确实很难阅读。嵌套内容时,缩进嵌套内容。通过缩进,您可以看到循环的开始和结束位置、哪些代码属于哪个 if/else 等。
- 在 bash 中,您应该始终引用变量以避免意外扩展。例如,如果有人输入星号(
*
)而不是“r”?你的if
声明会做出奇妙而神秘的事情。
- 您使用的运算符是错误的。在 bash 中,使用单方括号
if
,您将字符串等效性与单个 equals (=
),不是双倍。如果你想要数字平等,你有-eq
。尽管您可能想使用双方括号查看 bash 的扩展测试。 (查看手册页了解详细信息。)
- 尽量不要使用外部工具来完成 bash 本身可以完成的事情。
bc
例如,整数运算不需要 。
所以......总而言之,这是你的一段代码,稍微重写了一下。
while [ "$pt" -eq 1 ]; do
read -p "Roll or stay (r/s)? " choice
if [ "$choice" = r ]; then
die=$(($RANDOM%6+1))
elif [ "$die" -eq 1 ]; then
p1s=$((p1s - count))
echo "You rolled a 1. Your score is $p1s"
echo "$p2 turn now."
sleep 1
count=0
pt=2
elif [ $die -gt 1 ]; then
p1s=$((p1s + die))
count=$((count + die))
echo "You rolled a $die. Your score is $p1s"
pt=1
else
请注意,我不会对您的程序逻辑是否合理做出任何声明。
到底是什么num.sh
?是不是重要?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)