批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程
[批处理文件精品]批处理版照片整理器[批处理文件精品]纯批处理备份&还原驱动在线第三方下载
返回列表 发帖

彩色版俄罗斯方块[BAT+POWERSHELL混编]

本帖最后由 aa77dd@163.com 于 2016-10-7 17:37 编辑

转自 Dostips

http://www.dostips.com/forum/vie ... &p=46206#p46206

我一直不想学 Powershell, 不过现在看到这个东东弄彩色, 感觉也蛮好玩的

又发现, 还有鼠标可以控制方块左右移动,  Powershell 这东东还是有点用啊, 哈哈

Ohohohoh, 它用的 850 代码页,  我们是 936 DANG 啊, 有点水土不服, 先看颜色吧, 这个代码页主要就关系到显示能不能正常了, 比如字符形状, 位置, 谁感兴趣修改下, 或者我某时再改下

原帖下面没几楼还有个 彩色版的 2048 [2048 是啥? 君请自行gg吧]

  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. if "%~1" neq "" goto %1
  4. rem Written by Antonio Perez Ayala
  5. rem http://www.dostips.com/forum/viewtopic.php?f=3&t=6812
  6. rem Reference: http://colinfahey.com/tetris/tetris.html
  7. rem 2015/11/27 - version 1.0
  8. rem 2016/03/31 - version 2.0: Use PowerShell to read arrow keys and mouse movements
  9. rem 2016/04/11 - version 3.0: Use PowerShell to show text in color
  10. rem 2016/04/12 - version 3.1: Synchronization problem fixed, change window/buffer size bug fixed
  11. rem http://www.dostips.com/forum/viewtopic.php?f=3&t=6936&p=46206#p46206
  12. rem The best appearance is obtained with a square font, like Raster Font 8x8
  13. color 0F
  14. chcp 850 > NUL
  15. cls
  16. echo/
  17. echo ===  Pure .BATch-file Tetris game by Aacini  ===
  18. echo/
  19. echo/
  20. echo Tetris pieces are controlled with these keys:
  21. echo/
  22. echo                                 rot.right
  23. echo                                     ^^
  24. echo rot.               rot.     move    ^|     move
  25. echo left ^<ÄÄ A S D ÄÄ^> right    left ^<ÄÄúÄÄ^> right
  26. echo            ^|                        ^|
  27. echo            v                        v
  28. echo        soft drop                hard drop
  29. echo/
  30. echo Mouse movements emulate arrow key presses,
  31. echo left button pause/continue the game.
  32. echo/
  33. echo/
  34. echo Press P to pause/continue; press N to end game.
  35. echo/
  36. echo/
  37. pause
  38. cls
  39. rem Field dimensions
  40. set /A cols=10, lines=20
  41. set /P "=Loading PS engine..." < NUL
  42. cd . > pipeFile.txt
  43. "%~F0" Input >> pipeFile.txt  |  "%~F0" Main < pipeFile.txt  |  "%~F0" Output
  44. ping localhost -n 2 > NUL
  45. del pipeFile.txt
  46. goto :EOF
  47. :Input
  48. set "letter=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  49. for /L %%i in (0,1,25) do (
  50.    set /A "Letter!letter:~%%i,1!=%%i+65"
  51. )
  52. set /A "LeftArrow=37, UpArrow=38, RightArrow=39, DownArrow=40"
  53. PowerShell  ^
  54.    $mouseSens = 10;  ^
  55.    $command = @{     ^
  56.       %LeftArrow%  = 'Dx=-1';  ^
  57.       %RightArrow% = 'Dx=1';   ^
  58.       %DownArrow%  = 'del=3';  ^
  59.       %UpArrow%    = 'R=-1';   ^
  60.       %LetterA%    = 'R=1';    ^
  61.       %LetterD%    = 'R=-1';   ^
  62.       %LetterS%    = 'Dy=-1';  ^
  63.       %LetterY%    = 'Y';      ^
  64.       %LetterN%    = 'N=1';    ^
  65.       %LetterP%    = 'pause=1';  ^
  66.    };  ^
  67.    [Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') ^| Out-Null; ^
  68.    $lX = [System.Windows.Forms.Control]::MousePosition.X; ^
  69.    $lY = [System.Windows.Forms.Control]::MousePosition.Y; ^
  70.    Start-Sleep -m 1500;  ^
  71.    Write-Output 0;  ^
  72.    while ( $key -ne %LetterN% ) {  ^
  73.       if ( $Host.UI.RawUI.KeyAvailable ) {  ^
  74.          $key = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyUp').VirtualKeyCode;  ^
  75.          Write-Output $command[$key];  ^
  76.       } else {  ^
  77.          $mX = [System.Windows.Forms.Control]::MousePosition.X;  ^
  78.          $mY = [System.Windows.Forms.Control]::MousePosition.Y;  ^
  79.          $mB = [System.Windows.Forms.Control]::MouseButtons;     ^
  80.          $dX = $mX - $lX;  $dY = $mY - $lY;  ^
  81.          if ( [math]::abs($dX) -gt $mouseSens ) {   ^
  82.             $if = if ($dX -lt 0) {%LeftArrow%} else {%RightArrow%};  ^
  83.             Write-Output $command[$if];  ^
  84.             $lX = $mX;  $lY = $mY;  ^
  85.          } else { if ( [math]::abs($dY) -gt $mouseSens ) {  ^
  86.             $if = if ($dY -lt 0) {%UpArrow%} else {%DownArrow%};  ^
  87.             Write-Output $command[$if];  ^
  88.             $lX = $mX;  $lY = $mY;  ^
  89.          } else { if ( $mB -eq 'Left' ) {  ^
  90.             Write-Output $command[%LetterP%];  ^
  91.          }}}  ^
  92.       }  ^
  93.       Start-Sleep -m 100;  ^
  94.    }
  95. %End PowerShell%
  96. echo Ending game... > CON
  97. exit
  98. :Output
  99. rem Parameters received via lines read have one of these four forms:
  100. rem - 'cls' = Clear screen and initialize the field
  101. rem - X,Y  =  Move cursor to X,Y position
  102. rem - X,Y,'ColorString' = Move cursor to such position and show the "Color Codes String"
  103. rem - X,Y,Color,Wide = Move cursor to such position and show Wide chars in given Color;
  104. rem                    if Color is '=', show an equal-sign character Wide times
  105. rem - 'del',Filename = Delete the given file (for synchro purposes)
  106. PowerShell  ^
  107.    function ClearScreen () {  ^
  108.       cls; for ( $i=0; $i -lt $lnN; ++$i ) { Write-Host; Write-Host }  ^
  109.       Write-Host -NoNewLine (' '*2); Write-Host "ú$frame¿";  ^
  110.       for ( $i=1; $i -le %lines%*$lnN; ++$i ) { Write-Host -NoNewLine (' '*2); Write-Host "3$spc3" }  ^
  111.       Write-Host -NoNewLine (' '*2); Write-Host "à$frameù";  ^
  112.       Write-Host -NoNewLine (' '*2); Write-Host ' Level: 1';  ^
  113.       Write-Host -NoNewLine (' '*3); Write-Host ' Rows: 0';  ^
  114.       Write-Host -NoNewLine (' '*2); Write-Host ' Score: 0';  ^
  115.    }  ^
  116.    $console = $Host.UI.RawUI;  ^
  117.    $console.WindowTitle = 'Tetris.BAT by Aacini';  ^
  118.    $curSize = $console.CursorSize;  ^
  119.    $console.CursorSize = 0;  ^
  120.    for ( $i=1; $i -le 3; ++$i ) {  ^
  121.       if ( $i*(%lines%+2)+6 -le $console.MaxPhysicalWindowSize.Height ) { $lnN = $i } ^
  122.    }  ^
  123.    $col = $lnN*%cols%+6;  $lin = $lnN*(%lines%+2)+6;  ^
  124.    $winSize = $console.WindowSize; $bufSize = $console.BufferSize;  ^
  125.    $winSize.Width = $col;  $bufSize.Width = $col;  ^
  126.    if ( $col -lt $console.WindowSize.Width ) {  ^
  127.       $console.WindowSize = $winSize; $console.BufferSize = $bufSize;  ^
  128.    } else {  ^
  129.       $console.BufferSize = $bufSize; $console.WindowSize = $winSize;  ^
  130.    }  ^
  131.    $winSize.Height = $lin; $bufSize.Height = $lin;  ^
  132.    if ( $lin -lt $console.WindowSize.Height ) {  ^
  133.       $console.WindowSize = $winSize; $console.BufferSize = $bufSize;  ^
  134.    } else {  ^
  135.       $console.BufferSize = $bufSize; $console.WindowSize = $winSize;  ^
  136.    }  ^
  137.    $ln = ( ('X'), ('úa','àù'), ('úÄ¿','3 3','àÄù') )[$lnN-1];  ^
  138.    $frame = ''; $spc = ''; for ( $i=1; $i -le $col-6; ++$i ) { $frame+='Ä'; $spc+=' '; }  ^
  139.    $coords = $console.CursorPosition;  ^
  140.    foreach ( $line in $input ) {  ^
  141.       $X,$Y,$Color,$Wide = $line.Split(',');  ^
  142.       if ( $X -eq 'cls' ) {  ^
  143.          ClearScreen  ^
  144.       } else { if ($X -eq 'del') {  ^
  145.          del $Y  ^
  146.       } else {  ^
  147.          $coords.X = 3 + ([int]$X-1) * $lnN;  ^
  148.          $Y = [int]$Y; $coords.Y = (%lines%+3-$Y) * $lnN ;  ^
  149.          if ( $Y -le %lines% ) { $coords.Y -= $lnN-1 }  ^
  150.          if ( $Y -lt 0 ) { $coords.Y += $Y*($lnN-1) }  ^
  151.          $console.CursorPosition = $coords;  ^
  152.          if ( $Wide ) {  ^
  153.             $Wide = [int]$Wide;  ^
  154.             if ( $Color -ne '=' ) {  ^
  155.                $Color = [int]('0x'+$Color);  ^
  156.                for ( $i=0; $i -lt $lnN; ++$i ) {  ^
  157.                   for ( $j=0; $j -lt $Wide; ++$j ) {  ^
  158.                      Write-Host  -BackgroundColor $Color  -ForegroundColor 'Black'  -NoNewLine  $ln[$i]  ^
  159.                   }  ^
  160.                   ++$coords.Y; $console.CursorPosition = $coords;  ^
  161.                }  ^
  162.             } else {  ^
  163.                for ( $i=0; $i -lt $lnN; ++$i ) {  ^
  164.                   Write-Host  ('='*($Wide*$lnN));  ^
  165.                   ++$coords.Y; $console.CursorPosition = $coords;  ^
  166.                }  ^
  167.             }  ^
  168.          } else { if ( $Color ) {  ^
  169.             for ( $i=0; $i -lt $lnN; ++$i ) {  ^
  170.                for ( $j=0; $j -lt $Color.Length; ++$j ) {  ^
  171.                   $colr = [int]('0x'+$Color[$j]);  ^
  172.                   Write-Host  -BackgroundColor $colr  -ForegroundColor 'Black'  -NoNewLine  $ln[$i]  ^
  173.                }  ^
  174.                ++$coords.Y; $console.CursorPosition = $coords;  ^
  175.             }  ^
  176.          }}  ^
  177.       }}  ^
  178.    }  ^
  179.    $console.CursorSize = $curSize;
  180. %End PowerShell%
  181. exit /B
  182. :Main
  183. (
  184.    for /F "delims==" %%v in ('set') do set "%%v="
  185.    set /A cols=%cols%, lines=%lines%
  186. )
  187. rem Initialize the Field
  188. for /L %%i in (1,1,%cols%) do set "spc=!spc!0"
  189. for /L %%i in (1,1,%lines%) do set "F%%i=3%spc%3"
  190. set /A "Level=1, Rows=0, Score=0,  top=lines+3, delay=50"
  191. rem The pieces are defined via 3 groups of values:  Piece : Color : Orientations
  192. rem The ":orientations:" (piece positions) are defined via "triplets":
  193. rem (offset Y . offset X . length X); one "triplet" for each horizontal line
  194. rem See: http://colinfahey.com/tetris/tetris.html
  195. set "pcs="
  196. for %%t in ( "O:9:0.-1.2 -1.-1.2"
  197.              "I:C:0.-2.4:1.0.1 0.0.1 -1.0.1 -2.0.1"
  198.              "S:A:0.0.2 -1.-1.2:1.0.1 0.0.2 -1.1.1"
  199.              "Z:B:0.-1.2 -1.0.2:1.1.1 0.0.2 -1.0.1"
  200.              "L:D:0.-1.3 -1.-1.1:1.0.1 0.0.1 -1.0.2:1.1.1 0.-1.3:1.-1.2 0.0.1 -1.0.1"
  201.              "J:7:0.-1.3 -1.1.1:1.0.2 0.0.1 -1.0.1:1.-1.1 0.-1.3:1.0.1 0.0.1 -1.-1.2"
  202.              "T:E:0.-1.3 -1.0.1:1.0.1 0.0.2 -1.0.1:1.0.1 0.-1.3:1.0.1 0.-1.2 -1.0.1" ) do (
  203.    set "pc=%%~t" & set "i=-2"
  204.    for /F "delims=" %%p in (^"!pc::^=^
  205. % New line %
  206. !^") do (
  207.       if !i! equ -2 (
  208.          set "pc=%%p" & set "pcs=!pcs!%%p"
  209.       ) else if !i! equ -1 (
  210.          set "!pc!R=%%p"
  211.       ) else (
  212.          set "!pc!!i!=%%p"
  213.       )
  214.       set /A i+=1
  215.    )
  216.    set "!pc!N=!i!"
  217. )
  218. :WaitPS for PowerShell Input part start signal
  219.    set /P "com="
  220. if not defined com goto WaitPS
  221. set "com="
  222. set "init=1"
  223. for /L %%# in () do (
  224.    if defined init (
  225.       setlocal EnableDelayedExpansion
  226.       set "init="
  227.       echo cls
  228.       rem Create the first "previous" -hidden- piece
  229.       for /L %%i in (0,1,!time:~-1!) do set /A p=!random!%%7
  230.       for %%p in (!p!) do set "p2=!pcs:~%%p,1!"
  231.       for %%p in (!p2!) do set "p3=!%%p0!" & set "p4=!%%pN!" & set "p5=!%%pR!!%%pR!!%%pR!!%%pR!"
  232.       set "new=1"
  233.    )
  234.    if defined new (
  235.       set "new="
  236.       rem Take the "previous" piece as current one
  237.       set "pc=!p2!" & set "p0=!p3!" & set "pN=!p4!" & set "pR=!p5!"
  238.       rem Create a new "previous" piece
  239.       for /L %%i in (1,1,2) do (
  240.          set /A p=!random!*7/32768
  241.          for %%p in (!p!) do (
  242.             set "p=!pcs:~%%p,1!"
  243.             if !p! neq !pc! set "p2=!p!"
  244.          )
  245.       )
  246.       for %%p in (!p2!) do set "p3=!%%p0!" & set "p4=!%%pN!" & set "p5=!%%pR!!%%pR!!%%pR!!%%pR!"
  247.       rem Show the new "previous" piece in its place, above Field
  248.       set /A x=cols/2-1
  249.       for %%p in (!p3!) do (
  250.          for /F "tokens=1-3 delims=." %%i in ("%%p") do (
  251.             set /A yp=top+%%i, xp=2+%%j, xL=xp+%%k
  252.             for /F "tokens=1,2" %%a in ("!xp! !xL!") do (
  253.                set "pce=0000"
  254.                set "pce=!pce:~0,%%a!!p5:~0,%%k!!pce:~%%b!"
  255.                echo !x!,!yp!,!pce!
  256.             )
  257.          )
  258.       )
  259.       if !p2! equ I set /A yp=top-1 & echo !x!,!yp!,0000
  260.       rem Try to insert the new current piece in the Field...
  261.       set /A x=cols/2+1, y=lines,   b=1
  262.       for %%p in (!p0!) do (
  263.          for /F "tokens=1-3 delims=." %%i in ("%%p") do (
  264.             set /A yp=y+%%i, xp=x+%%j, xL=xp+%%k
  265.             for /F "tokens=1-3" %%a in ("!yp! !xp! !xL!") do (
  266.                if "!F%%a:~%%b,%%k!" neq "!spc:~0,%%k!" set     "b="
  267.                set "F%%a=!F%%a:~0,%%b!!pR:~0,%%k!!F%%a:~%%c!"
  268.                echo %%b,%%a,!F%%a:~%%b,1!,%%k
  269.             )
  270.          )
  271.       )
  272.       rem ... if that was not possible:
  273.       if not defined b call :endGame & endlocal
  274.       set "p1=!p0!"
  275.       set /A "pI=0, del=delay, b=1!time:~-2!"
  276.    )
  277.    rem Control module: move the piece as requested via a key, or down one row each %del% centiseconds
  278.    set "move="
  279.    set /A "Dy=Dx=0"
  280.    set /P "com="
  281.    if defined com (
  282.       set /A "!com!, move=1"
  283.       set "com="
  284.       if defined N exit
  285.       if "!pause!" equ "1" call :Pause & set "move="
  286.       set "b=1!time:~-2!"
  287.    ) else (
  288.       set /A "e=1!time:~-2!, elap=e-b, elap-=(elap>>31)*100"
  289.       if !elap! geq !del! set /A b=e, Dy=move=-1
  290.    )
  291.    if defined move (
  292.       rem Delete the piece from its current position in the field, and store current coordinates
  293.       set i=0
  294.       for %%p in (!p0!) do for /F "tokens=1-3 delims=." %%i in ("%%p") do (
  295.          set /A yp=y+%%i, xp=x+%%j, xL=xp+%%k
  296.          for /F "tokens=1-3" %%a in ("!yp! !xp! !xL!") do (
  297.             set "F%%a=!F%%a:~0,%%b!!spc:~0,%%k!!F%%a:~%%c!"
  298.             set /A i+=1
  299.             set "c!i!=%%a %%b %%c %%k"
  300.          )
  301.       )
  302.       rem If move is Rotate: get rotated piece
  303.       if defined R (
  304.          set /A "p=(pI+R+pN)%%pN"
  305.          for /F "tokens=1,2" %%i in ("!pc! !p!") do set "p1=!%%i%%j!"
  306.       )
  307.       rem Test if the piece can be placed at the new position, and store new coordinates
  308.       set j=0
  309.       for %%p in (!p1!) do if defined move (
  310.          for /F "tokens=1-3 delims=." %%i in ("%%p") do (
  311.             set /A yp=y+%%i+Dy, xp=x+%%j+Dx, xL=xp+%%k
  312.             for /F "tokens=1-3" %%a in ("!yp! !xp! !xL!") do (
  313.                if "!F%%a:~%%b,%%k!" equ "!spc:~0,%%k!" (
  314.                   set /A j+=1
  315.                   set "n!j!=%%a %%b %%c %%k"
  316.                ) else (
  317.                   set "move="
  318.                )
  319.             )
  320.          )
  321.       )
  322.       if defined move (
  323.          rem Clear the piece from its current position, on the screen
  324.          for /L %%i in (1,1,!i!) do (
  325.             for /F "tokens=1-4" %%a in ("!c%%i!") do (
  326.                echo %%b,%%a,!F%%a:~%%b,1!,%%d
  327.             )
  328.          )
  329.          rem Place the piece at the new position, both in field and screen
  330.          for /L %%j in (1,1,!j!) do (
  331.             for /F "tokens=1-4" %%a in ("!n%%j!") do (
  332.                set "F%%a=!F%%a:~0,%%b!!pR:~0,%%d!!F%%a:~%%c!"
  333.                echo %%b,%%a,!F%%a:~%%b,1!,%%d
  334.             )
  335.          )
  336.          rem Update any changes in the piece
  337.          set /A y+=Dy, x+=Dx
  338.          if defined R set "p0=!p1!" & set "pI=!p!" & set "R="
  339.       ) else (   rem The piece can not be moved
  340.          rem Recover the piece at its current position, in the field
  341.          for /L %%i in (1,1,!i!) do (
  342.             for /F "tokens=1-4" %%a in ("!c%%i!") do (
  343.                set "F%%a=!F%%a:~0,%%b!!pR:~0,%%d!!F%%a:~%%c!"
  344.             )
  345.          )
  346.          if defined R set "p1=!p0!" & set "R="
  347.          if !Dy! neq 0 (   rem The piece "lands"
  348.             rem Check completed lines
  349.             set "j=" & set "m=0"
  350.             for /L %%i in (1,1,!i!) do for /F %%a in ("!c%%i!") do (
  351.                if "!F%%a:0=!" equ "!F%%a!" (
  352.                   set "F%%a=X"
  353.                   set "j=!j! %%a"
  354.                   set /A m+=1
  355.                )
  356.             )
  357.             if !m! gtr 0 (
  358.                rem Blink completed lines on screen
  359.                for %%i in (!j!) do (
  360.                   echo 1,%%i,=,%cols%
  361.                )
  362.                rem Update level and scores
  363.                rem See: N-Blox at http://www.tetrisfriends.com/help/tips_appendix.php#rankingsystem
  364.                set /A "xp=Level*(40+((j-2>>31)+1)*60+((j-3>>31)+1)*200+((j-4>>31)+1)*900)"
  365.                set /A "Score+=xp, Rows+=j, xL=Level, Level=(Rows-1)/10+1"
  366.                if !Level! neq !xL! if !delay! gtr 5 set /A delay-=5
  367.                rem BEL Ctrl-G Ascii-7:
  368.                set /P "=" < NUL > CON
  369.                rem Remove completed lines from field
  370.                set "i=1"
  371.                for /L %%i in (1,1,%lines%) do (
  372.                   set "F!i!=!F%%i!"
  373.                   if "!F%%i!" neq "X" set /A i+=1
  374.                )
  375.                for /L %%i in (!i!,1,%lines%) do set "F%%i=3%spc%3"
  376.                rem Update scores and the whole field on screen
  377.                echo 1,-1
  378.                call :Delay 95
  379.                (
  380.                echo Level: !Level!
  381.                echo     Rows: !Rows!
  382.                echo    Score: !Score!
  383.                ) > CON
  384.                echo X > PSbusy.txt
  385.                for /L %%i in (%lines%,-1,1) do echo 1,%%i,!F%%i:~1,-1!
  386.                echo del,PSbusy.txt
  387.                call :WaitPSbusy
  388.             )
  389.             rem Request to show a new piece
  390.             set "new=1"
  391.          )
  392.       )
  393.    )
  394. )
  395. :endGame
  396. echo 1,-4
  397. echo X > PSbusy.txt
  398. echo del,PSbusy.txt
  399. call :WaitPSbusy
  400. set /P "=Play again? " < NUL > CON
  401. :choice
  402.    set /P "com="
  403. if not defined com goto choice
  404. if "%com%" equ "Y" exit /B
  405. if "%com:~0,1%" neq "N" set "com=" & goto choice
  406. echo N > CON
  407. exit
  408. :WaitPSbusy
  409.    if exist PSbusy.txt goto WaitPSbusy
  410. exit /B
  411. :Pause
  412. title PAUSED
  413. :wait
  414.    set /P "com="
  415.    if not defined com goto wait
  416. if "%com%" neq "pause=1" set "com=" & goto wait
  417. set "com="
  418. set "pause="
  419. title Tetris.BAT by Aacini
  420. exit /B
  421. :Delay centisecs
  422. set "b=1%time:~-2%"
  423. :wait2
  424.    set /A "e=1%time:~-2%, elap=e-b, elap-=(elap>>31)*100"
  425. if %elap% lss %1 goto wait2
  426. set "b=1%time:~-2%"
  427. exit /B
