最强大脑雷达探点HTML5版本

最强大脑节目里有些项目设置得比较有意思,比较喜欢看。在贴吧看到有人用.NET写了个小程序模仿节目里的雷达探点项目,不会.NET,只会用HTML5也做了。

因为比较懒,代码写得比较简单,不过除了雷达线没画出来,基本上和节目里的效果差不多了。代码如下:

<!DOCTYPE html>
<html lang=‘zh-cmn-Hans‘>
<head>
<meta charset=‘utf-8‘ />
<title>雷达探点 by 知鱼之乐</title>
<style type="text/css">
body {background: #000; color: #f0f0f0;}
canvas {background: #000; cursor: default;}
div {margin: auto; width: 1100px;}
select {margin-right: 20px;}
button {margin: 10px 10px 10px 0; padding: 3px 5px; color: #000; cursor: pointer;}
button[disabled=disabled] {color: #999; cursor: default;}
</style>
</head>

<body>
<div>
    <h1>雷达探点</h1>
    <canvas id=‘canvas‘ width=‘1050‘ height=‘520‘></canvas>
</div>
<div>
    点数量:<select id=‘pointNum‘>
        <option value=‘1000‘>1000</option>
        <option value=‘2000‘>2000</option>
        <option value=‘3000‘>3000</option>
    </select>
    可视角:<select id=‘angle‘>
        <option value=‘15‘>15</option>
        <option value=‘25‘>25</option>
        <option value=‘35‘>35</option>
    </select>
    速度:<select id=‘speed‘>
        <option value=‘1‘>慢</option>
        <option value=‘2‘>中</option>
        <option value=‘3‘>快</option>
    </select>
    彩色点:<input type=‘checkbox‘ id=‘pointColor‘>
    <!-- 雷达线:<input type=‘checkbox‘ id=‘line‘> -->
    <br />
    <button id=‘btInit‘>生成点</button>
    <button id=‘btFind‘ disabled=‘disabled‘>开始找</button>
    <button id=‘btMarker‘ disabled=‘disabled‘>找到了</button>
    <p>(x,y)</p>
</div>

<script type="text/javascript">
var canvas, ctx;
var lineData, pointData1, pointData2;
var point = [];
var pointSize = 3;
var pointNum = 10;
var hide = 0;
var pointColor = 1, color = [‘white‘, ‘green‘, ‘blue‘, ‘red‘, ‘purple‘];
var speed = 1, angle = 35, ang = 0;
var btInit, btFind, btMarker;
var raf, find = false;
var ts, te;
window.onload = function(){
    canvas = document.querySelector(‘#canvas‘);
    ctx = canvas.getContext(‘2d‘);
    btInit = document.querySelector(‘#btInit‘);
    btFind = document.querySelector(‘#btFind‘);
    btMarker = document.querySelector(‘#btMarker‘);
    btInit.addEventListener(‘click‘, function(){
        btInit.setAttribute(‘disabled‘, ‘disabled‘);
        canvas.style.cursor = ‘default‘;
        init();
    });
    btFind.addEventListener(‘click‘, function(){
        btInit.setAttribute(‘disabled‘, ‘disabled‘);
        btFind.setAttribute(‘disabled‘, ‘disabled‘);
        btMarker.removeAttribute(‘disabled‘);
        canvas.style.cursor = ‘default‘;
        cancelAnimationFrame(raf);
        angle = document.querySelector(‘#angle‘).value * 1;
        speed = document.querySelector(‘#speed‘).value * 1;
        ts = new Date().getTime();
        raids();
    });
    btMarker.addEventListener(‘click‘, function(){
        btFind.removeAttribute(‘disabled‘);
        canvas.style.cursor = ‘crosshair‘;
        cancelAnimationFrame(raf);
        te = new Date().getTime();
        marker();
    });
    canvas.addEventListener(‘mousemove‘, function(event){
        var x = Math.floor(event.clientX - this.getBoundingClientRect().left) - 260;
        var y = Math.floor(event.clientY - this.getBoundingClientRect().top) - 260;
        x = x>260 ? x-520 : x;
        document.querySelector(‘p‘).textContent = ‘(‘ + x + ‘,‘ + -y + ‘)‘;
    })
    canvas.addEventListener(‘click‘, function(event){
        if (!find) return;
        btInit.removeAttribute(‘disabled‘);
        btFind.setAttribute(‘disabled‘, ‘disabled‘);
        btMarker.setAttribute(‘disabled‘, ‘disabled‘);
        var x = Math.floor(event.clientX - this.getBoundingClientRect().left);
        var y = Math.floor(event.clientY - this.getBoundingClientRect().top);
        point.push([x,y,0]);
        console.log(x + ‘,‘ + y)
        ctx.lineWidth = 3;
        ctx.strokeStyle = ‘orange‘;
        ctx.strokeRect(x-10,y-10, 20,20);
        find = false;
        check();
    });
}
function init(){
    pointNum = document.querySelector(‘#pointNum‘).value * 1;
    if (document.querySelector(‘#pointColor‘).checked) pointColor = color.length;
    else pointColor = 1;
    ctx.clearRect(0, 0, 1050, 520);
    ctx.lineWidth = 1;
    ctx.strokeStyle=‘#ccc‘;
    lineData = ctx.createImageData(520, 520);
    pointData1 = ctx.createImageData(520, 520);
    pointData2 = ctx.createImageData(520, 520);

    var p = 250, k = 0;
    point = [];
    hide = Math.floor(Math.random() * pointNum);
    var draw = setInterval(function(){
        var x,y;
        for (var i = 0; i < 30; i++) {
            do{
                x = Math.floor(Math.random() * 500 - 250);
                y = Math.floor(Math.random() * 500 - 250);
            } while (x*x + y*y > p*p)
            var c = Math.floor(Math.random() * pointColor);
            if (drawPoint(x,y,c)){
                k++;
                point.push([x,y,c])
            }
            if (k>=pointNum) {
                clearInterval(draw);
                pointData1 = ctx.getImageData(0,0, 520,520);
                pointData2 = ctx.getImageData(520,0, 520,520);
                btInit.removeAttribute(‘disabled‘);
                btFind.removeAttribute(‘disabled‘);
                // drawLine();
                break;
            }
        };
    }, 30);
}
function drawLine(){
    ctx.lineWidth = 1;
    ctx.save();
    ctx.translate(260,260);
    for (var i = 0; i < 6; i++) {
        ctx.rotate(Math.PI*30/180);
        ctx.moveTo(-260,0);
        ctx.lineTo(260,0);
        ctx.stroke();
    };
    ctx.restore();
    ctx.save();
    ctx.translate(260+520,260);
    for (var i = 0; i < 3; i++) {
        ctx.beginPath();
        ctx.arc(0,0, 60+i*100, 0,2*Math.PI);
        ctx.stroke();
    };
    for (var i = 0; i < 6; i++) {
        ctx.rotate(Math.PI*30/180);
        ctx.moveTo(-260,0);
        ctx.lineTo(260,0);
        ctx.stroke();
    };
    ctx.restore();
}
function drawPoint(x,y,c){
    var p = ctx.getImageData(260+x,260+y, pointSize,pointSize);
    var pc = p.data;
    for (var i = 0; i < pc.length; i+=4) {
        if (pc[i]!=0 || pc[i+1]!=0 || pc[i+2]!=0) {
            return false;
        }
    };
    ctx.fillStyle = color[c];
    ctx.fillRect(260+x,260+y, pointSize,pointSize);
    if (hide != point.length)
        ctx.fillRect(260+x+520,260+y, pointSize,pointSize);
    return true;
}
function raids(){
    ctx.clearRect(0, 0, 1050, 520);

    ctx.putImageData(pointData1, 0,0);
    ctx.fillStyle = ‘#000‘;
    ctx.beginPath();
    ctx.moveTo(260,260);
    ctx.arc(260,260, 255, Math.PI * ang/180, Math.PI * (360-angle + ang)/180);
    ctx.fill();

    ctx.putImageData(pointData2, 520,0);
    ctx.fillStyle = ‘#000‘;
    ctx.beginPath();
    ctx.moveTo(260+520,260);
    ctx.arc(260+520,260, 255, Math.PI * ang/180, Math.PI * (360-angle + ang)/180);
    ctx.fill();

    ang += speed;
    raf = window.requestAnimationFrame(raids);
}
function marker(){
    ctx.clearRect(0, 0, 1050, 520);
    ctx.putImageData(pointData1, 0,0);
    find = true;
}
function check(){
    ctx.putImageData(pointData2, 520,0);
    ctx.strokeStyle = ‘red‘;
    ctx.lineWidth = 3;
    ctx.strokeRect(point[hide][0]-10+260,point[hide][1]-10+260, 20,20);
    ctx.strokeRect(point[hide][0]-10+260+520,point[hide][1]-10+260, 20,20);
    if ( Math.abs(point[hide][0]-point[pointNum][0])<10 && Math.abs(point[hide][1]-point[pointNum][1])<10 ) {
        alert(‘找到了!\n‘ + ‘用时:‘ + (te-ts) + ‘ 毫秒‘);
    } else {
        alert(‘错误!\n‘ + ‘用时:‘ + (te-ts) + ‘ 毫秒‘);
    }
}
</script>

</body>
</html>
时间: 2024-10-06 08:28:31

最强大脑雷达探点HTML5版本的相关文章

最强大脑与最强团队

江苏卫视<最强大脑>进入第三季,节目精彩纷呈.台上选手表现出来的非凡技艺,平凡如我只能瞠目结舌,外加顶礼膜拜.所谓的"最强大脑",肯定有天赋因素,有几人能依靠刻苦练习战胜"菲神"呢.生而不平等,是客观存在的事实,虽然现在还不能准确量化这种差距,但是也不能否认这种差距的存在. 在各种炫酷的能力中,有一种看似质朴.实则异常重要的基础能力,这就是记忆力. 记忆力的强弱,有天赋的因素,但更靠后期严格科学的训练.现代三大脑力工具:快速记忆.快速阅读.思维导图.其中

【培训版】《最强大脑记忆力训练教程》

备注: 该教程以培训为目的,适用于20~49岁人群观看, 内容讲解通俗易懂,快速带领大家认识到记忆法的奥妙之处. 每周一更新  教程以及资料下载地址: 链接: 在线视频<最强大脑记忆力训练教程> 课程内容 01.开启你过目不忘的能力,右脑图像脑 02.罗马记忆宫殿 03.数字代码表 04.记忆力训练,看两遍记住<太极拳七十五式> 05.SEM3 三维记忆矩阵   06.如何打造100万存储量的记忆宫殿? <最强大脑记忆力训练教程>教程简介: 很多人会很感兴趣作者的记忆力

Html5版本的全套股票行情图开源了,附带实现技术简介

Html5版本的全套股票行情图开源了,附带实现技术简介

致江苏卫视《最强大脑第二季》节目组的一封信

致江苏卫视<最强大脑第二季>节目组的一封信 亲爱的节目组: 您们好! 我几乎看了您们<最强大脑>每一期节目.我对科学评判Dr.魏,有一些我自己的看法和理解,供节目组参考. Dr.魏每次口口声声,说"科学是我唯一的评判标准".      既然是讲科学,就要划定科学的定义,科学的边界和范围,评价手段和工具.     既然是讲最强大脑,就要划定最强大脑的定义,最强大脑的边界和范围,在某个领域,中国,或者全球,业界的极限或者记录是什么?      Dr.魏,没有说出什么

XHTML1.0版本你知道么,跟html5版本有什么区别

XHTML 1.0 是 XML 风格的 HTML 4.01. XHTML 1.1 主要是初步进行了模块化. HTML5 是下一代 HTML,取代 HTML 4.01. W3C 原本确实计划用 XHTML 系列替代 HTML 4.01,但 XHTML 系列实际上只活到了 1.1(1.1 和夭折的 1.2 已经体现出过分 XML 的迹象,而 W3C 的理想其实在疯狂的 XHTML 2 身上,当然,它没能诞生),还没脱离 HTML 4.01 的阴影就死了. 还没等 XHTML 兴起,它的地位就被 HT

仿微信游戏《勇闯独木桥》-HTML5版本

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>勇闯独木桥</title> </head> <body> <canvas id="canvas" width="400" height="400" style=&quo

最强大脑世界记忆大师运用的记忆方法

记忆方法分为竞技型记忆技术和实用型记忆技术. 竞技型记忆技术和实用型记忆技术区别:前者不需要理解,后者需要理解.这也就是为什么很多记忆技术很难运用到学生学习过程中的原因,因为学生学习的知识是需要理解.记忆.思考的,否则不就变成了换种方式的死记硬背了. 按照我的理解记忆方法都是通过运用人的大脑的记忆特点通过加强训练从而实现快速记忆. 大脑的记忆特点: 记住图像比记住文字要容易 记住文字比记住无意义的数字要容易 竞技型记忆技术 宫殿记忆法(房间定位法.地点桩记忆法) 原理: 我们非常善于记住我们所知

泰森多边形-最强大脑节目知识

泰森多边形(Voronoi图)生成算法 一.文档目的本文描述了在geomodel模块中,生成泰森多边形所使用的算法.二.概述GIS和地理分析中经常采用泰森多边形进行快速插值,和分析地理实体的影响区域,是解决邻接度问题的又一常用工具.荷兰气候学家A·H·Thiessen提出了一种根据离散分布的气象站的降雨量来计算平均降雨量的方法,即将所有相邻气象站连成三角形,作这些三角形各边的垂直平分线,于是每个气象站周围的若干垂直平分线便围成一个多边形.用这个多边形内所包含的一个唯一气象站的降雨强度来表示这个多

ie8以下版本(包括ie8)的浏览器不支持html5标签属性解决方案(Modernizr 2.6.2插件的使用)

今天脑抽想用html5标签设计一个网页,我本人用的是火狐浏览器,都弄好后我发现一个很严重的问题,除了ie9以下的浏览器都不能支持html5标签(article,aside,dialog,footer,header,section,footer,nav,figure,menu). 我上网找了好多中方法,有网友说使用 <!--[if lt IE9]> <script> (function() { if (! /*@[email protected]*/ 0) return; var e