На самом деле это единственный раздел про unix на этом форуме
Модераторы: /dev/random , Модераторы разделов
olecya
Сообщения: 904
ОС: debian, fedora (i3-wm)
Сообщение
olecya » 11.10.2023 17:22
Сегодня обнаружила На соседнем форуме, нерадивый студент выложил толи приказ по общежитию, толи свое задание под одноименным заголовком:
Компьютер и игрок по очереди выбирают поля на доске 3х3, где компьютер случайным образом ставит крестики, игрок выбирает поле для нолика. Игра завершается, когда компьютер или игрок выстраивают ряд из 3 крестиков или ноликов подряд или все поля оказываются занятыми.
Я бы добавила от себя: "Игра также заканчивается с ничейным результатом если все ходы использованы."
Мне показалось задача интересной, но поощрять готовым решением не хочется в теме ТС. В последнее время крайне мало пользуюсь компьютером и решила отвлечься от мирского и поделится здесь. Возможно кто-то заинтересуется. Я уже начала писать программу. Решила не перегружать под использование мышкой, а разметить матрицу как морской бой a1-c3 используя ассоциативный массив. Тем самым ставить нолик по координатам. Выложу как допишу, присоединяйтесь со своими вариантами ну или просто комментариями по теме.
algri14
Сообщения: 1369
ОС: Mageia 5.1 & 8 x86_64, KDE
Сообщение
algri14 » 11.10.2023 18:59
яндекс-игры —
игра крестики нолики онлайн , это тому студенту передайте
там же и морской бой есть
зы: в морской бой довольно интересно
olecya
Сообщения: 904
ОС: debian, fedora (i3-wm)
Сообщение
olecya » 11.10.2023 19:25
Нашла в руководстве пример использования инструмента play из пакета sox:
Код: Выделить всё
play -n synth -j 3 sin %3 sin %-2 sin %-5 sin %-9 \
sin %-14 sin %-21 fade h .01 2 1.5 delay \
1.3 1 .76 .54 .27 remix - fade h 0 2.7 2.5 norm -1
Симпатично звучит в качестве заставки.
Добавлено (19:45):
Код: Выделить всё
#!/bin/bash
declare -A deck loose
read loose[{a..c}{1..3}] < <(echo {a..c}{1..3})
deck[_0]=' '
deck[_1]='\e[33m1\e[0m'
deck[_2]='\e[33m2\e[0m'
deck[_3]='\e[33m3\e[0m'
deck[a0]='\e[33ma\e[0m'
deck[a1]=' '
deck[a2]=' '
deck[a3]=' '
deck[b0]='\e[33mb\e[0m'
deck[b1]=' '
deck[b2]=' '
deck[b3]=' '
deck[c0]='\e[33mc\e[0m'
deck[c1]=' '
deck[c2]=' '
deck[c3]=' '
run() {
clear
for y in _ {a..c}; do
for x in {0..3}; do
echo -en "${deck[$y$x]} "
done
echo
done
}
user() {
if [ "${deck[a1]}${deck[a2]}${deck[a3]}" = OOO ]; then
deck[a1]='\e[1;32mO\e[0m'; deck[a2]='\e[1;32mO\e[0m'; deck[a3]='\e[1;32mO\e[0m'
elif [ "${deck[b1]}${deck[b2]}${deck[b3]}" = OOO ]; then
deck[b1]='\e[1;32mO\e[0m'; deck[b2]='\e[1;32mO\e[0m'; deck[b3]='\e[1;32mO\e[0m'
elif [ "${deck[c1]}${deck[c2]}${deck[c3]}" = OOO ]; then
deck[c1]='\e[1;32mO\e[0m'; deck[c2]='\e[1;32mO\e[0m'; deck[c3]='\e[1;32mO\e[0m'
elif [ "${deck[a1]}${deck[b1]}${deck[c1]}" = OOO ]; then
deck[a1]='\e[1;32mO\e[0m'; deck[b1]='\e[1;32mO\e[0m'; deck[c1]='\e[1;32mO\e[0m'
elif [ "${deck[a2]}${deck[b2]}${deck[c2]}" = OOO ]; then
deck[a2]='\e[1;32mO\e[0m'; deck[b2]='\e[1;32mO\e[0m'; deck[c2]='\e[1;32mO\e[0m'
elif [ "${deck[a3]}${deck[b3]}${deck[c3]}" = OOO ]; then
deck[a3]='\e[1;32mO\e[0m'; deck[b3]='\e[1;32mO\e[0m'; deck[c3]='\e[1;32mO\e[0m'
elif [ "${deck[a1]}${deck[b2]}${deck[c3]}" = OOO ]; then
deck[a1]='\e[1;32mO\e[0m'; deck[b2]='\e[1;32mO\e[0m'; deck[c3]='\e[1;32mO\e[0m'
elif [ "${deck[c1]}${deck[b2]}${deck[a3]}" = OOO ]; then
deck[c1]='\e[1;32mO\e[0m'; deck[b2]='\e[1;32mO\e[0m'; deck[a3]='\e[1;32mO\e[0m'
else
run
return
fi
run
echo 'You won!'
play --no-show -n synth -j 3 sin %3 sin %-2 sin %-5 sin %-9 \
sin %-14 sin %-21 fade h .01 2 1.5 delay \
1.3 1 .76 .54 .27 remix - fade h 0 2.7 2.5 norm -1
exit
}
comp() {
if [ "${deck[a1]}${deck[a2]}${deck[a3]}" = XXX ]; then
deck[a1]='\e[1;31mX\e[0m'; deck[a2]='\e[1;31mX\e[0m'; deck[a3]='\e[1;31mX\e[0m'
elif [ "${deck[b1]}${deck[b2]}${deck[b3]}" = XXX ]; then
deck[b1]='\e[1;31mX\e[0m'; deck[b2]='\e[1;31mX\e[0m'; deck[b3]='\e[1;31mX\e[0m'
elif [ "${deck[c1]}${deck[c2]}${deck[c3]}" = XXX ]; then
deck[c1]='\e[1;31mX\e[0m'; deck[c2]='\e[1;31mX\e[0m'; deck[c3]='\e[1;31mX\e[0m'
elif [ "${deck[a1]}${deck[b1]}${deck[c1]}" = XXX ]; then
deck[a1]='\e[1;31mX\e[0m'; deck[b1]='\e[1;31mX\e[0m'; deck[c1]='\e[1;31mX\e[0m'
elif [ "${deck[a2]}${deck[b2]}${deck[c2]}" = XXX ]; then
deck[a2]='\e[1;31mX\e[0m'; deck[b2]='\e[1;31mX\e[0m'; deck[c2]='\e[1;31mX\e[0m'
elif [ "${deck[a3]}${deck[b3]}${deck[c3]}" = XXX ]; then
deck[a3]='\e[1;31mX\e[0m'; deck[b3]='\e[1;31mX\e[0m'; deck[c3]='\e[1;31mX\e[0m'
elif [ "${deck[a1]}${deck[b2]}${deck[c3]}" = XXX ]; then
deck[a1]='\e[1;31mX\e[0m'; deck[b2]='\e[1;31mX\e[0m'; deck[c3]='\e[1;31mX\e[0m'
elif [ "${deck[c1]}${deck[b2]}${deck[a3]}" = XXX ]; then
deck[c1]='\e[1;31mX\e[0m'; deck[b2]='\e[1;31mX\e[0m'; deck[a3]='\e[1;31mX\e[0m'
else
run
return
fi
run
echo You are loser
play --no-show -n synth 2 pluck B0
exit
}
while :; do
d=$(shuf -e ${loose[@]} -n1)
deck[$d]=X
unset loose[$d]
comp
echo Comp move: $d
(( ${#loose[@]} )) || break
while read -p 'Your turn: ' d; do
if [[ "$d" != [a-c][1-3] ]]; then
echo not correct
continue
fi
if [[ ${deck[$d]} == [XO] ]]; then
echo occupied
continue
fi
deck[$d]=O
unset loose[$d]
user
break
done
done
echo It\'s draw
play --no-show -n synth pl G2 pl B2 pl D3 pl G3 pl D4 pl G4 \
delay 0 .05 .1 .15 .2 .25 remix - fade 0 4 .1 norm -1
P.S. Добавила опцию --no-show к синтезатору play
P.P.S Убрала утилиту tput
Последний раз редактировалось olecya 31.12.2023 20:11, всего редактировалось 2 раза.
UnixNoob
Сообщения: 1476
ОС: Slackware
Сообщение
UnixNoob » 11.10.2023 20:26
olecya ,
Offtopic
Вы ресурсы по типу codewars или leetcode не пробовали, для задачек?
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
igor@igor
Сообщения: 1429
ОС: Debian GNU/Linux, wheezy-amd64
Сообщение
igor@igor » 11.10.2023 22:04
Что-то, мисс
olecya , в игре азарта никакого нет, к сожалению.
olecya
Сообщения: 904
ОС: debian, fedora (i3-wm)
Сообщение
olecya » 11.10.2023 22:11
igor@igor писал: ↑ 11.10.2023 22:04
в игре азарта никакого нет, к сожалению.
Мотивация была в ее написании. Поэтому она не в разделе "Игры"
igor@igor
Сообщения: 1429
ОС: Debian GNU/Linux, wheezy-amd64
Сообщение
igor@igor » 11.10.2023 22:36
olecya писала: ↑ 11.10.2023 22:11
Мотивация была в ее написании. Поэтому она не в разделе "Игры"
Только ради "прокачки" знаний в коде?
Даже, если бы и была в разделе игры, то никакого интереса к ней...
Как "Лото" ...
...
olecya
Сообщения: 904
ОС: debian, fedora (i3-wm)
Сообщение
olecya » 12.10.2023 09:31
algri14 писал: ↑ 11.10.2023 18:59
в морской бой довольно интересно
Это мысль! Надо поставить в напоминалки на праздники. Может быть интересной реализация случайной расстановки кораблей, с этого кстати уже можно начинать. Два вложенных алгоритма. Один - случайные формы многопалубных кораблей и второй расстановка на поле.
igor@igor
Сообщения: 1429
ОС: Debian GNU/Linux, wheezy-amd64
Сообщение
igor@igor » 12.10.2023 10:02
olecya писала: ↑ 12.10.2023 09:31
Это мысль! Надо поставить в напоминалки на праздники. Может быть интересной реализация случайной расстановки кораблей, с этого кстати уже можно начинать. Два вложенных алгоритма. Один - случайные формы многопалубных кораблей и второй расстановка на поле.
Точно! Морской бой круче!
Там не как в картах азарт!
!НО..!
...