找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 31504|回复: 17

[ 新手习题 小结 ] 批处理随机显示俄罗斯方块中一种图案

[复制链接]
发表于 2009-3-8 12:56:17 | 显示全部楼层 |阅读模式
[ 新手习题 小结 ] 随机显示俄罗斯方块中一种图案

目的:学会怎么将变量转化为图案,以达到格式化输出的目的。

要求:随机显示其中一种图案。

评分:代码可读性 1 分,思路新颖独特 2 分;
   首个新方法 6 分,第二个 4 分,依次类推,最少 2 分;
   图案有旋转变形另加 2 分;
   一人多种方法,新方法追加 3 分,已经出现过的方法追加 1 分。
■■■■

■■■ ■■■
■     ■

 ■
■■■

■■   ■■
 ■■ ■■

■■
■■


[ 本帖最后由 wxcute 于 2009-3-8 13:00 编辑 ]
发表于 2009-3-8 14:10:07 | 显示全部楼层
@echo off
setlocal enabledelayedexpansion
set dst=■■■■
set /a x=%random%%%4
set /a num=4-%X%
if not %x%==0 (goto :_get) else (goto :_next)
: _get
if not %num%==0  (
for %%c in (%dst%) do (
set mm=%%c
echo !mm:~0,%x%!  
echo. &&echo !mm:~0,%num%! 2>nul
pause>nul )  
) else (echo !mm:~0,%x%!)
goto :end
: _next
echo !mm:~0,%num%!
:end

评分

参与人数 1PB +6 收起 理由
wxcute + 6 “初具规模”了。请用 CODE 将代码闭合,参 ...

查看全部评分

发表于 2009-3-8 14:13:26 | 显示全部楼层
我新手  只能做到这样了  期待高手指点了
发表于 2009-3-8 14:37:41 | 显示全部楼层
  1. @echo off
  2. :begin
  3. set /a num=%RANDOM%%%8
  4. if !num!==1 (goto 1)
  5. if !num!==2 (goto 2)
  6. if !num!==3 (goto 3)
  7. if !num!==4 (goto 4)
  8. if !num!==5 (goto 5)
  9. if !num!==6 (goto 6)
  10. if !num!==7 (goto 7)
  11. if !num!==0 (goto begin)

  12. :1
  13. echo ■■■■
  14. goto :eof

  15. :2
  16. echo ■■■
  17. echo ■
  18. goto :eof

  19. :3
  20. echo ■■■
  21. echo   ■
  22. goto :eof

  23. :4
  24. echo  ■
  25. echo ■■■
  26. goto :eof

  27. :5
  28. echo ■■ 
  29. echo  ■■
  30. goto :eof

  31. :6
  32. echo  ■■
  33. echo ■■
  34. goto :eof

  35. :7
  36. echo ■■
  37. echo ■■
  38. goto :eof
复制代码


不好意思  没注意到

[ 本帖最后由 stuqx 于 2009-3-8 20:24 编辑 ]

评分

参与人数 1PB +6 收起 理由
wxcute + 6 方法不错。但代码有点问题:变量未闭合!

查看全部评分

发表于 2009-3-8 15:01:53 | 显示全部楼层
学习2楼的  将我的随机数改一下  呵呵 这样可以少个步骤

结果如下
  1. @echo off
  2. set /a num=%RANDOM%%%7
  3. set /a num=7-%num%

  4. if !num!==1 (goto 1)

  5. if !num!==2 (goto 2)

  6. if !num!==3 (goto 3)

  7. if !num!==4 (goto 4)

  8. if !num!==5 (goto 5)

  9. if !num!==6 (goto 6)

  10. if !num!==7 (goto 7)

  11. :1
  12. echo ■■■■
  13. goto :eof

  14. :2
  15. echo ■■■
  16. echo ■
  17. goto :eof

  18. :3
  19. echo ■■■
  20. echo   ■
  21. goto :eof

  22. :4
  23. echo  ■
  24. echo ■■■
  25. goto :eof

  26. :5
  27. echo ■■ 
  28. echo  ■■
  29. goto :eof

  30. :6
  31. echo  ■■
  32. echo ■■
  33. goto :eof

  34. :7
  35. echo ■■
  36. echo ■■
  37. goto :eof
复制代码

