标题: [代码合集] 批处理梭哈美化版中的for语句有什么作用? [打印本页]
作者: hhx196 时间: 2011-10-10 13:23 标题: 批处理梭哈美化版中的for语句有什么作用?
- @echo off
- setlocal enabledelayedexpansion
- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ::以下是片头
- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- title "梭哈美化版 E-mail : bizhuang0917@126.com"
- echo 程序载入中,请稍后……
- for /l %%i in (1,1,25) do set/p a=^><nul&ping /n 0 127.1>nul
- cls
- mode con lines=13
- color 2e
- echo.
- echo.
- echo.
- echo.
- echo.
- echo 本程序仅用于学习交流,不得用于商业用途
- ping -n 2 127.1>nul
- cls
- echo.
- echo.
- echo.
- echo.
- echo
- **************************************************************
- echo * 欢迎使用梭哈美化版
- *
- echo
- **************************************************************
- ping -n 2 127.1>nul
- cls
- echo.
- echo.
- echo.
- echo.
- echo.
- echo 作者: 小竹英雄
- ping -n 2 127.1>nul
- cls
- echo.
- echo.
- echo.
- echo.
- echo.
- echo 英雄软件工作室
- ping -n 2 127.1>nul
- cls
- echo.
- echo.
- echo.
- echo.
- echo.
- echo 版权所有,盗版或究
- ping -n 2 127.1>nul
- cls
- color 2e
- echo.
- echo.
- echo.
- echo
- echo 按任意键进入游戏……
- pause>nul
- mode con lines=25
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ::
- ::以下为投注
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ::
- :start
- set mymoney=1000
- set oncemoney=100
-
- :begin
- cls
- echo 赌神先生,您有赌资!mymoney!元
- echo 请投注
- set /p oncemoney=
- if not defined oncemoney echo 您没有投注!请重新投注!!&pause&goto begin
- if !oncemoney! gtr !mymoney! echo 投注错误!&pause&goto begin
- if !oncemoney! leq 0 echo 投注错误!&pause&goto begin
- if not defined oncemoney echo投注错误!&pause&goto begin
- set /a mymoney=!mymoney!-!oncemoney!
-
- cls
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ::
- ::以下发10张牌,其中有5张是用于交换牌时备用的。
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ::
- for /l %%i in (1,1,52) do set a%%i=%%i
- set total=52
- set count=10
- ::发10张牌,其中有5张是备用的
- :1
- if %count% equ 0 goto 2
- set/a temp=%random%%%%total%+1
- set pk%count%=!a%temp%!
- set/a a%temp%=!a%total%!
- set/a total=%total%-1
- set/a count=%count%-1
- goto 1
-
- :2
- for /l %%i in (1,1,10) do (
- set/a tt=!pk%%i!-1
- set/a flag%%i=!tt!/13
- set/a pk%%i=!pk%%i!%%13+1
- set left%%i=!flag%%i!
- set right%%i=!pk%%i!
- if !pk%%i! equ 13 set pk%%i=A
- if !pk%%i! equ 12 set pk%%i=K
- if !pk%%i! equ 11 set pk%%i=Q
- if !pk%%i! equ 10 set pk%%i=J
- if !pk%%i! equ 9 set pk%%i=10
- if !pk%%i! equ 8 set pk%%i=9
- if !pk%%i! equ 7 set pk%%i=8
- if !pk%%i! equ 6 set pk%%i=7
- if !pk%%i! equ 5 set pk%%i=6
- if !pk%%i! equ 4 set pk%%i=5
- if !pk%%i! equ 3 set pk%%i=4
- if !pk%%i! equ 2 set pk%%i=3
- if !pk%%i! equ 1 set pk%%i=2
-
- if !flag%%i! equ 3 set pk%%i= !pk%%i!
- if !flag%%i! equ 2 set pk%%i= !pk%%i!
- if !flag%%i! equ 1 set pk%%i= !pk%%i!
- if !flag%%i! equ 0 set pk%%i= !pk%%i!
- )
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ::
- ::显示并让用户选择要交换的牌
- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::
- echo 同花大顺×500 大顺×300 同花顺×100
- echo 顺子×50 同花×30 四条×20
- echo 葫芦×15 三条×10 两对×5
- echo ┏━━━━┓ ┏━━━━┓┏━━━━┓┏━━━━┓┏━━━━┓
- echo ┃!pk1! ┃ ┃!pk2! ┃┃!pk3! ┃┃!pk4! ┃┃!pk5! ┃
- echo ┃ ┃ ┃ ┃┃ ┃┃ ┃┃ ┃
- echo ┃ Super ┃ ┃ Super ┃┃ Super ┃┃ Super ┃┃ Super ┃
- echo ┃ Hero ┃ ┃ Hero ┃┃ Hero ┃┃ Hero ┃┃ Hero ┃
- echo ┃ ┃ ┃ ┃┃ ┃┃ ┃┃ ┃
- echo ┃!pk1! ┃ ┃!pk2! ┃┃!pk3! ┃┃!pk4! ┃┃!pk5! ┃
- echo ┗━━━━┛ ┗━━━━┛┗━━━━┛┗━━━━┛┗━━━━┛
- echo 1 2 3 4 5
-
-
-
-
-
-
-
-
-
-
-
- echo 请选择要交换的牌(用12345表示)
- set slt=
- for /l %%i in (1,1,5) do (
- set slt%%i=
- )
- set/p slt=
- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::[size=5]实现换牌 (怎么实现换牌的)[/size]
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ::
- 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
- ) [size=5]::这个for语句有何用?[/size]
-
-
-
-
-
-
- :3
- for /l %%i in (6,1,10) do (
- set/a vv=%%i-5
- set tleft!vv!=!left%%i!
- set tright!vv!=!right%%i!
- set tpuke!vv!=!pk%%i!
- )
- for /l %%j in (1,1,5) do (
- set left!slt%%j!=!tleft%%j!
- set right!slt%%j!=!tright%%j!
- set pk!slt%%j!=!tpuke%%j!
- )
- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- echo ┏━━━━┓ ┏━━━━┓┏━━━━┓┏━━━━┓┏━━━━┓
- echo ┃!pk1! ┃ ┃!pk2! ┃┃!pk3! ┃┃!pk4! ┃┃!pk5! ┃
- echo ┃ ┃ ┃ ┃┃ ┃┃ ┃┃ ┃
- echo ┃ Super ┃ ┃ Super ┃┃ Super ┃┃ Super ┃┃ Super ┃
- echo ┃ Hero ┃ ┃ Hero ┃┃ Hero ┃┃ Hero ┃┃ Hero ┃
- echo ┃ ┃ ┃ ┃┃ ┃┃ ┃┃ ┃
- echo ┃!pk1! ┃ ┃!pk2! ┃┃!pk3! ┃┃!pk4! ┃┃!pk5! ┃
- echo ┗━━━━┛ ┗━━━━┛┗━━━━┛┗━━━━┛┗━━━━┛
- for /l %%i in (1,1,25) do set/p a=^><nul&ping /n 0 127.1>nul
- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- set samecolor=0
- set bigline=0
- set samecolor=0
- set sameline=0
- set samefour=0
- set hulu=0
- set samethree=0
- set twocouples=0
- set str=
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ::
- ::以下判断是否同花
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ::
- if %left1% equ !left2! if !left2! equ !left3! if !left3! equ !left4! if
- !left4! equ !left5! set samecolor=1
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ::
- ::以下判断是否为顺子
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ::
-
- for /l %%i in (1,1,4) do (
- set/a w=%%i+1
- for /l %%j in (!w!,1,5) do (
- if !right%%i! lss !right%%j! (
- set/a tt=!right%%i!
- set/a right%%i=!right%%j!
- set/a right%%j=!tt! ) ) )
-
- ::以上为排序
- set/a t1=%right5%+1
- set/a t2=%right4%+1
- set/a t3=%right3%+1
- set/a t4=%right2%+1
- if %right4% equ %t1% if %right3% equ %t2% if %right2% equ %t3% if
- %right1% equ %t4% set sameline=1
- if !sameline! equ 1 if !right1! equ 13 set bigline=1
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ::
- ::以下是判断是否为两对,三条,四条,葫芦
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ::
- for /l %%i in (1,1,5) do (
- if !right%%i! equ 13 set right%%i=A
- if !right%%i! equ 12 set right%%i=K
- if !right%%i! equ 11 set right%%i=Q
- if !right%%i! equ 10 set right%%i=J
- if !right%%i! equ 9 set right%%i=T
- if !right%%i! equ 8 set right%%i=9
- if !right%%i! equ 7 set right%%i=8
- if !right%%i! equ 6 set right%%i=7
- if !right%%i! equ 5 set right%%i=6
- if !right%%i! equ 4 set right%%i=5
- if !right%%i! equ 3 set right%%i=4
- if !right%%i! equ 2 set right%%i=3
- if !right%%i! equ 1 set right%%i=2
- set str=!str!!right%%i!
-
- )
-
-
- for /l %%i in (1,1,4) do (
- set/a w=%%i+1
- for /l %%j in (!w!,1,5) do (
- if !right%%i! equ !right%%j! (
- set e1=!right%%i!
- set e2=!right%%j!
- goto 4
- )
- )
- )
- goto 5
-
- :4
- set str=!str:%e1%=0!
- set h1=!str:~0,1!
- set h2=!str:~1,1!
- set h3=!str:~2,1!
- set h4=!str:~3,1!
- set h5=!str:~4,1!
-
- set box=0
- for /l %%i in (1,1,5) do (
- if !h%%i! equ 0 set/a box+=1
- )
-
- if !box! equ 4 set samefour=1&goto 5
-
- if !box! equ 3 (
- set str=!str:0=!
- set m=!str:~0,1!
- )
- ::此时m就有值了,否则m的值不正确!
- if !box! equ 3 (
- set str=!str:%m%=0!
- if !str! equ 00 set hulu=1&goto 5
- set samethree=1&goto 5
- )
- set str=!str:0=!
- set g1=!str:~0,1!
- set g2=!str:~1,1!
- set g3=!str:~2,1!
- if !g1! equ !g2! if !g2! equ !g3! set hulu=1&goto 5
- for /l %%i in (1,1,2) do (
- set/a w=%%i+1
- for /l %%j in (!w!,1,3) do (
- if !g%%i! equ !g%%j! (
- set twocouples=1&goto 5
- )
- )
- )
-
- goto 5
-
-
-
- :5
- set increase=0
- if !samecolor! equ 1 if !bigline! equ 1 set increase=501&goto 6
- if !bigline! equ 1 set increase=301&goto 6
- if !samecolor! equ 1 if !sameline! equ 1 set increase=101&goto 6
- if !sameline! equ 1 set increase=51&goto 6
- if !samecolor! equ 1 set increase=31&goto 6
- if !samefour! equ 1 set increase=21&goto 6
- if !hulu! equ 1 set increase=16&goto 6
- if !samethree! equ 1 set increase=11&goto 6
- if !twocouples! equ 1 set increase=6&goto 6
-
-
- :6
- if !increase! equ 501 echo 恭喜你,同花大顺!
- if !increase! equ 301 echo 恭喜你,大顺!
- if !increase! equ 101 echo 恭喜你,同花顺!
- if !increase! equ 51 echo 恭喜你,顺子!
- if !increase! equ 31 echo 恭喜你,同花!
- if !increase! equ 21 echo 恭喜你,四条!
- if !increase! equ 16 echo 恭喜你,葫芦!
- if !increase! equ 11 echo 恭喜你,三条!
- if !increase! equ 6 echo 恭喜你,两对!
- if !increase! equ 0 echo 对不起,什么都不是!
- pause
- set /a mymoney=!mymoney!+(!increase!*!oncemoney!)
- if !mymoney! leq 0 echo 输光了吧!还赌神呢,整个一白痴!&pause>nul&goto
- end
- if !mymoney! geq 10000 echo 赌神果然名不虚传,您赢了!&pause>nul&goto
- end
- cls
- goto begin
-
- :end
- cls
- echo 重玩一次?(是/y,否/n)
- set/p select=
- if !select! equ y goto start
- if !select! equ Y goto start
- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ::以下是片尾
- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
复制代码
问题:
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 编辑
这种长篇代码的问题,如果不了解他人的写作思路是想回答都无从入手...看了局部代码,作者的意图大致如此吧:- 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 这组变量很明显就是指桌上的牌。
复制代码
小竹英雄写了不少游戏嘿嘿,不过这样的代码放在现在看是很粗糙的,简单处理一下就能瘦身三分之二以上...不是贬低前辈,而是因为技术在进步。
作者: bluewing009 时间: 2011-10-15 22:12
回复 5# CrLf
我到现在还在维护的安全工具…………2K5行……虽然有个“病毒免疫”功能确实很费……可你说的真让我心寒………………
作者: CrLf 时间: 2011-10-15 23:12
回复 6# bluewing009
汗一个,我的意思是...代码太长往往是因为作者不懂得如何简化(比如不会用 for)或者加了太多没必要的内容(比如命令前一溜整齐的 @),但是我说的是“往往”啊有木有有木有...
内牛满面,承认不该用地图炮,立刻把那段内容和谐掉,sorry
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |