批处理之家's Archiver

netbenton 发表于 2009-9-25 02:05

俄罗斯方块游戏批处理

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

第一版,只有基本图标方块[code] @echo off&rem 俄罗斯方块游戏,由netbenton编写,在bathome首发,完成时间:2009年9月25日 ver 1.0
if "%1" equ "para2" goto :para2
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))"
::函数d-v,把str中的图标数据,放置到总坐标空间中,如果有覆盖,则err=1。调用方法:(%d-v:#=图标点数%)
::变量使用:one  x  y
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! └───────────┘"
::函数d-e,把总坐标空间显示出来,调用方法:(%d-e:#=行数%)
set ebu4=第!guan!关
set ebu6=总分:!fen!
set cr=^


::各种图标定义
set ga1=0156
set ga2=1458
::■■
::  ■■
set gb1=1245
set gb2=0459
::  ■■
::■■
set za1=4567
set za2=159d
::■■■■
set qa1=1598
set qa2=0456
set qa3=0148
set qa4=0126
::■■
::  ■
::  ■
  
set qb1=0489
set qb2=0124
set qb3=0159
set qb4=2456
::■■
::■
::■
::cdef
::89ab
::4567
::0123
set ta1=0145
::■■
::■■
set sa1=0125
set sa2=1459
set sa3=1456
set sa4=0458
::  ■
::■■■

echo 0 2 >%~n0.tmp
start "aswd" %0 para2
::起动控制窗口
set k3=k%%=mx,k+
set k4=down
set k1=m-
set k2=m+
set k5=t+
::按键定义
setlocal enabledelayedexpansion
for /l %%a in (0,1,10) do (set "ebuf=!ebuf!^!r@.%%a^!")
for %%a in (sa_4 ta_1 qb_4 qa_4 za_2 ga_2 gb_2) do (
for /f "tokens=1,2 delims=_" %%b in ("%%a") do (
  set _%%b=%%c
  for /l %%d in (1,1,%%c) do set/a nx+=1&set ran!nx!=%%b%%d
)
)
::定义各种图型的可变型数,及单个图的随机号
:restart
for /l %%a in (0,1,18) do (for /l %%b in (0,1,10) do set r%%a.%%b= )
set/a fen=0,guan=1
::初始化坐标空间18行,10列
:loop
set/a "m=4,t=2,n=1,down=450/(guan<<2),bti=0"
set/a r=!random!%%nx+1
set err=
set ttr=!_ttr!
set _ttr=!ran%r%!
::随机取一个图标,
if not defined ttr goto :loop
set mx=!_%ttr:~,2%!
set k=%ttr:~2%
set str=!%ttr%!
set _str=!%_ttr%!

setlocal enabledelayedexpansion
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!=■
for /l %%a in (8,1,11) do for /l %%b in (0,1,3) do (
if defined kk%%a.%%b (set kk%%a=!kk%%a!!kk%%a.%%b!) else (set kk%%a=!kk%%a! )
)
endlocal&set ebu8=%kk8%&set ebu9=%kk9%&set ebu10=%kk10%&set ebu11=%kk11%
::对预备图标的处理

:cont
set/p var=<%~n0.tmp
for /f "tokens=1,2" %%a in ("%var%") do (
if %%a neq !test! (
  if %%b geq 6 call :error %%b&del /q %~n0.tmp&exit
  set bs=!str!&set/a bm=m,bk=k
  set/a !k%%b!=1
  if "%%b" equ "3" (for %%b in ("!ttr:~,2!!k!") do set str=!%%~b!)
  setlocal enabledelayedexpansion
  (%d-v:#=3%)
  rem 调用函数把图标点放置到总坐标空间
  if defined err (
   endlocal
   set/a m=bm,k=bk
   set str=!bs!
  ) else (
   (%d-e:#=18%)
   rem 调用显示函数
   endlocal
  )
)
set test=%%a
)

set ti=1!time:~7,1!!time:~9,2!
if !ti! lss !bti! (set /a tn=ti-bti+1000) else (set /a tn=ti-bti)
if !tn! gtr !down! (
set/a bti=ti,n+=1
setlocal enabledelayedexpansion
(%d-v:#=3%)
if defined err (
  endlocal
  goto :jmpout
) else (
  (%d-e:#=18%)
  endlocal
)
)
for /l %%a in (1,1,25) do ver>nul
goto :cont
:jmpout
set/a n-=1
(%d-v:#=3%)
set m=18
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)
if !m! neq 1 (
for /l %%a in (!m!,-1,2) do set "e%%a=           "
for /l %%a in (18,-1,2) do (
  for /l %%b in (0,1,10) do set r%%a.%%b=!e%%a:~%%b,1!
)
set/a "fen=fen+(m-1)*10,guan=fen/150+1"
)
if !n! leq 2 (
echo 游戏结束!
ping -n 3 127.1 >nul
goto :restart
)
goto :loop
:para2
mode con: cols=30 lines=2
echo a左 d右 w转 s加速 q退出
:p_lp
set/a n=n%%10+1
choice /c adwsgq /n >nul
>%~n0.tmp echo;%n% %errorlevel%
if %errorlevel% geq 6 exit
for /l %%a in (1,1,12) do ver>nul
goto :p_lp
:error
if %1 equ 6 echo 谢谢使用,再见。。。
if %1 gtr 6 echo 对不起!choice.exe 文件不存在,不能运行。。。
ping -n 3 127.1 >nul
goto :eof[/code]第二版,加入混合图标方块[code]@echo off&rem 俄罗斯方块游戏,由netbenton编写,在bathome首发,完成时间:2009年9月25日 ver 2.0
if "%1" equ "para2" goto :para2
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))"
::函数d-v,把str中的图标数据,放置到总坐标空间中,如果有覆盖,则err=1。调用方法:(%d-v%)
::变量使用:one  x  y
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! └───────────┘"
::函数d-e,把总坐标空间显示出来,调用方法:(%d-e:#=行数%)
set ebu4=第!guan!关
set ebu6=总分:!fen!
set cr=^


::各种图标定义
set ga1=0 1 5 6
set ga2=1 4 5 8
::■■
::  ■■
set gb1=1 2 4 5
set gb2=0 4 5 9
::  ■■
::■■
set za1=4 5 6 7
set za2=1 5 9 d
::■■■■
set qa1=1 5 9 8
set qa2=0 4 5 6
set qa3=0 1 4 8
set qa4=0 1 2 6
::■■
::  ■
::  ■
  
set qb1=0 4 8 9
set qb2=0 1 2 4
set qb3=0 1 5 9
set qb4=2 4 5 6
::■■
::■
::■
set ta1=0 1 4 5
::■■
::■■
set sa1=0 1 2 5
set sa2=1 4 5 9
set sa3=1 4 5 6
set sa4=0 4 5 8
::  ■
::■■■
set tw1=0 1
set tw2=0 4
set on1=0
set on2=0
set sh1=1 4 5 6 9
set sh2=1 4 5 6 9
set ao1=0 1 2 4 6
set ao2=0 1 4 8 9
set ao3=0 4 5 6 2
set ao4=0 1 5 8 9
set tt1=0 1 2 5 9
set tt2=0 4 8 5 6
set tt3=1 5 8 9 a
set tt4=2 4 5 6 a

::cdef
::89ab
::4567
::0123
echo 0 2 >%~n0.tmp
start "aswd" %0 para2
::起动控制窗口
set k3=k%%=mx,k+
set k4=down
set k1=m-
set k2=m+
set k5=t+
::按键定义
setlocal enabledelayedexpansion
for /l %%a in (0,1,10) do (set "ebuf=!ebuf!^!r@.%%a^!")
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 (
for /f "tokens=1,2 delims=_" %%b in ("%%a") do (
  set _%%b=%%c
  for /l %%d in (1,1,%%c) do set/a nx+=1&set ran!nx!=%%b%%d
)
)
::定义各种图型的可变型数,及单个图的随机号
:restart
for /l %%a in (0,1,18) do (for /l %%b in (0,1,10) do set r%%a.%%b= )
set/a fen=0,guan=1
::初始化坐标空间18行,10列

:loop
set/a "m=4,t=2,n=1,down=450/(guan<<2),bti=0"
set/a r=!random!%%nx+1
set err=
set ttr=!_ttr!
set _ttr=!ran%r%!
::随机取一个图标,
if not defined ttr goto :loop
set mx=!_%ttr:~,2%!
set k=%ttr:~2%
set str=!%ttr%!
set _str=!%_ttr%!

setlocal enabledelayedexpansion
for %%a in (!_str!) do set/a one=0x%%a,x=one/4+8,y=one%%4&set kk!x!.!y!=■
for /l %%a in (8,1,11) do for /l %%b in (0,1,3) do (
if defined kk%%a.%%b (set kk%%a=!kk%%a!!kk%%a.%%b!) else (set kk%%a=!kk%%a! )
)
endlocal&set ebu8=%kk8%&set ebu9=%kk9%&set ebu10=%kk10%&set ebu11=%kk11%
::对预备图标的处理

:cont
set/p var=<%~n0.tmp
for /f "tokens=1,2" %%a in ("%var%") do (
if %%a neq !test! (
  if %%b geq 6 call :error %%b&del/q %~n0.tmp&exit
  set bs=!str!&set/a bm=m,bk=k
  set/a !k%%b!=1
  if "%%b" equ "3" (for %%b in ("!ttr:~,2!!k!") do set str=!%%~b!)
  setlocal enabledelayedexpansion
  (%d-v%)
  rem 调用函数把图标点放置到总坐标空间
  if defined err (
   endlocal
   set/a m=bm,k=bk
   set str=!bs!
  ) else (
   (%d-e:#=18%)
   rem 调用显示函数
   endlocal
  )
)
set test=%%a
)


set ti=1!time:~7,1!!time:~9,2!
if !ti! lss !bti! (set /a tn=ti-bti+1000) else (set /a tn=ti-bti)
if !tn! gtr !down! (
set/a bti=ti,n+=1
setlocal enabledelayedexpansion
(%d-v%)
if defined err (
  endlocal
  goto :jmpout
) else (
  (%d-e:#=18%)
  endlocal
)
)

goto :cont
:jmpout
set/a n-=1
(%d-v%)
set m=18
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)
if !m! neq 1 (
for /l %%a in (!m!,-1,2) do set "e%%a=           "
for /l %%a in (18,-1,2) do (
  for /l %%b in (0,1,10) do set r%%a.%%b=!e%%a:~%%b,1!
)
set/a "fen=fen+(m-1)*10,guan=fen/150+1"
)
if !n! leq 2 (
echo 游戏结束!
ping -n 3 127.1 >nul
goto :restart
)
goto :loop
:para2
mode con: cols=30 lines=2
echo a左 d右 w转 s加速 q退出
:p_lp
set/a n=n%%50+1
choice /c adwsgq /n >nul
>%~n0.tmp echo;%n% %errorlevel%
if %errorlevel% geq 6 exit
for /l %%a in (1,1,25) do ver>nul
goto :p_lp
:error
if %1 equ 6 echo 谢谢使用,再见。。。
if %1 gtr 6 echo 对不起!choice.exe 文件不存在,不能运行。。。
ping -n 3 127.1 >nul
goto :eof

[/code]

wxcute 发表于 2009-9-25 08:12

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

对你是相当的无语:牛人!

more 发表于 2009-9-25 15:19

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

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

netbenton 发表于 2009-9-25 19:53

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

netbenton 发表于 2009-9-26 14:04

re more

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

netbenton 发表于 2009-9-26 22:37

发布免三方,不用临时文件版
可惜的是速度减了
[code]@echo off&rem 俄罗斯方块游戏,由netbenton编写,在bathome首发,完成时间:2009年9月25日 ver 1.3
e100 EB 02 00 00 CD 1A 89 16 02 01 31 C0 CD 1A 3B 16 02 01 75 0E
e114 B4 01 CD 16 74 F0 B4 00 CD 16 88 E0 EB 02 B0 00 B4 4C CD 21
g
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))"
::函数d-v,把str中的图标数据,放置到总坐标空间中,如果有覆盖,则err=1。调用方法:(%d-v:#=图标点数%)
::变量使用:one  x  y
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! └───────────┘"
::函数d-e,把总坐标空间显示出来,调用方法:(%d-e:#=行数%)
set ebu4=第!guan!关
set ebu6=总分:!fen!
set cr=^


::各种图标定义
set ga1=0156
set ga2=1458
set gb1=1245
set gb2=0459
set za1=4567
set za2=159d
set qa1=1598
set qa2=0456
set qa3=0148
set qa4=0126
set qb1=0489
set qb2=0124
set qb3=0159
set qb4=2456
set ta1=0145
set sa1=0125
set sa2=1459
set sa3=1456
set sa4=0458
::按键定义
set k72=k%%=mx,k+
set k80=down
set k75=m-
set k77=m+
set k28=paus%%=2,paus+
set k1=quit
set paus=1
chcp 437 >nul
graftabl 936>nul
title 方向键操作,回车暂停,Esc退出
setlocal enabledelayedexpansion
mode con: rate=50 delay=0
for /l %%a in (0,1,10) do (set "ebuf=!ebuf!^!r@.%%a^!")
for %%a in (sa_4 ta_1 qb_4 qa_4 za_2 ga_2 gb_2) do (
for /f "tokens=1,2 delims=_" %%b in ("%%a") do (
  set _%%b=%%c
  for /l %%d in (1,1,%%c) do set/a nx+=1&set ran!nx!=%%b%%d
)
)
::定义各种图型的可变型数,及单个图的随机号
:restart
for /l %%a in (0,1,18) do (for /l %%b in (0,1,10) do set r%%a.%%b= )
set/a fen=0,guan=1
::初始化坐标空间18行,10列
:loop
set/a "m=4,t=2,n=1,down=450/(guan<<2),bti=0"
set/a r=!random!%%nx+1
set err=
set ttr=!_ttr!
set _ttr=!ran%r%!
::随机取一个图标,
if not defined ttr goto :loop
set mx=!_%ttr:~,2%!
set k=%ttr:~2%
set str=!%ttr%!
set _str=!%_ttr%!

setlocal enabledelayedexpansion
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!=■
for /l %%a in (8,1,11) do for /l %%b in (0,1,3) do (
if defined kk%%a.%%b (set kk%%a=!kk%%a!!kk%%a.%%b!) else (set kk%%a=!kk%%a! )
)
endlocal&set ebu8=%kk8%&set ebu9=%kk9%&set ebu10=%kk10%&set ebu11=%kk11%
::对预备图标的处理

:cont
::读取按键
debug<%~n0.bat>nul
set key=%errorlevel%
(if %paus% equ 2 goto :pause
if defined k%key% (
  if %key% equ 1 call :error %key%&exit
  set bs=!str!&set/a bm=m,bk=k
  set/a !k%key%!=1
  if "%key%" equ "72" (for %%b in ("!ttr:~,2!!k!") do set str=!%%~b!)
  setlocal enabledelayedexpansion
  (%d-v:#=3%)
  rem 调用函数把图标点放置到总坐标空间
  if defined err (
   endlocal
   set/a m=bm,k=bk
   set str=!bs!
  ) else (
   (%d-e:#=18%)
   rem 调用显示函数
   endlocal
  )
)

set ti=1!time:~7,1!!time:~9,2!
if !ti! lss !bti! (set /a tn=ti-bti+1000) else (set /a tn=ti-bti)
if !tn! gtr !down! (
set/a bti=ti,n+=1
setlocal enabledelayedexpansion
(%d-v:#=3%)
if defined err (
  endlocal
  goto :jmpout
) else (
  (%d-e:#=18%)
  endlocal
)
)
if %key% equ 28 echo 按回车键继续。。。
goto :cont)
:jmpout
set/a n-=1
(%d-v:#=3%)
set m=18
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)
if !m! neq 1 (
for /l %%a in (!m!,-1,2) do set "e%%a=           "
for /l %%a in (18,-1,2) do (
  for /l %%b in (0,1,10) do set r%%a.%%b=!e%%a:~%%b,1!
)
set/a "fen=fen+(m-1)*10,guan=fen/150+1"
)
if !n! leq 2 (
cls&(%d-e:#=18%)
echo       游戏结束!
ping -n 3 127.1 >nul
goto :restart
)
goto :loop
:error
if %1 equ 1 echo 谢谢使用,再见。。。
ping -n 3 127.1 >nul
mode con rate=30 delay=1
goto :eof
:pause
if %key% equ 28 set paus=1
if %key% equ 1 goto :error
goto :cont[/code]

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

zhouyongjun 发表于 2009-9-27 15:22

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

senkiss 发表于 2009-9-27 18:01

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

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

netbenton 发表于 2009-9-27 19:37

增加自定义按键功能
[code] @goto :` 俄罗斯方块游戏,由netbenton编写,在bathome首发,完成时间:2009年9月25日 ver 1.3
e100 EB 02 00 00 CD 1A 89 16 02 01 31 C0 CD 1A 3B 16 02 01 75 0E
e114 B4 01 CD 16 74 F0 B4 00 CD 16 88 E0 EB 02 B0 00 B4 4C CD 21
g
:`
@echo off
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))"
::函数d-v,把str中的图标数据,放置到总坐标空间中,如果有覆盖,则err=1。调用方法:(%d-v:#=图标点数%)
::变量使用:one  x  y
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!        └───────────┘"
::函数d-e,把总坐标空间显示出来,调用方法:(%d-e:#=行数%)
set ebu4=第!guan!关
set ebu6=总分:!fen!
set cr=^


::各种图标定义
set ga1=0156
set ga2=1458
set gb1=1245
set gb2=0459
set za1=4567
set za2=159d
set qa1=1598
set qa2=0456
set qa3=0148
set qa4=0126
set qb1=0489
set qb2=0124
set qb3=0159
set qb4=2456
set ta1=0145
set sa1=0125
set sa2=1459
set sa3=1456
set sa4=0458
chcp 437 >nul
graftabl 936>nul
setlocal enabledelayedexpansion
::按键定义
set 转=k%%=mx,k+
set 速=down
set 左=m-
set 右=m+
set 停=paus%%=2,paus+
set 退=quit

cls
echo 批处理俄罗斯方块,300分为一关
echo 一次消一行得10分
echo 一次消二行得30分
echo 一次消三行得50分
echo 一次消四行得70分
echo;
echo 请自定义操作按键
echo;
call :setkey 左 "左按键"
call :setkey 右 "右按键"
call :setkey 速 "加速键"
call :setkey 转 "转动键"
call :setkey 停 "暂停"
call :setkey 退 "退出"

set paus=1
mode con: rate=50 delay=0
for /l %%a in (0,1,10) do (set "ebuf=!ebuf!^!r@.%%a^!")
for %%a in (sa_4 ta_1 qb_4 qa_4 za_2 ga_2 gb_2) do (
        for /f "tokens=1,2 delims=_" %%b in ("%%a") do (
                set _%%b=%%c
                for /l %%d in (1,1,%%c) do set/a nx+=1&set ran!nx!=%%b%%d
        )
)
::定义各种图型的可变型数,及单个图的随机号        
:restart
for /l %%a in (0,1,20) do (for /l %%b in (0,1,10) do set r%%a.%%b= )
set/a fen=0,guan=1
::初始化坐标空间20行,10列
:loop
set/a "m=4,t=2,n=1,down=450/(guan<<2),bti=0"
set/a r=!random!%%nx+1
set err=
set ttr=!_ttr!
set _ttr=!ran%r%!
::随机取一个图标,
if not defined ttr goto :loop
set mx=!_%ttr:~,2%!
set k=%ttr:~2%
set str=!%ttr%!
set _str=!%_ttr%!

setlocal enabledelayedexpansion
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!=■
for /l %%a in (8,1,11) do for /l %%b in (0,1,3) do (
        if defined kk%%a.%%b (set kk%%a=!kk%%a!!kk%%a.%%b!) else (set kk%%a=!kk%%a! )
)
endlocal&set ebu8=%kk8%&set ebu9=%kk9%&set ebu10=%kk10%&set ebu11=%kk11%
::对预备图标的处理

:cont
::读取按键
debug<"%~n0.bat">nul
set key=%errorlevel%
(if %paus% equ 2 goto :pause
if defined k%key% (
                if %key% equ %退% call :error %key%&exit
                set bs=!str!&set/a bm=m,bk=k
                set/a !k%key%!=1
                if "%key%" equ "%转%" (for %%b in ("!ttr:~,2!!k!") do set str=!%%~b!)
                setlocal enabledelayedexpansion
                (%d-v:#=3%)
                rem 调用函数把图标点放置到总坐标空间
                if defined err (
                        endlocal
                        set/a m=bm,k=bk
                        set str=!bs!
                ) else (
                        (%d-e:#=20%)
                        rem 调用显示函数
                        endlocal
                )
)
        
set ti=1!time:~7,1!!time:~9,2!
if !ti! lss !bti! (set /a tn=ti-bti+1000) else (set /a tn=ti-bti)
if !tn! gtr !down! (
        set/a bti=ti,n+=1
        setlocal enabledelayedexpansion
        (%d-v:#=3%)
        if defined err (
                endlocal
                goto :jmpout
        ) else (
                (%d-e:#=20%)
                endlocal
        )
)
if %key% equ %停% echo 再按暂停键继续。。。
goto :cont)
:jmpout
set/a n-=1
(%d-v:#=3%)
set m=20
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)
if !m! neq 1 (
        for /l %%a in (!m!,-1,2) do set "e%%a=           "
        for /l %%a in (20,-1,2) do (
                for /l %%b in (0,1,10) do set r%%a.%%b=!e%%a:~%%b,1!
        )
        set/a "fen=fen+(m-1)*20-10,guan=fen/300+1"
)
if !n! leq 2 (
        cls&(%d-e:#=20%)
        echo       游戏结束!
        ping -n 3 127.1 >nul
        goto :restart
)
goto :loop
:error
if %1 equ %退% echo 谢谢使用,再见。。。
ping -n 3 127.1 >nul
mode con rate=30 delay=1
goto :eof
:pause
if %key% equ %停% set paus=1
if %key% equ %退% goto :error
goto :cont
:setkey
echo;
echo 定义: %~2
:sk_lp
ping -n 1 127.1 >nul
debug<"%~n0.bat">nul
set var=%errorlevel%
if %var% equ 0 goto :sk_lp
if defined k%var% echo;不能重复定义&goto :setkey
set k%var%=!%1!
set %1=%var%
goto :eof

[/code]

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

zjw767676 发表于 2009-9-28 23:43

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

yslyxqysl 发表于 2009-10-1 13:39

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

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

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

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

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

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

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

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

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

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

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

netbenton 发表于 2009-10-2 13:19

re 11 楼
谢谢测试

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

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

a4188809b 发表于 2009-10-2 14:14

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

athinko 发表于 2009-10-6 10:16

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

choice.exe三方工具是什么

yslyxqysl 发表于 2009-10-6 11:18

无法读取按键

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

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

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

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

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

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

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

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

[[i] 本帖最后由 yslyxqysl 于 2009-10-6 11:22 编辑 [/i]]

Batcher 发表于 2009-10-6 11:48

回复 14楼 的帖子

XP系统没有自带choice.exe,如果需要,可以按照2楼的链接去下载。
楼主的代码从6楼开始,已经不再需要这个工具了。

netbenton 发表于 2009-10-6 13:17

回复15楼
谢谢测试

是保存的批处理文件名中含有空格的问题,已经在9楼更正。

yslyxqysl 发表于 2009-10-6 13:32

读取错误信息...
以下是错误信息

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

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

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

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

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

[[i] 本帖最后由 yslyxqysl 于 2009-10-6 20:08 编辑 [/i]]

netbenton 发表于 2009-10-6 18:12

回复18楼

这次应该是与你的测试环境有关
正常打开是可以运行的

yslyxqysl 发表于 2009-10-6 18:54

我分析了一下,原因如下
1.似乎LZ忘记了批处理的后缀名并不止.bat,还有.cmd
2.最主要的是def的烂BP不支持混合编程

lxj 发表于 2009-10-10 13:40

无第三方工具的感觉用起来很舒服.但抖动有点晃眼.眼睛有点吃不消..

zhujihong 发表于 2009-10-13 07:47

楼主真牛人也!!!

kevin2008 发表于 2009-10-20 13:32

牛人,楼主太牛了!~

opolokoi 发表于 2009-11-10 17:10

我就是看到了这个帖子,让我一定要注册,一定要顶。

wgoxm521 发表于 2010-2-1 15:42

回复 6楼 的帖子

O(∩_∩)O~有意思,好玩。

acaigg 发表于 2011-1-4 16:25

两个字:强大。收藏并学习。

飛雪 发表于 2015-2-27 07:51

來試玩看看
雖然沒有UI

i670 发表于 2015-2-27 09:39

加速键能不能设为按下才加

eddf 发表于 2015-5-21 11:00

[b][size=7]:)不能在WIN7环境下运行! [/size][/b]

eddf 发表于 2015-5-21 11:00

[b]不能在WIN7环境下运行![color=Red][/color][/b]

页: [1] 2

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.