js实现游戏转盘抽奖

<!DOCTYPE html>
<html>
<head>
    <title>js抽奖</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1.0 ,user-scalable=no">
    <style type="text/css">
        td {
            width: 50px;
            height: 50px;
            border: 3px solid #ccc;
            text-align: center;
            vertical-align: middle
        }
    </style>
</head>
<body>
<table id="tb">
    <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
        <td>4</td>
        <td>5</td>
    </tr>
    <tr>
        <td>16</td>
        <td></td>
        <td></td>
        <td></td>
        <td>6</td>
    </tr>
    <tr>
        <td>15</td>
        <td></td>
        <td></td>
        <td></td>
        <td>7</td>
    </tr>
    <tr>
        <td>14</td>
        <td></td>
        <td></td>
        <td></td>
        <td>8</td>
    </tr>
    <tr>
        <td>13</td>
        <td>12</td>
        <td>11</td>
        <td>10</td>
        <td>9</td>
    </tr>
</table>
<p></p>
请输入1-16其中一位整数,代表要停止的位置
<input id="txtnum" value="12" type="text"/>
<input type="button" value="开始" onclick="StartGame()"/>
<script type="text/javascript">
    /*
    * 删除左右两端的空格
    */
    function Trim(str) {
        return str.replace(/(^\s*)|(\s*$)/g, "");
    }

    /*
     * 定义数组
     */
    function GetSide(m, n) {
        //初始化数组
        var arr = [];
        for (var i = 0; i < m; i++) {
            arr.push([]);
            for (var j = 0; j < n; j++) {
                arr[i][j] = i * n + j;
            }
        }
        //获取数组最外圈
        var resultArr = [];
        var tempX = 0,
            tempY = 0,
            direction = "Along",
            count = 0;
        while (tempX >= 0 && tempX < n && tempY >= 0 && tempY < m && count < m * n) {
            count++;
            resultArr.push([tempY, tempX]);
            if (direction == "Along") {
                if (tempX == n - 1)
                    tempY++;
                else
                    tempX++;
                if (tempX == n - 1 && tempY == m - 1)
                    direction = "Inverse"
            }
            else {
                if (tempX == 0)
                    tempY--;
                else
                    tempX--;
                if (tempX == 0 && tempY == 0)
                    break;
            }
        }
        return resultArr;
    }

    var index = 0,   //当前亮区位置
        prevIndex = 0,   //前一位置
        Speed = 300,   //初始速度
        Time,   //定义对象
        arr = GetSide(5, 5),   //初始化数组
        EndIndex = 0,   //决定在哪一格变慢
        tb = document.getElementById("tb"),  //获取tb对象
        cycle = 0,   //转动圈数
        EndCycle = 0,   //计算圈数
        flag = false,   //结束转动标志
        quick = 0;   //加速
    function StartGame() {
        cycle = 0;
        flag = false;
        EndIndex = Math.floor(Math.random() * 16);
        //EndCycle=Math.floor(Math.random()*4);
        EndCycle = 1;
        Time = setInterval(Star, Speed);
    }

    function Star() {
        //跑马灯变速
        if (flag == false) {
            //走五格开始加速
            if (quick == 5) {
                clearInterval(Time);
                Speed = 50;
                Time = setInterval(Star, Speed);
            }
            //跑N圈减速
            if (cycle == EndCycle + 1 && index == EndIndex) {
                clearInterval(Time);
                Speed = 300;
                flag = true;   //触发结束
                Time = setInterval(Star, Speed);
            }
        }
        if (index >= arr.length) {
            index = 0;
            cycle++;
        }
        //结束转动并选中号码
        if (flag == true && index == parseInt(Trim(document.getElementById("txtnum").value)) - 1) {
            quick = 0;
            clearInterval(Time);
        }
        tb.rows[arr[index][0]].cells[arr[index][1]].style.border = "3px solid red";
        if (index > 0)
            prevIndex = index - 1;
        else {
            prevIndex = arr.length - 1;
        }
        tb.rows[arr[prevIndex][0]].cells[arr[prevIndex][1]].style.border = "3px solid #ccc";
        index++;
        quick++;
    }

    /*
    window.onload=function(){
     Time = setInterval(Star,Speed);
    }
    */
</script>
</body>
</html>

时间: 2024-10-20 13:17:59

js实现游戏转盘抽奖的相关文章

原生JS实现简易转盘抽奖

我爱撸码,撸码使我感到快乐. 大家好,我是Counter. 本章带大家来简单的了解下原生JS实现转盘抽奖. 因为主要涉及到JS,在这里HTML和CSS起到的功能就没有那么重要, 因此,没有过多的阐述HTML与CSS,而JS基本每行都有注释,但这里CSS 也是起到了至关重要的一步,那就是控制背景色,以及结果的显示与隐藏,效果先给出,如下: 代码给出: <!DOCTYPE html> <html lang="zh"> <head> <meta ch

原生js轮盘抽奖实例分析(幸运大转盘抽奖)

效果图: 所需图片素材: 这张图是pointer.png的位置的. turntable-bg.jpg这张是转盘背景图,在背景位置. 这张是turntable.png位置的. 需要这三张图片,如果要实现一下,直接另存这三图片引入进去即可.如果不会请修改成对应的图片名字,放到同一个文件下. 基本原理: 1,通过设置CSS样式的position属性,z-index属性等实现背景图,转盘图与指针图的层叠摆放: 2,通过设置元素style.transform = "rotate(0deg)"实现

纯CSS3大转盘抽奖(响应式、可配置)

源于前段时候微信小程序最初火爆公测时段,把以前用 Canvas 实现的大转盘抽奖移植成微信小程序,无奈当时小程序对 Canvas 支持不够完善,只好降低用 CSS3 实现.虽然比不上 Canvas 绘图的绚丽,但也总算完成了一个抽奖的 Demo,详见:https://github.com/givebest/wechat-turntalbe-canvas. 事后想起,CSS3 实现也并不是无有益处,比如简单.快捷.调试方便.渲染想来也是要比 Canvas 要高效的,更重要的一点是支持媒体查询,大转

jquery——九宫格大转盘抽奖

一.用到的图片 二.代码如下,重点是js部分 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>jQuery九宫格大转盘抽奖</title> <style> #lottery{width:570px;height:510p

jquery转盘抽奖的研究

先看效果: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>转盘抽奖二</title> <style> *{margin:0;padding: 0;} #lottery{width:570px;height:510px;margin:0px auto;border:4px solid #ba1

大转盘抽奖

这周做了2个大转盘抽奖,一个使用了jQueryRotate.2.2.js插件,兼容到IE6,另外一个利用css3自己尝试写的 1.插件jQueryRotate.2.2.js(兼容基本浏览器,兼容到IE6) 效果查看: 此插件必须事先引入jquery插件,PC端推荐 JS插件代码: // VERSION: 2.2 LAST UPDATE: 13.03.2012 /* * Licensed under the MIT license: http://www.opensource.org/licens

JS实现转动随机数抽奖的特效代码

JS实现转动随机数抽奖的特效代码 大家都玩过抽奖游戏,或者梦想抽到大奖吧.可是有没有想过抽奖游戏是怎么实现的呐?今天就给大家分享一款转动随机数抽奖的JS特效代码. 实现代码例如以下 <!Doctype html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GBK"> <script src="htt

实现转盘抽奖的SurfaceViewDemo

引用:http://www.cnblogs.com/xuling/archive/2011/06/06/android.html SurfaceView是视图(View)的继承类,这个视图里内嵌了一个专门用于绘制的Surface.你可以控制这个Surface的格式和尺寸.Surfaceview控制这个Surface的绘制位置. surface是纵深排序(Z-ordered)的,这表明它总在自己所在窗口的后面.surfaceview提供了一个可见区域,只有在这个可见区域内 的surface部分内容

js幸运大转盘开发

最终效果实例下载:http://www.oschina.net/code/snippet_2352644_54997 一.大转盘准备工作 网上的一个抽奖大转盘实例http://www.jq22.com/yanshi2252 这就是我们要开发的效果,不过我们是让指针转,我们先分析这个效果: 结构有2部分,上面是指针背景图,下面是奖项图 点击指针元素开始抽奖,会转动一定圈数停下来 停下来的位置指针指使那个奖项,就会弹出获奖信息提示 这是参考效果,我们分析自己的大概实现: 同样上下2部分 点击指针转动