井字棋shell脚本
时间: 2024-02-01 08:11:15 浏览: 20
井字棋是一种经典的游戏,可以通过编写Shell脚本来实现。下面是一个简单的井字棋Shell脚本的示例:
```shell
#!/bin/bash
# 初始化棋盘
board=(" " " " " " " " " " " " " " " " " ")
# 游戏结束标志
game_over=false
# 当前玩家
current_player="X"
# 打印棋盘
print_board() {
echo " ${board[0]} | ${board[1]} | ${board[2]} "
echo "--+--+--"
echo " ${board[3]} | ${board[4]} | ${board[5]} "
echo "--+--+--"
echo " ${board[6]} | ${board[7]} | ${board[8]} "
}
# 判断游戏是否结束
check_game_over() {
# 判断是否有玩家获胜
if [[ ${board[0]} == $1 && ${board[1]} == $1 && ${board[2]} == $1 ]] ||
[[ ${board[3]} == $1 && ${board[4]} == $1 && ${board[5]} == $1 ]] ||
[[ ${board[6]} == $1 && ${board[7]} == $1 && ${board[8]} == $1 ]] ||
[[ ${board[0]} == $1 && ${board[3]} == $1 && ${board[6]} == $1 ]] ||
[[ ${board[1]} == $1 && ${board[4]} == $1 && ${board[7]} == $1 ]] ||
[[ ${board[2]} == $1 && ${board[5]} == $1 && ${board[8]} == $1 ]] ||
[[ ${board[0]} == $1 && ${board[4]} == $1 && ${board[8]} == $1 ]] ||
[[ ${board[2]} == $1 && ${board[4]} == $1 && ${board[6]} == $1 ]]; then
echo "Player $1 wins!"
game_over=true
fi
# 判断是否平局
if [[ ! " ${board[@]} " =~ " " ]]; then
echo "It's a draw!"
game_over=true
fi
}
# 主循环
while [ "$game_over" = false ]; do
clear
print_board
# 获取玩家输入
read -p "Player $current_player's turn. Enter a number (1-9): " position
# 检查输入的合法性
if [[ ! $position =~ ^[1-9]$ ]]; then
echo "Invalid input. Please enter a number from 1 to 9."
continue
fi
# 检查位置是否已经被占据
if [[ ${board[$position-1]} != " " ]]; then
echo "Position already occupied. Please choose another position."
continue
fi
# 更新棋盘
board[$position-1]=$current_player
# 检查游戏是否结束
check_game_over $current_player
# 切换玩家
if [ "$current_player" = "X" ]; then
current_player="O"
else
current_player="X"
fi
done
print_board
```
这个脚本实现了一个简单的井字棋游戏。玩家可以通过输入数字来选择棋盘上的位置,脚本会根据玩家的选择更新棋盘,并判断游戏是否结束。如果有玩家获胜或者平局,游戏将结束并显示结果。