Advertisement
Guest User

Untitled

a guest
Apr 10th, 2021
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.05 KB | None | 0 0
  1. #!/usr/bin/env bash
  2. #bash-written tictactoe game
  3.  
  4. #game save location
  5. rc=$HOME/.local/share/bt3.rc
  6. modename=('Local' 'Easy' 'Medium' 'Master' 'Online')
  7.  
  8. #(jojo) reference
  9. help() {
  10.         printf "%s\n"\
  11.                 "usage: bt3 [option] <mode>"\
  12.                 "Bash-written tictactoe game."\
  13.                 "OPTIONS:"\
  14.                 "  --help|-h       Show this help."\
  15.                 "  --version|-v    Show version."\
  16.                 "GAMEMODES:"\
  17.                 "  -1  Easy bot."\
  18.                 "  -2  Medium bot"\
  19.                 "  -3  Master bot."\
  20.                 "  -p  Play together on one device."\
  21.                 "  -o  Play online via...(In v1.1)"
  22.         exit 0
  23. }
  24. version() {
  25.         printf "%s\n" "bt3 v1.0" "Bash tictactoe game."
  26.         exit 0
  27. }
  28.  
  29. #option parcer
  30. case $1 in
  31.         --help|-h) help;;
  32.         --version|-v) version;;
  33.         -1|-2|-3|-p|-o) mode=$(echo $1 | sed 's/-//g');;
  34.         *) echo 'Choose right game options.'; exit 1
  35. esac
  36.  
  37. #ingame functions
  38. printField() {
  39.         clear
  40.         for (( i=0 ; i<9 ; i=i+3 )); do
  41.                 echo "${session[$i]}${session[$(( i + 1 ))]}${session[$(( i + 2 ))]}"
  42.         done
  43. }
  44. 0() {
  45.         while :; do
  46.                 printField
  47.                 read -n 1 -p '>> '
  48.                 if [[ ${session[$(( REPLY - 1 ))]} == '#' ]]; then
  49.                         session[$REPLY-1]=$1
  50.                         break
  51.                 fi
  52.         done
  53. }
  54. 1() {
  55.         rand=$(( RANDOM % 9 ))
  56.         while [[ ${session[$rand]} != '#' ]]; do
  57.                 if [[ $rand == 8 ]]; then
  58.                         rand=0
  59.                 else
  60.                         rand=$(( $rand + 1 ))
  61.                 fi
  62.         done
  63.         session[$rand]=$1
  64. }
  65. analyze() {
  66.         for (( i=0 ; i<9 ; i=i+3 )); do
  67.                 checkField $i $(( i + 1 )) $(( i + 2 ))
  68.         done
  69.         for (( i=0 ; i<3 ; i++ )); do
  70.                 checkField $i $(( i + 3 )) $(( i + 6 ))
  71.         done
  72.         checkField {0 4 8, 2 4 6}
  73. }
  74. checkField() {
  75.         if [[ "${session[$1]}"!='#' && "${session[$1]}"=="${session[$2]}" && "${session[$2]}"=="${session[$3]}" ]]; then
  76.                 printf "\nPlayer ${session[$1]} win at turn $turn\n" &&
  77.                 exit 0
  78.         fi
  79. }
  80. #choose side
  81. if ! source $rc; then
  82.         for (( i=0 ; i<9 ; i++ )); do
  83.                 session[$i]='#'
  84.         done
  85.         select i in x o random; do
  86.                 case $i in
  87.                         x|o) playside=$i; break;;
  88.                         random)
  89.                                 if (( (RANDOM % 2) == 1 )); then
  90.                                         playside=x
  91.                                 else
  92.                                         playside=o
  93.                                 fi
  94.                                 break
  95.                 esac
  96.         done
  97.         if [[ $playside == 'x' ]]; then
  98.                 otherside='o'
  99.         else
  100.                 otherside='x'
  101.         fi
  102. fi
  103.  
  104. #game
  105. while :; do
  106.         0 $playside
  107.         analyze
  108.         $mode $otherside
  109.         analyze
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement