SCO、Linux下的shell五子棋小遊戲(轉)
SCO、Linux下的shell五子棋小遊戲(轉)[@more@]偶也嘗試用shell編個簡單小遊戲:程式碼很笨拙,還不能人機對抗,但必竟能玩了。sco、linux測試透過,linux效果更好些。其它系統未測。程式碼:#!/bin/sh# Programname: five# Author: CLD# 2004.01#L(){# 螢幕任意位置h=$1;l=$2echo -n "[$h;$l;H"}## 介面顏色控制變數white_b="[47;30m" # 白底黑字green_b="[42;30m" # 綠底黑字(移動棋字亮塊)blue_b="[44;37m" # 蘭底白字gray_b="[40;30;5m" # 灰底黑字gray_w="[40;37;5m" # 灰底白字black_w="[37;40;0m" # 黑底白字# 棋盤換色控制變數brown_b="[43;30m" # 桔黃底黑棋brown_w="[43;37m" # 桔黃底白棋mage_b="[45;30m" # 紫底黑棋mage_w="[45;37m" # 紫底白棋lt_blue_b="[44;30;5m" # 淺蘭底黑棋lt_blue_w="[44;37;5m" # 淺蘭底白棋kkk(){# 棋盤L 1 22;echo "$gray_b $black_w"L 2 22;echo "$gray_b ┏┯┯┯┯┯┯┯┯┯┯┯┯┯┓ $black_w"L 3 22;echo "$gray_b ┠┼┼┼┼┼┼┼┼┼┼┼┼┼┨ $black_w"L 4 22;echo "$gray_b ┠┼┼┼┼┼┼┼┼┼┼┼┼┼┨ $black_w"L 5 22;echo "$gray_b ┠┼┼╋┼┼┼┼┼┼┼╋┼┼┨ $black_w"L 6 22;echo "$gray_b ┠┼┼┼┼┼┼┼┼┼┼┼┼┼┨ $black_w"L 7 22;echo "$gray_b ┠┼┼┼┼┼┼┼┼┼┼┼┼┼┨ $black_w"L 8 22;echo "$gray_b ┠┼┼┼┼┼┼┼┼┼┼┼┼┼┨ $black_w"L 9 22;echo "$gray_b ┠┼┼┼┼┼┼┼┼┼┼┼┼┼┨ $black_w"L 10 22;echo "$gray_b ┠┼┼┼┼┼┼┼┼┼┼┼┼┼┨ $black_w"L 11 22;echo "$gray_b ┠┼┼┼┼┼┼┼┼┼┼┼┼┼┨ $black_w"L 12 22;echo "$gray_b ┠┼┼┼┼┼┼┼┼┼┼┼┼┼┨ $black_w"L 13 22;echo "$gray_b ┠┼┼╋┼┼┼┼┼┼┼╋┼┼┨ $black_w"L 14 22;echo "$gray_b ┠┼┼┼┼┼┼┼┼┼┼┼┼┼┨ $black_w"L 15 22;echo "$gray_b ┠┼┼┼┼┼┼┼┼┼┼┼┼┼┨ $black_w"L 16 22;echo "$gray_b ┗┷┷┷┷┷┷┷┷┷┷┷┷┷┛ $black_w"L 17 22;echo "$gray_b $black_w"}getchar(){key=`stty -g`stty -echostty rawdd if=/dev/tty bs=1 count=1 2>/dev/nullstty -rawstty echostty $key}clearkkkL 5 34;echo " 五 子 棋 " L 10 24;echo "┌────遊戲○設定────┐"L 11 24;echo "│ │"L 12 24;echo "│ 1_白先走 2_黑先走 [ ] │"L 13 24;echo "│ │"L 14 24;echo "└─────────────┘"L 12 48;echo -ngoo=`getchar`case $goo in1) go="白";ss=0;sss=0;;2) go="黑";ss=1;sss=1;;*) clear;exit;;esacby=0;bs=0;bsy=0;hy=0;hs=0;hsy=0 #初始化輸贏局數tput civishelp(){L 16 3;echo "┏━━━━━━━┓"L 16 57;echo "┏━━━━━━━┓"L 17 3;echo "┃ ┃"L 17 57;echo "┃ ┃"L 18 3;echo "┃ ┃ ┃ ┃"L 19 3;echo "┃ 贏盤數: ┃┏━━━━━"$gray_b" m---和為貴 "$black_w"━━━━━┓┃ 贏盤數: ┃"L 20 3;echo "┃ 輸盤數: ┃┃ 友 比 ┃┃ 輸盤數: ┃"L 21 3;echo "┃ ┃┃ 誼 "$white_b"Press c change color"$black_w" 賽 ┃┃ ┃"L 22 3;echo "┃ ┃┃ 第 第 ┃┃ ┃"L 23 3;echo "┃ 最後成績: ┃┃ 一 二 ┃┃ 最後成績: ┃"L 24 3;echo "┗━━━━━━━┛┗━━━━━━━━━━━━━━━━┛┗━━━━━━━┛"}init_(){ # 繼續棋局初始化kkk >abca1=2 a2=38b1=52b2=16write=$green_b$go$black_wcat abcL $a1 $a2;echo $write # 棋子初始位置ccc=1 #改變顏色次數color1=`expr substr $gray_b 3 8`;color2=`expr substr $gray_w 3 8` #預設棋子顏色L 19 13;echo $by;L 19 68;echo $hyL 20 13;echo $bs;L 20 68;echo $hsL 23 15;echo $bsy" ";L 23 70;echo $hsy" "}init_help## 棋子移動函式left(){ ##左移if [ $a2 -eq 24 ];then a2=24;else a2=`expr $a2 - 2`;fisort -t"[" -n +1 abcL $a1 $a2;echo $write}right(){ ##右移if [ $a2 -eq $b1 ];then a2=$b1;else a2=`expr $a2 + 2`;fisort -t"[" -n +1 abcL $a1 $a2;echo $write}down(){ ##下移if [ $a1 -eq $b2 ];then a1=$b2;else a1=`expr $a1 + 1`;fisort -t"[" -n +1 abcL $a1 $a2;echo $write}up(){ ##上移if [ $a1 -eq 2 ];then a1=2;else a1=`expr $a1 - 1`;fisort -t"[" -n +1 abcL $a1 $a2;echo $write}sy(){ # 繼續棋局輸方先走,統計輸贏結果if [ $qs -eq 7 ];thengo="黑" #如果白棋贏則下一盤黑先走run="白"bs=`expr $bs + 0`;by=`expr $by + 1`bsy=`expr $by - $bs`hy=$bs;hs=$by;hsy=`expr $hy - $hs`elsego="白" #如果黑棋贏則下一盤白先走run="黑"hs=`expr $hs + 0`;hy=`expr $hy + 1`hsy=`expr $hy - $hs`by=$hs;bs=$hy;bsy=`expr $by - $bs`fi}sy1(){ # 顯示輸贏結果,統計棋局,詢問是否繼續 while true;doL 19 13;echo $by;L 19 68;echo $hyL 20 13;echo $bs;L 20 68;echo $hsL 23 15;echo $bsy" ";L 23 70;echo $hsy" "tput bel;tput belL 6 28;echo $white_b" "$black_wL 7 28;echo $white_b" "$run$1"!!! "$black_w" "$black_wL 8 28;echo $white_b" 再來一盤否[y|n]? "$black_w" "$black_wL 9 28;echo $white_b" "$black_w" "$black_wL 10 30;echo " "key=`getchar`case $key iny)init_count=`expr $count + 1`L 23 36;echo "第 $count 局"break;;n)clear;cat abcL 7 30;echo $blue_b" "$black_w L 8 30;echo $blue_b" "!!!再見!!!" "$black_w" "$black_wL 9 30;echo $blue_b" "$black_w" "$black_wL 10 30;echo $blue_b" "Author: c1l2d3" "$black_w" "$black_wL 11 30;echo $blue_b" "$black_w" "$black_wL 12 32;echo $black_w" "$black_wtput cnormrm yyy;exit;;*);;esacdone}award() #判斷輸贏函式{cat abc|sed -n 18,"$"p|awk -F";" '{print $1,$2,$4}'|sed 's/^..//' |awk '{print $1,$2,substr($3,2,1)}' >yyy # 計算輸贏臨時檔案 grep "$qs$" yyy|sort -r -n +0 +1|awk '$2+=(NR*2)' |uniq -c|awk '{print $1}'|grep '[5-9]' >/dev/null 2>&1if [ $? -eq 0 ];then sy;sy1 "棋贏啦! ";fi # 橫連子>=5 grep "$qs$" yyy|sort -r -n +1|awk '$1+=NR' |uniq -c|awk '{print $1}'|grep '[5-9]' >/dev/null 2>&1if [ $? -eq 0 ];then sy;sy1 "棋贏啦! " ;fi # 豎連子>=5 grep "$qs$" yyy|sort -r -n +0 +1|awk '$1=$1+$2/2'|sort -r -n |awk '$2+=(NR*2)'|uniq -c|awk '{print $1}'|grep '[5-9]' >/dev/null 2>&1if [ $? -eq 0 ];then sy;sy1 "棋贏啦! ";fi # 右斜連子>=5grep "$qs$" yyy|sort -r -n +0 +1|awk '$1=$1-$2/2'|sort -r -n |awk '$2+=(NR*2)'|uniq -c|awk '{print $1}'|grep '[5-9]' >/dev/null 2>&1if [ $? -eq 0 ];then sy;sy1 "棋贏啦! ";fi # 左斜連子>=5}count=1 #局數while truedoL 1 4;echo $white_b" 【執白方】 "$black_wL 4 5;echo $gray_b" a---左移 "$black_wL 6 5;echo $gray_b" d---右移 "$black_wL 8 5;echo $gray_b" w---上移 "$black_wL 10 5;echo $gray_b" s---下移 "$black_wL 12 5;echo $gray_b" p---落子 "$black_wL 14 5;echo $gray_b" ]---投降 "$black_wL 1 62;echo $white_b" 【執黑方】 "$black_wL 4 63;echo $gray_b" 4---左移 "$black_wL 6 63;echo $gray_b" 6---右移 "$black_wL 8 63;echo $gray_b" 8---上移 "$black_wL 10 63;echo $gray_b" 5---下移 "$black_wL 12 63;echo $gray_b" 9---落子 "$black_wL 14 63;echo $gray_b" 0---投降 "$black_wL 22 1;echo -nL 23 36;echo "第 $count 局"cc=`getchar`case $cc ina|4)if [ $ss -eq 0 ] && [ "$cc" = "a" ];then left;fiif [ $ss -eq 1 ] && [ "$cc" = "4" ];then left;fi;;d|6)if [ $ss -eq 0 ] && [ "$cc" = "d" ];then right;fiif [ $ss -eq 1 ] && [ "$cc" = "6" ];then right;fi;;s|5)if [ $ss -eq 0 ] && [ "$cc" = "s" ];then down;fiif [ $ss -eq 1 ] && [ "$cc" = "5" ];then down;fi;;w|8)if [ $ss -eq 0 ] && [ "$cc" = "w" ];then up;fiif [ $ss -eq 1 ] && [ "$cc" = "8" ];then up;fi;;m)run="此局和棋! ";sy1;;p|9)if [ $ss -eq 0 ] && [ "$cc" = "p" ];thensed -n 18,"$"p abc|grep "[$a1;$a2" 2>&1 if [ $? -eq 0 ];then L 10 32;echo " 此處已有棋...";tput bel;sleep 1write=$green_b白$black_wsss=0elsemm=`L $a1 $a2`[$color2●$black_wecho $mm>>abcwrite=$green_b黑$black_wsss=1fisort -t"[" -n +1 abcqs=7award;tput bel fiif [ $ss -eq 1 ] && [ "$cc" = "9" ];thensed -n 18,"$"p abc|grep "[$a1;$a2" 2>&1 if [ $? -eq 0 ];then L 10 32;echo " 此處已有棋...";tput bel;sleep 1write=$green_b黑$black_wsss=1elsemm=`L $a1 $a2`"[$color1●$black_w"echo $mm>>abcwrite=$green_b白$black_wsss=0fisort -t"[" -n +1 abcqs=0award;tput belfiss=$sss;; # 落子方不允許再走,等待對方走棋0|])if [ "$cc" = "]" ];then go="白";run="白";bs=`expr $bs + 1`by=`expr $by + 0`bsy=`expr $by - $bs`hy=$bs;hs=$by;hsy=`expr $hy - $hs`sss=0else go="黑";run="黑";hs=`expr $hs + 1`;hy=`expr $hy + 0`hsy=`expr $hy - $hs`by=$hs;bs=$hy;bsy=`expr $by - $bs`sss=1fiss=$sss #誰投降誰下一局先走sy1 "棋投降啦";;c)md=$ccc # 變換棋盤顏色if [ $md -eq 1 ];thendef1=`expr substr $gray_b 3 8`;def2=`expr substr $gray_w 3 8`color1=`expr substr $brown_b 3 6`;color2=`expr substr $brown_w 3 6`sed 's/'$def1'/'$color1'/g' abc|sed 's/'$def2'/'$color2'/g' >abc.tmpmv abc.tmp abccat abcccc=`expr $ccc + 1`fi # 桔黃色if [ $md -eq 2 ];thendef1=`expr substr $brown_b 3 6`;def2=`expr substr $brown_w 3 6`color1=`expr substr $lt_blue_b 3 8`;color2=`expr substr $lt_blue_w 3 8`sed 's/'$def1'/'$color1'/g' abc|sed 's/'$def2'/'$color2'/g' >abc.tmpmv abc.tmp abccat abcccc=`expr $ccc + 1`fi # 淺藍色if [ $md -eq 3 ];thendef1=`expr substr $lt_blue_b 3 8`;def2=`expr substr $lt_blue_w 3 8`color1=`expr substr $mage_b 3 6`;color2=`expr substr $mage_w 3 6`sed 's/'$def1'/'$color1'/g' abc|sed 's/'$def2'/'$color2'/g' >abc.tmpmv abc.tmp abccat abcccc=`expr $ccc - 3`fi # 紫色if [ $md -eq 0 ];thendef1=`expr substr $mage_b 3 6`;def2=`expr substr $mage_w 3 6`color1=`expr substr $gray_b 3 8`;color2=`expr substr $gray_w 3 8`sed 's/'$def1'/'$color1'/g' abc|sed 's/'$def2'/'$color2'/g' >abc.tmpmv abc.tmp abccat abcccc=`expr $ccc + 1`fi # 灰色L 2 38;echo $write;;esacdone圖:[myimg]upload/ccc.png[/myimg]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-944888/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SCO UNIX下的反刪除(undelete)(轉)delete
- SCO-UNIX在vmware下的安裝(轉)
- SCO OpenServer 5下新增硬碟方法(轉)Server硬碟
- 轉:Linux、AIX UNIX、SCO UNIX下檢視硬體配置小結LinuxAI
- Linux下的shell程式設計入門(轉)Linux程式設計
- SCO Unix系統下網路印表機的使用(轉)
- C語言五子棋小遊戲C語言遊戲
- PyGame每日一練——五子棋小遊戲GAM遊戲
- SCO UNIX 下裝置驅動程式開發 (轉)
- SCO UNIX 下裝置驅動程式開發(轉)
- Linux下Shell日期的格式Linux
- Linux下Shell的計時Linux
- Linux下的Shell簡介Linux
- 基於 Blazor 開發五子棋⚫⚪小遊戲Blazor遊戲
- C語言實現小遊戲:五子棋C語言遊戲
- linux下的SHELL程式設計Linux程式設計
- Unix/Linux系統下輕量級Shell工具(轉)Linux
- Linux下Shell基礎知識深入淺出(轉)Linux
- SCO UNIX--安裝(轉)
- 在linux shell下將漢字轉換為url編碼的辦法(轉)Linux
- Linux教程-Turbo Linux Shell(轉)Linux
- Linux shell下的顏色含義Linux
- SCO UNIX網路安全管理 (轉)
- SCO UNIX安裝參考(轉)
- Linux Shell程式設計(5)——shell特殊字元(下)Linux程式設計字元
- Linux的shell基礎教學(轉)Linux
- Linux的shell程式設計(一)(轉)Linux程式設計
- Linux的shell程式設計(二)(轉)Linux程式設計
- Linux的shell程式設計(三)(轉)Linux程式設計
- Linux的shell程式設計(四)(轉)Linux程式設計
- Linux Shell之sort命令(轉)Linux
- Linux shell用法和技巧(轉)Linux
- 關於aix, linux下的shell環境AILinux
- UNIX 下 SCO TCP/IP ftp 命令表TCPFTP
- Java實現五子棋對戰小遊戲【完整版】Java遊戲
- SCO UNIX--基本配置及操作(轉)
- SCO5.0.5安裝步驟 (轉)
- SCO Openserver 5.05撥號詳解 (轉)Server