国产精品爱久久久久久久小说,女人扒开腿让男人桶到爽 ,亚洲欧美国产双大乳头,国产成人精品综合久久久久,国产精品制服丝袜无码,免费无码精品黄av电影,黑色丝袜无码中中文字幕,乱熟女高潮一区二区在线

    JavaScript制作貪吃蛇小游戲

    2022-1-25    前端達(dá)人

    目錄

    效果展示

    原理分析

     Game.js文檔

    Snake.js文檔

    Food.js文檔

    附上源代碼


    寫了這么久的代碼

    是否你和我一樣感到枯燥乏味了呢?

    是否沒(méi)有前進(jìn)的動(dòng)力了呢?

    別忘了當(dāng)時(shí)的你躊躇滿志將前端Web一舉拿下的斗志啊!


    今天博主要給大家展現(xiàn)一個(gè)好玩的游戲

    貪吃蛇小游戲!

    嘿,你可別小瞧這東西!

    制作過(guò)程是從無(wú)到有

    等做完它

    你就能從中體會(huì)到比玩游戲還快樂(lè)的居然是打代碼!


    效果展示

    原理分析

    我們制作前為了代碼更清晰就分成幾個(gè)js文檔來(lái)編寫。

    其中Game.js可以看作是一個(gè)媒介的作用;Snake.js是當(dāng)蛇初始化時(shí)在最左邊向右走的狀態(tài);

     貪吃蛇在游戲中的運(yùn)動(dòng)可以想象成這條蛇是在一張25*25的表格中運(yùn)動(dòng):

     如圖所示

     Game.js文檔

    所以我們?cè)贕ame.js中添加表格節(jié)點(diǎn)

     
    
    1. function Game() {
    2. this.row = 25;
    3. this.col = 25;
    4. }
    5. Game.prototype.init = function() {
    6. this.dom = document.createElement('table');
    7. // 創(chuàng)建表格--父元素為document(頁(yè)面中創(chuàng)建表格)
    8. // var tr, td;
    9. for (var i = 0; i < this.row; i++) { //追加行
    10. var tr = document.createElement('tr');
    11. for (var j = 0; j < this.td; j++) { //追加列
    12. var td = document.createElement('col');
    13. td.appendChild(tr);
    14. }
    15. }
    16. };

    Snake.js文檔






    Snake.js中當(dāng)蛇初始化時(shí)最左邊向右走的狀態(tài)

    如圖所示

     
    
    1. function Snake() {
    2. // 蛇的初始化身體
    3. this.body = [
    4. { 'row': 3, 'col': 5 },
    5. { 'row': 3, 'col': 4 },
    6. { 'row': 3, 'col': 3 },
    7. { 'row': 3, 'col': 2 }
    8. ];
    9. }
    10. Snake.prototype.render = function() {
    11. // 蛇頭的渲染
    12. game.setColorHead(this.body[0].row, this.body[0].col.'pink');
    13. // 蛇身的渲染
    14. for (var i = 1; i < this.body.length; i++) {
    15. game.setColor(this.body[i].row, this.body[i].col, 'cyan')
    16. }
    17. }

    當(dāng)蛇在運(yùn)動(dòng)的時(shí)候它的原理是“頭增尾刪”。

    因?yàn)樯叩拈L(zhǎng)度先是不變的,而我們改變的也是改變這個(gè)四個(gè)格子的顏色,走一格頭部那一格顏色變?yōu)榉凵舶湍且桓竦念伾優(yōu)榘咨?


    接下來(lái)讓蛇通過(guò)我們按鍵來(lái)進(jìn)行運(yùn)動(dòng):放在一個(gè)監(jiān)聽(tīng)事件內(nèi)

     
    
    1. // 設(shè)置鍵盤的事件監(jiān)聽(tīng)
    2. Game.prototype.bindEvent = function() {
    3. var self = this;
    4. document.addEventListener('keydown', function(e) {
    5. // 用ASCII碼值判斷鍵盤方向
    6. switch (e.keyCode) {
    7. case 37: //左
    8. if (self.snake.direction == 'R') return; // 先進(jìn)行判斷,如果當(dāng)前的方向是向右移動(dòng),此時(shí)我們不能按左鍵
    9. self.snake.changeDirection('L');
    10. self.d = 'L';
    11. break;
    12. case 38: //上
    13. if (self.snake.direction == 'D') return; // 先進(jìn)行判斷,如果當(dāng)前的方向是向下移動(dòng),此時(shí)我們不能按上鍵
    14. self.snake.changeDirection('U');
    15. self.d = 'U';
    16. break;
    17. case 39: //右
    18. if (self.snake.direction == 'L') return; // 先進(jìn)行判斷,如果當(dāng)前的方向是向左移動(dòng),此時(shí)我們不能按右鍵
    19. self.snake.changeDirection('R');
    20. self.d = 'R';
    21. break;
    22. case 40: //下
    23. if (self.snake.direction == 'U') return; // 先進(jìn)行判斷,如果當(dāng)前的方向是向上移動(dòng),此時(shí)我們不能按下鍵
    24. self.snake.changeDirection('D');
    25. self.d = 'D';
    26. break;
    27. }
    28. })
    29. }

    接下來(lái)我們判定蛇是否撞到墻而結(jié)束

     
    
    1. // 死亡的判斷,超出了表格邊緣的部分
    2. if (this.body[0].col > game.col - 1 || this.body[0].col < 0 || this.body[0].row > game.row - 1 || this.body[0].row < 0) {
    3. alert('撞到墻了哦,一共吃掉了' + game.score + '顆草莓');
    4. this.body.shift();
    5. clearInterval(game.timer);
    6. location.reload();
    7. }


    接下來(lái)我們判定蛇是否撞到自己而結(jié)束

     
    
    1. // 自己撞到自己的時(shí)候會(huì)判定死亡
    2. for (var i = 1; i < this.body.length; i++) {
    3. // 如果當(dāng)前蛇的頭部和身體的某一個(gè)部位的 row 和 col 完全重合的時(shí)候
    4. if (this.body[0].row == this.body[i].row && this.body[0].col == this.body[i].col) {
    5. alert('撞到自己了,吃掉了' + game.score + '顆草莓');
    6. this.body.shift();
    7. clearInterval(game.timer);
    8. location.reload();
    9. }
    10. }

    Food.js文檔


    食物food類,用來(lái)產(chǎn)生食物

     
    
    1. function Food(gameSnake) {
    2. // 食物的位置
    3. this.row = parseInt(Math.random() * gameSnake.row)
    4. this.col = parseInt(Math.random() * gameSnake.col)
    5. }
    6. Food.prototype.render = function() {
    7. game.setHTML(this.row, this.col);
    8. }

    食物隨機(jī)生成在單元格中,利用do...while來(lái)實(shí)現(xiàn)

     
    
    1. function Food(gameSnake) {
    2. var self = this;
    3. // 下面的 do-while 循環(huán)語(yǔ)句作用是先創(chuàng)建一個(gè) row 和 col
    4. 然后判斷這個(gè) row 和 col 是否在蛇的身上
    5. //do...while來(lái)創(chuàng)建食物
    6. do {
    7. // 食物的位置
    8. this.row = parseInt(Math.random() * gameSnake.row)
    9. this.col = parseInt(Math.random() * gameSnake.col)
    10. } while ((function() {
    11. // 遍歷蛇的 row col 然后和 food 新隨機(jī)出來(lái)的 row col 進(jìn)行判斷,是否重合
    12. for (var i = 0; i < gameSnake.snake.body.length; i++) {
    13. if (self.row == gameSnake.snake.body[i].row && self.col == gameSnake.snake.body[i].col) {
    14. return true;
    15. }
    16. }
    17. return false;
    18. })());
    19. }

    文章來(lái)源:csdn   作者:

    分享此文一切功德,皆悉回向給文章原作者及眾讀者.

    免責(zé)聲明:藍(lán)藍(lán)設(shè)計(jì)尊重原作者,文章的版權(quán)歸原作者。如涉及版權(quán)問(wèn)題,請(qǐng)及時(shí)與我們?nèi)〉寐?lián)系,我們立即更正或刪除。

    藍(lán)藍(lán)設(shè)計(jì)m.dzxscac.cn )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國(guó)內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 平面設(shè)計(jì)服務(wù)



    日歷

    鏈接

    個(gè)人資料

    存檔

    主站蜘蛛池模板: 成人网战| 老色99久久九九爱精品| 2020国产成人精品影视| 让男按摩师摸好爽视频| 自拍偷自拍亚洲精品播放| 国产女同疯狂作爱系列| 国产一区二区三区精品av| 同性色老头性xxxx老头| 美女毛片在线观看| 国产嫖妓一区二区三区无码| 综合色一色综合久久网| 91视频首页| 美女禁区a级全片免费观看| 中文无码第3页不卡av| 91超碰在线| 国产精品电影一区二区三区| 日韩精品一区二区三区日韩| 午夜理伦三级理论三级| 后宫秀女调教(高h,np)| 国产精品一区二区av日韩在线| 91色| 色琪琪av中文字幕一区二区| av影音先锋| 中文字幕资源在线| aaa少妇高潮大片免费看| 国产成人乱码一二三区18| 性生生活大片又黄又| 8x8x永久免费视频| 无码AV中文字幕久久专区| 国产精品天堂avav在线观看| 深夜爽爽无遮无挡视频| 中文字幕免费在线观看视频| 精品一区二区亚洲国产| 无码ol丝袜高跟秘书在线观看| 国产免费丝袜调教视频免费的| 久热这里| 一级黄色毛毛片| 亚洲深深色噜噜狠狠爱网站| 精品国产一区二区av麻豆| 久久av影视| 污污软件在线观看|