zoukankan      html  css  js  c++  java
  • 模仿微信"转你妹"游戏

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <title>微信小游戏-转你妹</title>
    </head>
    <body>
    <div>
        <canvas width="600" height="600" id="canvas" style="border:1px solid red;"></canvas>
        <script>
    
            var canvas = document.getElementById('canvas');
            var cxt = canvas.getContext('2d');
    
            var index = 0;
            var timer;
            var iStop = false;
            var ladderLen = 60;
            var outerLen = 200;
            var boxLen = 20;
            var score = 0;
            var isCal = false;
    
            var ladderA = {'degree':0, 'boxes':[{'index':1,'color':'red'}, {'index':2,'color':'green'}]};
            var ladderB = {'degree':60, 'boxes':[{'index':1,'color':'yellow'}]};
            var ladderC = {'degree':120, 'boxes':[]};
            var ladderD = {'degree':180, 'boxes':[]};
            var ladderE = {'degree':240, 'boxes':[]};
            var ladderF = {'degree':300, 'boxes':[{'index':1,'color':'blue'}]};
    
            var ladderX = [{'degree':300, 'index':7, 'color':'red'}, {'degree':240, 'index':7, 'color':'red'}];
    
            var colors =  ['yellow', 'blue', 'green', 'red'];
    
            function drawBg(){
    
                /*********外部六边形**********/
                cxt.save();
                cxt.beginPath();
                cxt.fillStyle = 'gray';
                cxt.translate(300, 300);
    
                cxt.moveTo(outerLen, 0);
                cxt.rotate(60*Math.PI/180);
                cxt.lineTo(outerLen, 0);
                cxt.rotate(60*Math.PI/180);
                cxt.lineTo(outerLen, 0);
                cxt.rotate(60*Math.PI/180);
                cxt.lineTo(outerLen, 0);
                cxt.rotate(60*Math.PI/180);
                cxt.lineTo(outerLen, 0);
                cxt.rotate(60*Math.PI/180);
                cxt.lineTo(outerLen, 0);
    
                cxt.closePath();
                cxt.fill();
                cxt.restore();
    
                /********内部六边形***********/
                cxt.save();
                cxt.beginPath();
                cxt.translate(300, 300);
    
                cxt.moveTo(ladderLen, 0);
                cxt.rotate(60*Math.PI/180);
                cxt.lineTo(ladderLen, 0);
                cxt.rotate(60*Math.PI/180);
                cxt.lineTo(ladderLen, 0);
                cxt.rotate(60*Math.PI/180);
                cxt.lineTo(ladderLen, 0);
                cxt.rotate(60*Math.PI/180);
                cxt.lineTo(ladderLen, 0);
                cxt.rotate(60*Math.PI/180);
                cxt.lineTo(ladderLen, 0);
    
                cxt.closePath();
                cxt.fill();
                cxt.restore();
            }
    
            function drawLadder(ladderA){
                for(var i=0; i<ladderA.boxes.length; i++){
                    cxt.save();
                    cxt.translate(300, 300);
                    cxt.fillStyle = ladderA.boxes[i].color;
                    cxt.beginPath();
                    cxt.rotate(ladderA.degree*Math.PI/180);
                    cxt.moveTo(ladderLen + (ladderA.boxes[i].index - 1)*boxLen, 0);
                    cxt.lineTo(ladderLen + ladderA.boxes[i].index*boxLen, 0);
                    cxt.rotate(60*Math.PI/180);
                    cxt.lineTo(ladderLen + ladderA.boxes[i].index*boxLen, 0);
                    cxt.lineTo(ladderLen + (ladderA.boxes[i].index - 1)*boxLen, 0);
                    cxt.closePath();
                    cxt.fill();
                    cxt.restore();
                }
            }
    
            // 画下落的梯形
            function drawX(){
                isCal = true;
                var _ladderX = [];
                for(var i=0; i<ladderX.length; i++){
    
                    cxt.save();
                    cxt.translate(300, 300);
                    cxt.fillStyle = ladderX[i].color;
                    cxt.beginPath();
                    cxt.rotate(ladderX[i].degree * Math.PI / 180);
                    cxt.moveTo(ladderLen + (ladderX[i].index - 1) * boxLen, 0);
                    cxt.lineTo(ladderLen + ladderX[i].index * boxLen, 0);
                    cxt.rotate(60 * Math.PI / 180);
                    cxt.lineTo(ladderLen + ladderX[i].index * boxLen, 0);
                    cxt.lineTo(ladderLen + (ladderX[i].index - 1) * boxLen, 0);
                    cxt.closePath();
                    cxt.fill();
                    cxt.restore();
    
                    var isDel = false;
                    var _ladder = qryLadder(ladderX[i].degree);
                    if(_ladder.boxes.length == 0){
                        if(ladderX[i].index == 1){
                            isDel = true;
                            _ladder.boxes.push({'index':ladderX[i].index,'color':ladderX[i].color});
                            getScore();
                        }
                    }else if(_ladder.boxes.length == 7 && ladderX[i].index == 7){
                        iStop = true;
                        alert('game over!');
                    }else if((_ladder.boxes[_ladder.boxes.length-1].index + 1) == ladderX[i].index){
                        isDel = true;
                        _ladder.boxes.push({'index':ladderX[i].index,'color':ladderX[i].color});
                        getScore();
                    }
    
                    if(!isDel){
                        _ladderX.push(ladderX[i]);
                    }
    
                    if(index%20 == 0){
                        ladderX[i].index -= 1;
                    }
    
                }
    
                ladderX = _ladderX;
    
                if(ladderX.length == 0){
                    randomX();
                }
    
                isCal = false;
            }
    
            // 随机下落的梯形
            function randomX(){
                ladderX = [];
                var degree = Math.floor(Math.random()*6)*60;
                var color = colors[Math.floor(Math.random()*4)];
    
                var num = Math.round(Math.random()*3);
                for(var i=0; i<num; i++){
                    var _degree = degree + i*60;
                    if(_degree >= 360){
                        _degree -= 360;
                    }
    
                    ladderX.push({'degree':_degree, 'index':7, 'color':color});
                }
                console.log(ladderX);
            }
    
            // 依据degree查找相应的梯形
            function qryLadder(degree){
                if(ladderA.degree == degree){
                    return ladderA;
                }
                if(ladderB.degree == degree){
                    return ladderB;
                }
                if(ladderC.degree == degree){
                    return ladderC;
                }
                if(ladderD.degree == degree){
                    return ladderD;
                }
                if(ladderE.degree == degree){
                    return ladderE;
                }
                if(ladderF.degree == degree){
                    return ladderF;
                }
            }
    
            function draw(){
                drawBg();
                drawLadder(ladderA);
                drawLadder(ladderB);
                drawLadder(ladderC);
                drawLadder(ladderD);
                drawLadder(ladderE);
                drawLadder(ladderF);
                drawX();
                drawScore();
            }
    
            function erase(){
                cxt.clearRect(0, 0, canvas.width, canvas.height);
            }
    
            function add60(ladder){
                if(ladder.degree == 300){
                    ladder.degree = 0;
                }else{
                    ladder.degree += 60;
                }
            }
    
            function del60(ladder){
                if(ladder.degree == 0){
                    ladder.degree = 300;
                }else{
                    ladder.degree -= 60;
                }
            }
    
            function getScore(){
                var minLen = ladderA.boxes.length;
                minLen = ladderB.boxes.length<minLen?ladderB.boxes.length:minLen;
                minLen = ladderC.boxes.length<minLen?ladderC.boxes.length:minLen;
                minLen = ladderD.boxes.length<minLen?ladderD.boxes.length:minLen;
                minLen = ladderE.boxes.length<minLen?ladderE.boxes.length:minLen;
                minLen = ladderF.boxes.length<minLen?ladderF.boxes.length:minLen;
    
                score += minLen*10;
                for(var i=0; i<minLen; i++){
                    ladderA.boxes.shift();
                    for(var j=0; j<ladderA.boxes.length; j++){
                        ladderA.boxes[j].index --;
                    }
                    ladderB.boxes.shift();
                    for(var j=0; j<ladderB.boxes.length; j++){
                        ladderB.boxes[j].index --;
                    }
                    ladderC.boxes.shift();
                    for(var j=0; j<ladderC.boxes.length; j++){
                        ladderC.boxes[j].index --;
                    }
                    ladderD.boxes.shift();
                    for(var j=0; j<ladderD.boxes.length; j++){
                        ladderD.boxes[j].index --;
                    }
                    ladderE.boxes.shift();
                    for(var j=0; j<ladderE.boxes.length; j++){
                        ladderE.boxes[j].index --;
                    }
                    ladderF.boxes.shift();
                    for(var j=0; j<ladderF.boxes.length; j++){
                        ladderF.boxes[j].index --;
                    }
                }
            }
    
            function drawScore(){
                cxt.save();
                cxt.font="40px Verdana";
                cxt.fillStyle = 'skyblue';
                cxt.fillText(score + "", 280, 314);
                cxt.restore();
            }
    
            var last = new Date();
            document.onkeydown = (function(e){
                var now = new Date();
                if((now.getTime() - last.getTime()) < 200 || isCal){
                    return;
                }
                last = now;
                switch(e.which){
                    case 39:
                        del60(ladderA);
                        del60(ladderB);
                        del60(ladderC);
                        del60(ladderD);
                        del60(ladderE);
                        del60(ladderF);
                        break;
                    case 37:
                        add60(ladderA);
                        add60(ladderB);
                        add60(ladderC);
                        add60(ladderD);
                        add60(ladderE);
                        add60(ladderF);
                        break;
                }
            });
    
            window.requestAnimationFrame =
                    window.requestAnimationFrame ||
                    window.mozRequestAnimationFrame ||
                    window.webkitRequestAnimationFrame ||
                    window.msRequestAnimationFrame;
    
            window.cancelRequestAnimationFrame =
                    window.cancelRequestAnimationFrame ||
                    window.mozCancelRequestAnimationFrame ||
                    window.webkitCancelRequestAnimationFrame ||
                    window.msCancelRequestAnimationFrame;
    
            function animate() {
                index ++;
                erase();
                draw();
                if(iStop){
                    cancelRequestAnimationFrame(timer);
                }else{
                    timer = requestAnimationFrame(animate);
                }
            }
    
            animate();
        </script>
    </div>
    </body>
    </html>


  • 相关阅读:
    Codeforces Round 546 (Div. 2)
    Codeforces Round 545 (Div. 2)
    Codeforces Round 544(Div. 3)
    牛客小白月赛12
    Codeforces Round 261(Div. 2)
    Codeforces Round 260(Div. 2)
    Codeforces Round 259(Div. 2)
    Codeforces Round 258(Div. 2)
    Codeforces Round 257 (Div. 2)
    《A First Course in Probability》-chaper5-连续型随机变量-随机变量函数的分布
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5325899.html
Copyright © 2011-2022 走看看