批处理俄罗斯方块

@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!^[email protected]%%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

for /f "tokens=1,2" %%a in (%~n0.tmp) do (

if %%b geq 6 (call :error %%b&exit)

if %%a neq !test! (

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!

if "%%b" equ "4" goto :jmpout

) 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

)

)

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

goto :p_lp

:error

if %1 equ 6 echo 谢谢使用,再见。。。

if %1 gtr 6 echo 对不起!choice.exe 文件不存在,不能运行。。。

ping -n 3 127.1 >nul

goto :eof

版权声明:本文为博主http://www.zuiniusn.com 原创文章,未经博主允许不得转载。

时间: 2024-10-30 16:20:15

批处理俄罗斯方块的相关文章

批处理写的俄罗斯方块

1 @echo off&rem 俄罗斯方块游戏,由netbenton编写,在bathome首发,完成时间:2009年9月25日 ver 2.0 2 if "%1" equ "para2" goto :para2 3 4 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 &qu

Windows Server下把BAT批处理注册成服务在后台运行且注销后能正常运行

批处理有如下特点: 1.登录到当前窗口运行时,如果关闭控制台会连同启动的程序一起关闭. 2.如果是以start /b的形式启动,那么同样也是在控制台关闭后者注销当前窗口也会一起关闭. 3.如果以vbs的形式启动,注销当前用户也会一起关闭. 有如下方式解决: 1.使用[任务计划]去启动批处理,里面有很多个触发点,可以选择[计算机启动时]触发也能达到开机启动的效果,而不用登录桌面. 2.有错误启动Windows Service方式,用[sc]命令注册服务,然后以cmd.exe的形式去启动(C:\Wi

【转】大数据批处理框架 Spring Batch全面解析

如今微服务架构讨论的如火如荼.但在企业架构里除了大量的OLTP交易外,还存在海量的批处理交易.在诸如银行的金融机构中,每天有3-4万笔的批处理作业需要处理.针对OLTP,业界有大量的开源框架.优秀的架构设计给予支撑:但批处理领域的框架确凤毛麟角.是时候和我们一起来了解下批处理的世界哪些优秀的框架和设计了,今天我将以Spring Batch为例,和大家一起探秘批处理的世界.初识批处理典型场景探秘领域模型及关键架构实现作业健壮性与扩展性批处理框架的不足与增强批处理典型业务场景对账是典型的批处理业务处

windows下运用批处理实现一键自动开启多个应用

工作时,我每天早上到公司,打开自己的电脑,都会有几个固定的软件(myeclipse,飞信,firefox,foxmail等).文件夹和文件需要打开,每天如此,感到很烦,浪费时间做重复的工作,于是想到一键点点击,然后可以打开所有自己需要打开的软件.文件.文件夹.想法很不错,用什么来实现呢?想来想去,觉得用批处理(.bat)来处理可以实现.于是就开始琢磨,查批处理相关的知识.最后终于搞出来了. [ ]

如何编写一个编译c#控制台应用程序的批处理程序

如何编写一个编译c#控制台应用程序的批处理程序 2011-03-22 18:14 dc毒蘑菇 | 浏览 579 次 最近在网上看了一个教程,是学C#的,但是我的机子上装不上vs,所以想写一个批处理来编译,因为每次都要我更改目录,然后复制路径,再编译,输出,特别的浪费时间,所以特来求助网友,希望帮帮忙 分享到: 2011-03-22 19:17 #快乐假期,智慧随行# 提问者采纳 不知道你有没有使用过ANT,你可以创建ANT脚本来构建你的应用程序.如果不是很了解,也不愿意编写的话,我介绍你一款可视

实现的乐趣——生成一批文件的批处理程序

生成一批文件的批处理程序 最近在看一个系列的教程,然后肯定要记笔记的是吧. 本是按部就班每看完一个视频建立一个文件记录笔记的,可天不如人意,断网了.趁着无事就想把那些笔记文件都先建立起来.但是课程有点多,一个个新建有点麻烦,就想到了批处理,这个操作文件so easy的语言. 实现的代码如下: rem 创建一批文件 @echo off cls echo. & echo Initialize... set filepath=%cd% set filetype=txt set beg=1 set en

tomcat启动批处理——setclasspath.bat

除了上面两个批处理,还有一个比较重要的脚本,即是setclasspath.bat,它主要负责寻找.检查JAVA_HOME和JRE_HOME两个变量. ******************************************************************************************** if ""%1"" ==""debug"" goto needJavaHome if not

WIN7优化批处理

@echo  off cls color 17 :main cls echo --------Window7优化批处理---------- echo. echo  1 -   一键优化 echo  2 -   优化服务 echo  3 -   清理垃圾 echo  4 -   优化注册表 echo  5 -   关闭默认共享 echo  6 -   关闭135,139,445,593,1025,23,21,25,137,138,20168,1024,3389,1029端口 echo  0 -  

批处理实现每日自动备份和清除数据库文件

说明 利用任务计划,每天指定时间执行批处理文件: 1.实现自动Copy数据库备份文件至另一台主机上 2.自动删除指定天数的备份文件 1.批处理文件代码 CopyDB2Lan (factory).bat ************************* 代码开始处 *************************  @echo off color 0e cls title Copy DB 到 镜像主机下 (by [email protected])... set desthost=\\172.