Board logo

标题: [特效代码] [分享][已更新]批处理吃苹果游戏6.0 [打印本页]

作者: zcydez    时间: 2010-6-22 15:28     标题: [分享][已更新]批处理吃苹果游戏6.0

注:本程序必须依靠Choice.exe(在附件里)!!!

添加了再玩一次的机制。
改变了部分算法。


玩法:
按字母键消去对应字母
按1键暂停
按2键退出
(只要苹果落地即 game over)
(可以设定全屏)
(增加计分功能)
  1. @echo off
  2. :begen-cpg-2
  3. title 吃苹果
  4. set j=0
  5. set /p qp=是否全屏?(y/n)
  6. if %qp%==n (
  7. mode con:cols=16 lines=14
  8. goto tg
  9. ) else (
  10. if %qp%==y (goto qp) else (echo 输入错误!&%0))
  11. :qp
  12. echo exit|%ComSpec% /k prompt e 100 B4 00 B0 12 CD 10 B0 03 CD 10 CD 20 $_g$_q$_|debug>nul
  13. chcp 437>nul
  14. graftabl 936>nul
  15. :tg
  16. color 71
  17. set main=                                                                                                               
  18. set /p time=请输入字母掉落延长时间(单位:秒):
  19. :begen
  20. ::随机抽取字母(由于是新手,方法难免有点……)
  21. set /a k=%random%%%10
  22. set /a z=%random%%%26
  23. set str=abcdefghijklmnopqrstuvwxyz
  24. setlocal EnableDelayedExpansion
  25. set z=!str:~%z%,1!
  26. setlocal
  27. if %k%==0 set l=%z%         
  28. if %k%==1 set l= %z%        
  29. if %k%==2 set l=  %z%      
  30. if %k%==3 set l=   %z%      
  31. if %k%==4 set l=    %z%     
  32. if %k%==5 set l=     %z%   
  33. if %k%==6 set l=      %z%   
  34. if %k%==7 set l=       %z%  
  35. if %k%==8 set l=        %z%
  36. if %k%==9 set l=         %z%
  37. set main=%l%%main:~0,-10%
  38. set over=%main:~100,10%
  39. cls
  40. echo.得分:%j%分
  41. echo. ┌─────┐
  42. echo. │%main:~0,10%│
  43. echo. │%main:~10,10%│
  44. echo. │%main:~20,10%│
  45. echo. │%main:~30,10%│
  46. echo. │%main:~40,10%│
  47. echo. │%main:~50,10%│
  48. echo. │%main:~60,10%│
  49. echo. │%main:~70,10%│
  50. echo. │%main:~80,10%│
  51. echo. │%main:~90,10%│
  52. echo. └─────┘
  53. :choice
  54. choice /c abcdefghijklmnopqrstuvwxyz0123456789 /cs /t %time% /d 0 /n>nul
  55. set /a j=j+1
  56. set jr=%errorlevel%
  57. if %errorlevel%==1 set jr=a
  58. if %errorlevel%==2 set jr=b
  59. if %errorlevel%==3 set jr=c
  60. if %errorlevel%==4 set jr=d
  61. if %errorlevel%==5 set jr=e
  62. if %errorlevel%==6 set jr=f
  63. if %errorlevel%==7 set jr=g
  64. if %errorlevel%==8 set jr=h
  65. if %errorlevel%==9 set jr=i
  66. if %errorlevel%==10 set jr=j
  67. if %errorlevel%==11 set jr=k
  68. if %errorlevel%==12 set jr=l
  69. if %errorlevel%==13 set jr=m
  70. if %errorlevel%==14 set jr=n
  71. if %errorlevel%==15 set jr=o
  72. if %errorlevel%==16 set jr=p
  73. if %errorlevel%==17 set jr=q
  74. if %errorlevel%==18 set jr=r
  75. if %errorlevel%==19 set jr=s
  76. if %errorlevel%==20 set jr=t
  77. if %errorlevel%==21 set jr=u
  78. if %errorlevel%==22 set jr=v
  79. if %errorlevel%==23 set jr=w
  80. if %errorlevel%==24 set jr=x
  81. if %errorlevel%==25 set jr=y
  82. if %errorlevel%==26 set jr=z
  83. if %errorlevel%==28 (echo 暂停中&pause&goto choice)
  84. if %errorlevel%==29 goto exit
  85. setlocal enabledelayedexpansion
  86. set setin=%main%&set change=!setin:%jr%= !&set main=!change!
  87. if not "%over%"=="          " goto over
  88. goto begen
  89. :over
  90. cls
  91. echo.s=msgbox("游戏结束!"^&vbcrlf^&"得分:%j%"^&vbcrlf^&"继续努力哦!"^&vbcrlf^&"是否再玩?",4,"游戏结束"^)>temp.vbs
  92. echo.createobject("scripting.filesystemobject").createtextfile("temp.tmpfile").write s>>temp.vbs
  93. call temp.vbs
  94. del /f /q temp.vbs
  95. for /f %%x in (temp.tmpfile) do (set xz=%%x)
  96. del /f /q temp.tmpfile
  97. if "%xz%"=="7" goto exit
  98. if "%xz%"=="6" goto begen-cpg-2
  99. :exit
  100. cls
  101. echo.谢谢使用!
  102. ping -n 2 127.0.1>nul
  103. exit
