java實現轉盤抽獎;

來源:互聯網
上載者:User

標籤:

index.jsp頁面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://"
            + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport"
    content="width=device-width,height=device-height,inital-scale=1.0,maximum-scale=1.0,user-scalable=no;">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="format-detection" content="telephone=no">

<title>幸運大轉盤抽獎</title>
<link href="files/activity-style.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="files/jquery.min.js"></script>
<script type="text/javascript" src="files/jQueryRotate.2.2.js"></script>
<script type="text/javascript" src="files/jquery.easing.min.js"></script>
<script type="text/javascript">
    $(function() {
        $("#inner").click(function() {
            lottery();
        });
    });
    function lottery() {
        $.ajax({
            type : ‘POST‘,
            url : ‘AwardServlet‘,
            dataType : ‘json‘,
            cache : false,
            error : function() {
                alert(‘出錯了!‘);
                return false;
            },

            success : function(json) {
                $("#inner").unbind(‘click‘).css("cursor", "default");
                var angle = parseInt(json.angle); //角度
                var msg = json.msg; //提示資訊
                $("#outer").rotate({ //inner內部指標轉動,outer外部轉盤轉動
                    duration : 5000, //轉動時間
                    angle : 0, //開始角度
                    animateTo : 3600 + angle, //轉動角度
                    easing : $.easing.easeOutSine, //動畫擴充
                    callback : function() {
                        var con = confirm(msg + ‘\n還要再來一次嗎?‘);
                        if (con) {
                            lottery();
                        } else {
                            return false;
                        }
                    }
                });
            }
        });
    }
</script>
</head>

<body class="activity-lottery-winning">

    <div class="main">
        <script type="text/javascript">
            var loadingObj = new loading(document.getElementById(‘loading‘), {
                radius : 20,
                circleLineWidth : 8
            });
            loadingObj.show();
        </script>

        <div id="outercont">
            <div id="outer-cont" style="overflow:hidden;">
                <div id="outer">
                    <img src="files/activity-lottery-1.png" width="310px">
                </div>
            </div>
            <div id="inner-cont">
                <div id="inner">
                    <img src="files/activity-lottery-2.png">
                </div>
            </div>
        </div>
    </div>

</body>
</html>



AwardServlet.java


package com.ostarsier.servlet;

import java.io.IOException;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 抽獎機率演算法來自:http://www.helloweba.com/view-blog-216.html
 */
public class AwardServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Object[][] prizeArr = new  Object[][]{
                //id,min,max,prize【獎項】,v【中獎率】
                //外面的轉盤轉動
//                {1,1,14,"一等獎",1},
//                {2,346,364,"一等獎",1},
//                {3,16,44,"不要灰心",10},
//                {4,46,74,"神馬也沒有",10},
//                {5,76,104,"祝您好運",10},
//                {6,106,134,"二等獎",2},
//                {7,136,164,"再接再厲",10},
//                {8,166,194,"神馬也沒有",10},
//                {9,196,224,"運氣先攢著",10},
//                {10,226,254,"三等獎",5},
//                {11,256,284,"要加油哦",10},
//                {12,286,314,"神馬也沒有",10},
//                {13,316,344,"謝謝參與",10}    
                
                //裡面的指標轉動
                {1,1,14,"一等獎",1},
                {2,346,364,"一等獎",1},
                {3,16,44,"不要灰心",10},
                {4,46,74,"神馬也沒有",10},
                {5,76,104,"祝您好運",10},
                {6,106,134,"二等獎",2},
                {7,136,164,"再接再厲",10},
                {8,166,194,"神馬也沒有",10},
                {9,196,224,"運氣先攢著",10},
                {10,226,254,"三等獎",5},
                {11,256,284,"要加油哦",10},
                {12,286,314,"神馬也沒有",10},
                {13,316,344,"謝謝參與",10}
        };
        Object result[] = award(prizeArr);//抽獎後返回角度和獎品等級
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().write("{\"angle\":\""+result[0]+"\",\"msg\":\""+result[2]+"\"}");
        System.out.println("轉動角度:"+result[0]+"\t獎項ID:"+result[1]+"\t提示資訊:"+result[2]);
    }
    
    //抽獎並返回角度和獎項
    public Object[] award(Object[][] prizeArr){
        //機率數組
        Integer obj[] = new Integer[prizeArr.length];
        for(int i=0;i<prizeArr.length;i++){
            obj[i] = (Integer) prizeArr[i][4];
        }
        Integer prizeId = getRand(obj); //根據機率擷取獎項id
        //旋轉角度
        int angle = new Random().nextInt((Integer)prizeArr[prizeId][2]-(Integer)prizeArr[prizeId][1])+(Integer)prizeArr[prizeId][1];
        String msg = (String) prizeArr[prizeId][3];//提示資訊
        return new Object[]{angle,prizeId,msg};
    }
    //根據機率擷取獎項
    public Integer getRand(Integer obj[]){
        Integer result = null;
        try {
            int  sum = 0;//機率數組的總機率精度
            for(int i=0;i<obj.length;i++){
                sum+=obj[i];
            }
            for(int i=0;i<obj.length;i++){//機率數組迴圈
                int randomNum = new Random().nextInt(sum);//隨機產生1到sum的整數
                if(randomNum<obj[i]){//中獎
                    result = i;
                    break;
                }else{
                    sum -=obj[i];
                }
                
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
    
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}
具體代碼:http://download.csdn.net/detail/mll999888/8578381

java實現轉盤抽獎;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.