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