复制代码

光看代码就觉得,代价比学Csharp  C 做同样的事情要麻烦。
综合型编程论坛
Writing Code That Nobody Else Can Read.

TOP

回复 2# 523066680

一直不怎么喜欢用 VBS, 尽管最早学的语言就是 QB, 还做过一段时间的 ASP 开发, 可还是不待见 VBS, 而 BAT 呢, 如果要搞什么专业的东东, 根本使不上, 当然除了简单文件管理, 简单文本处理等等这些

而 BAT 的特色也就 简单灵活吧, 也就这点好玩了, 随时可以写, 不用编译, 有 windows 有 cmd 就成,

而 powershell , 好象 MS 把它定位成 BAT 接班的, 可是就是感觉不到一点血缘关系啊

TOP

本帖最后由 523066680 于 2016-10-7 21:43 编辑

回复 3# aa77dd@163.com

      最初凭兴趣学过c和bat,一点vbs,后来学过一段时间Perl。当我看到 Powershell,一点兴趣都没有,关键我也不是系统维护方面的工作,
它的那些优势对我来说一点用都没有,要方便有perl和python,要语法糖有ruby。加上论坛之前出现一个奇葩,自称Powershell传教士,直接
让我对powershell产生反感。
      抛开这些不说,我还是应该补补数学和物理

之前用Perl的Win32::Console模块做终端Wiki管理工具,用来做终端游戏应该还算方便。而做游戏,主要还是缺少时间和耐心,什么语言什么库已经不是大问题。
综合型编程论坛
Writing Code That Nobody Else Can Read.

TOP

返回列表