[ 本帖最后由 stuqx 于 2009-3-8 20:25 编辑 ]
发表于 2009-3-8 17:07:53 | 显示全部楼层
学习了 看来我把问题复杂化了
发表于 2009-3-8 17:20:20 | 显示全部楼层
发错了 抱歉

───────────────── 版主回复 ─────────────────
执行:wxcute [2009-03-08]
回复:发现发错了帖子可以进行删除,参考如下帮助
   http://bbs.bathome.net/thread-2850-1-4.html
   如何编辑(修改)帖子
───────────────── 版主回复 ─────────────────

发表于 2009-3-8 18:52:08 | 显示全部楼层
7楼的什么意思

输出这个有什么意思么
发表于 2009-3-8 19:01:43 | 显示全部楼层
不知道7楼发的是做什么用的   不过我也写一个
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%a in (0,1,7) do (
  4. set b=%%a
  5. b=b+b
  6. echo !b! >>a.txt
  7. )
复制代码

[ 本帖最后由 stuqx 于 2009-3-8 19:03 编辑 ]
发表于 2009-3-9 13:04:45 | 显示全部楼层
我看了二楼的代码,自己写的,但感觉整个代码繁琐,请大大赐教!
  1. @echo off

  2. set /a x=%random%%%3
  3. set /a y=3-%x%
  4. set d1=■■■■
  5. set d2=■■■■

  6. if %y% equ 3 goto 3
  7. if %y% equ 2 goto 2
  8. if %y% equ 1 goto 1

  9. :3
  10. echo %d1% &pause>nul &&exit

  11. :2
  12. call :suiji
  13. if %z%==0 echo %d1:~0,2% &echo. &echo %d2:~0,2% &pause>nul &&exit
  14. if %z%==1 echo %d1:~0,2% &echo. &echo   %d2:~1,2% &pause>nul &&exit
  15. if %z%==2 echo   %d1:~1,2% &echo. &echo %d2:~0,2% &pause>nul &&exit

  16. :1
  17. call :suiji
  18. if %z%==0 echo   %d1:~1,1% &echo. &echo %d2:~0,3% &pause>nul &&exit
  19. if %z%==1 echo %d1:~0,3% &echo. &echo %d2:~0,1% &pause>nul &&exit
  20. if %z%==2 echo %d1:~0,3% &echo. &echo     %d2:~2,1% &pause>nul &&exit

  21. :suiji
  22. set /a z=%random%%%3
  23. goto :eof
复制代码

评分

参与人数 1PB +6 收起 理由
wxcute + 6 效果不错,继续努力。 使用了截取判断,好 ...

查看全部评分

发表于 2009-3-11 20:19:42 | 显示全部楼层

业务实

是否则是丝毫无法

评分

参与人数 1PB -2 收起 理由
Batcher -2 恶意灌水

查看全部评分

发表于 2009-5-18 22:40:10 | 显示全部楼层

  1. @echo off&setlocal enabledelayedexpansion
  2. set a1=■■■■
  3. set a2=■■ ■■
  4. set a3=■■ @■■
  5. set a4=■ ■ ■ ■
  6. set a5=■ ■■ @■
  7. set a6=■■ @■ @■
  8. set a7=■■■ @■
  9. set a8=@■ ■■ ■
  10. set a9=@■■ ■■
  11. set a0=@■ ■■■
  12. :lp
  13. for %%a in (!a%random:~-1%!) do (set str=%%a&echo;!str:@=  !)
  14. pause&goto :lp
复制代码

[ 本帖最后由 netbenton 于 2009-5-18 22:42 编辑 ]

评分

参与人数 1PB +5 收起 理由
wxcute + 5 好思路。

查看全部评分

