[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 CrLf 于 2011-10-15 23:13 编辑

这种长篇代码的问题,如果不了解他人的写作思路是想回答都无从入手...看了局部代码,作者的意图大致如此吧:
  1. echo 请选择要交换的牌(用12345表示)
  2. set slt=                                 
  3. for /l %%i in (1,1,5) do (  
  4. set slt%%i=
  5. )
  6. ::清空 slt[1-5] 变量的值,以免以往的输入影响下文判断
  7. set/p slt=
  8. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  9. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  10. for /l %%i in (0,1,4) do (
  11. set/a k=%%i+1
  12. set slt!k!=!slt:~%%i,1!
  13. rem 从左至右分别获取 slt 变量的字符为 slt[1-5] 的值
  14. if not defined slt!k! goto 3
  15. rem 假如当前字符为 slt 变量最后一个字符,则跳转到标签 :3
  16. )
复制代码
所以此段只是获取用户输入,并按字符切分,而实现换牌的关键代码是在 :3 中
  1. :3
  2. for /l %%i in (6,1,10) do (
  3. set/a vv=%%i-5
  4. set tleft!vv!=!left%%i!
  5. rem 获取 left 变量的第六到第十个字符为 tleft[1-5] 变量的值
  6. set tright!vv!=!right%%i!
  7. rem 同理
  8. set tpuke!vv!=!pk%%i!
  9. rem 同理
  10. )
  11. ::看这个 6 1 10 的范围,估计 left、right、pk 可能都是用于存储经过乱序排列后的可用牌序的变量吧,而 tleft[1-5]、tright[1-5]、tpuke[1-5] 这三组变量当然就是存储换牌之后的值了
  12. for /l %%j in (1,1,5) do (
  13. set left!slt%%j!=!tleft%%j!
  14. rem 将实现换牌,还记得 slt%%j 是什么吗?slt1~slt5 是用户输入的第 1~5 个字符,而 tleft[1-5] 则是刚才重新取出的五张牌,所以将 left!str[用户的输入]! 替换为 tleft[1-5] 就实现了换牌
  15. set right!slt%%j!=!tright%%j!
  16. rem 同理
  17. set pk!slt%%j!=!tpuke%%j!
  18. rem 同理
  19. )
  20. ::不了解 left 和 right 两组变量是干嘛用的,但是 pk 这组变量很明显就是指桌上的牌。
复制代码
小竹英雄写了不少游戏嘿嘿,不过这样的代码放在现在看是很粗糙的,简单处理一下就能瘦身三分之二以上...不是贬低前辈,而是因为技术在进步。

TOP

回复 6# bluewing009


    汗一个,我的意思是...代码太长往往是因为作者不懂得如何简化(比如不会用 for)或者加了太多没必要的内容(比如命令前一溜整齐的 @),但是我说的是“往往”啊有木有有木有...
    内牛满面,承认不该用地图炮,立刻把那段内容和谐掉,sorry

TOP

返回列表