前端那些事之原生 js實現貪吃蛇篇

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

原生js實現貪吃蛇

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>貪吃蛇游戲</title><style>body, div, img {margin: 0 auto;padding: 0;}body{background-color: #fff;color:#b35208;}.wrapper{width: 800px;height: 400px;background: url("./images/bg.png") no-repeat center center;padding: 80px;}.score{margin: 10px auto;text-align: center;font-size: 30px;font-weight: 900;}.col{width: 40px;height: 40px;float: left;display: inline-block;}.row{}.snake{background: url("./images/box.png") no-repeat center center;background-size: 100% 100%;}.egg{background: url("./images/circle.png") no-repeat center center;background-size: 100% 100%;}.gameover{position: fixed;top: 50%;left: 50%;width: 408px;height: 90px;margin-top: -90px;margin-left:-204px;background: url("./images/gameover.png") no-repeat center center;opacity:0;transform: scale(0);transition: all .5s;z-index: -1;}.show{opacity:1;transform: scale(1);z-index: 1;}</style>
</head>
<body>
<div class="gameover" id="gameover"></div>
<div class="score">得分:0</div>
<div class="wrapper"><!--<div class="row">--><!--<div class="col snake"></div>--><!--<div class="col"></div>--><!--<div class="col egg"></div>--><!--</div>-->
</div>
<script>/** 1.創建基礎* 2.蛇的初始化,實物的初始化(隨機)* 3.開始游戲*   1.鍵盤事件切換*   2.開始之后,判斷是否碰到墻*   3.判斷是否碰到自己*   4.判斷是否吃了實物* 4.游戲結束* */var scoreDiv = document.querySelector(".score"); //取得分的div對象var score = 0;//得分var rows = 9; //行var cols = 20; //列var snakeArr = []; //存儲所有對象var time = 400; //毫秒var snakebody = []; //定義一個數組存放蛇身var direction = "right"; //操作蛇移動的方向var changeDir = true; //添加鍵盤事件監聽方向鍵來改變蛇的移動方向function createModel(){//創建基礎var wrapperDiv = document.querySelector(".wrapper");for(var i = 0; i < rows; i++) {var rowDiv = document.createElement("div");var rowArry = [];for(var j = 0; j < cols; j++) {var colDiv = document.createElement("div");colDiv.className = "col";rowArry.push(colDiv);rowDiv.appendChild(colDiv);}snakeArr.push(rowArry);wrapperDiv.appendChild(rowDiv);}wrapperDiv.style.width = cols * 40 + "px";wrapperDiv.style.margin = "auto";}//創建蛇的初始模型function snake() {for(var i = 0; i < 3; i++) {snakeArr[0][i].className = "col snake";snakebody.push(snakeArr[0][i]);}}createModel();snake();document.onkeydown = function(event) {event = event || window.event; //判斷是否需要改變方向,true表示需要 false不需要if(!changeDir) {return; //表示直接結束函數,后續代碼不執行}//假設蛇在向右移動,按鍵左右都不起作用if(direction == "right" && event.keyCode == "37") {return;}if(direction == "left" && event.keyCode == "39") {return;}if(direction == "down" && event.keyCode == "38") {return;}if(direction == "up" && event.keyCode == "40") {return;}//更據按鍵操作,設置方向switch(event.keyCode) {case 37:direction = "left"; //方向向左break;case 38:direction = "up";break;case 39:direction = "right";break;case 40:direction = "down";break;}//按鍵后變為falsechangeDir = false;//延遲var delayTime = setTimeout(function() {changeDir = true;clearTimeout(delayTime);}, time);}//蛇的移動偏移量var x = 2;var y = 0;//蛇的移動函數function snakeMove() {var snameTimer = setInterval(function() {//更據設置的方向設置蛇頭的方向switch(direction) {case "right":x++;break;case "left":x--;break;case "up":y--;break;case "down":y++;break;}//判斷游戲結束--碰壁if(x < 0 || x >= cols || y < 0 || y >= rows) {document.getElementById("gameover").style.display = "block";clearInterval(snameTimer);return;}//判斷蛇吃到自己for(var i = 0; i < snakebody.length; i++) {if(snakebody[i] == snakeArr[y][x]) {document.getElementById("gameover").style.display = "block";clearInterval(snameTimer);return;}}//判斷蛇頭移動的位置是否有蛋if(eggX == x && eggY == y) {snakeArr[eggY][eggX].className = "col snake";snakebody.push(snakeArr[eggY][eggX]);//加入到蛇身score++;scoreDiv.innerHTML = "得分:" + score;food();} else {snakebody[0].className = "col";snakebody.shift();snakeArr[y][x].className = "col snake";snakebody.push(snakeArr[y][x]);}}, time);}snakeMove();//隨機函數function randomNumber(max) {var ran = Math.floor(Math.random() * max);return ran;}//生成蛋的函數var eggX = 0;var eggY = 0;function food() {//隨機出新的egg的下標的x和yeggX = randomNumber(cols);eggY = randomNumber(rows);//如果即將生蛋的位置和蛇身重合if(snakeArr[eggY][eggX].className == "col snake") {food(); //重新生成} else {//否則 新生生蛋的位置并改樣式snakeArr[eggY][eggX].className = "col egg";}}food();
</script>
</body>
</html>

轉載于:https://my.oschina.net/yongxinke/blog/852277

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457059.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457059.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457059.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

整理一些完全免費開放的API接口

前言 在開發測試階段&#xff0c;或者是在寫Demo的時候&#xff0c;難免會用到一些測試數據&#xff0c;有時苦于沒有可用的接口&#xff0c;需要自己動手去寫&#xff0c;但是這樣大大降低了效率&#xff0c;前期我也找了一些開放的接口&#xff0c;這篇文章整理一下&#xff…

Linux格式化異常,Linux下DateFormat的parse方法出現”ParseException”異常

在windows下使用DateFormat的parse方法&#xff0c;將字符中轉化為Date類型時&#xff0c;一切正常。可安裝到Linux下&#xff0c;就出現了ParseException異常。代碼如下&#xff1a;public Date toDateTime(String str){Date dt new Date();try{DateFormat df;df DateFormat…

如何發現優秀的開源項目?

之前發過一系列有關 GitHub 的文章&#xff0c;有同學問了&#xff0c;GitHub 我大概了解了&#xff0c;Git 也差不多會使用了&#xff0c;但是 還是搞不清 GitHub 如何幫助我的工作&#xff0c;怎么提升我的工作效率&#xff1f; 問到點子上了&#xff0c;GitHub 其中一個最重…

自已開發完美的觸摸屏網頁版仿app彈窗型滾動列表選擇器/日期選擇器

手機端網頁版app在使用下拉列表時&#xff0c;傳統的下拉列表使用起來體驗非常不好&#xff0c;一般做的稍好一點的交互功能界面都不會直接使用下拉列表&#xff0c;所以app的原生下拉列表都是彈窗列表選擇&#xff0c;網頁型app從使用體驗上來當然也應該做成那樣&#xff0c;前…

*args, **kwargs的用法

python 中參數*args, **kwargs def foo(*args, **kwargs): print args , args print kwargs , kwargs print ---------------------------------------if __name__ __main__: foo(1,2,3,4) foo(a1,b2,c3) foo(1,2,3,4, a1,b2,c3) foo(a, 1, None, a1, b2, c3)輸出結果如下&…

一個 js 中值傳遞和引用傳遞的坑。

今天在調試代碼時遇到一個問題&#xff0c;剛開始想不明白&#xff0c;然后分析了一下后&#xff0c;才知道其中的問題&#xff0c;這也是一個基礎的問題&#xff0c;&#xff08;所以基礎是很重要的&#xff09; 代碼如下&#xff1a; var a 3; a a * 2; console.log(a); //…

linux運維適合女生么,女生真的不適合做IT行業嗎?Linux運維適合女生學習嗎?

在很多人的腦海中都是女生不適合做IT&#xff0c;IT行業不適合女性。可能傳統的思想中&#xff0c;女生只適合做文職工作&#xff0c;比如說幼師、公務員、會計等&#xff0c;就因為這樣的思想也讓IT行業男女出現了失衡的情況&#xff0c;那么作為女生真的不適合做IT行業嗎?Li…

關于在用異步消息處理機制使用Message.Obtain()方法(而非New Message)獲得一個Message對象的好處

類概述 定義一個包含任意類型的描述數據對象&#xff0c;此對象可以發送給Handler。對象包含兩個額外的int字段和一個額外的對象字段&#xff0c;這樣可以使得在很多情況下不用做分配工作。 盡管Message的構造器是公開的&#xff0c;但是獲取Message對象的最好方法是調用Messag…

python編程中的if __name__ == 'main': 的作用和原理

大多數編排得好一點的腳本或者程序里面都有這段if __name__ main: &#xff0c;雖然一直知道他的作用&#xff0c;但是一直比較模糊&#xff0c;收集資料詳細理解之后與打架分享。 1、這段代碼的功能 一個python的文件有兩種使用的方法&#xff0c;第一是直接作為腳本執行&…

vim 配置

vim包下載 https://github.com/spf13/spf13-vim 安裝教程 http://blog.csdn.net/u011729865/article/details/49210841 https://www.zhihu.com/question/20151659轉載于:https://www.cnblogs.com/aituming/p/6013279.html

自己簡單封裝的自己項目需要的http請求

2019獨角獸企業重金招聘Python工程師標準>>> package www.tydic.com.util;import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Http…

excel導入linux亂碼怎么解決方法,,請大家都來看下,Excel導入有亂碼?原因出在哪里?應該怎么解決?...

老師&#xff0c;感謝你再次的回答。我按照您的方法操作&#xff0c;轉換utf-8另外為CSV格式&#xff0c;然后這個CSV格式在Notepad 編輯器中打開后&#xff0c;沒有亂碼&#xff0c;μ 符號(希臘字符)正確顯示。我想導入文件已經準備完畢&#xff0c;當我導入的時候&#xff0…

Oracle 正則表達式

一. 正則表達式簡介: 正則表達式&#xff0c;就是以某種模式來匹配一類字符串。一旦概括了某類字符串&#xff0c;那么正則表達式即可用于針對字符串的各種相關操作。例如&#xff0c;判斷匹配性&#xff0c;進行字符串的重新組合等。正則表達式提供了字符串處理的快捷方式。…

python編程中的if __name__ == 'main': 的作用和原理[2]

這個問題來自于知乎用戶的提問&#xff0c;當時看到這個問題&#xff0c;我只是做了下簡單的回答。后來我發現&#xff0c;對于很多人來說&#xff0c;更準確的說應該是大部分的 Python 初學者&#xff0c;對這個問題理解的不是很深刻。所以這里我來做下總結&#xff0c;并試圖…

Java基礎中按值傳遞和引用傳遞詳解

下面是我在網上看到的一個帖子&#xff0c;解釋的感覺挺全面&#xff0c;就轉過來&#xff0c;以供以后學習參考&#xff1a; 1&#xff1a;按值傳遞是什么 指的是在方法調用時&#xff0c;傳遞的參數是按值的拷貝傳遞。示例如下&#xff1a; [java] view plaincopy public cla…

【Foreign】采蘑菇 [點分治]

采蘑菇 Time Limit: 20 Sec Memory Limit: 256 MBDescription Input Output Sample Input 51 2 3 2 31 21 32 42 5Sample Output 10912911HINT Main idea 詢問從以每個點為起始點時&#xff0c;各條路徑上的顏色種類的和。 Solution 我們看到題目&#xff0c;立馬想到了O(n^2)…

c語言迷宮游戲怎么存放坐標,求解迷宮問題(c語言,很詳細哦

《求解迷宮問題(c語言,很詳細哦》由會員分享&#xff0c;可在線閱讀&#xff0c;更多相關《求解迷宮問題(c語言,很詳細哦(5頁珍藏版)》請在人人文庫網上搜索。1、求迷宮問題就是求出從入口到出口的路徑。在求解時 , 通常用的是 “窮舉求解”的方法 ,即從入口出發 ,順某一方向向…

模塊概述

概述 目前代碼比較少&#xff0c;寫在一個文件中還體現不出什么缺點&#xff0c;但是隨著代碼量越來越多&#xff0c; 代碼就越來越難以維護 為了解決難以維護的問題&#xff0c;我們把很多相似功能的函數分組&#xff0c;分別放到不同的文件中取。這樣每個文件所包含的內容相…

【MySQL】PREPARE 的應用

簡單的用set或者declare語句定義變量&#xff0c;然后直接作為sql的表名是不行的&#xff0c;mysql會把變量名當作表名。在其他的sql數據庫中也是如此&#xff0c;mssql的解決方法是將整條sql語句作為變量&#xff0c;其中穿插變量作為表名&#xff0c;然后用sp_executesql調用…

簡歷要求中“ 扎實的JAVA基礎”的學習方法

最近在頭條看到一篇關于Java基礎學習的文章&#xff0c;感覺寫的很不錯&#xff0c;分享一下&#xff0c;希望對大家有幫助 什么東西算作Java基礎&#xff1f;學到什么程度才算扎實&#xff1f; 這些問題的答案&#xff0c;LZ已經用文言文告訴你了&#xff0c;咳咳&#xff0c;…