随机数的使用还是很普遍的,尤其是和游戏相关的时候。如何利用Batch批处理来生成任意区间的随机整数,这一节我们一起来看看。
我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。
简单介绍
和shell命令一样,默认情况下的批处理运算都只是支持到整数而已,并且都是向靠近0取整。例如
c:\Batch\test>set /a a=2/3
0
c:\Batch\test>set /a a=5/3
1
c:\Batch\test>set /a a=-5/3
-1
%random%
这个环境变量会返回一个区间在[0,32768)
的整数,注意右边是开集。例如
c:\Batch\test>echo %random%
19531
c:\Batch\test>echo %random%
8501
c:\Batch\test>echo %random%
10888
使用方法详解
常规使用
直接打印出%random%
即可
生成0开始任意长度整数
假设想生成区间为[0,m)
的整数,那么可以用%random%*m/32768
来实现,例如想要生成[0,100)的随机整数,直到生成的数小于35为止
:: random number less than 35
@echo off
:rand
set /a rnd=%random%*100/32768
echo %rnd%
if %rnd% gtr 34 goto :rand
echo Finally!!
exit /b
执行上面这个脚本的结果如下,循环3次以后得到小于35的结果,退出循环
c:\Batch\test>random100.bat
71
92
32
Finally!!
需要注意的是生成负数的时候,如果m是负数,那么得到的区间为(m,0]
。如果要实现右边开集需要用到下面的方法。
生成任意区间整数
在上面的基础上只需要进行一个偏移就能达到目地了。例如生成区间[m,n)
的整数,可以用%random%*(n-m)/32768+m
来实现,例如生成[-100,100)
的整数,如果是负数就退出
::random less than 0
@echo off
:rand
set /a rnd=%random%*200/32768-100
echo %rnd%
if %rnd% geq 0 goto :rand
echo Finally!!
exit /b
执行上面这个脚本的结果如下,循环了6次以后终于生成了一个负数
c:\Batch\test>random_100.bat
18
32
28
30
30
-32
Finally!!
使用场景
通常随机数都和循环一起出现,满足特定条件再退出循环,这在游戏设计当中是个相当常见的操作。
总结
Batch批处理的随机数只能支持到整数,如果想要生成随机浮点数需要借助外部脚本的帮助了。同时在涉及到负数的时候要注意,直接乘以负数和由偏移生成的负数在区间的闭合上是不一样的。