亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
1234下一頁
最近訪問板塊 發(fā)新帖
查看: 9290 | 回復(fù): 32
打印 上一主題 下一主題

Shell寫的貪吃蛇游戲  關(guān)閉 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2003-10-15 18:48 |只看該作者 |倒序?yàn)g覽
忙一下午,終于出來了 :wink:
在我的redhat8.0上運(yùn)行通過。
游戲鍵:
    上:w, i
      下:s, k
      左:a, j
      右:d, l
      退出:q


  1. #!/bin/bash

  2. function DetectInput
  3. {
  4.         while [[ 1 ]]
  5.         do
  6.                 c=""
  7.                 read -n 1 c
  8.                 echo -ne "\r          \r"
  9.                 if [[ $c == "a" || $c == "j" || $c == "A" || $c == "J" ]]
  10.                 then
  11.                         kill -36 $pidShowSnake
  12.                 elif [[ $c == "w" || $c == "i" || $c == "W" || $c == "I" ]]
  13.                 then
  14.                         kill -37 $pidShowSnake
  15.                 elif [[ $c == "d" || $c == "l" || $c == "D" || $c == "L" ]]
  16.                 then
  17.                         kill -38 $pidShowSnake
  18.                 elif [[ $c == "s" || $c == "k" || $c == "S" || $c == "K" ]]
  19.                 then
  20.                         kill -39 $pidShowSnake
  21.                 elif [[ $c == "q" || $c == "Q" ]]
  22.                 then
  23.                         echo Quit.
  24.                         kill -40 $pidShowSnake
  25.                         exit
  26.                 fi
  27.         done
  28. }

  29. function AllExit
  30. {
  31.         kill -40 $pidShowSnake
  32.         exit
  33. }

  34. if [[ $1 != "--showsnake" ]]
  35. then
  36.         eval $0" --showsnake "$$"&"
  37.         trap "exit" TERM
  38.         trap "AllExit" INT
  39.         pidShowSnake=$!
  40.         DetectInput
  41.         exit
  42. else
  43.         pidCtlSnake=$2
  44. fi

  45. echo sub


  46. iSpeed=500        #time interval in millisecond
  47. iDirection=0        #1-left, 2-up, 3-right, 4-down
  48. iWidth=15
  49. iHeight=15
  50. iX=(6 7 8)
  51. iY=(7 7 7)
  52. iMap=()
  53. iS=0        #Start pointer in iX

  54. (( iTotalBox = iWidth * iHeight ))
  55. for (( i = 0; i < iTotalBox; i++ ))
  56. do
  57.         (( iMap[$i] = 0 ))
  58. done

  59. function RandomHeader
  60. {
  61.         (( iNew = RANDOM % ( iTotalBox - ${#iX[@]} ) ))
  62.         for (( iNewP = 0, i = 0; iNewP < iTotalBox && i < iNew; iNewP++))
  63.         do
  64.                 if (( ${iMap[$iNewP]} != 1 )); then (( i++ )); fi
  65.         done
  66.         while (( ${iMap[$iNewP]} == 1 )); do (( iNewP++ )); done

  67.         (( iNewX = iNewP % iWidth ))
  68.         (( iNewY = (iNewP - iNewX) / iWidth ))

  69.         echo -ne "\33[1m\33[35m"
  70.         (( pX = 2 * iNewX + iLeft + 1 ))
  71.         (( pY = iNewY + iTop + 1 ))
  72.         echo -ne "\33["$pY";"$pX"H[]"
  73.         echo -ne "\33["$iCursor";1H"
  74.         echo -ne "\33[0m"
  75.                
  76. }

  77. function InitDraw
  78. {
  79.         clear
  80.        
  81.         (( iTop = 1 ))
  82.         (( iBottom = iTop + iHeight + 1 ))
  83.         (( iLeft = 1 ))
  84.         (( iRight = iLeft + iWidth + iWidth + 1 ))
  85.         (( iCursor = iBottom + 1 ))
  86.        
  87.         echo -ne "\33[1m\33[32m"
  88.         for (( i = iLeft + 1; i < iWidth + iWidth + iLeft + 1; i++ ))
  89.         do
  90.                 echo -ne "\33["$iTop";"$i"H="
  91.                 echo -ne "\33["$iBottom";"$i"H="
  92.         done
  93.         for (( i = iTop; i < iHeight + iTop + 2; i++ ))
  94.         do
  95.                 echo -ne "\33["$i";"$iLeft"H|"
  96.                 echo -ne "\33["$i";"$iRight"H|"
  97.         done
  98.         echo -ne "\33["$iCursor";1H"
  99.         echo -ne "\33[0m"

  100.         echo -ne "\33[1m\33[33m"
  101.         for (( i = 0; i < ${#iX[@]}; i++ ))
  102.         do
  103.                 (( pX = 2 * ${iX[$i]} + iLeft + 1 ))
  104.                 (( pY = ${iY[$i]} + iTop + 1 ))
  105.                 (( pM = ${iY[$i]} * iWidth + ${iX[$i]} ))
  106.                 (( iMap[$pM] = 1 ))
  107.                 echo -ne "\33["$pY";"$pX"H[]"
  108.                 #echo ${iX[$i]}
  109.         done
  110.         echo -ne "\33["$iCursor";1H"
  111.         echo -ne "\33[0m"
  112.        
  113.         RandomHeader
  114. }


  115. function ShiftSnake
  116. {
  117.         (( iLastP = iS - 1 ))
  118.         if (( iLastP < 0 )); then ((iLastP = ${#iX[@]} - 1 )); fi
  119.                
  120.         if (( iDir == 1 ))        #left
  121.         then
  122.                 (( iHX = ${iX[$iLastP]} - 1 ))
  123.                 (( iHY = ${iY[$iLastP]} ))
  124.         elif (( iDir == 2 ))        #up
  125.         then
  126.                 (( iHX = ${iX[$iLastP]} ))
  127.                 (( iHY = ${iY[$iLastP]} - 1 ))
  128.         elif (( iDir == 3 ))        #right
  129.         then
  130.                 (( iHX = ${iX[$iLastP]} + 1 ))
  131.                 (( iHY = ${iY[$iLastP]} ))
  132.         elif (( iDir == 4 ))        #down
  133.         then
  134.                 (( iHX = ${iX[$iLastP]} ))
  135.                 (( iHY = ${iY[$iLastP]} + 1 ))       
  136.         fi
  137.        
  138.         bOver=0
  139.         if (( iHX < 0 || iHY < 0 || iHX >= iWidth || iHY >= iHeight )); then bOver=1;fi
  140.         if (( bOver == 0 )); then
  141.                 if (( ${iMap[iHY * iWidth + iHX]} == 1 )); then        bOver=1; fi
  142.         fi

  143.         if (( bOver == 1 ))
  144.         then
  145.                 kill $pidCtlSnake
  146.                 (( iBottom = iBottom + 1 ))
  147.                 echo -e "\33["$iBottom";0HGame over! (Score: "${#iX[@]}"00)\33[0m"
  148.                 exit 0;
  149.         fi
  150.        
  151.        
  152.         #check if catch the new box
  153.         if (( iHX == iNewX && iHY == iNewY ))
  154.         then
  155.                 for (( i = ${#iX[@]}; i > iS; i-- ))
  156.                 do
  157.                         (( iX[$i] = ${iX[$i - 1]} ))
  158.                         (( iY[$i] = ${iY[$i - 1]} ))
  159.                 done
  160.                 (( iX[$iS] = iHX ))
  161.                 (( iY[$iS] = iHY ))

  162.                 (( iNextP = iS + 1 ))
  163.                 if (( iNextP >= ${#iX[@]} )); then iNextP=0; fi       
  164.                
  165.                 echo -ne "\a"
  166.                 RandomHeader
  167.         else
  168.                 (( iNextP = iS + 1 ))
  169.                 if (( iNextP >= ${#iX[@]} )); then iNextP=0; fi       
  170.        
  171.                 #clear snake tailer
  172.                 (( pX = 2 * ${iX[$iS]} + iLeft + 1 ))
  173.                 (( pY = ${iY[$iS]} + iTop + 1 ))
  174.                 (( pM = ${iY[$iS]} * iWidth + ${iX[$iS]} ))
  175.                 (( iMap[$pM] = 0 ))
  176.                 echo -ne "\33["$pY";"$pX"H  "
  177.                 (( iX[$iS] = iHX ))
  178.                 (( iY[$iS] = iHY ))

  179.         fi

  180.         #draw snake header
  181.         echo -ne "\33[1m\33[33m"
  182.         (( pX = 2 * iHX + iLeft + 1 ))
  183.         (( pY = iHY + iTop + 1 ))
  184.         (( pM = iHY * iWidth + iHX ))
  185.         (( iMap[$pM] = 1 ))
  186.         echo -ne "\33["$pY";"$pX"H[]"
  187.         echo -ne "\33["$iCursor";1H"
  188.         echo -ne "\33[0m"

  189.         (( iS = iNextP ))
  190. }

  191. trap "if (( iDir != 3 && iDir != 0 )); then iDirection=1; fi" 36
  192. trap "if (( iDir != 4 )); then iDirection=2; fi" 37
  193. trap "if (( iDir != 1 )); then iDirection=3; fi" 38
  194. trap "if (( iDir != 2 )); then iDirection=4; fi" 39
  195. trap "exit" 40

  196. InitDraw

  197. (( iNanoSec = iSpeed * 1000000 ))
  198. iTime="1"`date +"%S%N"`
  199. while [[ 1 ]]
  200. do
  201.         usleep 100000
  202.         iTimeNew="1"`date +"%S%N"`
  203.        
  204.         #avoid iTimeNew < iTime when new minute comes
  205.         if (( iTimeNew < iTime ))
  206.         then
  207.                 (( iTime = iTime - 60000000000 ))
  208.         fi
  209.        
  210.         #detect the time interval
  211.         if (( iTimeNew - iTime < iNanoSec )); then continue; fi
  212.         iTime=$iTimeNew
  213.                
  214.         iDir=$iDirection
  215.        
  216.         if (( iDir != 0 ))
  217.         then
  218.                 ShiftSnake
  219.         fi
  220. done

復(fù)制代碼

論壇徽章:
1
榮譽(yù)版主
日期:2011-11-23 16:44:17
2 [報(bào)告]
發(fā)表于 2003-10-15 18:50 |只看該作者

Shell寫的貪吃蛇游戲

14.gif (5.05 KB, 下載次數(shù): 183)

14.gif

5.gif (4.88 KB, 下載次數(shù): 126)

5.gif

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2003-10-15 20:23 |只看該作者

Shell寫的貪吃蛇游戲

厲害!!

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2003-10-15 20:52 |只看該作者

Shell寫的貪吃蛇游戲

我怎么運(yùn)行不了呢?
在函數(shù)function AllExit()和function RandomHeader()之間的那段代碼是什么意思?

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2003-10-16 08:54 |只看該作者

Shell寫的貪吃蛇游戲

一運(yùn)行就這樣:
sub

|==============================|
|                              |
|                              |
|                              |
|                              |
|                              |
|                              |
|                              |
|            [][][]./snake: != 1 : syntax error: operand expected (error token is "!= 1 "
./snake: != 1 : syntax error: operand expected (error token is "!= 1 "
./snake: != 1 : syntax error: operand expected (error token is "!= 1 "
./snake: != 1 : syntax error: operand expected (error token is "!= 1 "
./snake: != 1 : syntax error: operand expected (error token is "!= 1 "
./snake: != 1 : syntax error: operand expected (error token is "!= 1 "
./snake: != 1 : syntax error: operand expected (error token is "!= 1 "
./snake: != 1 : syntax error: operand expected (error token is "!= 1 "
./snake: != 1 : syntax error: operand expected (error token is "!= 1 "
./snake: != 1 : syntax error: operand expected (error token is "!= 1 "
./snake: != 1 : syntax error: operand expected (error token is "!= 1 ")
./snake: ((: 111%N: division by 0 (error token is "N")token is "!= 1 ")
./snake: ((: 111%N: division by 0 (error token is "N")token is "!= 1 ")
./snake: ((: 111%N: division by 0 (error token is "N")token is "!= 1 ")
./snake: ((: 111%N: division by 0 (error token is "N")token is "!= 1 ")
./snake: ((: 111%N: division by 0 (error token is "N")token is "!= 1 ")
./snake: ((: 111%N: division by 0 (error token is "N")token is "!= 1 ")
./snake: ((: 111%N: division by 0 (error token is "N")token is "!= 1 ")
./snake: ((: 111%N: division by 0 (error token is "N")token is "!= 1 ")
./snake: ((: 111%N: division by 0 (error token is "N")token is "!= 1 ")
./snake: ((: 111%N: division by 0 (error token is "N")
./snake: ((: 112%N: division by 0 (error token is "N")
./snake: ((: 112%N: division by 0 (error token is "N")
./snake: ((: 112%N: division by 0 (error token is "N")
./snake: ((: 112%N: division by 0 (error token is "N")
./snake: ((: 112%N: division by 0 (error token is "N")
./snake: ((: 112%N: division by 0 (error token is "N")
./snake: ((: 112%N: division by 0 (error token is "N")

./snake: ((: 112%N: division by 0 (error token is "N")

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2003-10-16 09:06 |只看該作者

Shell寫的貪吃蛇游戲

剛才修改了一下,解決了退出后屏幕變亂的問題。

我在linux8.0 + bash上調(diào)試的,
你的運(yùn)行環(huán)境是什么,我去試一下。

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2003-10-16 09:47 |只看該作者

Shell寫的貪吃蛇游戲

很好,由其是編程的巧妙, 利用kill singal和trap 完成輸入的控制, 不錯(cuò)不錯(cuò).

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2003-10-16 09:48 |只看該作者

Shell寫的貪吃蛇游戲

在函數(shù)function AllExit()和function RandomHeader()之間的那段代碼是什么意思?


是這么想的:
根據(jù)命令行參數(shù)的不同,把這個(gè)shell作為兩個(gè)程序運(yùn)行。
一個(gè)用于讀取鍵盤輸入,
并向另一個(gè)發(fā)送36-40的信號(hào),
通知他上下左右和退出的消息。
另一個(gè)是貪吃蛇的主執(zhí)行程序。

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2003-10-16 11:15 |只看該作者

Shell寫的貪吃蛇游戲

在solaris 8上運(yùn)行,報(bào)read命令錯(cuò)誤
tanchishe: read: illegal option: -n
read: usage: read [-r] [-p prompt] [-a array] [-e] [name ...]

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2003-10-16 11:27 |只看該作者

Shell寫的貪吃蛇游戲

[quote]原帖由 "smileinwind"]][/quote 發(fā)表:


這應(yīng)該是bash的用法,solaris 8有bash嗎?我沒有找到啊
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP