婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > H5 canvas實現貪吃蛇小游戲

H5 canvas實現貪吃蛇小游戲

熱門標簽:西寧智能外呼系統加盟 電視購物電銷外呼系統 貸款電銷人工和機器人哪個好 飛亞外呼系統 杭州營銷電銷機器人供應商 電話機器人如何 聯通400電話申請 高德地圖標注賓館位置 百應電銷機器人產業

本文介紹了H5 canvas實現貪吃蛇小游戲,分享給大家,具體如下:

實現效果如下

實現思路:

ps:這個只是思路,詳細可看代碼注釋

一、先把蛇畫出來

  1. 定義一下蛇的結構,用一個數組保存一堆矩形,包含蛇頭(紅)和蛇身(灰)。
  2. 畫蛇(初始狀態)

二、蛇能動(重點)

  1. 蛇移動方式:自始至終都只有蛇頭在動
    1. 畫一個灰色的方塊,位置與蛇頭重疊
    2. 將這個方塊插到數組中蛇頭后面一個的位置arrar.splice(0,1,rect)
    3. 砍去末尾的方塊array.pop()
    4. 將蛇頭向設定方向移動一格
  2. 需要一個保存方向的變量(direction)
  3. 根據方向進行移動,一次移動一個格
  4. 根據按鍵改方向

三、隨機投放食物

  1. 需要隨機食物的位置
  2. 需要判斷食物在不在蛇身上。

四、吃食物

  1. 判斷食物是否與蛇頭重疊
  2. 數組加一個元素(少刪除一個元素就是加一個元素)
  3. 生成新的食物

五、gameover

  1. 撞墻判定
  2. 裝自己判定
     
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        #canvas{
            box-shadow: 0 5px 40px black;
        }
    </style>
</head>
<body>
    <canvas id="canvas" width="800" height="500"></canvas>
</body>
<script>
    var canvas = document.getElementById('canvas');
    var context = canvas.getContext('2d');

    //構造對象方塊
    function Rect (x,y,w,h,color) {
        this.x = x;
        this.y = y;
        this.w = w;
        this.h = h;
        this.color = color;
    }
    //畫方塊的方法
    Rect.prototype.draw = function () {
        context.beginPath();
        context.fillStyle = this.color;
        context.rect(this.x,this.y,this.w,this.h);
        context.fill();
        context.stroke();
    }

    //構造對象蛇
    function Snake () {

        //定義一個空數組存放組成整蛇的方塊對象
        var snakeArray = [];

        //畫出4個方塊,設置成灰色
        for (var i = 0; i < 4; i++) {
            var rect = new Rect(i*20,0,20,20,"gray");
            //之所以用splice(往前加)而不是用push(往后加),是為了讓蛇頭出現在數組第一個位置
            snakeArray.splice(0,0,rect);     
        }

        //把數組第一個作為蛇頭,蛇頭設成紅色
        var head = snakeArray[0];
        head.color = "red";

        //此處將兩個后面常用的東西定為屬性,方便后面調用
        this.head = snakeArray[0];  //蛇頭
        this.snakeArray = snakeArray;  //整蛇數組

        //給定初始位置向右(同keyCode右箭頭)
        this.direction = 39;
    }
    //畫蛇的方法
    Snake.prototype.draw = function () {
        for (var i = 0; i < this.snakeArray.length; i++) {
            this.snakeArray[i].draw();
        } 
    }
    //蛇移動的方法
    Snake.prototype.move = function () {

        //此處是核心部分,蛇的 移動方式
        //1、畫一個灰色的方塊,位置與蛇頭重疊
        //2、將這個方塊插到數組中蛇頭后面一個的位置
        //3、砍去末尾的方塊
        //4、將蛇頭向設定方向移動一格
        var rect = new Rect(this.head.x,this.head.y,this.head.w,this.head.h,"gray");
        this.snakeArray.splice(1,0,rect);

        //判斷是否吃到食物,isEat判定函數寫在最后了
        //吃到則食物重新給位置,不砍去最后一節,即蛇變長
        //沒吃到則末尾砍掉一節,即蛇長度不變
        if (isEat()){
            food = new getRandomFood();
        }else{
            this.snakeArray.pop();
        }

        //設置蛇頭的運動方向,37 左,38 上,39 右,40 下
        switch (this.direction) {
            case 37:
                this.head.x -= this.head.w
                break;
            case 38:
                this.head.y -= this.head.h
                break;
            case 39:
                this.head.x += this.head.w
                break;
            case 40:
                this.head.y += this.head.h
                break;
            default:    
                break;
        }

        // gameover判定
        // 撞墻
        if (this.head.x > canvas.width || this.head.x < 0 || this.head.y > canvas.height || this.head.y < 0){
            clearInterval(timer);
        }

        // 撞自己,循環從1開始,避開蛇頭與蛇頭比較的情況
        for (var i = 1; i < this.snakeArray.length; i++) {
            if (this.snakeArray[i].x == this.head.x && this.snakeArray[i].y == this.head.y){
                clearInterval(timer);
            }
        }
    }

    //畫出初始的蛇
    var snake = new Snake()
    snake.draw();

    //畫出初始的食物
    var food = new getRandomFood()

    //定時器
    var timer = setInterval(function () {
        context.clearRect(0,0,canvas.width,canvas.height);
        food.draw();
        snake.move();
        snake.draw();
    }, 100)

    //鍵盤事件,其中的if判定是為了讓蛇不能直接掉頭
    document.onkeydown = function (e) {
        var ev = e||window.event;
        switch(ev.keyCode){
            case 37:{
                if (snake.direction !== 39){
                    snake.direction = 37;
                }
                break;
            }
            case 38:{
                if (snake.direction !== 40){
                    snake.direction = 38;
                }
                break;
            }
            case 39:{
                if (snake.direction !== 37){
                    snake.direction = 39;
                }
                break;
            }
            case 40:{
                if (snake.direction !== 38){
                    snake.direction = 40;
                }
                break;
            }    
        }
        ev.preventDefault();
    }

    //隨機函數,獲得[min,max]范圍的值
    function getNumberInRange (min,max) {
        var range = max-min; 
        var r = Math.random();
        return Math.round(r*range+min)
    }

    //構建食物對象
    function getRandomFood () {

        //判定食物是否出現在蛇身上,如果是重合,則重新生成一遍
        var isOnSnake = true;

        //設置食物出現的隨機位置
        while(isOnSnake){
            //執行后先將判定條件設置為false,如果判定不重合,則不會再執行下列語句
            isOnSnake = false;
            var indexX = getNumberInRange(0,canvas.width/20-1);
            var indexY = getNumberInRange(0,canvas.height/20-1);
            var rect = new Rect(indexX*20, indexY*20, 20, 20, "green");
            for (var i = 0; i < snake.snakeArray.length; i++) {
                if(snake.snakeArray[i].x == rect.x && snake.snakeArray[i].y == rect.y){
                    //如果判定重合,將其設置為true,使隨機數重給
                    isOnSnake = true;
                    break;
                }
            }
        }
        //返回rect,使得實例化對象food有draw的方法
        return rect;
    }

    //判定吃到食物,即蛇頭坐標與食物坐標重合
    function isEat () {
        if (snake.head.x == food.x && snake.head.y == food.y){
            return true;
        } else {
            return false;
        }
    }

