Таким образом, я, как предполагается, создаю два сценария удара для игры, "предполагают мое число". Один сценарий для Дилера, в то время как другой - для Плеера.
Каждый сценарий должен ожидать другого для генерации их ответа (через файл) перед продолжением. Таким образом, когда Плеер запущен, он сначала должен ожидать ответа от Дилера. Когда это обнаруживает его, игрок получает ответ Дилера и обрабатывает его. Когда Плеер высказывает предположение, Плеер передает это Дилеру через файл.
В то время как Плеер высказывает предположение, Дилер ожидает ответа Игрока (через файл). Когда Дилер обнаруживает его, Дилер получает ответ из файла и доходов.
Ниже мой сценарий удара для выполнения "предположения мое число" в сценарии удара, но это только работает, если это - один файл.
Кто-то может показать мне, как разделить это на два сценария (player_response.bash dealer_response.bash) и заставить их связаться через файлы и работать, одновременно зависел от другого для достижения того же результата? Много справки ценится это!
#!/bin/bash
# this program random numbers between 1 and 100.
clear
echo "Hello, "${USER}
date;
guess=1
## Start loop of game here
while true; do
n1=$(( ( RANDOM % 100 ) +1 ))
echo -n "I'm think of a number between 1 and 100. Guess: "
while read n2; do
if [[ $n2 -eq $n1 ]]; then
break;
else
if [[ $n2 -gt $n1 ]]; then
echo -n "Sorry, your guess is too high. Guess again: "
elif [[ $n2 -lt $n1 ]]; then
echo -n "Sorry, your guess is too low. Guess again: "
fi
fi
guess=$(( $guess + 1 ))
done
echo
echo "Congratulations! You win!"
if [[ $guess == 1 ]]; then
echo "It took you $guess guess to get $n1."
else
echo "It took you $guess guesses to get $n1."
fi
echo
read -p "Do you want to try again (y/n)? " choice
case $choice in
[Yy]* ) guess=1;;
[Nn]* ) exit;;
* ) echo "Please answer yes or no.";;
esac
## End loop of game here
done
Существуют специальные файлы с этой целью (т.е. IPC) названы именованными каналами. Можно создать их использующий mkfifo
команда. Следующее является очень простым примером на основе Вашего кода. dealer.sh
должен быть выполнен сначала, так как это ответственно за создание и удаление именованных каналов.
dealer.sh:
#!/bin/bash
dealerResponse=dealerResponse
playerResponse=playerResponse
mkfifo $dealerResponse
mkfifo $playerResponse
# delete the named pipes on exit
trap "rm $playerResponse $dealerResponse" EXIT
guess=1
n1=$(( ( RANDOM % 100 ) +1 ))
# this blocks until the player has read from the pipe
echo -n "Please make a guess: " > $dealerResponse
while read n2 < $playerResponse; do
if [[ $n2 -eq $n1 ]]; then
echo You win! > $dealerResponse
break
else
if [[ $n2 -gt $n1 ]]; then
echo -n "Sorry, your guess is too high. Guess again: " > $dealerResponse
elif [[ $n2 -lt $n1 ]]; then
echo -n "Sorry, your guess is too low. Guess again: " > $dealerResponse
fi
fi
guess=$(( $guess + 1 ))
done
player.sh
#!/bin/bash
dealerResponse=dealerResponse
playerResponse=playerResponse
while true; do
read line < $dealerResponse
echo -n "$line "
read guess
echo $guess > $playerResponse
done