LinuxForum.Fans
Тема

Игра "Ну погоди! Волк ловит яйца"

Автор: Moritto 5 сообщений 1577 просмотров
17.06.2017 08:10 #423683

Решил я сделать то что никто не делал на bash, получилась хорошая игра на реакцию.
Управление в игре клавишами z,x,c,v, а q выйти.
Игра была написана на андроид, поэтому на пк прилется увеличивать шрифт. Игра работает и не глючит. В будущем возможно будет обновление.

Показать
text

#!/bin/bash

# игра "ну погоди ловит яйца" # версия 1.0 # Автор: Moritto

#яйца for ((i=1;i<=5;i++)); do egg1[$i]=" " egg2[$i]=" " egg3[$i]=" " egg4[$i]=" " done

volk1="\ ^ ^\n\ \\_/ (0-0)\n\ # (~)\n\ #==[ ]===\n\ [ ]\n\ // \\\\\\ " #волк в первой позиции

volk2="\ ^ ^\n\ \\_/ (0-0)\n\ # (~)\n\ #==[ ]===\n\ [ ]\n\ // \\\\\\ " volk3="\ ^ ^\n\ (0-0) \\_/ \n\ (~) #\n\ ===[ ]==#\n\ [ ]\n\ // \\\\\\ " volk4="\ ^ ^\n\ (0-0) \\_/ \n\ (~) #\n\ ===[ ]==#\n\ [ ]\n\ // \\\\\\ "

print() #печать игры {

if [ "$eggMove1" -eq 6 ] && [ "$volkPos" -eq 1 ] then volk="\ ^ ^\n\ \\O/ (0-0)\n\ # (~)\n\ #==[ ]===\n\ [ ]\n\ // \\\\\\ " #придется так, ибо переменные во вставляемых переменных не работают fi

if [ "$eggMove2" -eq 6 ] && [ "$volkPos" -eq 2 ] then volk="\ ^ ^\n\ \\O/ (0-0)\n\ # (~)\n\ #==[ ]===\n\ [ ]\n\ // \\\\\\ " fi

if [ "$eggMove3" -eq 6 ] && [ "$volkPos" -eq 3 ] then volk="\ ^ ^\n\ (0-0) \\O/ \n\ (~) #\n\ ===[ ]==#\n\ [ ]\n\ // \\\\\\ " fi

if [ "$eggMove4" -eq 6 ] && [ "$volkPos" -eq 4 ] then volk="\ ^ ^\n\ (0-0) \\O/ \n\ (~) #\n\ ===[ ]==#\n\ [ ]\n\ // \\\\\\ " fi

if [ "$eggMove1" -eq 7 ] && [ "$volkPos" -eq 1 ] then #это чтобы убрать яйцо из корзины eggMove1=0 volk=$volk1 fi

if [ "$eggMove2" -eq 7 ] && [ "$volkPos" -eq 2 ] then #это чтобы убрать яйцо из корзины eggMove2=0 volk=$volk2 fi

if [ "$eggMove3" -eq 7 ] && [ "$volkPos" -eq 3 ] then eggMove3=0 volk=$volk3 fi

if [ "$eggMove4" -eq 7 ] && [ "$volkPos" -eq 4 ] then eggMove4=0 volk=$volk4 fi

clear echo -e \ "\\ ${egg1[1]} \\ \\ ${egg2[1]} \\ / ${egg3[1]} / / ${egg4[1]} /\n\ \\ ${egg1[2]} \\ \\ ${egg2[2]} \\ / ${egg3[2]} / / ${egg4[2]} /\n\ \\ ${egg1[3]} \\ \\ ${egg2[3]} \\ / ${egg3[3]} / / ${egg4[3]} /\n\ \\ ${egg1[4]} \\ \\ ${egg2[4]} \\ / ${egg3[4]} / / ${egg4[4]} /\n\ \\ ${egg1[5]} \\ \\ ${egg2[5]} \\ / ${egg3[5]} / / ${egg4[5]} /\n\ $volk\n\n\ Поймано: $score\t\tЖизни: $health" }

declare -i eggMove1=0 #стадия движения 1-го яйца declare -i eggMove2=0 declare -i eggMove3=0 declare -i eggMove4=0 declare -i score=0 #счёт declare -i health=3 #жизни SPUSK1="no" SPUSK2="no" SPUSK3="no" SPUSK4="no"

