亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > HTML > 正文

H5 canvas實現貪吃蛇小游戲

2024-08-26 00:19:50
字體:
來源:轉載
供稿:網友

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

實現效果如下

canvas貪吃蛇,canvas實現貪吃蛇,html5,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>

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


注:相關教程知識閱讀請移步到HTML教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品免费视频久久久| 伊人伊人伊人久久| 欧美xxxx18国产| 国产精品久久久| 在线亚洲国产精品网| 欧美成人免费在线视频| 亚洲女人被黑人巨大进入al| 国产精品日韩欧美综合| 一区二区三区日韩在线| 日韩欧美中文在线| 一本一本久久a久久精品牛牛影视| 日韩精品久久久久久久玫瑰园| 亚洲国产私拍精品国模在线观看| 欧美怡红院视频一区二区三区| 97在线视频免费播放| 中文字幕久久久av一区| 成人中文字幕+乱码+中文字幕| 97精品国产97久久久久久春色| 欧美亚洲视频在线看网址| 日韩精品在线观看一区| 欧洲日本亚洲国产区| 亚洲精品在线视频| 亚洲自拍另类欧美丝袜| 午夜精品一区二区三区在线| 欧美最猛黑人xxxx黑人猛叫黄| 亚洲第一精品夜夜躁人人爽| 国产精品美乳在线观看| 亚洲综合色av| 亚洲人在线视频| 欧美大片欧美激情性色a∨久久| 成人两性免费视频| 91精品国产精品| 精品国产成人在线| 高潮白浆女日韩av免费看| 亚洲色图色老头| 国产色婷婷国产综合在线理论片a| 午夜精品一区二区三区在线播放| 欧美大片免费观看在线观看网站推荐| 欧美精品videos另类日本| 久久久久久国产精品三级玉女聊斋| 国产精品日日摸夜夜添夜夜av| 久久久久久久久久亚洲| 青青精品视频播放| 中文字幕亚洲一区二区三区五十路| 久色乳综合思思在线视频| 欧美激情成人在线视频| 国产精品精品久久久| 成人在线视频网站| 久久综合国产精品台湾中文娱乐网| 久久国产视频网站| 日韩电影免费在线观看中文字幕| 精品久久久久久久大神国产| 高清在线视频日韩欧美| 精品久久久久久久久国产字幕| 亚洲人午夜色婷婷| 久久五月天色综合| 日韩视频在线免费| 亚洲精品在线91| 亚洲男人天堂手机在线| 欧美日韩国产色视频| 国产成人精品电影久久久| 这里只有精品视频| 成人www视频在线观看| 国产精彩精品视频| 亚洲女性裸体视频| 久久不射电影网| 日本一欧美一欧美一亚洲视频| 九九久久综合网站| 一区二区三区四区在线观看视频| 欧美一级大片在线免费观看| 国产精品7m视频| 久久久999精品| 欧美亚洲视频一区二区| 亚洲激情小视频| 久久久国产一区二区三区| 欧洲中文字幕国产精品| 欧美日在线观看| 久久久精品国产亚洲| 91丨九色丨国产在线| 精品国产福利在线| 国产精自产拍久久久久久蜜| 日韩中文字幕网站| 久久99久国产精品黄毛片入口| 最近中文字幕日韩精品| 韩国一区二区电影| 国产激情综合五月久久| 日韩在线播放视频| 久久成人这里只有精品| 亚洲电影在线看| 久久视频中文字幕| 国产91av在线| 一区二区三区四区视频| 92看片淫黄大片看国产片| 日韩精品极品在线观看播放免费视频| 国产欧美一区二区三区四区| 九九久久综合网站| 日韩精品在线视频观看| 亚洲激情 国产| 国产精品一区二区三区毛片淫片| 精品国产91乱高清在线观看| 亚洲va男人天堂| 亚洲第一区中文99精品| 亚洲老司机av| 国产欧美va欧美va香蕉在线| 亚洲欧洲在线免费| 亚洲第一中文字幕| 91精品国产综合久久香蕉最新版| 国产成人在线播放| 国产精品igao视频| 久久国产精彩视频| 欧美乱人伦中文字幕在线| 日韩中文在线观看| 日本免费久久高清视频| 777777777亚洲妇女| 亚洲欧美国产精品久久久久久久| 国产综合在线观看视频| 久久久久久久久久久久久久久久久久av| 国产精品福利在线观看网址| 久久精品亚洲热| 国产亚洲精品久久久| 亚洲国产成人精品一区二区| 久久99热这里只有精品国产| 久久伊人精品天天| 日韩在线中文字幕| 国产精品成人一区二区| 在线看日韩欧美| 欧美日韩在线看| 国产aⅴ夜夜欢一区二区三区| 欧美激情视频播放| 欧美精品第一页在线播放| 国产男人精品视频| 久久精品国产久精国产一老狼| 久久久久久久久国产| 久操成人在线视频| 九九九热精品免费视频观看网站| 久久精品在线播放| 福利一区视频在线观看| 91九色单男在线观看| 亚洲剧情一区二区| 国产精品电影一区| 久久久久国产精品www| 97色在线观看免费视频| 欧美日韩加勒比精品一区| 久久国产精品影视| 欧美一级片一区| 日韩欧美中文字幕在线观看| 欧洲亚洲女同hd| 成人黄色片在线| 中文字幕亚洲第一| 久久99热精品| 在线精品高清中文字幕| 欧美午夜精品久久久久久久| 美女视频久久黄| 欧美亚洲另类激情另类| 欧美性69xxxx肥| 最近2019年日本中文免费字幕| 最近中文字幕日韩精品| 美女999久久久精品视频| 亚洲男人第一av网站| 久久久精品久久久久| 欧美日韩精品在线| 九九精品视频在线| 国产精品wwwwww| 国产亚洲精品久久久久动|