用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字

Hank_c_java    -  云代码空间

——

Java通过canvas做出贪吃蛇

2020-01-17|607阅||

摘要:Java通过canvas做出贪吃蛇

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>贪吃蛇</title>
    <style>
        canvas {
            border: 1px #333 solid;
            background-color: rgb(122, 157, 253);
    
            display: block;
            margin: 0 auto ;
        }

        #w, #s, #a, #d{
            width: 200px;
            height: 20px;
            background-color: #399;
        }
        #w:hover, #s:hover, #a:hover, #d:hover{
            background-color: blue;
        }
    </style>
</head>
<body>
    <!-- 1.定义一个画板 -->
    <canvas id="huabu" width="600px" height="600px"></canvas>
    <input type="button" value="上" id="w" />
    <input type="button" value="下" id="s" />
    <input type="button" value="左" id="a" />
    <input type="button" value="右" id="d" />
    <script>

        var w = document.getElementById('w')
        var s = document.getElementById('s')
        var a = document.getElementById('a')
        var d = document.getElementById('d')
 
        var huabu = document.getElementById('huabu');
        var tools = huabu.getContext('2d');

        var isAte = false;
        var isGameOver = false;

        var snake = [{x: 3, y: 2}, {x: 2, y: 2},{x: 1, y: 2}];

        var dirctionX = 1;
        var dirctionY = 0;

        var sorce = 0;

        //监听按键
        document.addEventListener('keydown',function(event){
            //console.log("您按下了" + event.keyCode + "键");
            //上:38;  下:40;  左:37;  右39;  w:87   a:65;  s:83;   d:68;    
            if(event.keyCode === 38){

                dirctionX = 0;
                dirctionY = -1;
            }else if(event.keyCode === 40){

                dirctionX = 0;
                dirctionY = 1;
            }else if(event.keyCode === 37){

                dirctionX = -1;
                dirctionY = 0;
            }else if(event.keyCode === 39){

                dirctionX = 1;
                dirctionY = 0;
            }
            
        })
        
        /*
            tools.moveTo(0,30.5);
            tools.lineTo(600,30.5);;
        
            tools.moveTo(0,60.5);
            tools.lineTo(600,60.5);
        */
        var x = (Math.floor(Math.random() * 20)) * 10;
        var y = (Math.floor(Math.random() * 20)) * 10;//随机食物

        w.onclick = function(){
            dirctionX = 0;
            dirctionY = -1;
        }
        s.onclick = function(){
            dirctionX = 0;
            dirctionY = 1;
        }
        a.onclick = function(){
            dirctionX = -1;
            dirctionY = 0;
        }
        d.onclick = function(){
            dirctionX = 1;
            dirctionY = 0;
        }

        setInterval(function(){

            if(isGameOver){
                tools.font="100px Arial";
                tools.strokeText("GAME OVER!", 0, 300);

                return;
            }

            var oldHead = snake[0];//旧的
            var newHead = {//新的
                x: oldHead.x + dirctionX,
                y: oldHead.y + dirctionY
            }

            if(newHead.x < 0 || newHead.y < 0 || newHead.x >= 60 || newHead.y >= 60){
                isGameOver = true;
            }else{
                
                snake.unshift(newHead);

                if(snake[0].x * 10 === x && snake[0].y * 10 === y){
                    //重新绘制食物
                    isAte = true;
                    //给🐍增加一节:🐍吃掉食物,就不执行pop(),就相当于增加了一节
                }else{
                    isAte = false;
                    snake.pop();
                }
            }

            

            tools.clearRect(0, 0, 600, 600);
            //🐍吃食物
            

            //------------------------------绘制食物 开始------------------------------——                            
            tools.fillStyle = '#cccc00';
            //tools.fillRect(x,y,width,height):绘制矩形
            tools.fillRect(x, y ,10, 10);

            if(isAte == true){
                x = (Math.floor(Math.random() * 20)) * 10;
                y = (Math.floor(Math.random() * 20)) * 10;
                sorce++;
            }
            //------------------------------绘制食物 结束------------------------------——
            //-------------------------------------------------------------------------
            //------------------------------绘制🐍 开始------------------------------——
        
            /*
                tools.fillStyle = "rgb(24, 143, 87)"
                tools.fillRect(snake[0].x * 30, snake[0].y * 30, 30, 30);
                tools.fillStyle = '#340';
                tools.fillRect(snake[1].x * 30, snake[1].y * 30, 30, 30);
                tools.fillRect(snake[2].x * 30, snake[2].y * 30, 30, 30);
            */

            for(var i = 0; i < snake.length; i++){
                if(i === 0){
                    tools.fillStyle = "rgb(24, 143, 87)"
                }else{
                    tools.fillStyle = '#340';
                }
                
                tools.fillRect(snake[i].x * 10, snake[i].y * 10, 10, 10);
            }
            //------------------------------绘制🐍 结束------------------------------——
            //-------------------------------------------------------------------------    
            //------------------------------绘制网格 开始------------------------------——
            /*for(var i = 0; i < 60; i++){
        
                tools.moveTo(0, 10*i+0.5);
                tools.lineTo(600, 10*i+0.5);
            }
        
            for(var i = 0; i < 60; i++){
                
                tools.moveTo(10*i+0.5, 0);
                tools.lineTo(10*i+0.5, 600);
            }*/
            
            tools.strokeWidth = 5;
            tools.strokeStyle = 'white';
            // 描边
            tools.stroke();

            tools.font="20px Arial";
            tools.strokeText("当前分数:" + sorce, 10, 50);
            //------------------------------绘制网格 结束------------------------------——
        }, 1000 / 3);

       
    </script>
    
</body>
</html>

顶 16踩 2收藏
文章评论
    发表评论

    个人资料

    • 昵称: Hank_c_java
    • 等级: 初级程序员
    • 积分: 28
    • 代码: 1 个
    • 文章: 2 篇
    • 随想: 1 条
    • 访问: 10 次
    • 关注

    人气代码

    最新提问

      站长推荐