Board logo

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

作者: wxcute    时间: 2009-3-8 12:56     标题: [ 新手习题 小结 ] 批处理随机显示俄罗斯方块中一种图案

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

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

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

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

■■■ ■■■
■     ■

 ■
■■■

■■   ■■
 ■■ ■■

■■
■■


[ 本帖最后由 wxcute 于 2009-3-8 13:00 编辑 ]
作者: dongdong    时间: 2009-3-8 14:10

@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
作者: dongdong    时间: 2009-3-8 14:13

我新手  只能做到这样了  期待高手指点了
作者: stuqx    时间: 2009-3-8 14:37

  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 编辑 ]
作者: stuqx    时间: 2009-3-8 15:01

学习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 编辑 ]
作者: dongdong    时间: 2009-3-8 17:07

学习了 看来我把问题复杂化了
作者: dongdong    时间: 2009-3-8 17:20

发错了 抱歉

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


作者: stuqx    时间: 2009-3-8 18:52

7楼的什么意思

输出这个有什么意思么
作者: stuqx    时间: 2009-3-8 19:01

不知道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 编辑 ]
作者: keen    时间: 2009-3-9 13:04

我看了二楼的代码,自己写的,但感觉整个代码繁琐,请大大赐教!
  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
复制代码

作者: 绿地流年    时间: 2009-3-11 20:19     标题: 业务实

是否则是丝毫无法
作者: netbenton    时间: 2009-5-18 22:40

  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 编辑 ]
作者: caruko    时间: 2010-4-1 15:37

纯数字随机生成,翻转功能没做,但是在此基础实现不难,个位跟十位对换就可以了...
  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 编辑 ]
作者: honeybat    时间: 2010-4-18 10:01

  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
复制代码

作者: 634175535    时间: 2010-4-25 13:45

这个可以用%RANDOM%这个生成1-7七个随机数来控制,如果生成1就是显示第一个图形,2就是第二个图形
·······
作者: 634175535    时间: 2010-4-25 13:47

@echo off  
title=随机显示俄罗斯方块
:0
cls
set/a a=%random% %%7
if %a%==0 goto 1
if %a%==1 goto 2
if %a%==2 goto 3
if %a%==3 goto 4
if %a%==4 goto 5
if %a%==5 goto 6
if %a%==6 goto 7
:1
echo.&echo.
echo                                ■■■■
pause>nul&&goto 0
:2
echo.&echo.
echo                                ■■■
echo                                ■     
pause>nul&&goto 0
:3
echo.&echo.
echo                                ■■■
echo                                ■
pause>nul&&goto 0
:4
echo.&echo.
echo                                  ■
echo                                ■■■
pause>nul&&goto 0
:5
echo.&echo.
echo                                ■■  
echo                                  ■■ 
pause>nul&&goto 0
:6
echo.&echo.
echo                                  ■■
echo                                ■■
pause>nul&&goto 0
:7
echo.&echo.
echo                                ■■
echo                                ■■
pause>nul&&goto 0




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2