复制代码
[ 本帖最后由 zcydez 于 2010-8-5 13:11 编辑 ]
作者: gxuan2008    时间: 2010-6-22 15:42

试了下,还不错。
时间设置>=1S时好象很慢,设置<1S时太快了,还没看清就game over了。
取字母的时间可以先把26个字母先设置成变量再取吧?
  1. set str=abcdefghijklmnopqrstuvwxyz
  2. set z=!str:~%z%,1!
复制代码
把取字母的IF改成这样,试了下可以。但刚开始的时候会出现!str:~X,1!不知道为什么。

[ 本帖最后由 gxuan2008 于 2010-6-22 15:56 编辑 ]
作者: 523066680    时间: 2010-6-24 10:12

报告:
玩家的电脑可能没有choice.exe  ,要提示一下才好。

然后是一般游戏要有个再来一次的机制,不是说结束了就退出了。

又试了几次,在没有choice的情况下,它一直往下落,我没有按键,分数一直累加。
下载了choice
发现有时候打中了却提示game over,   再加份游戏说明吧。

[ 本帖最后由 523066680 于 2010-6-24 10:21 编辑 ]
作者: zcydez    时间: 2010-8-5 13:13

  1. set str=abcdefghijklmnopqrstuvwxyz
  2. set z=!str:~%z%,1!
复制代码
把取字母的IF改成这样,试了下可以。但刚开始的时候会出现!str:~X,1!不知道为什么。]

先感谢gxuan2008新提出的算法。gxuan2008的算法虽然有点瑕疵,但是用变量延迟解决了。

[ 本帖最后由 zcydez 于 2010-8-5 13:14 编辑 ]
作者: 523066680    时间: 2010-8-5 15:46

嗯。。。。   对具体思路不了解,不敢乱改

@echo off
:begen-cpg-2
title 吃苹果
set j=0
set /p qp=是否全屏?(y/n)
if %qp%==n (
      mode con:cols=16 lines=14
      goto tg
) else (
     if %qp%==y (goto qp) else (echo 输入错误!&%0)
)
:qp
echo exit|%ComSpec% /k prompt e 100 B4 00 B0 12 CD 10 B0 03 CD 10 CD 20 $_g$_q$_|debug>nul
chcp 437>nul
graftabl 936>nul
:tg
color 71
set main=                                                                                                               
set /p time=请输入字母掉落延长时间(单位:秒):
:begen
::随机抽取字母(由于是新手,方法难免有点……)
set /a k=%random%%%10
set /a z=%random%%%26
set str=abcdefghijklmnopqrstuvwxyz
setlocal EnableDelayedExpansion
set z=!str:~%z%,1!
setlocal
set "space=         "
set l=!space:~0,%k%!%z%!space:~%k%!
set main=%l%%main:~0,-10%
set over=%main:~100,10%
cls
echo.得分:%j%分
echo. ┌─────┐
echo. │%main:~0,10%│
echo. │%main:~10,10%│
echo. │%main:~20,10%│
echo. │%main:~30,10%│
echo. │%main:~40,10%│
echo. │%main:~50,10%│
echo. │%main:~60,10%│
echo. │%main:~70,10%│
echo. │%main:~80,10%│
echo. │%main:~90,10%│
echo. └─────┘
:choice
choice /c abcdefghijklmnopqrstuvwxyz0123456789 /cs /t %time% /d 0 /n>nul
set /a j=j+1,tmpchoic=%errorlevel%-1
set jr=%errorlevel%
for /l %%a in (1,1,26) do (
      if %errorlevel% equ %%a (set jr=!str:~%tmpchoic%,1!)
)
if %errorlevel%==28 (echo 暂停中&pause&goto choice)
if %errorlevel%==29 goto exit
setlocal enabledelayedexpansion
set setin=%main%&set change=!setin:%jr%= !&set main=!change!
if not "%over%"=="          " goto over
goto begen
ver
  cls
  echo.s=msgbox("游戏结束!"^&vbcrlf^&"得分:%j%"^&vbcrlf^&"继续努力哦!"^&vbcrlf^&"是否再玩?",4,"游戏结束"^)>temp.vbs
  echo.createobject("scripting.filesystemobject").createtextfile("temp.tmpfile").write s>>temp.vbs
  call temp.vbs
  del /f /q temp.vbs
  for /f %%x in (temp.tmpfile) do (set xz=%%x)
  del /f /q temp.tmpfile
  if "%xz%"=="7" goto exit
  if "%xz%"=="6" goto begen-cpg-2
:exit
  cls
  echo.谢谢使用!
  ping -n 2 127.0.1>nul
  exit


[ 本帖最后由 523066680 于 2010-8-5 15:49 编辑 ]




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2