JavaScript實(shí)現(xiàn)一個(gè)空中避難的小游戲
前言
最近在看js中的事件,之前也一直有用到事件,用到最多的就是onclick單擊事件,還有填寫表單信息時(shí)的用到的onfocus聚焦時(shí)間,和onblur事件,最近看到了onmousemove鼠標(biāo)移動事件,覺得很神奇,就突然很想寫一個(gè)小游戲,用到了setInterval函數(shù)。游戲的功能也很簡單,就是天上掉紙片,小人兒要不停的躲,一旦紙片和小人兒相撞,就會game over!
代碼如下:
<!DOCTYPE html>
<html>
<head>
<style>
.move
{
margin-top: 0px;
width:40px;
height: 50px;
background: #ff0;
position:absolute;
z-index: 999;
}
.self
{
width:40px;
height: 50px;
background: #f0f;
position:absolute;
margin-top: 600px;
margin-left: 643px;
z-index: 999;
}
.self img
{
width:40px;
height: 50px;
border-radius: 20px;
}
</style>
<title>圖圖up up</title>
</head>
<body onload="moveDiv()">
<!--12個(gè)div就是空中的小紙片-->
<div class="move" style="margin-left:100px">
</div>
<div class="move" style="margin-left:200px">
</div>
<div class="move" style="margin-left:300px">
</div>
<div class="move" style="margin-left:400px">
</div>
<div class="move" style="margin-left:500px">
</div>
<div class="move" style="margin-left:600px">
</div>
<div class="move" style="margin-left:700px">
</div>
<div class="move" style="margin-left:800px">
</div>
<div class="move" style="margin-left:900px">
</div>
<div class="move" style="margin-left:1000px">
</div>
<div class="move" style="margin-left:1100px">
</div>
<div class="move" style="margin-left:1200px">
</div>
<!--小人兒用一張圖片代替-->
<div id="self" class="self">
<img src="images/tutu.jpg">
</div>
</body>
<script type="text/javascript">
var alldiv = document.querySelectorAll('.move');
var selfdiv = document.getElementById("self");
var timer, flag;
function moveItem()
{
//用隨機(jī)數(shù)決定哪一張紙片掉落
for (var j = 0; j < Math.round(Math.random()*11); j++)
{
var i = Math.round(Math.random()*11);
alldiv[i].style.top = alldiv[i].offsetTop + 20 +"px";
//掉落過程中改變紙片的顏色
var rgb='rgb('+Math.floor(Math.random()*255)+','
+Math.floor(Math.random()*255)+','
+Math.floor(Math.random()*255)+')';
alldiv[i].style.backgroundColor = rgb;
if (alldiv[i].offsetTop >= 600)
{
alldiv[i].style.top = "50px"; //當(dāng)紙片落到底部,又重新回到起點(diǎn)
}
}
}
function moveDiv()
{
timer = setInterval(moveItem,20); //每隔20ms掉落
flag = setInterval(meeting,1); //間隔1ms判斷是否相撞
}
var selfdiv = document.getElementById("self");
selfdiv.onmousedown = function(e) //鼠標(biāo)點(diǎn)擊小人兒開始移動
{
document.onmousemove = function(e) //小人兒跟著鼠標(biāo)移動
{
if (e.clientY > 600)
{
selfdiv.style.marginTop = "600px"; //如果到達(dá)屏幕底部就不再往下
}
else if(e.clientX > 1300)
{
selfdiv.style.marginLeft = "1300px"; //到達(dá)最右部就回到不再往右
}
else
{
//小人兒的位置始終等于鼠標(biāo)的位置
selfdiv.style.marginTop = e.clientY + "px";
selfdiv.style.marginLeft = e.clientX + "px";
}
}
}
function meeting()
{
for (var i = 0; i < alldiv.length; i++)
{
//判斷是否相撞
if (Math.abs(alldiv[i].offsetTop-selfdiv.offsetTop) <= 50 &&
Math.abs(alldiv[i].offsetLeft-selfdiv.offsetLeft) <= 40)
{
clearInterval(flag);
clearInterval(timer);
alert("一不小心撞到了!??!游戲結(jié)束");
}
}
}
</script>
</html>效果如圖:

全部的代碼就這些,動圖做的效果不是很好,第一次做動圖,發(fā)現(xiàn)有很多在線網(wǎng)站都可以,做起來很簡單,還是免費(fèi)的,開心?。?!
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
IFrame跨域高度自適應(yīng)實(shí)現(xiàn)代碼
最近在做項(xiàng)目中,遇到一個(gè)問題,就是iframe高度的自適應(yīng)問題,以下是解決辦法2012-08-08
JavaScript程序設(shè)計(jì)高級算法之動態(tài)規(guī)劃實(shí)例分析
這篇文章主要介紹了JavaScript程序設(shè)計(jì)高級算法之動態(tài)規(guī)劃,結(jié)合實(shí)例形式分析了javascript動態(tài)規(guī)劃算法的原理、實(shí)現(xiàn)技巧與相關(guān)使用注意事項(xiàng),需要的朋友可以參考下2017-11-11
分享一個(gè)自定義的console類 讓你不再糾結(jié)JS中的調(diào)試代碼的兼容
在寫JS的過程中,為了調(diào)試我們常常會寫很多 console.log、console.info、console.group、console.warn、console.error代碼來查看JS的運(yùn)行情況,但發(fā)布時(shí)又因?yàn)镮E不支持console,又要去掉這些代碼,一不小心就會出錯2012-04-04
JS關(guān)閉窗口或JS關(guān)閉頁面的幾種代碼分享
這篇文章介紹了JS關(guān)閉窗口或JS關(guān)閉頁面的幾種代碼,有需要的朋友可以參考一下2013-10-10
webix+springmvc session超時(shí)跳轉(zhuǎn)登錄頁面
這篇文章主要介紹了webix+springmvc session超時(shí)跳轉(zhuǎn)登錄頁面的相關(guān)資料,非常不錯具有參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10
如何將php數(shù)組或者對象傳遞給javascript
這篇文章主要介紹了將php數(shù)組或者對象傳遞給javascript的方法,需要的朋友可以參考下2014-03-03
關(guān)于JS數(shù)據(jù)類型檢測的多種方式總結(jié)
Javascript中檢查數(shù)據(jù)類型一直是老生常談的問題,類型判斷在web開發(fā)中也有著非常廣泛的應(yīng)用,所以下面這篇文章主要給大家介紹了關(guān)于JS數(shù)據(jù)類型檢測的那些事,需要的朋友可以參考下2021-09-09

