Недавно с целью изучения bash написал на нем игру в «морской бой» для игры по сети. Игра получила название «Sink 'em all».
Из внешних программ используются только
Исходный код можно посмотреть здесь, а вот скачать его лучше тут или вот тут, потому что PasteBay вставляет переносы строк в стиле Windows, из-за чего в свою очередь перестает работать указание интерпретатора с помощью hashbang (
Скачайте исходный код, переименуйте файл в
Чтобы присоединиться к серверу, передайте в качестве параметра его IP-адрес или доменное имя, например:
Дальнейшие подсказки об управлении вы получите в процессе игры. В какое место кода вписывать строки для обмана противника, предлагаю выяснить самостоятельно :)
В процессе написания я открыл для себя некоторые неизвестные мне ранее возможности и особенности bash. Среди них, например, сопроцессы. С помощью встроенной команды
В bash есть встроенные средства для работы со строками. Необязательно использовать
Из внешних программ используются только
nc
(для организации взаимодействия по TCP), stty
(для выключения эха при нажатии клавиши) и clear
(для очистки терминала).Исходный код можно посмотреть здесь, а вот скачать его лучше тут или вот тут, потому что PasteBay вставляет переносы строк в стиле Windows, из-за чего в свою очередь перестает работать указание интерпретатора с помощью hashbang (
#!
).Как поиграть
Скачайте исходный код, переименуйте файл в
sink.sh
и поставьте на него исполняемый бит. После этого игру можно смело запускать (или не смело — вдруг в ней вредоносный код?). Чтобы запустить сервер, используйте ключ -serve
:./sink.sh -serve
Чтобы присоединиться к серверу, передайте в качестве параметра его IP-адрес или доменное имя, например:
./sink.sh localhost
Дальнейшие подсказки об управлении вы получите в процессе игры. В какое место кода вписывать строки для обмана противника, предлагаю выяснить самостоятельно :)
Что полезного я узнал?
В процессе написания я открыл для себя некоторые неизвестные мне ранее возможности и особенности bash. Среди них, например, сопроцессы. С помощью встроенной команды
coproc
можно создать сопроцесс и общаться с ним через пару пайпов, чем я и воспользовался для общения с nc
. Если интересуют подробности, наберите help coproc
, или читайте раздел «Coprocesses» в man bash
.В bash есть встроенные средства для работы со строками. Необязательно использовать
sed
и т. п., чтобы заменить подстроку другой строкой, вычислить длину строки и т. д. Это тоже стало для меня полезным открытием. Если интересуют подробности, могу подсказать, как называется соответствующий раздел в man bash
: «Parameter Expansion».