spusk1() #спуск первого яйца { if [ "$SPUSK1" = "no" ] #если спуск не начался then rnd=$RANDOM let rnd=rnd%=2 #генерируем 0 или 1 if [ "$rnd" -eq 1 ] then SPUSK1="yes" egg1[1]="0" eggMove1=1 fi fi }

spusk2() #спуск второго яйца { if [ "$SPUSK2" = "no" ] #если спуск не начался then rnd2=$RANDOM let rnd2=rnd2%=2 #генерируем 0 или 1 if [ "$rnd2" -eq 1 ] then SPUSK2="yes" egg2[1]="0" eggMove2=1 fi fi }

spusk3() #спуск второго яйца { if [ "$SPUSK3" = "no" ] #если спуск не начался then rnd3=$RANDOM let rnd3=rnd3%=2 #генерируем 0 или 1 if [ "$rnd3" -eq 1 ] then SPUSK3="yes" egg3[1]="0" eggMove3=1 fi fi }

spusk4() #спуск второго яйца { if [ "$SPUSK4" = "no" ] #если спуск не начался then rnd4=$RANDOM let rnd4=rnd4%=2 #генерируем 0 или 1 if [ "$rnd4" -eq 1 ] then SPUSK4="yes" egg4[1]="0" eggMove4=1 fi fi }

move_egg1() #передвижение 1-го яйца { if [ "$eggMove1" -eq 1 ] then ((eggMove1++)) egg1[1]=" " egg1[2]="0" elif [ "$eggMove1" -eq 2 ] then ((eggMove1++)) egg1[2]=" " egg1[3]="0" elif [ "$eggMove1" -eq 3 ] then ((eggMove1++)) egg1[3]=" " egg1[4]="0" elif [ "$eggMove1" -eq 4 ] then ((eggMove1++)) egg1[4]=" " egg1[5]="0" elif [ "$eggMove1" -eq 5 ] then ((eggMove1++)) egg1[5]=" " elif [ "$eggMove1" -eq 6 ] then SPUSK1="no" eggMove1=7 if [ "$volkPos" -eq 1 ] then ((score++)) else ((health--)) fi fi }

move_egg2() #передвижение 2-го яйца { if [ "$eggMove2" -eq 1 ] then ((eggMove2++)) egg2[1]=" " egg2[2]="0" elif [ "$eggMove2" -eq 2 ] then ((eggMove2++)) egg2[2]=" " egg2[3]="0" elif [ "$eggMove2" -eq 3 ] then ((eggMove2++)) egg2[3]=" " egg2[4]="0" elif [ "$eggMove2" -eq 4 ] then ((eggMove2++)) egg2[4]=" " egg2[5]="0" elif [ "$eggMove2" -eq 5 ] then ((eggMove2++)) egg2[5]=" " elif [ "$eggMove2" -eq 6 ] then SPUSK2="no" eggMove2=7 if [ "$volkPos" -eq 2 ] then ((score++)) else ((health--)) fi fi }

move_egg3() #передвижение 3-го яйца { if [ "$eggMove3" -eq 1 ] then ((eggMove3++)) egg3[1]=" " egg3[2]="0" elif [ "$eggMove3" -eq 2 ] then ((eggMove3++)) egg3[2]=" " egg3[3]="0" elif [ "$eggMove3" -eq 3 ] then ((eggMove3++)) egg3[3]=" " egg3[4]="0" elif [ "$eggMove3" -eq 4 ] then ((eggMove3++)) egg3[4]=" " egg3[5]="0" elif [ "$eggMove3" -eq 5 ] then ((eggMove3++)) egg3[5]=" " elif [ "$eggMove3" -eq 6 ] then SPUSK3="no" eggMove3=7 if [ "$volkPos" -eq 3 ] then ((score++)) else ((health--)) fi fi }

move_egg4() #передвижение 4-го яйца { if [ "$eggMove4" -eq 1 ] then ((eggMove4++)) egg4[1]=" " egg4[2]="0" elif [ "$eggMove4" -eq 2 ] then ((eggMove4++)) egg4[2]=" " egg4[3]="0" elif [ "$eggMove4" -eq 3 ] then ((eggMove4++)) egg4[3]=" " egg4[4]="0" elif [ "$eggMove4" -eq 4 ] then ((eggMove4++)) egg4[4]=" " egg4[5]="0" elif [ "$eggMove4" -eq 5 ] then ((eggMove4++)) egg4[5]=" " elif [ "$eggMove4" -eq 6 ] then SPUSK4="no" eggMove4=7 if [ "$volkPos" -eq 4 ] then ((score++)) else ((health--)) fi fi }

