婷婷综合国产,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
    国内外成人在线| 欧美美女黄视频| 天天综合天天综合色| 久久精品一区蜜桃臀影院| 欧美日韩免费电影| 91首页免费视频| 国产成人精品综合在线观看 | 美脚の诱脚舐め脚责91| 亚洲国产精品成人综合色在线婷婷| 欧美精品777| 色综合久久天天综合网| 成人午夜av电影| 国产成人午夜电影网| 激情综合亚洲精品| 美脚の诱脚舐め脚责91| 日本人妖一区二区| 亚洲国产一区二区三区青草影视 | 国产一区二区三区日韩| 五月综合激情网| 亚洲第一二三四区| 亚洲高清视频在线| 亚洲国产精品激情在线观看| 国产视频一区不卡| 欧美激情在线一区二区三区| 久久美女高清视频| 欧美激情一区二区三区在线| 国产精品网站在线观看| 欧美一区二区三区小说| 在线播放国产精品二区一二区四区| 日本道精品一区二区三区| 欧美中文字幕一二三区视频| 欧美日韩午夜在线| 欧美三级午夜理伦三级中视频| 91麻豆国产精品久久| 欧美精品99久久久**| 日韩三级伦理片妻子的秘密按摩| 精品粉嫩aⅴ一区二区三区四区| 欧美撒尿777hd撒尿| 欧美日韩国产色站一区二区三区| 日韩一级完整毛片| 亚洲精品国产成人久久av盗摄 | 欧美日韩国产首页在线观看| 国产乱码精品一区二区三区忘忧草| 99久久免费国产| 精品伦理精品一区| 午夜精品一区二区三区电影天堂 | 色94色欧美sute亚洲线路一久| 精品久久久久久综合日本欧美| 自拍偷拍国产精品| 成人性色生活片| 欧美tickling网站挠脚心| 亚洲一级电影视频| 99精品视频中文字幕| 国产日韩欧美在线一区| 蜜臀久久久久久久| 日日欢夜夜爽一区| 色综合久久综合网97色综合| 国产欧美日韩久久| 激情丁香综合五月| 欧美mv日韩mv国产网站app| 亚洲成在人线免费| 欧美自拍偷拍一区| 亚洲一二三四在线观看| 色综合天天综合网国产成人综合天 | 中文字幕日韩欧美一区二区三区| 日本不卡一区二区三区高清视频| 欧美写真视频网站| 亚洲一区二区四区蜜桃| 欧美无砖砖区免费| 亚洲一区成人在线| 欧美日韩精品高清| 舔着乳尖日韩一区| 91精品国产入口| 日韩和欧美一区二区三区| 欧美剧情片在线观看| 日韩专区一卡二卡| 欧美成人a视频| 国产一区二区免费视频| 久久久久久99精品| 成人午夜电影小说| 亚洲日本一区二区| 欧美日韩亚洲不卡| 免费的成人av| 亚洲精品一区二区三区在线观看 | 99综合影院在线| 综合久久久久综合| 欧美日韩日日骚| 美女脱光内衣内裤视频久久影院| 日韩亚洲欧美在线| 国产一区二区福利| 亚洲三级在线观看| 在线视频中文字幕一区二区| 亚洲成年人影院| 欧美成人性战久久| 成人a级免费电影| 亚洲一区二区三区视频在线| 日韩一区二区三区在线视频| 精品制服美女丁香| 亚洲欧洲日本在线| 欧美一区在线视频| 盗摄精品av一区二区三区| 亚洲精品精品亚洲| 精品国产一区久久| 色综合天天综合网天天看片| 日韩福利视频导航| 国产精品灌醉下药二区| 欧美日韩高清一区| 国产91清纯白嫩初高中在线观看 | 91麻豆国产精品久久| 日韩国产欧美三级| 色婷婷国产精品久久包臀| 久久av资源网| 亚洲一区二区在线免费看| 久久久高清一区二区三区| 色成人在线视频| 日韩理论片在线| 久久婷婷成人综合色| 欧美性猛交xxxx乱大交退制版| 国产风韵犹存在线视精品| 亚洲成人在线网站| 一区在线中文字幕| 日韩手机在线导航| 欧美日韩国产首页| 在线影视一区二区三区| 成人国产一区二区三区精品| 久久精品理论片| 日韩一区精品视频| 亚洲欧美偷拍另类a∨色屁股| 337p日本欧洲亚洲大胆精品| 欧美日韩五月天| 欧美中文字幕一区| 成人av影院在线| 久久69国产一区二区蜜臀| 亚洲在线免费播放| 国产精品午夜电影| 久久久99久久精品欧美| 91精品国产一区二区三区 | 亚洲一区二区三区小说| 中文字幕在线播放不卡一区| 久久久久久久一区| 精品国产乱码久久久久久久久| 欧美性大战xxxxx久久久| 91网上在线视频| 大陆成人av片| 国产成人免费视频网站高清观看视频| 美腿丝袜一区二区三区| 亚洲国产精品久久人人爱| 亚洲精品亚洲人成人网 | 麻豆一区二区在线| 美女视频一区二区三区| 男女男精品视频| 午夜精品久久久久影视| 亚洲三级视频在线观看| 亚洲激情av在线| 亚洲成av人片在线| 日本成人在线视频网站| 韩国精品一区二区| 国产成人免费在线| 91在线porny国产在线看| 欧美在线制服丝袜| 欧美高清视频www夜色资源网| 日韩视频一区二区| 国产欧美日韩在线| 亚洲曰韩产成在线| 美女国产一区二区| 国产.精品.日韩.另类.中文.在线.播放| 国产成人综合亚洲网站| 色综合婷婷久久| 欧美一级二级在线观看| 国产欧美日产一区| 亚洲国产欧美日韩另类综合 | 亚洲综合免费观看高清完整版在线| 亚洲国产另类精品专区| 免费成人在线影院| kk眼镜猥琐国模调教系列一区二区| 色欧美88888久久久久久影院| 欧美丰满美乳xxx高潮www| 精品国产伦理网| 一区二区三区在线视频观看 | 92精品国产成人观看免费| 欧美日韩一区二区三区四区五区 | 国产精品久久久久久久久免费桃花 | 中文字幕成人网| 午夜精品在线看| 成人久久视频在线观看| 欧美日韩国产天堂| 亚洲欧洲精品天堂一级| 麻豆国产精品视频| 色综合久久天天| www欧美成人18+| 五月天一区二区三区| 国产91丝袜在线观看| 欧美大片顶级少妇| 亚洲小说春色综合另类电影| 国产精品一区二区视频| 3atv一区二区三区| 亚洲免费观看视频| 粉嫩蜜臀av国产精品网站| 日韩一区二区三区高清免费看看| 国产精品成人在线观看|