HTML

本例中用到两粒色子,也就是说可以同时掷出两粒色子,所得的点数应该是两粒色子的点数之和。另外我们在页面上放置两个单选框,用户可以选择大小。

请直接点击上面的色子!

CSS

CSS的写法可以参照上期文章:jQuery掷色子动画,唯一区别的就是多了一粒色子,为了节省篇幅,本文CSS代码不再放出。

jQuery

用户选择大小,然后单击色子,这时通过$.getJSON()向后台data.php发送一个ajax请求,提交了所选的大小参数,然后根据返回的点数完成色子动画,得出所掷出的点数。

$(function(){

$("#dice").click(function(){

$(".wrap").append("

var dice1 = $("#dice1");

var dice2 = $("#dice2");

var big_num = $("#big");

var sel = $("#big").attr("checked")?1:0;

$.getJSON("data.php",{sels:sel},function(json){

var num1 = json[0];

var num2 = json[1];

$("#result").hide();

diceroll(dice1,num1);//掷色子1动画

diceroll(dice2,num2);//掷色子2动画

$("#dice_mask").remove();//移除遮罩

var num = parseInt(num1)+parseInt(num2);

$("#result").html("您掷得点数是"+num+"").fadeIn(2500);

});

});

});

跟上期实例不同的是,我们这次没有使用随机点数,而是根据后台PHP返回的点数来定义色子最终掷出的点数,使用自定义函数diceroll(dice,num),第一个参数dice表示色子对象,第二个参数num表示定义的点数。以下是自定义函数diceroll(dice,num)实现的动画代码。

function diceroll(dice,num){

dice.attr("class","dice");//清除上次动画后的点数

dice.css('cursor','default');

dice.animate({left: '+2px'}, 100,function(){

dice.addClass("dice_t");

}).delay(200).animate({top:'-2px'},100,function(){

dice.removeClass("dice_t").addClass("dice_s");

}).delay(200).animate({opacity: 'show'},600,function(){

dice.removeClass("dice_s").addClass("dice_e");

}).delay(100).animate({left:'-2px',top:'2px'},100,function(){

dice.removeClass("dice_e").addClass("dice_"+num);

dice.css('cursor','pointer');

});

}

PHP

PHP文件data.php的任务是根据用户前台传达过来的参数值(用户选的大或小),分配猜中几率,比如用户选大(1),则出小的几率为8,出大的几率为2,分别对应百分比。

$num = intval($_GET['sels']);

if($num==1){ //大

$v = array(8,2);

}else{//小

$v = array(2,8);

}

$size_arr = array(

'0' => array('id'=>1,'v'=>$v[0]),

'1' => array('id'=>2,'v'=>$v[1])

);

根据设定好的概率,我们应该返回“大”还是“小”,如果是小,我们定义两粒色子点数之和为2-6,如果是大,则定义色子点数之和为8-12,然后我们用mt_rand()随机取出一个数字出来,这个数字就是用户掷出的点数。

foreach ($size_arr as $key => $val) {

$arr[$val['id']] = $val['v'];

}

$rid = getRand($arr); //根据概率计算大小

if($rid==1){

$sum = mt_rand(2,6);

}else{

$sum = mt_rand(8,12);

}

我们得到了色子总点数,但是我们使用的是两粒色子,那我们就得把色子点数分配给两粒色子,这样我们定义了以下数组:

$arrs = array(

'2' => array(array(1,1)),

'3' => array(array(1,2)),

'4' => array(array(1,3),array(2,2)),

'5' => array(array(1,4),array(2,3)),

'6' => array(array(1,5),array(2,4),array(3,3)),

'7' => array(array(1,6),array(2,7),array(3,4)),

'8' => array(array(2,6),array(3,5),array(4,4)),

'9' => array(array(3,6),array(4,5)),

'10' => array(array(4,6),array(5,5)),

'11' => array(array(5,6)),

'12' => array(array(6,6))

);

可以看出,点数2只能由1和1组成,而点数4则可以由1和3或者2和2组成。

最后,我们要根据总点数,从以上数组中取出对应的组(二维),然后随机取其中一组,再打乱顺序,混乱色子的数字排序,最后输出json格式数据给前端页面调用。

$arr_rs = $arrs[$sum];

$i = array_rand($arr_rs);//随机取数组

$arr_a = $arr_rs[$i];

shuffle($arr_a);//打乱顺序

echo json_encode($arr_a);//输出json数据

函数getRand()是用来计算概率的,在本站多篇抽奖文章中用到,详细介绍请参照本站文章:PHP+jQuery实现翻板抽奖,一下是getRand()代码:

//计算概率

function getRand($proArr) {

$result = '';

//概率数组的总概率精度

$proSum = array_sum($proArr);

//概率数组循环

foreach ($proArr as $key => $proCur) {

$randNum = mt_rand(1, $proSum);

if ($randNum <= $proCur) {

$result = $key;

break;

} else {

$proSum -= $proCur;

}

}

unset ($proArr);

return $result;

}

php 控制骰子概率,掷色子猜大小游戏(可控制概率)相关推荐

  1. 编写一个掷色子猜大小的游戏

    ##编写一个掷色子猜大小的游戏: 每个色子有六个面,分别代表 1 -6 点.每次产生三个色子,三个点数的和>=10 为大,否则为小. 程序启动时在控制台显示 用户当前的总分,然后提示用户输入 ...

  2. php 控制骰子概率,PHP制作的掷色子点数抽奖游戏实例(代码)

    PHP制作的掷色子点数抽奖游戏实例,通过掷色子点数来达到抽奖的效果,为抽奖活动增添一些趣味性. 我们将在html页面中写下如下的html结构代码,.wrap用来放置色子和提示信息,#prize则是用来 ...

  3. 初级模拟玩骰子猜大小游戏

    代码: package net.day06027;import java.util.Scanner; import java.util.regex.Pattern;/** * * 项目说明:模拟赌博: ...

  4. php丢色子,PHP制作的掷色子点数抽奖游戏实例(代码)

    PHP制作的掷色子点数抽奖游戏实例,通过掷色子点数来达到抽奖的效果,为抽奖活动增添一些趣味性. 我们将在html页面中写下如下的html结构代码,.wrap用来放置色子和提示信息,#prize则是用来 ...

  5. shell脚本实现猜大小游戏

    猜大小游戏: 脚本需求如下: • 执行guest.sh • 脚本会提示请输入一个数字: • 当输入数字比幸运数字大那么提示数字太大了!并重新提示请输入一个数字: 当输入数字比幸运数字小那么提示数字太小 ...

  6. python猜大小游戏,Python实现的摇骰子猜大小功能小游戏示例

    搜索热词 本文实例讲述了Python实现的摇骰子猜大小功能小游戏.分享给大家供大家参考,具体如下: 最近学习Python的随机数,逻辑判断,循环的用法,就想找一些练习题,比如小游戏猜大小,程序思路如下 ...

  7. python游戏设计_Python设计一个猜大小游戏

    Python设计小游戏实例 本文主要介绍如何用Python设计一个经典小游戏:猜大小. 在这个游戏中,将用到前面我介绍过的所有内容:变量的使用.参数传递.函数设计.条件控制和循环等,做个整体的总结和复 ...

  8. 猜大小游戏(条件判断)

    猜大小 题目 思路分析 实现代码 题目 一个人在心里想好一个数,然后让另一个人猜,直到猜对为止,如果他猜的数比那个数小就告诉他"太小了",如果他猜的数比那个数大就告诉他" ...

  9. java数字猜大小游戏_java实现猜数字小游戏

    java实现猜数字游戏 随机给定一个数字,猜大小直到正确 package com.swift; import java.util.Random; import java.util.Scanner; p ...

最新文章

  1. Win10系统如何在防火墙里开放端口
  2. Win7中aero peek的关闭与开启
  3. AppsFlyer将API网关服务从Clojure迁移到Golang
  4. 【Maven实战】之基础知识点
  5. python基本使用-python-类的基本使用
  6. 【解题报告】Leecode 35. 搜索插入位置——Leecode刷题系列
  7. 最高法院明确反向工程合法 腾讯诉PICA恐生变
  8. python语言控制结构是指_python程序的三种控制结构
  9. 13003.数据类型转换问题(python)
  10. java实现qq抢红包_java实现抢红包算法(公平版和手速版)
  11. ROS(sub,pub)测试 Plotjuggler
  12. 攻防世界_moile
  13. ubuntu下安装gfortran
  14. 《开源软件开发导论》作业1
  15. 全网首发:OpenJDK如何支持字体的kerning及BUG号
  16. 【单片机毕业设计】【mcuclub-cl-015】基于单片机的地铁到站检测的设计
  17. tomcat启动报错,原来是DB2的一个jar包搞的鬼
  18. The Thirty-three Of Word-Day
  19. 转 基于MySQL MEB的备份恢复
  20. 关于使用selenium+python简单获取前程无忧数据

热门文章

  1. fastmock常用语法
  2. php采集规则,php74 骑士 火车头采摘简历 接口及采集规则
  3. 单目标跟踪(sot)与多目标跟踪(mot)
  4. 第三部分 数据结构 -- 第四章 图论算法-1376:信使(msner)
  5. MATLAB | 如何用MATLAB绘制花里胡哨的山脊图
  6. php泡点,传奇泡点功能详解_无忧网络网游技术资源网_传奇服务端_传奇版本下载 - www.5uwl.net...
  7. 如何进行内存的简单超频
  8. java实现基于SGIP协议开发联通短信的方法
  9. Linux Hook系统调用(适用基于x86_64的4.17.0以上的内核版本)
  10. Docker Meetup 九城联动