发表于 2010-4-1 15:37:38 | 显示全部楼层
纯数字随机生成,翻转功能没做,但是在此基础实现不难,个位跟十位对换就可以了...
  1. @echo off
  2. title 俄罗斯方块
  3. color 0a
  4. setlocal enabledelayedexpansion
  5. :main
  6. call :go
  7. ping -n 2 127.1 >nul
  8. goto :main

  9. :go
  10. call :rdvar 4
  11. set /a value=var*10
  12. call :rdvar 4
  13. set /a value=value+var
  14. set /a _xy_1=value
  15. set /a _%value%=1
  16. for /l %%a in (2,1,4) do (
  17.       call :fd !value!
  18.       set _xy_%%a=!value!
  19. )
  20. rem set _
  21. call :display
  22. goto :eof


  23. ::::::产生随机数,如果是cal:rdvar2,就同时返回0,1:::::::
  24. :rdvar
  25. set /a var=%RANDOM%*%1/32768+1
  26. if %1 equ 2 (
  27.     set /a rt=var-1
  28.     exit /b !rt!
  29. )
  30. goto :eof


  31. ::::::::产生指定坐标周围4个坐标,并去除不合格坐标,从中随机得到一个::::::::::::
  32. :fd
  33. set /a x=%1 / 10 & set /a y=%1 %% 10
  34. set /a xy_1=^(x+1^)*10+y & set /a xy_2=^(x-1^)*10+y &set /a xy_3=x*10+y+1 & set /a xy_4= x*10+y-1
  35. if %x% LEQ 1 set "xy_2="
  36. if %x% GEQ 4 set "xy_1="
  37. if %y% LEQ 1 set "xy_4="
  38. if %y% GEQ 4 set "xy_3="
  39. set /a n=0
  40. for /l %%i in (1,1,4) do (
  41.       set xy=!xy_%%i!
  42.       if !xy!.==. set /a n-=1
  43.       if defined _!xy! ( set "xy_%%i=" ) else ( set /a n+=1 )
  44.    )   
  45. set vstr=%xy_1% %xy_2% %xy_3% %xy_4%
  46. if %n% EQU 1 (
  47.       set /a value=vstr
  48.       set /a _!value!=1
  49.       goto :eof
  50.    )
  51. call :rdvar %n%
  52. for /f "tokens=%var%" %%c in ("!vstr!") do (
  53.       set /a value=%%c
  54.       set /a _!value!=1
  55.    )
  56. goto :eof


  57. :display
  58. for /l %%c in (1,1,4) do (
  59.       echo;
  60.       for /l %%l in (1,1,4) do (
  61.             if defined _%%c%%l (set/p "=■"<nul) else (set/p "=  "<nul)
  62.             set _%%c%%l=
  63.         )
  64.     )
  65. echo;
复制代码

[ 本帖最后由 caruko 于 2010-4-1 16:09 编辑 ]
发表于 2010-4-18 10:01:31 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :begin
  4. set n=■
  5. set /a x=%random%%%4+1
  6. if !x!==4 cls&echo %n%%n%%n%%n%
  7. if !x!==3 (set /a y=%random%%%3+1)&echo !y!&(if !y!==1 cls&echo %n%%n%%n%&echo %n%)&(if !y!==2 cls&echo %n%%n%%n%&echo   %n%)&(if !y!==3 cls&echo %n%%n%%n%&echo     %n%)
  8. if !x!==2 (set /a y=%random%%%5+1)&(if !y!==1 cls&echo %n%%n%&echo %n%%n%)&(if !y!==2 cls&echo %n%%n%&echo   %n%%n%)&(if !y!==3 cls&echo   %n%%n%&echo %n%%n%)&(if !y!==4 cls&echo %n%%n%&echo %n%&echo %n%)&(if !y!==5 cls&echo %n%%n%&echo   %n%&echo   %n%)
  9. if !x!==1 (set /a y=%random%%%8+1)&(if !y!==1 cls&echo %n%&echo %n%&echo %n%&echo %n%)&(if !y!==2 cls&echo %n%&echo %n%%n%&echo   %n%)&(if !y!==3 cls&echo   %n%&echo %n%%n%&echo %n%)&(if !y!==4 cls&echo   %n%&echo %n%%n%%n%)&(if !y!==5 cls&echo %n%&echo %n%%n%&echo %n%)&(if !y!==6 cls&echo   %n%&echo %n%%n%&echo   %n%)&(if !y!==7 cls&echo %n%&echo %n%&echo %n%%n%)&(if !y!==8 cls&echo   %n%&echo   %n%&echo %n%%n%)
  10. pause>nul
  11. goto begin
复制代码
发表于 2010-4-25 13:45:45 | 显示全部楼层
这个可以用%RANDOM%这个生成1-7七个随机数来控制,如果生成1就是显示第一个图形,2就是第二个图形
·······
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 06:21 , Processed in 0.025165 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表