婷婷综合国产,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
    国产在线精品一区二区不卡了| 3d动漫精品啪啪一区二区竹菊| 亚洲国产精品一区二区www在线| 久久新电视剧免费观看| 欧美一二三四区在线| 欧美成人video| 久久综合九色综合欧美98 | 亚洲靠逼com| 亚洲情趣在线观看| 亚洲综合自拍偷拍| 亚洲成人免费在线| 蜜桃av噜噜一区| 精品无人区卡一卡二卡三乱码免费卡 | 不卡一区二区中文字幕| 国产成人精品免费在线| 成人精品国产一区二区4080| jlzzjlzz亚洲日本少妇| thepron国产精品| 91福利视频网站| 精品久久久久久综合日本欧美| 日韩欧美一区二区在线视频| 久久久久久麻豆| 尤物av一区二区| 日韩国产在线观看| 高清在线不卡av| 91国偷自产一区二区三区成为亚洲经典 | 一区二区三区精品视频在线| 亚洲18色成人| 国产综合色在线| 99精品热视频| 欧美一区二区精美| 亚洲欧洲中文日韩久久av乱码| 亚洲欧美一区二区不卡| 免费成人性网站| 东方欧美亚洲色图在线| 91精品在线麻豆| 亚洲欧美视频在线观看视频| 久久99久久久久| 日本丰满少妇一区二区三区| 精品捆绑美女sm三区| 亚洲欧美日韩成人高清在线一区| 性做久久久久久| 国产东北露脸精品视频| 欧美精品黑人性xxxx| 亚洲欧美在线另类| 国产老肥熟一区二区三区| 制服视频三区第一页精品| 亚洲欧洲另类国产综合| 国产精品一二三区| 欧美电影精品一区二区| 午夜电影一区二区三区| 色综合天天天天做夜夜夜夜做| 在线播放91灌醉迷j高跟美女 | 国产激情视频一区二区三区欧美| 在线亚洲人成电影网站色www| 久久久久久久久久久99999| 午夜伊人狠狠久久| 在线视频一区二区三| 国产精品国产三级国产| 国产美女久久久久| 精品久久久影院| 蜜桃av一区二区三区| 日韩网站在线看片你懂的| 亚洲成a人片在线不卡一二三区| 国产成人亚洲综合a∨婷婷图片| 日本精品免费观看高清观看| 国产精品久久久久久久久免费樱桃| 喷水一区二区三区| 欧美人与禽zozo性伦| 一级日本不卡的影视| 欧美吞精做爰啪啪高潮| 依依成人精品视频| 欧美日韩精品一区二区三区| 亚洲午夜久久久久久久久久久| 91首页免费视频| 亚洲欧美视频在线观看视频| 91久久免费观看| 亚洲一区在线看| 欧美疯狂性受xxxxx喷水图片| 亚洲综合一区二区| 欧美日韩国产综合一区二区| 午夜视黄欧洲亚洲| 日韩一区二区在线看| 国产一区二区三区精品视频| 久久精品日韩一区二区三区| 成人一区二区三区| 亚洲免费色视频| 欧美久久一二区| 九色porny丨国产精品| 国产亚洲综合性久久久影院| eeuss鲁片一区二区三区在线观看| 久久久亚洲精品一区二区三区| 国模套图日韩精品一区二区| 国产精品嫩草99a| 欧美日韩精品三区| 国产一区二区中文字幕| 国产精品超碰97尤物18| 欧美精品在欧美一区二区少妇| 琪琪一区二区三区| 国产精品视频在线看| 精品视频123区在线观看| 久久成人久久爱| 国产精品的网站| 91精品国产综合久久精品麻豆| 男女男精品视频| 亚洲欧美影音先锋| 日韩欧美亚洲另类制服综合在线| 韩日av一区二区| 亚洲午夜三级在线| 欧美国产综合一区二区| 欧美日韩中文另类| 丁香五精品蜜臀久久久久99网站 | 99视频一区二区| 三级亚洲高清视频| 国产精品久久久久一区二区三区共| 99久久综合色| 极品少妇xxxx精品少妇| 亚洲成av人**亚洲成av**| 国产三级精品三级| 欧美一区二区黄色| 在线日韩av片| voyeur盗摄精品| 国内精品久久久久影院一蜜桃| 国产欧美一区二区在线| 日韩三级视频在线观看| 欧美三级蜜桃2在线观看| 成人自拍视频在线观看| 久久69国产一区二区蜜臀| 一区av在线播放| 国产精品久久久久久久久免费桃花| 欧美日韩一级二级三级| av成人免费在线观看| 国产另类ts人妖一区二区| 日本最新不卡在线| 亚洲一级在线观看| 亚洲男人天堂一区| 亚洲欧美精品午睡沙发| 国产欧美日韩中文久久| 久久人人爽人人爽| 久久久久高清精品| 国产日韩欧美精品综合| 国产欧美一区二区三区网站| 久久久久久久久岛国免费| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美日韩在线播放三区四区| 91精品福利在线| 色先锋资源久久综合| 欧美色网站导航| 欧美视频在线观看一区| 欧洲精品视频在线观看| 欧美日韩一区在线观看| 欧美高清你懂得| 欧美一区二区三区四区久久| 欧美一区三区四区| 精品国产露脸精彩对白| 久久网这里都是精品| 国产欧美一区二区精品性| 国产精品久久久久久久久晋中| 日韩美女一区二区三区四区| 精品国产一区二区三区久久影院| 日韩欧美一区二区久久婷婷| 精品国产一二三| 国产精品网站一区| 一区二区三区欧美日韩| 天堂影院一区二区| 国产一区二区福利| 91视视频在线观看入口直接观看www | 精品处破学生在线二十三| 久久久久久久久久久久久久久99 | 舔着乳尖日韩一区| 久久国产精品99久久久久久老狼| 免费观看在线综合| 成人高清视频在线观看| 精品视频在线视频| www国产精品av| 亚洲美女屁股眼交| 黄网站免费久久| 91丨porny丨户外露出| 日韩欧美不卡一区| 亚洲色欲色欲www在线观看| 亚洲成人午夜影院| 风间由美一区二区三区在线观看| 成人黄色777网| 91精品国产黑色紧身裤美女| 国产精品午夜免费| 日产欧产美韩系列久久99| 国产电影一区二区三区| 欧美日韩久久久| 中文一区二区在线观看| 美日韩一区二区| 9色porny自拍视频一区二区| 日韩色在线观看| 一区二区三区欧美视频| 高清国产午夜精品久久久久久| 在线视频观看一区| 中文字幕精品在线不卡| 精品一区二区国语对白| 欧美日韩综合一区| 亚洲精品综合在线| www.亚洲色图|