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

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

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
樓主: 飛灰橙
打印 上一主題 下一主題

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

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

Shell寫的貪吃蛇游戲

默認(rèn)是沒有的
但是我在機(jī)器上裝了一個

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

Shell寫的貪吃蛇游戲

其它shell可以嗎?我想在死狗上試試........

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

Shell寫的貪吃蛇游戲

我是hp的主機(jī),但是具體是什么我也不知道

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

Shell寫的貪吃蛇游戲

佩服

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

Shell寫的貪吃蛇游戲

ohwww,
我拿個老一點(diǎn)的bash試了一下
GNU bash, version 2.05a.0(1)-release (i686-pc-linux-gnu),
出的錯誤和你一樣。
原因居然是,

1. 數(shù)組賦值
     (( iMap[3] = 0 ))這樣不管了
     改成iMap[3]=0通過
2. date命令中不支持-N參數(shù),
     改成直接usleep實(shí)現(xiàn)延時

謝謝你的寶貴的測試結(jié)果:)

新改的版本:(增加可以通過方向鍵控制方向和兩次ESC退出)

  1. #!/bin/bash

  2. ac=(0 0 0)
  3. cESC=`echo -ne "\33"`
  4. echo -ne "\33[?25l"
  5. function DetectInput
  6. {
  7.        
  8.         while [[ 1 ]]
  9.         do
  10.                 read -s -n 1 c
  11.                 ac[0]=${ac[1]}
  12.                 ac[1]=${ac[2]}
  13.                 ac[2]=$c
  14.                 echo -ne "\r          \r"
  15.        
  16.                 ks=0
  17.                 if [[ ${ac[1]} == $cESC && ${ac[2]} == $cESC ]]
  18.                 then
  19.                         ks=-1
  20.                 elif [[ ${ac[0]} == $cESC && ${ac[1]} == "[" ]]
  21.                 then
  22.                         if [[ $c == 'A' ]]; then ks=37;
  23.                         elif [[ $c == 'D' ]]; then ks=36;
  24.                         elif [[ $c == 'B' ]]; then ks=39;
  25.                         elif [[ $c == 'C' ]]; then ks=38;
  26.                         fi
  27.                 else
  28.                         if [[ $c == "a" || $c == "j" || $c == "A" || $c == "J" ]]
  29.                         then
  30.                                 ks=36
  31.                         elif [[ $c == "w" || $c == "i" || $c == "W" || $c == "I" ]]
  32.                         then
  33.                                 ks=37               
  34.                         elif [[ $c == "d" || $c == "l" || $c == "D" || $c == "L" ]]
  35.                         then
  36.                                 ks=38
  37.                         elif [[ $c == "s" || $c == "k" || $c == "S" || $c == "K" ]]
  38.                         then
  39.                                 ks=39
  40.                         elif [[ $c == "q" || $c == "Q" ]]
  41.                         then
  42.                                 ks=-1
  43.                         fi
  44.                 fi
  45.                
  46.                 if [[ $ks == -1 ]]
  47.                 then
  48.                         echo Quit.
  49.                         AllExit
  50.                 elif [[ $ks != 0 ]]
  51.                 then
  52.                         kill -$ks $pidShowSnake
  53.                 fi
  54.         done
  55. }

  56. sSaveStty=`stty -g`
  57. function MyExit
  58. {
  59.         echo -ne "\33[?25h"
  60.         stty $sSaveStty
  61.         exit
  62. }

  63. function AllExit
  64. {
  65.         kill -40 $pidShowSnake
  66.         MyExit
  67. }


  68. if [[ $1 != "--showsnake" ]]
  69. then
  70.         eval $0" --showsnake "$$"&"
  71.         trap "MyExit" TERM
  72.         trap "AllExit" INT
  73.         pidShowSnake=$!
  74.         DetectInput
  75.         exit
  76. else
  77.         pidCtlSnake=$2
  78. fi

  79. echo sub


  80. iSpeed=500        #time interval in millisecond
  81. iDirection=0        #1-left, 2-up, 3-right, 4-down
  82. iWidth=15
  83. iHeight=15
  84. iX=(6 7 8)
  85. iY=(7 7 7)
  86. iMap=()
  87. iS=0        #Start pointer in iX

  88. (( iTotalBox = iWidth * iHeight ))
  89. for (( i = 0; i < iTotalBox; i++ ))
  90. do
  91.         iMap[$i]=0
  92. done

  93. function RandomHeader
  94. {
  95.         (( iNew = RANDOM % ( iTotalBox - ${#iX[@]} ) ))

  96.         for (( iNewP = 0, i = 0; iNewP < iTotalBox && i < iNew; iNewP++))
  97.         do
  98.                 if (( ${iMap[$iNewP]} != 1 )); then (( i++ )); fi
  99.         done
  100.         while (( ${iMap[$iNewP]} == 1 )); do (( iNewP++ )); done

  101.         (( iNewX = iNewP % iWidth ))
  102.         (( iNewY = (iNewP - iNewX) / iWidth ))

  103.         echo -ne "\33[1m\33[35m\33[45m"
  104.         (( pX = 2 * iNewX + iLeft + 1 ))
  105.         (( pY = iNewY + iTop + 1 ))
  106.         echo -ne "\33["$pY";"$pX"H[]"
  107.         echo -ne "\33["$iCursor";1H"
  108.         echo -ne "\33[0m"
  109. }

  110. function InitDraw
  111. {
  112.         clear
  113.        
  114.         (( iTop = 1 ))
  115.         (( iBottom = iTop + iHeight + 1 ))
  116.         (( iLeft = 1 ))
  117.         (( iRight = iLeft + iWidth + iWidth + 1 ))
  118.         (( iCursor = iBottom + 1 ))
  119.        
  120.         echo -ne "\33[1m\33[32m\33[42m"
  121.         for (( i = iLeft + 1; i < iWidth + iWidth + iLeft + 1; i++ ))
  122.         do
  123.                 echo -ne "\33["$iTop";"$i"H="
  124.                 echo -ne "\33["$iBottom";"$i"H="
  125.         done
  126.         for (( i = iTop; i < iHeight + iTop + 2; i++ ))
  127.         do
  128.                 echo -ne "\33["$i";"$iLeft"H|"
  129.                 echo -ne "\33["$i";"$iRight"H|"
  130.         done
  131.         echo -ne "\33["$iCursor";1H"
  132.         echo -ne "\33[0m"

  133.         echo -ne "\33[1m\33[33m\33[43m"
  134.         for (( i = 0; i < ${#iX[@]}; i++ ))
  135.         do
  136.                 (( pX = 2 * ${iX[$i]} + iLeft + 1 ))
  137.                 (( pY = ${iY[$i]} + iTop + 1 ))
  138.                 (( pM = ${iY[$i]} * iWidth + ${iX[$i]} ))
  139.                 iMap[$pM]=1
  140.                 echo -ne "\33["$pY";"$pX"H[]"
  141.         done
  142.         echo -ne "\33["$iCursor";1H"
  143.         echo -ne "\33[0m"
  144.        
  145.         RandomHeader
  146. }


  147. function ShiftSnake
  148. {
  149.         (( iLastP = iS - 1 ))
  150.         if (( iLastP < 0 )); then ((iLastP = ${#iX[@]} - 1 )); fi
  151.                
  152.         if (( iDir == 1 ))        #left
  153.         then
  154.                 (( iHX = ${iX[$iLastP]} - 1 ))
  155.                 (( iHY = ${iY[$iLastP]} ))
  156.         elif (( iDir == 2 ))        #up
  157.         then
  158.                 (( iHX = ${iX[$iLastP]} ))
  159.                 (( iHY = ${iY[$iLastP]} - 1 ))
  160.         elif (( iDir == 3 ))        #right
  161.         then
  162.                 (( iHX = ${iX[$iLastP]} + 1 ))
  163.                 (( iHY = ${iY[$iLastP]} ))
  164.         elif (( iDir == 4 ))        #down
  165.         then
  166.                 (( iHX = ${iX[$iLastP]} ))
  167.                 (( iHY = ${iY[$iLastP]} + 1 ))       
  168.         fi
  169.        
  170.         bOver=0
  171.         if (( iHX < 0 || iHY < 0 || iHX >= iWidth || iHY >= iHeight )); then bOver=1;fi
  172.         if (( bOver == 0 )); then
  173.                 if (( ${iMap[iHY * iWidth + iHX]} == 1 )); then        bOver=1; fi
  174.         fi

  175.         if (( bOver == 1 ))
  176.         then
  177.                 kill $pidCtlSnake
  178.                 (( iBottom = iBottom + 1 ))
  179.                 echo -e "\33["$iBottom";0HGame over! (Score: "${#iX[@]}"00)\33[0m"
  180.                 exit 0;
  181.         fi
  182.        
  183.        
  184.         #check if catch the new box
  185.         if (( iHX == iNewX && iHY == iNewY ))
  186.         then
  187.                 for (( i = ${#iX[@]}; i > iS; i-- ))
  188.                 do
  189.                         (( j = $i - 1 ))
  190.                         iX[$i]=${iX[$j]}
  191.                         iY[$i]=${iY[$j]}
  192.                 done
  193.                 iX[$iS]=$iHX
  194.                 iY[$iS]=$iHY

  195.                 (( iNextP = iS + 1 ))
  196.                 if (( iNextP >= ${#iX[@]} )); then iNextP=0; fi       
  197.                
  198.                 echo -ne "\a"
  199.                 RandomHeader
  200.         else
  201.                 (( iNextP = iS + 1 ))
  202.                 if (( iNextP >= ${#iX[@]} )); then iNextP=0; fi       
  203.        
  204.                 #clear snake tailer
  205.                 (( pX = 2 * ${iX[$iS]} + iLeft + 1 ))
  206.                 (( pY = ${iY[$iS]} + iTop + 1 ))
  207.                 (( pM = ${iY[$iS]} * iWidth + ${iX[$iS]} ))

  208.                 iMap[$pM]=0
  209.                 echo -ne "\33["$pY";"$pX"H  "
  210.                 iX[$iS]=$iHX
  211.                 iY[$iS]=$iHY
  212.         fi

  213.         #draw snake header
  214.         echo -ne "\33[1m\33[33m\33[43m"
  215.         (( pX = 2 * iHX + iLeft + 1 ))
  216.         (( pY = iHY + iTop + 1 ))
  217.         (( pM = iHY * iWidth + iHX ))
  218.         iMap[$pM]=1
  219.         echo -ne "\33["$pY";"$pX"H[]"
  220.         echo -ne "\33["$iCursor";1H"
  221.         echo -ne "\33[0m"

  222.         (( iS = iNextP ))
  223. }

  224. trap "if (( iDir != 3 && iDir != 0 )); then iDirection=1; fi" 36
  225. trap "if (( iDir != 4 )); then iDirection=2; fi" 37
  226. trap "if (( iDir != 1 )); then iDirection=3; fi" 38
  227. trap "if (( iDir != 2 )); then iDirection=4; fi" 39
  228. trap "exit;" 40

  229. InitDraw

  230. (( iUSec = iSpeed * 1000 ))
  231. while [[ 1 ]]
  232. do
  233.         usleep $iUSec
  234.         #sleep 1
  235.        
  236.         iDir=$iDirection
  237.        
  238.         if (( iDir != 0 ))
  239.         then
  240.                 ShiftSnake
  241.         fi
  242. done

復(fù)制代碼

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

Shell寫的貪吃蛇游戲

牛!

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

Shell寫的貪吃蛇游戲

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

Shell寫的貪吃蛇游戲

[quote]原帖由 "飛灰橙"][/quote 發(fā)表:
     ok,這次沒有問題啦,呵呵,謝謝樓主,以后可以玩啦。不過提點(diǎn)意見啊,按鍵的時候能不能不讓方向鍵在下面閃??

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

Shell寫的貪吃蛇游戲

我下載了存到文本文件里,ftp到unix上運(yùn)行,出錯"usleep: command not found",需要c編譯器支持嗎?

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

Shell寫的貪吃蛇游戲

[quote]原帖由 "ohwww"]    ok,這次沒有問題啦,呵呵,謝謝樓主,以后可以玩啦。不過提點(diǎn)意見啊,按鍵的時候能不能不讓方向鍵在下面閃??[/quote 發(fā)表:


謝謝,隱藏光標(biāo)加到第二個代碼中了。不過還是偶爾會閃出輸入的字符來。


  1. 隱藏光標(biāo)
  2. echo -ne "\33[?25l"
  3. 顯示光標(biāo)
  4. echo -ne "\33[?25h"
復(fù)制代碼
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP