Передача с помощью двух сценариев удара

Таким образом, я, как предполагается, создаю два сценария удара для игры, "предполагают мое число". Один сценарий для Дилера, в то время как другой - для Плеера.

Каждый сценарий должен ожидать другого для генерации их ответа (через файл) перед продолжением. Таким образом, когда Плеер запущен, он сначала должен ожидать ответа от Дилера. Когда это обнаруживает его, игрок получает ответ Дилера и обрабатывает его. Когда Плеер высказывает предположение, Плеер передает это Дилеру через файл.

В то время как Плеер высказывает предположение, Дилер ожидает ответа Игрока (через файл). Когда Дилер обнаруживает его, Дилер получает ответ из файла и доходов.

Ниже мой сценарий удара для выполнения "предположения мое число" в сценарии удара, но это только работает, если это - один файл.

Кто-то может показать мне, как разделить это на два сценария (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
3
задан 13 October 2019 в 09:07

1 ответ

Существуют специальные файлы с этой целью (т.е. 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
3
ответ дан 1 December 2019 в 16:15

Другие вопросы по тегам:

Похожие вопросы: