Board logo

标题: [代码合集] 批处理梭哈美化版中的for语句有什么作用? [打印本页]

作者: hhx196    时间: 2011-10-10 13:23     标题: 批处理梭哈美化版中的for语句有什么作用?

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  4. ::以下是片头
  5. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  6. title "梭哈美化版  E-mail : bizhuang0917@126.com"
  7. echo 程序载入中,请稍后……
  8. for /l %%i in (1,1,25) do set/p a=^><nul&ping /n 0 127.1>nul
  9. cls
  10. mode con lines=13  
  11. color 2e
  12. echo.
  13. echo.
  14. echo.
  15. echo.
  16. echo.
  17. echo                   本程序仅用于学习交流,不得用于商业用途
  18. ping -n 2 127.1>nul
  19. cls
  20. echo.
  21. echo.
  22. echo.
  23. echo.
  24. echo         
  25. **************************************************************
  26. echo        *                    欢迎使用梭哈美化版                       
  27. *
  28. echo         
  29. **************************************************************
  30. ping -n 2 127.1>nul
  31. cls
  32. echo.
  33. echo.
  34. echo.
  35. echo.
  36. echo.
  37. echo                             作者:    小竹英雄
  38. ping -n 2 127.1>nul
  39. cls
  40. echo.
  41. echo.
  42. echo.
  43. echo.
  44. echo.
  45. echo                               英雄软件工作室
  46. ping -n 2 127.1>nul
  47. cls
  48. echo.
  49. echo.
  50. echo.
  51. echo.
  52. echo.
  53. echo                              版权所有,盗版或究
  54. ping -n 2 127.1>nul
  55. cls
  56. color 2e
  57. echo.
  58. echo.
  59. echo.
  60. echo
  61. echo 按任意键进入游戏……
  62. pause>nul
  63. mode con lines=25
  64. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  65. ::
  66. ::以下为投注
  67. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  68. ::
  69. :start
  70. set mymoney=1000
  71. set oncemoney=100
  72. :begin
  73. cls
  74. echo 赌神先生,您有赌资!mymoney!元
  75. echo 请投注
  76. set /p oncemoney=
  77. if not defined oncemoney echo  您没有投注!请重新投注!!&pause&goto begin
  78. if !oncemoney! gtr !mymoney! echo 投注错误!&pause&goto begin
  79. if !oncemoney! leq 0 echo 投注错误!&pause&goto begin
  80. if not defined oncemoney echo投注错误!&pause&goto begin
  81. set /a mymoney=!mymoney!-!oncemoney!
  82. cls
  83. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  84. ::
  85. ::以下发10张牌,其中有5张是用于交换牌时备用的。
  86. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  87. ::   
  88. for /l %%i in (1,1,52) do set a%%i=%%i
  89. set total=52
  90. set count=10
  91. ::发10张牌,其中有5张是备用的
  92. :1
  93. if %count% equ 0 goto 2
  94. set/a temp=%random%%%%total%+1
  95. set   pk%count%=!a%temp%!
  96. set/a a%temp%=!a%total%!
  97. set/a total=%total%-1
  98. set/a count=%count%-1
  99. goto 1
  100. :2
  101. for /l %%i in (1,1,10) do (
  102. set/a tt=!pk%%i!-1
  103. set/a flag%%i=!tt!/13
  104. set/a pk%%i=!pk%%i!%%13+1
  105. set left%%i=!flag%%i!
  106. set right%%i=!pk%%i!
  107. if !pk%%i! equ 13 set pk%%i=A
  108. if !pk%%i! equ 12 set pk%%i=K
  109. if !pk%%i! equ 11 set pk%%i=Q
  110. if !pk%%i! equ 10 set pk%%i=J
  111. if !pk%%i! equ 9 set pk%%i=10
  112. if !pk%%i! equ 8 set pk%%i=9
  113. if !pk%%i! equ 7 set pk%%i=8
  114. if !pk%%i! equ 6 set pk%%i=7
  115. if !pk%%i! equ 5 set pk%%i=6
  116. if !pk%%i! equ 4 set pk%%i=5
  117. if !pk%%i! equ 3 set pk%%i=4
  118. if !pk%%i! equ 2 set pk%%i=3
  119. if !pk%%i! equ 1 set pk%%i=2
  120. if !flag%%i! equ 3 set pk%%i=  !pk%%i!
  121. if !flag%%i! equ 2 set pk%%i=  !pk%%i!
  122. if !flag%%i! equ 1 set pk%%i=  !pk%%i!
  123. if !flag%%i! equ 0 set pk%%i= !pk%%i!
  124. )
  125. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  126. ::
  127. ::显示并让用户选择要交换的牌
  128. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::
  129. echo 同花大顺×500           大顺×300                 同花顺×100
  130. echo 顺子×50                 同花×30                    四条×20
  131. echo 葫芦×15                 三条×10                     两对×5
  132. echo ┏━━━━┓ ┏━━━━┓┏━━━━┓┏━━━━┓┏━━━━┓
  133. echo ┃!pk1!    ┃ ┃!pk2!    ┃┃!pk3!    ┃┃!pk4!    ┃┃!pk5!    ┃
  134. echo ┃        ┃ ┃        ┃┃        ┃┃        ┃┃        ┃
  135. echo ┃ Super  ┃ ┃ Super  ┃┃ Super  ┃┃ Super  ┃┃ Super  ┃
  136. echo ┃  Hero  ┃ ┃  Hero  ┃┃  Hero  ┃┃  Hero  ┃┃  Hero  ┃
  137. echo ┃        ┃ ┃        ┃┃        ┃┃        ┃┃        ┃
  138. echo ┃!pk1!    ┃ ┃!pk2!    ┃┃!pk3!    ┃┃!pk4!    ┃┃!pk5!    ┃
  139. echo ┗━━━━┛ ┗━━━━┛┗━━━━┛┗━━━━┛┗━━━━┛
  140. echo       1            2           3           4           5
  141. echo 请选择要交换的牌(用12345表示)
  142. set slt=                                 
  143. for /l %%i in (1,1,5) do (  
  144. set slt%%i=
  145. )
  146. set/p slt=
  147. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::[size=5]实现换牌 (怎么实现换牌的)[/size]
  148. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  149. ::
  150. for /l %%i in (0,1,4) do (
  151. set/a k=%%i+1
  152. set slt!k!=!slt:~%%i,1!
  153. if not defined slt!k! goto 3
  154. ) [size=5]::这个for语句有何用?[/size]
  155.                                                         
  156. :3
  157. for /l %%i in (6,1,10) do (
  158. set/a vv=%%i-5
  159. set tleft!vv!=!left%%i!
  160. set tright!vv!=!right%%i!
  161. set tpuke!vv!=!pk%%i!
  162. )
  163. for /l %%j in (1,1,5) do (
  164. set left!slt%%j!=!tleft%%j!
  165. set right!slt%%j!=!tright%%j!
  166. set pk!slt%%j!=!tpuke%%j!
  167. )
  168. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  169. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  170. echo ┏━━━━┓ ┏━━━━┓┏━━━━┓┏━━━━┓┏━━━━┓
  171. echo ┃!pk1!    ┃ ┃!pk2!    ┃┃!pk3!    ┃┃!pk4!    ┃┃!pk5!    ┃
  172. echo ┃        ┃ ┃        ┃┃        ┃┃        ┃┃        ┃
  173. echo ┃ Super  ┃ ┃ Super  ┃┃ Super  ┃┃ Super  ┃┃ Super  ┃
  174. echo ┃  Hero  ┃ ┃  Hero  ┃┃  Hero  ┃┃  Hero  ┃┃  Hero  ┃
  175. echo ┃        ┃ ┃        ┃┃        ┃┃        ┃┃        ┃
  176. echo ┃!pk1!    ┃ ┃!pk2!    ┃┃!pk3!    ┃┃!pk4!    ┃┃!pk5!    ┃
  177. echo ┗━━━━┛ ┗━━━━┛┗━━━━┛┗━━━━┛┗━━━━┛
  178. for /l %%i in (1,1,25) do set/p a=^><nul&ping /n 0 127.1>nul
  179. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  180. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  181. set samecolor=0
  182. set bigline=0
  183. set samecolor=0
  184. set sameline=0
  185. set samefour=0
  186. set hulu=0
  187. set samethree=0
  188. set twocouples=0
  189. set str=
  190. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  191. ::
  192. ::以下判断是否同花
  193. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  194. ::
  195. if %left1% equ !left2! if !left2! equ !left3! if !left3! equ !left4! if  
  196. !left4! equ !left5! set samecolor=1
  197. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  198. ::
  199. ::以下判断是否为顺子
  200. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  201. ::
  202. for /l %%i in (1,1,4) do (
  203. set/a w=%%i+1
  204. for /l %%j in (!w!,1,5) do (
  205. if  !right%%i! lss !right%%j! (
  206. set/a tt=!right%%i!
  207. set/a right%%i=!right%%j!
  208. set/a right%%j=!tt! ) ) )
  209. ::以上为排序
  210. set/a t1=%right5%+1
  211. set/a t2=%right4%+1
  212. set/a t3=%right3%+1
  213. set/a t4=%right2%+1
  214. if %right4% equ %t1% if %right3% equ %t2% if %right2% equ %t3% if  
  215. %right1% equ %t4% set sameline=1
  216. if !sameline! equ 1 if !right1! equ 13 set bigline=1
  217. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  218. ::
  219. ::以下是判断是否为两对,三条,四条,葫芦
  220. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  221. ::
  222. for /l %%i in (1,1,5) do (
  223. if !right%%i! equ 13 set right%%i=A
  224. if !right%%i! equ 12 set right%%i=K
  225. if !right%%i! equ 11 set right%%i=Q
  226. if !right%%i! equ 10 set right%%i=J
  227. if !right%%i! equ 9 set right%%i=T
  228. if !right%%i! equ 8 set right%%i=9
  229. if !right%%i! equ 7 set right%%i=8
  230. if !right%%i! equ 6 set right%%i=7
  231. if !right%%i! equ 5 set right%%i=6
  232. if !right%%i! equ 4 set right%%i=5
  233. if !right%%i! equ 3 set right%%i=4
  234. if !right%%i! equ 2 set right%%i=3
  235. if !right%%i! equ 1 set right%%i=2
  236. set str=!str!!right%%i!
  237. )
  238. for /l %%i in (1,1,4) do (
  239. set/a w=%%i+1
  240. for /l %%j in (!w!,1,5) do (
  241. if  !right%%i! equ !right%%j! (
  242. set e1=!right%%i!
  243. set e2=!right%%j!
  244. goto 4
  245. )
  246. )
  247. )
  248. goto 5
  249. :4
  250. set str=!str:%e1%=0!
  251. set h1=!str:~0,1!
  252. set h2=!str:~1,1!
  253. set h3=!str:~2,1!
  254. set h4=!str:~3,1!
  255. set h5=!str:~4,1!
  256. set box=0
  257. for /l %%i in (1,1,5) do (
  258. if !h%%i! equ 0 set/a box+=1
  259. )
  260. if !box! equ 4 set samefour=1&goto 5
  261. if !box! equ 3 (
  262. set str=!str:0=!
  263. set m=!str:~0,1!
  264. )
  265. ::此时m就有值了,否则m的值不正确!
  266. if !box! equ 3 (
  267. set str=!str:%m%=0!
  268. if !str! equ 00 set hulu=1&goto 5
  269. set samethree=1&goto 5
  270. )
  271. set str=!str:0=!
  272. set g1=!str:~0,1!
  273. set g2=!str:~1,1!
  274. set g3=!str:~2,1!
  275. if !g1! equ !g2! if !g2! equ !g3! set hulu=1&goto 5
  276. for /l %%i in (1,1,2) do (
  277. set/a w=%%i+1
  278. for /l %%j in (!w!,1,3) do (
  279. if !g%%i! equ !g%%j! (
  280. set twocouples=1&goto 5
  281. )
  282. )
  283. )
  284. goto 5
  285. :5
  286. set increase=0
  287. if !samecolor! equ 1 if !bigline! equ 1 set increase=501&goto 6
  288. if !bigline! equ 1 set increase=301&goto 6
  289. if !samecolor! equ 1 if !sameline! equ 1 set increase=101&goto 6
  290. if !sameline! equ 1 set increase=51&goto 6
  291. if !samecolor! equ 1 set increase=31&goto 6
  292. if !samefour! equ 1 set increase=21&goto 6
  293. if !hulu! equ 1 set increase=16&goto 6
  294. if !samethree! equ 1 set increase=11&goto 6
  295. if !twocouples! equ 1 set increase=6&goto 6
  296. :6
  297. if !increase! equ 501 echo 恭喜你,同花大顺!
  298. if !increase! equ 301 echo 恭喜你,大顺!
  299. if !increase! equ 101 echo 恭喜你,同花顺!
  300. if !increase! equ 51 echo 恭喜你,顺子!
  301. if !increase! equ 31 echo 恭喜你,同花!
  302. if !increase! equ 21 echo 恭喜你,四条!
  303. if !increase! equ 16 echo 恭喜你,葫芦!
  304. if !increase! equ 11 echo 恭喜你,三条!
  305. if !increase! equ 6 echo 恭喜你,两对!
  306. if !increase! equ 0 echo 对不起,什么都不是!
  307. pause
  308. set /a mymoney=!mymoney!+(!increase!*!oncemoney!)
  309. if !mymoney! leq 0 echo 输光了吧!还赌神呢,整个一白痴!&pause>nul&goto  
  310. end
  311. if !mymoney! geq 10000 echo 赌神果然名不虚传,您赢了!&pause>nul&goto  
  312. end
  313. cls
  314. goto begin
  315. :end
  316. cls
  317. echo 重玩一次?(是/y,否/n)
  318. set/p select=
  319. if !select! equ y goto start
  320. if !select! equ Y goto start
  321. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  322. ::以下是片尾
  323. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
复制代码
问题:
echo 请选择要交换的牌(用12345表示)
set slt=                                 
for /l %%i in (1,1,5) do (  
set slt%%i=
)
set/p slt=
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::实现换牌 (怎么实现换牌的)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::
for /l %%i in (0,1,4) do (
set/a k=%%i+1
set slt!k!=!slt:~%%i,1!
if not defined slt!k! goto 3
) ::这个for语句有何用?
哪位高手解释下,谢谢!
作者: cjiabing    时间: 2011-10-10 18:44

请修改题目和问题。
题目要说明你的是说明问题,不能简单地写“FOR语句问题”。
问题描述要清晰、简介,不要发那么多无用的东西。
另外,代码要用[code]框起来,不懂操作请看版规。
请尽快修改,否则关帖。
作者: garyng    时间: 2011-10-11 14:16

请看:如何用code标签把批处理代码括起来
作者: hhx196    时间: 2011-10-15 14:57

谢谢提醒
请问现在可以了吗?多指教
作者: CrLf    时间: 2011-10-15 17:19

本帖最后由 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 这组变量很明显就是指桌上的牌。
复制代码
小竹英雄写了不少游戏嘿嘿,不过这样的代码放在现在看是很粗糙的,简单处理一下就能瘦身三分之二以上...不是贬低前辈,而是因为技术在进步。
作者: bluewing009    时间: 2011-10-15 22:12

回复 5# CrLf


    我到现在还在维护的安全工具…………2K5行……虽然有个“病毒免疫”功能确实很费……可你说的真让我心寒………………
作者: CrLf    时间: 2011-10-15 23:12

回复 6# bluewing009


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




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