clear volk=$volk1 print

declare -i spsk=1 #начальные паузы перед спуском яиц declare -i spsk2=3 declare -i spsk3=4 declare -i spsk4=6 volkPos=1 #позиция волка

while true; do #тут сам процесс игры

if [ "$health" -eq 0 ]; then clear echo "Вы проиграли! Ваш счёт: $score" exit 0 fi

read -t 1 -s -n1 key #ждём нажатия клавиши

if [ "$key" = "z" ] then volkPos=1 volk=$volk1 key="no" print elif [ "$key" = "x" ] then volkPos=2 volk=$volk2 key="no" print elif [ "$key" = "c" ] then volkPos=3 volk=$volk3 key="no" print elif [ "$key" = "v" ] then volkPos=4 volk=$volk4 key="no" print elif [ "$key" = "q" ] then clear echo "Вы вышли из игры. До встречи!" exit 0 else #обновляем поле если ничего не нажато print fi

((spsk--)) if [ "$spsk" -le 0 ] then spsk=10 spusk1 #каждые 10 секунд пытатся делать спуск яйца fi

if [ "$SPUSK1" = "yes" ] then move_egg1 #продолжаем движение яйца fi

((spsk2--)) if [ "$spsk2" -le 0 ] then spsk2=12 spusk2 fi

if [ "$SPUSK2" = "yes" ] then move_egg2 #продолжаем движение яйца fi

((spsk3--)) if [ "$spsk3" -le 0 ] then spsk3=9 spusk3 fi

if [ "$SPUSK3" = "yes" ] then move_egg3 #продолжаем движение яйца fi

((spsk4--)) if [ "$spsk4" -le 0 ] then spsk4=9 spusk4 fi

if [ "$SPUSK4" = "yes" ] then move_egg4 #продолжаем движение яйца fi

done

17.06.2017 20:07 #423698

Не очень то кошерно выкладывать скрипты непосредственно в спойлере.
Тогда уж создать свой проект на github.com и туда выкладывать скрипты, описание делать в markdown в файлах README.md.
Многие редакторы умеют отображать markdown, например Atom.
Есть более дешевое решение просмотр в браузере, тогда каждый раз при сохранении файла в браузере будет виден результат, а для написания использовать любой текстовый редактор.
пример:
[console]$ grip README.md
* Running on http://localhost:6419/ (Press CTRL+C to quit)[/console]
Соответственно данный адрес надо будет ввести в браузере.

Ссылку на единичный скрипт можно получить по ссылке raw на сайте github.com .
А тут на сайте выкладывать ссылки.

17.06.2017 22:35 #423704

Чисто зрительно похоже на образчик типичного индусского кода, простите 8)

18.06.2017 20:30 #423720
1000Mhz написал:
Чисто зрительно похоже на образчик типичного индусского кода, простите 8)

Конечно код можно сократить, но в этом не будет смысла так как скорость выполнения будет одна и та же. На bash игры писать сложно и поэтому код похож на индусский, ну хотя бы не на китайский.

18.06.2017 21:33 #423723
ormorph написал:
Не очень то кошерно выкладывать скрипты непосредственно в спойлере.
Тогда уж создать свой проект на github.com и туда выкладывать скрипты, описание делать в markdown в файлах README.md.
Многие редакторы умеют отображать markdown, например Atom.
Есть более дешевое решение просмотр в браузере, тогда каждый раз при сохранении файла в браузере будет виден результат, а для написания использовать любой текстовый редактор.
пример:
[console]$ grip README.md
* Running on http://localhost:6419/ (Press CTRL+C to quit)[/console]
Соответственно данный адрес надо будет ввести в браузере.

Ссылку на единичный скрипт можно получить по ссылке raw на сайте github.com .
А тут на сайте выкладывать ссылки.

У сеня гитхаб давно есть, там мои java программы валяются. Только зачем сувать на гитхаб если багов вроде нету?

Войдите или зарегистрируйтесь, чтобы ответить.