Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Безделушки на баше  (Прочитано 891 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ZwS

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1674
    • Просмотр профиля
Безделушки на баше
« : 01 Июня 2012, 20:05:26 »
Предлагаю делится своими не очень полезными, но интересными скриптами на баше.

начну с себя.
досовские текстовые гоночки. управление: a - влево, d - вправо. при запуске скрипта можно указать уровень сложности, от одного до десяти.
Код: (bash) [Выделить]
./racing.sh 10Исходник
Код: (bash) [Выделить]
#!/bin/bash
declare -c w=$(tput cols)
declare -c h=$(tput lines)
declare -g lvl=6
declare -g spd=0.1
declare -g dif=9
declare -g score=0
declare -g key
declare -g screen
declare -g s

declare -g KEY_LEFT="a"
declare -g KEY_RIGHT="d"

gen_road() {
st=$1
local l="."
for ((i=1; $i < $st; i=i+1)); do
l=$l"."
done
l=$l"||"
for ((i=1; $i < 15; i=i+1)); do
c=$RANDOM; let "c %= $dif"
if [ $c -eq 2 ]; then
c="0"
else
c="."
fi
l=$l$c
done
l=$l"||"
for ((i=1; $i < $w-$st-17; i=i+1)); do
l=$l"."
done
screen="$l
$screen"
}

gen_empty_road() {
for ((n=1; $n < $h-1; n=n+1)); do
local l="."
for ((i=1; $i < $s; i=i+1)); do
l=$l"."
done
l=$l"||"
for ((i=1; $i < 15; i=i+1)); do
l=$l"."
done
l=$l"||"
for ((i=1; $i < $w-$s-17; i=i+1)); do
l=$l"."
done
screen="$l
$screen"
done
}

init() {
clear
stty -echo
echo -e "\033[?25l"

if [ ! -z $1 ] && [ $1 -ge 1 ] && [ $1 -le 10 ]; then
lvl=$1
spd=$(echo "scale=1;1/$lvl" | bc)
dif=$((15-$lvl))
fi

trap quit SIGINT

s=$RANDOM; let "s %= $((w-16))"
gen_empty_road
px=$((s+8))

main
}

quit() {
echo -e "\033[?25h"
stty echo
echo ""
tput cup $h 0;
exit 0
}

main() {
while true; do
tput cup 0 0
p=$RANDOM; let "p %= 3"
if [ $p -eq 2 ]; then
p="-1"
fi
s=$((s-p))
if [ $s -lt 2 ]; then
s=2
elif [ $s -gt $((w-19)) ]; then
s=$((w-18))
fi

gen_road $s

screen=$(echo -n "$screen" | head -$((h-1)))

read -s -t$spd -n1 key
case $key in
$KEY_LEFT) px=$((px-1));;
$KEY_RIGHT) px=$((px+1));;
esac

echo -n "$screen"
pp=$(echo -n "$screen" | tail -1 | cut -c$((px+1))-$((px+1)))
case $pp in
"|") quit;;
"0") quit;;
*) tput cup $((h-2)) $px; echo -n "H";;
esac

score=$((score+$lvl*2))
tput cup $((h-1)) 0; echo -ne "Score:\t$score"
done
}

init $1
Dell Inspiron One 2330 | Intel+Radeon HD7650A | 8GB RAM | Ubuntu GNOME 17.10

Оффлайн alan_derua

  • Активист
  • *
  • Сообщений: 552
  • Свободный от забот
    • Просмотр профиля
Re: Безделушки на баше
« Ответ #1 : 01 Июня 2012, 22:39:58 »
Спасибо!  :D Может можно сделать "машинку" и "препятствия" в цвете, а то не очень удобно.  :-\

Оффлайн ZwS

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1674
    • Просмотр профиля
Re: Безделушки на баше
« Ответ #2 : 02 Июня 2012, 00:20:29 »
Спасибо!  :D Может можно сделать "машинку" и "препятствия" в цвете, а то не очень удобно.  :-\
могу машинку покрасить, с препятствиями будет немного больше возни, ибо придется переписывать проверку на столкновения.

кстати о сложном и цветастом.
пакмен. управление wasd.
Dell Inspiron One 2330 | Intel+Radeon HD7650A | 8GB RAM | Ubuntu GNOME 17.10

Оффлайн alan_derua

  • Активист
  • *
  • Сообщений: 552
  • Свободный от забот
    • Просмотр профиля
Re: Безделушки на баше
« Ответ #3 : 02 Июня 2012, 02:07:34 »
Покрась машинку в красный.  8)

Пользователь решил продолжить мысль 02 Июня 2012, 02:11:55:
pacman тоже твой?
« Последнее редактирование: 02 Июня 2012, 02:11:55 от alexanto »

 

Страница сгенерирована за 0.061 секунд. Запросов: 25.