免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6116 | 回复: 4
打印 上一主题 下一主题

shell编的小游戏 猜数字 文曲星怀旧版 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-04 23:21 |只看该作者 |倒序浏览
下午编的一个小游戏,猜数字,和文曲星上的一样。
玩法介绍:  来自百度百科:http://baike.baidu.com/view/358630.htm
猜数字
  猜数字可以算是一种益智类小游戏,一般两个人玩,也可以由一个人和电脑玩,可以在纸上、在网上都可以玩。这种游戏规则简单,但可以考验人的严谨和耐心。
  目录
  1 规则
  1.1 次数限制
  1.2 含重复数字的猜数字
  2 解法
  2.1 计算机解
  2.2 推理解
  2.3 代入解
  2.4 其他
  3 参看
  规则
  这个游戏的规则比较简单,一般两个人玩,一方出数字,一方猜。出数字的人要想好一个没有重复数字的4位数,不能让猜得人知道。猜的人就可以开始猜。每猜一个数字,出数者就要根据这个数字给出几A几B,其中A前面的数字表示位置正确的数的个数,而B前的数字表示数字正确而位置不对的数的个数。
  如正确答案为5234,而猜的人猜5346,则是1A2B,其中有一个5的位置对了,记为1A,而3和4这两个数字对了,而位置没对,因此记为2B,合起来就是1A2B。
  接着猜的人再根据出题者的几A几B继续猜,直到猜中为止。
  次数限制
  有的时候,这个游戏有猜测次数上的限制。根据计算机测算,这个游戏,如果以最严谨的计算,任何数字可以在7次之内猜出。而有些地方把次数限制为6次或更少,则会导致有些数可能猜不出来。而有些地方考虑到人的逻辑思维难以达到计算机的那么严谨,故设置为8次甚至10次。也有的没有次数上的限制。

    贴上代码:
  1. #!/bin/bash
  2. echo "">~/answ.txt
  3. clear
  4. echo "###############################################################################"
  5. echo "#       just a game by [email]kkmangnn@gmail.com[/email]"
  6. echo "#       my blog: [url]http://hi.baidu.com/way2rhce[/url]"
  7. echo "###############################################################################"


  8. random ()
  9. {
  10. FLOOR=0
  11. RANGE=10
  12. num=0
  13. while [ $num -le $FLOOR ]
  14. do
  15.   num=$RANDOM
  16.   let "num %= $RANGE"  # Scales $number down within $RANGE.
  17.   done
  18. #  echo "Random number between $FLOOR and $RANGE ---  $number"
  19. #  echo
  20. return
  21. }
  22. random
  23. #####
  24. D1=$num
  25. random
  26. D2=$num
  27. while [ $D2 == $D1 ]
  28. do      random
  29.         D2=$num
  30. done
  31. random
  32. D3=$num
  33. while [ $D3 == $D2 ]||[ $D3 == $D1 ]
  34. do      random
  35.         D3=$num
  36. done
  37. random
  38. D4=$num
  39. while [ $D4 == $D3 ]||[ $D4 == $D2 ]||[ $D4 == $D1 ]
  40. do      random
  41.         D4=$num
  42. done
  43. #echo $D1 $D2 $D3 $D4  #########  This is for test

  44. input_num ()
  45. {
  46. echo
  47. echo "Please input four different numbers between 1~9 ( Just like this \"5 2 1 4\" ) "
  48. read S1 S2 S3 S4

  49. }
  50. zero ()
  51. {
  52. while [ $S1 == 0 ]|| [ $S2 == 0 ]||[ $S3 == 0 ]||[ $S4 == 0 ]
  53.         do echo "zero is not allowd"
  54.         input_num
  55. done
  56. }

  57. input_num
  58. zero
  59. while [ $S1 == $S2 ]||[ $S1 == $S3 ]||[ $S1 == $S4 ]||[ $S2 == $S3 ]||[ $S2 == $S4 ]||[ $S3 == $S4 ]
  60. do     echo "wrong input"
  61.         input_num
  62. done

  63. echo $S1 $S2 $S3 $S4

  64. declare A
  65. declare B
  66. compare ()
  67. {
  68. A=0
  69. B=0
  70. if [ $S1 == $D1 ]
  71.    then let A=$A+1
  72.         elif [ $S1 == $D2 ]||[ $S1 == $D3 ]||[ $S1 == $D4 ]
  73.                 then let  B=$B+1
  74.         fi
  75. if [ $S2 == $D2 ]
  76.    then let A=$A+1
  77.         elif [ $S2 == $D1 ]||[ $S2 == $D3 ]||[ $S2 == $D4 ]
  78.                 then let B=$B+1
  79.         fi
  80. if [ $S3 == $D3 ]
  81.    then let A=$A+1
  82.         elif [ $S3 == $D1 ]||[ $S3 == $D2 ]||[ $S3 == $D4 ]
  83.                 then let B=$B+1
  84.         fi
  85. if [ $S4 == $D4 ]
  86.    then let A=$A+1
  87.         elif [ $S4 == $D1 ]||[ $S4 == $D2 ]||[ $S4 == $D3 ]
  88.                 then let B=$B+1
  89.         fi

  90. clear
  91. echo "$S1 $S2 $S3 $S4   $A"A" $B"B"       ">>~/answ.txt
  92. /bin/cat ~/answ.txt

  93. while [ $A -lt 4 ]
  94.         do  input_num
  95.         compare
  96.         done
  97. if [ $A == 4 ]
  98.         then echo " Congratulation, you are very good "
  99. fi
  100. return

  101. }
  102. compare

  103.      
复制代码

论坛徽章:
0
2 [报告]
发表于 2009-09-04 23:30 |只看该作者
写的比较繁琐,明天优化下。
基本的功能实现了。
想起以前拿文曲星天天玩这个游戏,玩到做梦都想XAXB的,甚至有段时间看到车牌,马上想到是几A几B。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
3 [报告]
发表于 2009-09-05 12:12 |只看该作者
强!~

论坛徽章:
0
4 [报告]
发表于 2009-09-05 12:51 |只看该作者
厉害!

论坛徽章:
0
5 [报告]
发表于 2009-09-05 12:59 |只看该作者
感谢支持啦。回头把windows下可以运行的一个版本(别人写的)放上来。哈:wink:

[ 本帖最后由 kkmangnn 于 2009-9-5 17:29 编辑 ]

Guesssz.rar

9.75 KB, 下载次数: 81

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP