井字游戏(shell高级版)

井字游戏(shell高级版)

 

    大家小时候大概都玩过井字游戏,就是双方在九宫格里面轮流下棋 ,先构成三点一线(横线、竖线或者斜线)的一方取胜。有点经验的人都知道,这样简单的游戏根本是不分胜负的,除非就是某一方特别粗心,才会让你有获胜的机会。

 

 

    于是,我们研究了一种新的井字游戏,即所谓的高级版。棋盘为 9×9 的 81宫格,分为9个九宫格。

 

    取胜规则:

        1、在任意一个九宫格中先构成三点一线(横线、竖线或者斜线)的一方取胜。

        2、轮到对方下棋且对方无子可下,则本方获胜。

 

    下子规则:

        1、从左到右、从上到下分别编号9个九宫格为1—9,则先下棋者只能在第5九宫格范围内下子。

        2、若对手在第 i 九宫格的第 j 位置处下棋,则紧接着本方必须在第 j 九宫格范围内下棋。

 

 

    游戏是shell脚本写成的,测试环境为bash,wsad控制方向键移动,f、空格、回车、Tab为下棋动作,x退出游戏,n开始新的游戏。详细可以研究一下代码,十分简单的。

 

#! /bin/bash
#-----------------------------------
#    Name: 井字游戏(高级版)
#    Version: 1.0
#    Type: Game
#    Date: 2015-02-26
#    Author: ruanshihai
#    Email: 1103530380@qq.com
#-----------------------------------

#---------------Define--------------
ECHO="echo -ne"
ESC="\033["
OK=0
FALSE=1

#--------------Variable--------------
#color
NULL=0
BLACK=30
RED=31
GREEN=32
YELLOW=33
BLUE=34
PURPLE=35
CYAN=36
WHITE=37

#background color
BBLACK=40
BRED=41
BGREEN=42
BYELLOW=43
BBLUE=44
BPURPLE=45
BCYAN=46
BWHITE=47

REV=7

BP=5
SP=5
OBP=5
OSP=5
SYMBOL=("x" "o")
Player=0

#--------------Function--------------
function SttyInit() {
	stty_save=$(stty -g) #backup stty

	clear
	trap "GameExit;" 2 15
	stty -echo

	
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
井字棋是一种经典的游戏,可以通过编写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 ``` 这个脚本实现了一个简单的井字游戏。玩家可以通过输入数字来选择棋盘上的位置,脚本会根据玩家的选择更新棋盘,并判断游戏是否结束。如果有玩家获胜或者平局,游戏将结束并显示结果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值