[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[游戏娱乐] 俄罗斯方块游戏批处理

本游戏需要choice.exe三方工具

第一版,只有基本图标方块
  1. @echo off&rem 俄罗斯方块游戏,由netbenton编写,在bathome首发,完成时间:2009年9月25日 ver 1.0
  2. if "%1" equ "para2" goto :para2
  3. set "d-v=for /l %%a in (0,1,#) do set/a one=0x!str:~%%a,1!,x=one/4+n,y=one%%4+m&(for %%b in ("r!x!.!y!") do if "!%%~b!" equ " " (set r!x!.!y!=■) else (set err=1))"
  4. ::函数d-v,把str中的图标数据,放置到总坐标空间中,如果有覆盖,则err=1。调用方法:(%d-v:#=图标点数%)
  5. ::变量使用:one  x  y
  6. set "d-e=set aec=!cr!!cr! ┌───────────┐!cr!&(for /l %%a in (2,1,#) do for %%b in ("│!ebuf:@=%%a!│  !ebu%%a!") do set aec=!aec! %%~b!cr!)&cls&echo;!aec! └───────────┘"
  7. ::函数d-e,把总坐标空间显示出来,调用方法:(%d-e:#=行数%)
  8. set ebu4=第!guan!关
  9. set ebu6=总分:!fen!
  10. set cr=^
  11. ::各种图标定义
  12. set ga1=0156
  13. set ga2=1458
  14. ::■■
  15. ::  ■■
  16. set gb1=1245
  17. set gb2=0459
  18. ::  ■■
  19. ::■■
  20. set za1=4567
  21. set za2=159d
  22. ::■■■■
  23. set qa1=1598
  24. set qa2=0456
  25. set qa3=0148
  26. set qa4=0126
  27. ::■■
  28. ::  ■
  29. ::  ■
  30.   
  31. set qb1=0489
  32. set qb2=0124
  33. set qb3=0159
  34. set qb4=2456
  35. ::■■
  36. ::■
  37. ::■
  38. ::cdef
  39. ::89ab
  40. ::4567
  41. ::0123
  42. set ta1=0145
  43. ::■■
  44. ::■■
  45. set sa1=0125
  46. set sa2=1459
  47. set sa3=1456
  48. set sa4=0458
  49. ::  ■
  50. ::■■■
  51. echo 0 2 >%~n0.tmp
  52. start "aswd" %0 para2
  53. ::起动控制窗口
  54. set k3=k%%=mx,k+
  55. set k4=down
  56. set k1=m-
  57. set k2=m+
  58. set k5=t+
  59. ::按键定义
  60. setlocal enabledelayedexpansion
  61. for /l %%a in (0,1,10) do (set "ebuf=!ebuf!^!r@.%%a^!")
  62. for %%a in (sa_4 ta_1 qb_4 qa_4 za_2 ga_2 gb_2) do (
  63. for /f "tokens=1,2 delims=_" %%b in ("%%a") do (
  64.   set _%%b=%%c
  65.   for /l %%d in (1,1,%%c) do set/a nx+=1&set ran!nx!=%%b%%d
  66. )
  67. )
  68. ::定义各种图型的可变型数,及单个图的随机号
  69. :restart
  70. for /l %%a in (0,1,18) do (for /l %%b in (0,1,10) do set r%%a.%%b= )
  71. set/a fen=0,guan=1
  72. ::初始化坐标空间18行,10列
  73. :loop
  74. set/a "m=4,t=2,n=1,down=450/(guan<<2),bti=0"
  75. set/a r=!random!%%nx+1
  76. set err=
  77. set ttr=!_ttr!
  78. set _ttr=!ran%r%!
  79. ::随机取一个图标,
  80. if not defined ttr goto :loop
  81. set mx=!_%ttr:~,2%!
  82. set k=%ttr:~2%
  83. set str=!%ttr%!
  84. set _str=!%_ttr%!
  85. setlocal enabledelayedexpansion
  86. for /l %%a in (0,1,3) do set/a one=0x!_str:~%%a,1!,x=one/4+8,y=one%%4&set kk!x!.!y!=■
  87. for /l %%a in (8,1,11) do for /l %%b in (0,1,3) do (
  88. if defined kk%%a.%%b (set kk%%a=!kk%%a!!kk%%a.%%b!) else (set kk%%a=!kk%%a! )
  89. )
  90. endlocal&set ebu8=%kk8%&set ebu9=%kk9%&set ebu10=%kk10%&set ebu11=%kk11%
  91. ::对预备图标的处理
  92. :cont
  93. set/p var=<%~n0.tmp
  94. for /f "tokens=1,2" %%a in ("%var%") do (
  95. if %%a neq !test! (
  96.   if %%b geq 6 call :error %%b&del /q %~n0.tmp&exit
  97.   set bs=!str!&set/a bm=m,bk=k
  98.   set/a !k%%b!=1
  99.   if "%%b" equ "3" (for %%b in ("!ttr:~,2!!k!") do set str=!%%~b!)
  100.   setlocal enabledelayedexpansion
  101.   (%d-v:#=3%)
  102.   rem 调用函数把图标点放置到总坐标空间
  103.   if defined err (
  104.    endlocal
  105.    set/a m=bm,k=bk
  106.    set str=!bs!
  107.   ) else (
  108.    (%d-e:#=18%)
  109.    rem 调用显示函数
  110.    endlocal
  111.   )
  112. )
  113. set test=%%a
  114. )
  115. set ti=1!time:~7,1!!time:~9,2!
  116. if !ti! lss !bti! (set /a tn=ti-bti+1000) else (set /a tn=ti-bti)
  117. if !tn! gtr !down! (
  118. set/a bti=ti,n+=1
  119. setlocal enabledelayedexpansion
  120. (%d-v:#=3%)
  121. if defined err (
  122.   endlocal
  123.   goto :jmpout
  124. ) else (
  125.   (%d-e:#=18%)
  126.   endlocal
  127. )
  128. )
  129. for /l %%a in (1,1,25) do ver>nul
  130. goto :cont
  131. :jmpout
  132. set/a n-=1
  133. (%d-v:#=3%)
  134. set m=18
  135. for /l %%a in (18,-1,2) do for %%b in ("!ebuf:@=%%a!") do if "%%~b" neq "■■■■■■■■■■■" (set e!m!=%%~b&set/a m-=1)
  136. if !m! neq 1 (
  137. for /l %%a in (!m!,-1,2) do set "e%%a=           "
  138. for /l %%a in (18,-1,2) do (
  139.   for /l %%b in (0,1,10) do set r%%a.%%b=!e%%a:~%%b,1!
  140. )
  141. set/a "fen=fen+(m-1)*10,guan=fen/150+1"
  142. )
  143. if !n! leq 2 (
  144. echo 游戏结束!
  145. ping -n 3 127.1 >nul
  146. goto :restart
  147. )
  148. goto :loop
  149. :para2
  150. mode con: cols=30 lines=2
  151. echo a左 d右 w转 s加速 q退出
  152. :p_lp
  153. set/a n=n%%10+1
  154. choice /c adwsgq /n >nul
  155. >%~n0.tmp echo;%n% %errorlevel%
  156. if %errorlevel% geq 6 exit
  157. for /l %%a in (1,1,12) do ver>nul
  158. goto :p_lp
  159. :error
  160. if %1 equ 6 echo 谢谢使用,再见。。。
  161. if %1 gtr 6 echo 对不起!choice.exe 文件不存在,不能运行。。。
  162. ping -n 3 127.1 >nul
  163. goto :eof
复制代码
第二版,加入混合图标方块
  1. @echo off&rem 俄罗斯方块游戏,由netbenton编写,在bathome首发,完成时间:2009年9月25日 ver 2.0
  2. if "%1" equ "para2" goto :para2
  3. set "d-v=for %%a in (!str!) do set/a one=0x%%a,x=one/4+n,y=one%%4+m&(for %%b in ("r!x!.!y!") do if "!%%~b!" equ " " (set r!x!.!y!=■) else (set err=1))"
  4. ::函数d-v,把str中的图标数据,放置到总坐标空间中,如果有覆盖,则err=1。调用方法:(%d-v%)
  5. ::变量使用:one  x  y
  6. set "d-e=set aec=!cr!!cr! ┌───────────┐!cr!&(for /l %%a in (2,1,#) do for %%b in ("│!ebuf:@=%%a!│  !ebu%%a!") do set aec=!aec! %%~b!cr!)&cls&echo;!aec! └───────────┘"
  7. ::函数d-e,把总坐标空间显示出来,调用方法:(%d-e:#=行数%)
  8. set ebu4=第!guan!关
  9. set ebu6=总分:!fen!
  10. set cr=^
  11. ::各种图标定义
  12. set ga1=0 1 5 6
  13. set ga2=1 4 5 8
  14. ::■■
  15. ::  ■■
  16. set gb1=1 2 4 5
  17. set gb2=0 4 5 9
  18. ::  ■■
  19. ::■■
  20. set za1=4 5 6 7
  21. set za2=1 5 9 d
  22. ::■■■■
  23. set qa1=1 5 9 8
  24. set qa2=0 4 5 6
  25. set qa3=0 1 4 8
  26. set qa4=0 1 2 6
  27. ::■■
  28. ::  ■
  29. ::  ■
  30.   
  31. set qb1=0 4 8 9
  32. set qb2=0 1 2 4
  33. set qb3=0 1 5 9
  34. set qb4=2 4 5 6
  35. ::■■
  36. ::■
  37. ::■
  38. set ta1=0 1 4 5
  39. ::■■
  40. ::■■
  41. set sa1=0 1 2 5
  42. set sa2=1 4 5 9
  43. set sa3=1 4 5 6
  44. set sa4=0 4 5 8
  45. ::  ■
  46. ::■■■
  47. set tw1=0 1
  48. set tw2=0 4
  49. set on1=0
  50. set on2=0
  51. set sh1=1 4 5 6 9
  52. set sh2=1 4 5 6 9
  53. set ao1=0 1 2 4 6
  54. set ao2=0 1 4 8 9
  55. set ao3=0 4 5 6 2
  56. set ao4=0 1 5 8 9
  57. set tt1=0 1 2 5 9
  58. set tt2=0 4 8 5 6
  59. set tt3=1 5 8 9 a
  60. set tt4=2 4 5 6 a
  61. ::cdef
  62. ::89ab
  63. ::4567
  64. ::0123
  65. echo 0 2 >%~n0.tmp
  66. start "aswd" %0 para2
  67. ::起动控制窗口
  68. set k3=k%%=mx,k+
  69. set k4=down
  70. set k1=m-
  71. set k2=m+
  72. set k5=t+
  73. ::按键定义
  74. setlocal enabledelayedexpansion
  75. for /l %%a in (0,1,10) do (set "ebuf=!ebuf!^!r@.%%a^!")
  76. for %%a in (sa_4 ta_1 qb_4 qa_4 za_2 ga_2 gb_2 tw_2 on_2 sh_2 ao_4 tt_4) do (
  77. for /f "tokens=1,2 delims=_" %%b in ("%%a") do (
  78.   set _%%b=%%c
  79.   for /l %%d in (1,1,%%c) do set/a nx+=1&set ran!nx!=%%b%%d
  80. )
  81. )
  82. ::定义各种图型的可变型数,及单个图的随机号
  83. :restart
  84. for /l %%a in (0,1,18) do (for /l %%b in (0,1,10) do set r%%a.%%b= )
  85. set/a fen=0,guan=1
  86. ::初始化坐标空间18行,10列
  87. :loop
  88. set/a "m=4,t=2,n=1,down=450/(guan<<2),bti=0"
  89. set/a r=!random!%%nx+1
  90. set err=
  91. set ttr=!_ttr!
  92. set _ttr=!ran%r%!
  93. ::随机取一个图标,
  94. if not defined ttr goto :loop
  95. set mx=!_%ttr:~,2%!
  96. set k=%ttr:~2%
  97. set str=!%ttr%!
  98. set _str=!%_ttr%!
  99. setlocal enabledelayedexpansion
  100. for %%a in (!_str!) do set/a one=0x%%a,x=one/4+8,y=one%%4&set kk!x!.!y!=■
  101. for /l %%a in (8,1,11) do for /l %%b in (0,1,3) do (
  102. if defined kk%%a.%%b (set kk%%a=!kk%%a!!kk%%a.%%b!) else (set kk%%a=!kk%%a! )
  103. )
  104. endlocal&set ebu8=%kk8%&set ebu9=%kk9%&set ebu10=%kk10%&set ebu11=%kk11%
  105. ::对预备图标的处理
  106. :cont
  107. set/p var=<%~n0.tmp
  108. for /f "tokens=1,2" %%a in ("%var%") do (
  109. if %%a neq !test! (
  110.   if %%b geq 6 call :error %%b&del/q %~n0.tmp&exit
  111.   set bs=!str!&set/a bm=m,bk=k
  112.   set/a !k%%b!=1
  113.   if "%%b" equ "3" (for %%b in ("!ttr:~,2!!k!") do set str=!%%~b!)
  114.   setlocal enabledelayedexpansion
  115.   (%d-v%)
  116.   rem 调用函数把图标点放置到总坐标空间
  117.   if defined err (
  118.    endlocal
  119.    set/a m=bm,k=bk
  120.    set str=!bs!
  121.   ) else (
  122.    (%d-e:#=18%)
  123.    rem 调用显示函数
  124.    endlocal
  125.   )
  126. )
  127. set test=%%a
  128. )
  129. set ti=1!time:~7,1!!time:~9,2!
  130. if !ti! lss !bti! (set /a tn=ti-bti+1000) else (set /a tn=ti-bti)
  131. if !tn! gtr !down! (
  132. set/a bti=ti,n+=1
  133. setlocal enabledelayedexpansion
  134. (%d-v%)
  135. if defined err (
  136.   endlocal
  137.   goto :jmpout
  138. ) else (
  139.   (%d-e:#=18%)
  140.   endlocal
  141. )
  142. )
  143. goto :cont
  144. :jmpout
  145. set/a n-=1
  146. (%d-v%)
  147. set m=18
  148. for /l %%a in (18,-1,2) do for %%b in ("!ebuf:@=%%a!") do if "%%~b" neq "■■■■■■■■■■■" (set e!m!=%%~b&set/a m-=1)
  149. if !m! neq 1 (
  150. for /l %%a in (!m!,-1,2) do set "e%%a=           "
  151. for /l %%a in (18,-1,2) do (
  152.   for /l %%b in (0,1,10) do set r%%a.%%b=!e%%a:~%%b,1!
  153. )
  154. set/a "fen=fen+(m-1)*10,guan=fen/150+1"
  155. )
  156. if !n! leq 2 (
  157. echo 游戏结束!
  158. ping -n 3 127.1 >nul
  159. goto :restart
  160. )
  161. goto :loop
  162. :para2
  163. mode con: cols=30 lines=2
  164. echo a左 d右 w转 s加速 q退出
  165. :p_lp
  166. set/a n=n%%50+1
  167. choice /c adwsgq /n >nul
  168. >%~n0.tmp echo;%n% %errorlevel%
  169. if %errorlevel% geq 6 exit
  170. for /l %%a in (1,1,25) do ver>nul
  171. goto :p_lp
  172. :error
  173. if %1 equ 6 echo 谢谢使用,再见。。。
  174. if %1 gtr 6 echo 对不起!choice.exe 文件不存在,不能运行。。。
  175. ping -n 3 127.1 >nul
  176. goto :eof
复制代码
3

评分人数

    • Seter: NB..玩玩看~PB + 10
    • more: 牛人!!!PB + 30 技术 + 1
    • wxcute: 很好玩。PB + 15

加一个CHOICE地址罢:http://bbs.bathome.net/thread-1726-1-1.html

对你是相当的无语:牛人!
批处理之家论坛官方 QQ 群 :【当前人数/人数上限】【2009-07-08】
群①:43011867(181/200);群②:(暂缺数据);群③:66165582(120/200)。

TOP

第一个游戏BUG:
1.在小窗口中出现"无法访问"字样.
2."无效数字....",然后"游戏结束!",重新开局...
3.临时文件应该在退出时清除...

[ 本帖最后由 more 于 2009-9-25 15:23 编辑 ]

TOP

re more
谢谢找出bug,已经找到原因了,是两进程同时操作一个文件时出的问题,看来这种方法并不稳定,

TOP

re more

问题已经解决,现在可以放心玩了

TOP

发布免三方,不用临时文件版
可惜的是速度减了
  1. @echo off&rem 俄罗斯方块游戏,由netbenton编写,在bathome首发,完成时间:2009年9月25日 ver 1.3
  2. e100 EB 02 00 00 CD 1A 89 16 02 01 31 C0 CD 1A 3B 16 02 01 75 0E
  3. e114 B4 01 CD 16 74 F0 B4 00 CD 16 88 E0 EB 02 B0 00 B4 4C CD 21
  4. g
  5. set "d-v=for /l %%a in (0,1,#) do set/a one=0x!str:~%%a,1!,x=one/4+n,y=one%%4+m&(for %%b in ("r!x!.!y!") do if "!%%~b!" equ " " (set r!x!.!y!=■) else (set err=1))"
  6. ::函数d-v,把str中的图标数据,放置到总坐标空间中,如果有覆盖,则err=1。调用方法:(%d-v:#=图标点数%)
  7. ::变量使用:one  x  y
  8. set "d-e=set aec=!cr!!cr! ┌───────────┐!cr!&(for /l %%a in (2,1,#) do for %%b in ("│!ebuf:@=%%a!│  !ebu%%a!") do set aec=!aec! %%~b!cr!)&cls&echo;!aec! └───────────┘"
  9. ::函数d-e,把总坐标空间显示出来,调用方法:(%d-e:#=行数%)
  10. set ebu4=第!guan!关
  11. set ebu6=总分:!fen!
  12. set cr=^
  13. ::各种图标定义
  14. set ga1=0156
  15. set ga2=1458
  16. set gb1=1245
  17. set gb2=0459
  18. set za1=4567
  19. set za2=159d
  20. set qa1=1598
  21. set qa2=0456
  22. set qa3=0148
  23. set qa4=0126
  24. set qb1=0489
  25. set qb2=0124
  26. set qb3=0159
  27. set qb4=2456
  28. set ta1=0145
  29. set sa1=0125
  30. set sa2=1459
  31. set sa3=1456
  32. set sa4=0458
  33. ::按键定义
  34. set k72=k%%=mx,k+
  35. set k80=down
  36. set k75=m-
  37. set k77=m+
  38. set k28=paus%%=2,paus+
  39. set k1=quit
  40. set paus=1
  41. chcp 437 >nul
  42. graftabl 936>nul
  43. title 方向键操作,回车暂停,Esc退出
  44. setlocal enabledelayedexpansion
  45. mode con: rate=50 delay=0
  46. for /l %%a in (0,1,10) do (set "ebuf=!ebuf!^!r@.%%a^!")
  47. for %%a in (sa_4 ta_1 qb_4 qa_4 za_2 ga_2 gb_2) do (
  48. for /f "tokens=1,2 delims=_" %%b in ("%%a") do (
  49.   set _%%b=%%c
  50.   for /l %%d in (1,1,%%c) do set/a nx+=1&set ran!nx!=%%b%%d
  51. )
  52. )
  53. ::定义各种图型的可变型数,及单个图的随机号
  54. :restart
  55. for /l %%a in (0,1,18) do (for /l %%b in (0,1,10) do set r%%a.%%b= )
  56. set/a fen=0,guan=1
  57. ::初始化坐标空间18行,10列
  58. :loop
  59. set/a "m=4,t=2,n=1,down=450/(guan<<2),bti=0"
  60. set/a r=!random!%%nx+1
  61. set err=
  62. set ttr=!_ttr!
  63. set _ttr=!ran%r%!
  64. ::随机取一个图标,
  65. if not defined ttr goto :loop
  66. set mx=!_%ttr:~,2%!
  67. set k=%ttr:~2%
  68. set str=!%ttr%!
  69. set _str=!%_ttr%!
  70. setlocal enabledelayedexpansion
  71. for /l %%a in (0,1,3) do set/a one=0x!_str:~%%a,1!,x=one/4+8,y=one%%4&set kk!x!.!y!=■
  72. for /l %%a in (8,1,11) do for /l %%b in (0,1,3) do (
  73. if defined kk%%a.%%b (set kk%%a=!kk%%a!!kk%%a.%%b!) else (set kk%%a=!kk%%a! )
  74. )
  75. endlocal&set ebu8=%kk8%&set ebu9=%kk9%&set ebu10=%kk10%&set ebu11=%kk11%
  76. ::对预备图标的处理
  77. :cont
  78. ::读取按键
  79. debug<%~n0.bat>nul
  80. set key=%errorlevel%
  81. (if %paus% equ 2 goto :pause
  82. if defined k%key% (
  83.   if %key% equ 1 call :error %key%&exit
  84.   set bs=!str!&set/a bm=m,bk=k
  85.   set/a !k%key%!=1
  86.   if "%key%" equ "72" (for %%b in ("!ttr:~,2!!k!") do set str=!%%~b!)
  87.   setlocal enabledelayedexpansion
  88.   (%d-v:#=3%)
  89.   rem 调用函数把图标点放置到总坐标空间
  90.   if defined err (
  91.    endlocal
  92.    set/a m=bm,k=bk
  93.    set str=!bs!
  94.   ) else (
  95.    (%d-e:#=18%)
  96.    rem 调用显示函数
  97.    endlocal
  98.   )
  99. )
  100. set ti=1!time:~7,1!!time:~9,2!
  101. if !ti! lss !bti! (set /a tn=ti-bti+1000) else (set /a tn=ti-bti)
  102. if !tn! gtr !down! (
  103. set/a bti=ti,n+=1
  104. setlocal enabledelayedexpansion
  105. (%d-v:#=3%)
  106. if defined err (
  107.   endlocal
  108.   goto :jmpout
  109. ) else (
  110.   (%d-e:#=18%)
  111.   endlocal
  112. )
  113. )
  114. if %key% equ 28 echo 按回车键继续。。。
  115. goto :cont)
  116. :jmpout
  117. set/a n-=1
  118. (%d-v:#=3%)
  119. set m=18
  120. for /l %%a in (18,-1,2) do for %%b in ("!ebuf:@=%%a!") do if "%%~b" neq "■■■■■■■■■■■" (set e!m!=%%~b&set/a m-=1)
  121. if !m! neq 1 (
  122. for /l %%a in (!m!,-1,2) do set "e%%a=           "
  123. for /l %%a in (18,-1,2) do (
  124.   for /l %%b in (0,1,10) do set r%%a.%%b=!e%%a:~%%b,1!
  125. )
  126. set/a "fen=fen+(m-1)*10,guan=fen/150+1"
  127. )
  128. if !n! leq 2 (
  129. cls&(%d-e:#=18%)
  130. echo       游戏结束!
  131. ping -n 3 127.1 >nul
  132. goto :restart
  133. )
  134. goto :loop
  135. :error
  136. if %1 equ 1 echo 谢谢使用,再见。。。
  137. ping -n 3 127.1 >nul
  138. mode con rate=30 delay=1
  139. goto :eof
  140. :pause
  141. if %key% equ 28 set paus=1
  142. if %key% equ 1 goto :error
  143. goto :cont
复制代码

[ 本帖最后由 netbenton 于 2009-9-26 23:14 编辑 ]

TOP

你真是太牛了
不过玩俄罗斯方块大部分是空格键加速,都已经习惯那个了
上面的代码提下速就完美了
我觉得每一关的分数要设高一点,要不前面几关一下就玩过去了,后面速度太快,游戏就很快结束了

TOP

哎~!完全不懂~!對我來說你是偶的神啊,能不能把鍵也改動下~用起來不習慣

[ 本帖最后由 senkiss 于 2009-9-27 18:02 编辑 ]

TOP

增加自定义按键功能
  1. @goto :` 俄罗斯方块游戏,由netbenton编写,在bathome首发,完成时间:2009年9月25日 ver 1.3
  2. e100 EB 02 00 00 CD 1A 89 16 02 01 31 C0 CD 1A 3B 16 02 01 75 0E
  3. e114 B4 01 CD 16 74 F0 B4 00 CD 16 88 E0 EB 02 B0 00 B4 4C CD 21
  4. g
  5. :`
  6. @echo off
  7. set        "d-v=for /l %%a in (0,1,#) do set/a one=0x!str:~%%a,1!,x=one/4+n,y=one%%4+m&(for %%b in ("r!x!.!y!") do if "!%%~b!" equ " " (set %%~b=■) else (set err=1))"
  8. ::函数d-v,把str中的图标数据,放置到总坐标空间中,如果有覆盖,则err=1。调用方法:(%d-v:#=图标点数%)
  9. ::变量使用:one  x  y
  10. set "d-e=set aec=!cr!!cr!        ┌───────────┐!cr!&(for /l %%a in (2,1,#) do for %%b in ("│!ebuf:@=%%a!│  !ebu%%a!") do set aec=!aec!        %%~b!cr!)&cls&echo;!aec!        └───────────┘"
  11. ::函数d-e,把总坐标空间显示出来,调用方法:(%d-e:#=行数%)
  12. set ebu4=第!guan!关
  13. set ebu6=总分:!fen!
  14. set cr=^
  15. ::各种图标定义
  16. set ga1=0156
  17. set ga2=1458
  18. set gb1=1245
  19. set gb2=0459
  20. set za1=4567
  21. set za2=159d
  22. set qa1=1598
  23. set qa2=0456
  24. set qa3=0148
  25. set qa4=0126
  26. set qb1=0489
  27. set qb2=0124
  28. set qb3=0159
  29. set qb4=2456
  30. set ta1=0145
  31. set sa1=0125
  32. set sa2=1459
  33. set sa3=1456
  34. set sa4=0458
  35. chcp 437 >nul
  36. graftabl 936>nul
  37. setlocal enabledelayedexpansion
  38. ::按键定义
  39. set 转=k%%=mx,k+
  40. set 速=down
  41. set 左=m-
  42. set 右=m+
  43. set 停=paus%%=2,paus+
  44. set 退=quit
  45. cls
  46. echo 批处理俄罗斯方块,300分为一关
  47. echo 一次消一行得10分
  48. echo 一次消二行得30分
  49. echo 一次消三行得50分
  50. echo 一次消四行得70分
  51. echo;
  52. echo 请自定义操作按键
  53. echo;
  54. call :setkey 左 "左按键"
  55. call :setkey 右 "右按键"
  56. call :setkey 速 "加速键"
  57. call :setkey 转 "转动键"
  58. call :setkey 停 "暂停"
  59. call :setkey 退 "退出"
  60. set paus=1
  61. mode con: rate=50 delay=0
  62. for /l %%a in (0,1,10) do (set "ebuf=!ebuf!^!r@.%%a^!")
  63. for %%a in (sa_4 ta_1 qb_4 qa_4 za_2 ga_2 gb_2) do (
  64.         for /f "tokens=1,2 delims=_" %%b in ("%%a") do (
  65.                 set _%%b=%%c
  66.                 for /l %%d in (1,1,%%c) do set/a nx+=1&set ran!nx!=%%b%%d
  67.         )
  68. )
  69. ::定义各种图型的可变型数,及单个图的随机号        
  70. :restart
  71. for /l %%a in (0,1,20) do (for /l %%b in (0,1,10) do set r%%a.%%b= )
  72. set/a fen=0,guan=1
  73. ::初始化坐标空间20行,10列
  74. :loop
  75. set/a "m=4,t=2,n=1,down=450/(guan<<2),bti=0"
  76. set/a r=!random!%%nx+1
  77. set err=
  78. set ttr=!_ttr!
  79. set _ttr=!ran%r%!
  80. ::随机取一个图标,
  81. if not defined ttr goto :loop
  82. set mx=!_%ttr:~,2%!
  83. set k=%ttr:~2%
  84. set str=!%ttr%!
  85. set _str=!%_ttr%!
  86. setlocal enabledelayedexpansion
  87. for /l %%a in (0,1,3) do set/a one=0x!_str:~%%a,1!,x=one/4+8,y=one%%4&set kk!x!.!y!=■
  88. for /l %%a in (8,1,11) do for /l %%b in (0,1,3) do (
  89.         if defined kk%%a.%%b (set kk%%a=!kk%%a!!kk%%a.%%b!) else (set kk%%a=!kk%%a! )
  90. )
  91. endlocal&set ebu8=%kk8%&set ebu9=%kk9%&set ebu10=%kk10%&set ebu11=%kk11%
  92. ::对预备图标的处理
  93. :cont
  94. ::读取按键
  95. debug<"%~n0.bat">nul
  96. set key=%errorlevel%
  97. (if %paus% equ 2 goto :pause
  98. if defined k%key% (
  99.                 if %key% equ %退% call :error %key%&exit
  100.                 set bs=!str!&set/a bm=m,bk=k
  101.                 set/a !k%key%!=1
  102.                 if "%key%" equ "%转%" (for %%b in ("!ttr:~,2!!k!") do set str=!%%~b!)
  103.                 setlocal enabledelayedexpansion
  104.                 (%d-v:#=3%)
  105.                 rem 调用函数把图标点放置到总坐标空间
  106.                 if defined err (
  107.                         endlocal
  108.                         set/a m=bm,k=bk
  109.                         set str=!bs!
  110.                 ) else (
  111.                         (%d-e:#=20%)
  112.                         rem 调用显示函数
  113.                         endlocal
  114.                 )
  115. )
  116.         
  117. set ti=1!time:~7,1!!time:~9,2!
  118. if !ti! lss !bti! (set /a tn=ti-bti+1000) else (set /a tn=ti-bti)
  119. if !tn! gtr !down! (
  120.         set/a bti=ti,n+=1
  121.         setlocal enabledelayedexpansion
  122.         (%d-v:#=3%)
  123.         if defined err (
  124.                 endlocal
  125.                 goto :jmpout
  126.         ) else (
  127.                 (%d-e:#=20%)
  128.                 endlocal
  129.         )
  130. )
  131. if %key% equ %停% echo 再按暂停键继续。。。
  132. goto :cont)
  133. :jmpout
  134. set/a n-=1
  135. (%d-v:#=3%)
  136. set m=20
  137. for /l %%a in (20,-1,2) do for %%b in ("!ebuf:@=%%a!") do if "%%~b" neq "■■■■■■■■■■■" (set e!m!=%%~b&set/a m-=1)
  138. if !m! neq 1 (
  139.         for /l %%a in (!m!,-1,2) do set "e%%a=           "
  140.         for /l %%a in (20,-1,2) do (
  141.                 for /l %%b in (0,1,10) do set r%%a.%%b=!e%%a:~%%b,1!
  142.         )
  143.         set/a "fen=fen+(m-1)*20-10,guan=fen/300+1"
  144. )
  145. if !n! leq 2 (
  146.         cls&(%d-e:#=20%)
  147.         echo       游戏结束!
  148.         ping -n 3 127.1 >nul
  149.         goto :restart
  150. )
  151. goto :loop
  152. :error
  153. if %1 equ %退% echo 谢谢使用,再见。。。
  154. ping -n 3 127.1 >nul
  155. mode con rate=30 delay=1
  156. goto :eof
  157. :pause
  158. if %key% equ %停% set paus=1
  159. if %key% equ %退% goto :error
  160. goto :cont
  161. :setkey
  162. echo;
  163. echo 定义: %~2
  164. :sk_lp
  165. ping -n 1 127.1 >nul
  166. debug<"%~n0.bat">nul
  167. set var=%errorlevel%
  168. if %var% equ 0 goto :sk_lp
  169. if defined k%var% echo;不能重复定义&goto :setkey
  170. set k%var%=!%1!
  171. set %1=%var%
  172. goto :eof
复制代码

[ 本帖最后由 netbenton 于 2009-10-6 13:14 编辑 ]

TOP

完美!批处理居然能这样玩呢!!!
要是把边框线跟方块之间的空隙再小点就更好了!
有一种爱叫放弃

TOP

正在获取系统变量列表...
成功获取系统变量列表
正在初始化批处理内容...
成功初始化批处理内容
正在启动调试批处理...
成功启动调试批处理
开始调试...
调试结束
读取错误信息...
以下是错误信息

2行:
'e100' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

3行:
'e114' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

4行:
'g' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

83行:
系统找不到指定的文件。

83行:
系统找不到指定的文件。

83行:
系统找不到指定的文件。

83行:
系统找不到指定的文件。

83行:
系统找不到指定的文件。

83行:
系统找不到指定的文件。

83行:
系统找不到指定的文件。

TOP

re 11 楼
谢谢测试

虽然这些bug并不会影响程序的运行,但还是要尽量改正
4行前的已经处理好,已经在9楼更正

83行的错误
是因为二进程同时操作同一个临时文件所至,但并不会影响运行,也很难感觉得出来
,只要是用这种方法,就很难避免,
只有用echo; 2>nul 3>nul,屏蔽掉

TOP

这样的帖子 怎么能让他沉呢    对楼主 真是佩服  !

TOP

本游戏需要choice.exe三方工具

choice.exe三方工具是什么

TOP

无法读取按键

-------------以下是测试信息--------------

正在获取系统变量列表...
成功获取系统变量列表
正在初始化批处理内容...
成功初始化批处理内容
正在启动调试批处理...
成功启动调试批处理
开始调试...
调试结束
读取错误信息...
以下是错误信息

200行:
系统找不到指定的文件。

200行:
系统找不到指定的文件。

200行:
系统找不到指定的文件。

200行:
系统找不到指定的文件。

200行:
系统找不到指定的文件。

200行:
系统找不到指定的文件。

[ 本帖最后由 yslyxqysl 于 2009-10-6 11:22 编辑 ]
论坛标题管理观察员

TOP

返回列表