</script>
</html>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:內蒙古 煙臺 晉中 玉溪 撫州 邯鄲 牡丹江 安慶

巨人網絡通訊聲明:本文標題《H5 canvas實現貪吃蛇小游戲》,本文關鍵詞  canvas,實現,貪吃,蛇,小游戲,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《H5 canvas實現貪吃蛇小游戲》相關的同類信息!
  • 本頁收集關于H5 canvas實現貪吃蛇小游戲的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    粉嫩一区二区三区性色av| 久久亚洲私人国产精品va媚药| 91老师国产黑色丝袜在线| 亚洲va欧美va人人爽午夜| 成人av在线资源网| 99久久99久久免费精品蜜臀| 91精品黄色片免费大全| 成人性生交大片免费看视频在线 | 精品对白一区国产伦| 欧洲亚洲国产日韩| 91在线视频观看| 成人亚洲一区二区一| 国产一区二区h| 久久99久久99| 日韩1区2区日韩1区2区| 亚洲成人自拍一区| 亚洲色图制服诱惑| 最新国产成人在线观看| 国产精品国产自产拍高清av王其| 久久久精品国产免大香伊| 亚洲精品一区二区三区蜜桃下载| 日韩一级片网站| 欧美一区二区在线不卡| 精品无人码麻豆乱码1区2区| 国产a精品视频| 亚洲精品在线观看视频| 在线观看www91| 国产一区二区调教| 日韩精品一区二区三区视频| 国产一区二区精品在线观看| 亚洲欧美怡红院| 91亚洲国产成人精品一区二区三 | 成人综合婷婷国产精品久久免费| 国产传媒日韩欧美成人| 国产成人免费网站| 国产亚洲污的网站| 国产suv精品一区二区三区| 成人av电影在线播放| 欧美喷水一区二区| 精品国产乱码久久久久久久| 国产精品99久久久久久宅男| 精品1区2区在线观看| 欧美高清dvd| 欧美高清视频在线高清观看mv色露露十八| www.欧美精品一二区| 成人av午夜影院| 欧美影院精品一区| 中文字幕av资源一区| 亚洲精品免费电影| 国产做a爰片久久毛片| 色一情一伦一子一伦一区| 午夜精品久久久久久久99水蜜桃| 精品处破学生在线二十三| 国产福利精品一区二区| 免费观看成人av| 国产精品一区二区三区乱码| 日韩有码一区二区三区| a亚洲天堂av| 麻豆精品一区二区av白丝在线 | av在线不卡观看免费观看| 亚洲免费视频中文字幕| 亚洲少妇30p| 亚洲欧美另类小说视频| 中文字幕中文字幕一区二区| 亚洲欧美一区二区三区孕妇| 中文字幕一区在线观看视频| 欧美激情一区二区| 一区二区视频在线| 一区二区在线观看视频| 天天色 色综合| 亚洲精品乱码久久久久| 成人国产精品免费| 欧美精品久久天天躁| 久久久久久一二三区| 欧美三级一区二区| 99精品国产一区二区三区不卡| 最新热久久免费视频| 久久久99精品免费观看不卡| 在线播放中文一区| 成人免费毛片app| 黑人精品欧美一区二区蜜桃| 亚洲欧洲精品一区二区精品久久久 | 欧美一区二区免费视频| 精品国产一区二区三区久久影院 | 亚洲一区二区三区四区不卡| 欧美96一区二区免费视频| 大尺度一区二区| 欧美亚洲另类激情小说| 亚洲精品一区二区三区精华液 | 六月丁香婷婷色狠狠久久| 99这里只有久久精品视频| 欧美变态tickling挠脚心| 亚洲人123区| 久久99国产精品麻豆| 色狠狠桃花综合| 欧美激情一区二区三区全黄| 日本三级亚洲精品| 91年精品国产| 国产亚洲1区2区3区| 亚洲福利国产精品| 成年人午夜久久久| 亚洲精品一区二区精华| 午夜免费欧美电影| 激情综合色丁香一区二区| 一区二区三区四区中文字幕| av在线综合网| 欧美性大战久久久久久久蜜臀| 国产精品综合视频| 精品一区二区影视| 成人高清视频免费观看| 成人影视亚洲图片在线| 国产麻豆日韩欧美久久| 94色蜜桃网一区二区三区| 成人免费一区二区三区视频 | 国产中文字幕一区| 欧美日韩一区精品| 欧美变态tickle挠乳网站| 国产欧美一区二区三区沐欲| 视频一区视频二区在线观看| 成人激情开心网| 26uuu成人网一区二区三区| 亚洲欧洲日韩av| 国产精品伦理一区二区| 亚洲三级小视频| 国产成人精品亚洲午夜麻豆| 日韩视频一区二区三区| 亚洲精品美腿丝袜| 欧美体内she精高潮| 亚洲欧洲性图库| 成人一道本在线| 日本一区二区三区在线不卡| 看电视剧不卡顿的网站| 国产一区二区三区免费看| 精品国产伦一区二区三区观看体验 | 日韩一区二区三区高清免费看看 | 91啪在线观看| 亚洲在线一区二区三区| 欧美三级日韩三级| 国产一区不卡精品| 精品日韩一区二区三区免费视频| 欧美精品一区二区三区一线天视频| 一区二区成人在线观看| 午夜精品久久久久久久蜜桃app| 91精品国产综合久久精品性色| 一区二区三区精品视频| 国产一区二区在线视频| www亚洲一区| 亚洲电影激情视频网站| 亚洲精品欧美专区| 欧美日韩成人激情| 国产乱码精品一区二区三区av| 蜜桃精品视频在线| 日韩精品一区二区三区蜜臀| 97精品电影院| 色欧美片视频在线观看 | 亚洲欧美电影院| 欧美电影一区二区| 欧美色图一区二区三区| 欧美一区二区观看视频| 午夜欧美电影在线观看| 日韩激情av在线| 国产盗摄视频一区二区三区| 欧美日韩另类一区| 日韩成人一区二区三区在线观看| 日本丶国产丶欧美色综合| 精品国产一区二区亚洲人成毛片 | 国产精品成人网| 成人性色生活片免费看爆迷你毛片| 精品99一区二区三区| 69堂亚洲精品首页| 不卡一区二区三区四区| 久久理论电影网| 国产一区在线观看视频| 日韩视频免费观看高清在线视频| 一区精品在线播放| 不卡的av中国片| 国产女同性恋一区二区| 久久国产精品99久久人人澡| 欧美一级生活片| 久久久美女毛片| 国产在线精品一区二区不卡了| 日韩三级免费观看| 欧美aⅴ一区二区三区视频| 日韩久久精品一区| 国产高清亚洲一区| 国产精品伦理在线| 欧美精品一区二区久久久| 色综合中文综合网| 91国内精品野花午夜精品| 欧美变态凌虐bdsm| 韩日欧美一区二区三区| 亚洲精品高清在线观看| 日韩亚洲欧美成人一区| 久久www免费人成看片高清| 久久婷婷国产综合国色天香| 久久久久久久国产精品影院| 日本不卡在线视频| 五月天中文字幕一区二区| 91麻豆精品91久久久久同性| 欧美精品一区二区三区在线播放|