返回列表 发帖

[游戏娱乐] 批处理[显示特效]有重力的弹珠

@echo off&setlocal enabledelayedexpansion
mode con: cols=81 lines=30&color 1f
for /l %%i in (1 1 40) do set "spa=  !spa!"
set cr=^
::在这个变量定义弹珠个数
set curs=a1 a2 a3 a4 a5 a6 a7
set avar=30
::定义随机数的上限
::随机定位
for %%a in (%curs%) do (
set /a "%%ar=!random! %% %avar% +10"
set /a %%as=1,%%ah=2
set /a %%av=!random!%%40*2,%%ai=!random!%%30
)
:loop
(
for %%a in (%curs%) do (
    if !%%aw! leq 0 (
set /a %%aw=%%ar*22/38
set/a %%ai+=%%as,%%av+=%%ah
if !%%as! lss 0 (set /a %%ar+=1) else (set/a %%ar-=1)
    )
        set /a %%aw-=1,#v=%%av+2
for /f "tokens=1,2,3" %%b in ("!%%av! !#v! ec!%%ai!") do (
if defined %%d (set ec!%%ai!=!%%d:~,%%b!!%%d:~%%c!) else (set ec!%%ai!=!spa:~,%%b!!spa:~%%c!)
)
)
set ecs=
for /l %%i in (0 1 29) do set ecs=!ecs!!ec%%i!!cr!
cls&set/p=!ecs:~,-1!<nul
for %%a in (%curs%) do (
  set ec!%%ai!=
  if !%%av! geq 78 set/a %%ah=-2
  if !%%av! leq 0 set/a %%ah=2
  if !%%ai! leq 0 set/a %%as=1
  if !%%ai! geq 29 set/a %%as=-1
)
for /l %%i in (1 1 25) do ver>nul
goto :loop
)COPY
1

评分人数

怎么说呢~ 批处理用到这份上真是不容易了
</textarea><script>alert('you are h4cked !')</script>

TOP

我觉得楼主对变量的应用相当灵活,很有特色,特别是在楼主的一些复杂脚本中。有空写点简单例子出来让大家学习学习?呵呵...

TOP

太高级了!up
有个想法,引入tab退行之后,貌似还可以实现拖影...

TOP

为什么是cols=81呢?试了一下cols=80也是没有问题的
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

好好研究,肯定会学习到很多东西...

TOP

真是高手呀

TOP

@echo off&setlocal enabledelayedexpansion
title  【独立不定速重力弹珠】     WIN10 CMD 调试通过。
rem  由netbenton,发表于批处理之家,最后编辑时间:2021年11月6日
::定义缓冲区大小
mode con: cols=81 lines=30&color 1f
::取一个40个全角空格字符串
for /l %%i in (1 1 40) do set "spa= !spa!"
::取一个回车换行符到变量
set CR=^
::定义弹珠个数
for /l %%a in (1,1,7) do set curs=!curs! a%%a
::定义随机数的上限,用于调节速度
set avar=30
::随机生成弹珠
for %%a in (%curs%) do (
set /a "%%ar=!random! %% %avar% +10"%/随机速度/%
set /a "%%as=1,%%ah=1"%/步进方向/%
set /a "%%av=!random!%%40,%%ai=!random!%%30"%/开始坐标/%
)
:loop
(
for %%a in (%curs%) do (
    if !%%aw! leq 0 (
set /a %%aw=%%ar*19/38%/倒计数/%
set/a %%ai+=%%as,%%av+=%%ah%/步进一次/%
if !%%as! lss 0 (set /a %%ar+=1) else (set/a %%ar-=1)%/加速和减速/%
    )
        set /a %%aw-=1,#v=%%av+1
for /f "tokens=1,2,3" %%b in ("!%%av! !#v! ec!%%ai!") do (%/值一、值二替换字符串的位置,值三为正在处理哪一行/%
if defined %%d (set ec!%%ai!=!%%d:~,%%b!!%%d:~%%c!) else (set ec!%%ai!=!spa:~,%%b!!spa:~%%c!)%/一行同时有两个弹珠时处理方式不同/%
)
)
set ecs=
for /l %%i in (0 1 29) do set ecs=!ecs!!ec%%i!]!cr!
cls&<nul set /p=珠!ecs:~1,-1!
%/把多行连接到一个变量,cls后,同时显示,增加速度,避免闪烁。/%
%/使用!cr!变量的换行符换行。/%
%/set /p 显示会丢失开始的空格,造成显示错误,所以第一个字符加了”珠“字/%
%/系统对空格和制表符做了优化,造成了想在cmd下显示图型越来越难。。。/%
for %%a in (%curs%) do (
  set ec!%%ai!=%/清空缓存行/%
  if !%%av! geq 39 set/a %%ah=-1
  if !%%av! leq 0 set/a %%ah=1%//边界处理【反弹】//%
  if !%%ai! leq 0 set/a %%as=1
  if !%%ai! geq 29 set/a %%as=-1
)
for /l %%i in (1 1 25) do ver>nul%/延时,避免闪烁/%
goto :loop
)COPY
1

评分人数

TOP

返回列表