使用php实现抢红包并找出手气最佳的人

使用php实现微信抢红包流程
先来简单说一下流程:
流程图
在这里插入图片描述
接下来是使用代码实现功能:
代码

<?php 
 
	function send(){
		static $total = 10;//设置的红包金额
		static $num = 10;//设置的红包个数
		static $arr = array();//将所抢到的所有金额存入数组中
		static $time = 0;//设置抢红包的次数
		$time++;
		if($num<=0){
			echo '手慢了,红包已抢完';
		}elseif($num>1){
			$min = 0.01;//最小值
			$max = ($total/$num)*2;//最大值 取剩余金额的平均数
			$money = mt_rand($min*100,$max*100)/100;//从剩余的红包金额中抢到的金额  //从所定义的最大值和最小值之间取一个随机数
			$total = bcsub($total,$money,2);//红包剩余金额  //bcsub浮点型相减到小数点后两位
			
			$num = $num-1;//剩余红包个数
			echo '第'.$time.'次<br>';
			echo '抢到的金额'.$money.'<br>';
			echo '剩余'.$total.'元<br>';
			echo '剩余'.$num.'个红包<br>';
			array_push($arr,$money);//将抢到的红包存入数组并依次向后插入
		}else{
			$num = $num-1;
			echo '第'.$time.'次<br>';
			echo '抢到的金额'.$total.'<br>';
			echo '剩余0元<br>';
			echo '剩余'.$num.'个红包<br>';
			array_push($arr,$total);
			$number = array_search(max($arr),$arr)+1;
			echo '<br>';
			echo '手气最佳:第'.$number.'次,抢到了:'.max($arr).'元<br>';
		}
		
	}
	send();
	echo '<br>';
	send();
	echo '<br>';
	send();
	echo '<br>';
	send();
	echo '<br>';
	send();
	echo '<br>';
	send();
	echo '<br>';
	send();
	echo '<br>';
	send();
	echo '<br>';
	send();
	echo '<br>';
	send();
	echo '<br>';
	send();
	echo '<br>';



?> 

这里我们抢红包的功能就完成了;运行一下看一下效果
效果图
在这里插入图片描述
我这里设置了10元分10个红包,最小值设置的为0.01,最大值设为剩余金额的平均值*2,运行代码11次,一共十个红包,所以到第11次时提示手慢了,红包已抢完,前十次,每一次调用函数都从设置的最大值和最小值之间随机取一个数。

需要注意的是:
1.浮点型的运算,这里可以参考php官方手册,有详细的说明
https://www.php.net/manual/zh/language.types.float.php
2.静态变量:需要将设置的红包金额和个数设置为静态变量
不然每次调用函数,都将使用一开始的赋值,并不会跟随函数的调用依次递减;数组也是一样,不设置成静态变量,每次调用函数只会有一个值插入,并不会依次插入

发布了22 篇原创文章 · 获赞 2 · 访问量 430

猜你喜欢

转载自blog.csdn.net/jianchenn/article/details/105487482