JS實(shí)現(xiàn)簡(jiǎn)易貪吃蛇游戲
本文實(shí)例為大家分享了JS實(shí)現(xiàn)簡(jiǎn)易貪吃蛇的具體代碼,供大家參考,具體內(nèi)容如下
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
<style type="text/css">
#body{
width: 900px;/*長(zhǎng)寬最好是obj的倍數(shù)*/
height: 600px;
border-width: 10px;
border-style: solid;
border-color: blue;
line-height:600px;/*文本垂直居中*/
text-align: center;/*文本水平居中*/
position: relative;/*相對(duì)定位*/
left: 0px;
top: 0px;
}
#obj{
width: 30px;
height: 30px;
background-color: red;
position: absolute;/*絕對(duì)定位*/
left: 0px;
top: 0px;
z-index: 1;/*頭部在上層顯示*/
}
div{
text-align: center;
line-height:30px;
}
</style>
</head>
<body id='body'>
<!--內(nèi)容-->
按awsd移動(dòng)
<div id='obj'></div>
<select id='speed' onclick="setspeed(this)">
<option value="100">快速</option>
<option value="500">中速</option>
<option value="1000" selected>慢速</option>
</select>
| <button onclick="lenbodyadd()">身體+1</button>
| <button onclick="stopspeed()">暫停</button>
<div class="div"></div>
</body>
</html>
<script>
var val={key:"d"};//默認(rèn)向右移動(dòng)
var key = document.getElementById("body");
key.onkeydown =f; //注冊(cè)keydown事件處理函數(shù)
var divnum=1;//身體每節(jié)編號(hào)
var lenbody=5;//默認(rèn)身體長(zhǎng)度
var speed=1000;//默認(rèn)速度
var obj=document.getElementById('obj');
var myWidth=parseInt(getComputedStyle(obj,null).getPropertyValue('width'));
var myHeight=parseInt(getComputedStyle(obj,null).getPropertyValue('height'));
var clientH= document.body.clientHeight;//獲取body高
var clientW= document.body.clientWidth;//獲取body寬
var foodLeft=0;//食物x坐標(biāo)
var foodTop=0;//食物y坐標(biāo)
function f (va) {
var e = e || window.event; //標(biāo)準(zhǔn)化事件處理
let s = '';//val.type + " " + val.key; //獲取鍵盤(pán)事件類(lèi)型和按下的值
let key=val.key;
val=va;
var myTop=parseInt(getComputedStyle(obj,null).getPropertyValue('top'));//獲取精靈y坐標(biāo) parseInt(obj.style.top);
var myLeft=parseInt(getComputedStyle(obj,null).getPropertyValue('left'));//獲取精靈x坐標(biāo) parseInt(obj.style.left);
var movePx=myWidth;//每次移動(dòng)的距離
var move=0;
if(key=='w'){
move=myTop-movePx;//每次移動(dòng)10
if(move<0 || move>clientH){
return false;//不能超過(guò)邊界
}
obj.style.top=move+'px';
s='上';
}
if(key=='s'){
move=myTop+movePx;
if(move<0 || move>clientH-myHeight){
return false;
}
obj.style.top=move+'px';
s='下';
}
if(key=='a'){
move=myLeft-movePx;
if(move<0 || move>clientW){
return false;
}
obj.style.left=move+'px';
s='左';
}
if(key=='d'){
move=myLeft+movePx;
if(move<0 || move>clientW-myWidth){
return false;
}
obj.style.left=move+'px';
s='右';
}
obj.innerText=s;//設(shè)置文本 & 清楚之前的元素
console.log(move+' top:'+myTop+' left:'+myLeft);
//移除之前的身體元素,使有頭有尾
if(document.getElementsByClassName('div').length>=lenbody){
document.getElementsByClassName('div')[0].parentNode.removeChild(document.getElementsByClassName('div')[0]);
}
//div身體元素隨后移動(dòng)
let newMyMoveWidth=myLeft;
let newMyMoveHeight=myTop;
let div=document.createElement('div');
div.className ='div';
div.style.width = myWidth + 'px';
div.style.height = myHeight + 'px';
div.style.position = 'absolute';
div.style.left=newMyMoveWidth + 'px';
div.style.top=newMyMoveHeight + 'px';
div.style.backgroundColor='blue';
div.innerHTML=divnum;//設(shè)置文字|方便識(shí)別div順序
obj.parentNode.appendChild(div);
console.log('newMyMoveWidth:'+newMyMoveWidth+' newMyMoveHeight:'+newMyMoveHeight);
divnum++;
ifeatfood(myLeft,myTop);
} /*f() end--*/
//生成食物
function setfood(){
foodLeft=parseInt(Math.random()*clientW);
foodTop=parseInt(Math.random()*clientH);
let div=document.createElement('div');
div.id ='food';
div.style.width = myWidth + 'px';
div.style.height = myHeight + 'px';
div.style.position = 'absolute';
div.style.left= foodLeft + 'px';
div.style.top= foodTop + 'px';
div.style.backgroundColor='pink';
div.innerHTML='吃';//設(shè)置文字|方便識(shí)別div順序
document.body.appendChild(div);
}
setfood();
//判斷吃到食物
function ifeatfood(myLeft,myTop){
//判斷是否吃到食物
if(Math.abs(foodLeft-myLeft)<myWidth && Math.abs(foodTop-myTop)<myHeight){
lenbodyadd();//長(zhǎng)度+1
//刪除舊food,生成新food
document.getElementById('food').parentNode.removeChild(document.getElementById('food'));
setfood();
}
}
//吃到食物身體加1
function lenbodyadd(){
lenbody++;
}
//保持移動(dòng)
var setinter=setInterval((function move(){
f(val);
}),speed);
//設(shè)置移動(dòng)速度
function setspeed(obj){
speed=obj.options[obj.options.selectedIndex].value;
stopspeed();
setinter=setInterval((function move(){
f(val);
}),speed);
}
//停止移動(dòng)
function stopspeed(){
clearInterval(setinter);
}
//窗口改變時(shí)跳轉(zhuǎn)-防f12
window.onresize = ()=>{
console.log(window.innerWidth,window.innerHeight);
//window.location.;
}
</script>
更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專(zhuān)題,分享給大家:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JS寫(xiě)的貪吃蛇游戲(個(gè)人練習(xí))
- javascript貪吃蛇完整版(源碼)
- js實(shí)現(xiàn)貪吃蛇小游戲(容易理解)
- 用JavaScript實(shí)現(xiàn)貪吃蛇游戲
- 使用JavaScript實(shí)現(xiàn)貪吃蛇游戲
- js實(shí)現(xiàn)貪吃蛇游戲(簡(jiǎn)易版)
- javascript貪吃蛇游戲設(shè)計(jì)與實(shí)現(xiàn)
- js實(shí)現(xiàn)貪吃蛇游戲 canvas繪制地圖
- javascript實(shí)現(xiàn)貪吃蛇游戲(娛樂(lè)版)
- Javascript實(shí)現(xiàn)貪吃蛇小游戲(含詳細(xì)注釋?zhuān)?/a>
相關(guān)文章
javascript動(dòng)態(tài)向網(wǎng)頁(yè)中添加表格實(shí)現(xiàn)代碼
動(dòng)態(tài)向網(wǎng)頁(yè)中添加表格的方法有很多,本文為大家介紹下利用javascript是如何實(shí)現(xiàn)的2014-02-02
Javascript中構(gòu)造函數(shù)要注意的一些坑
JavaScript語(yǔ)言是一門(mén)面向?qū)ο蟮恼Z(yǔ)言,但JS中并沒(méi)有類(lèi)的概念的。于是JavaScript采用構(gòu)造函數(shù)的方式來(lái)模擬類(lèi)的效果,即我們通過(guò)函數(shù)來(lái)創(chuàng)建對(duì)象。這也證明了函數(shù)在JavaScript中具有非常重要的地位。本文主要介紹了Javascript中構(gòu)造函數(shù)的一些坑,需要的朋友可以參考。2017-01-01
利用JS實(shí)現(xiàn)scroll自定義滾動(dòng)效果詳解
這篇文章主要給大家介紹了關(guān)于利用JS如何實(shí)現(xiàn)scroll自定義滾動(dòng)效果的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-10-10
刷新頁(yè)面后讓控制臺(tái)的js代碼繼續(xù)執(zhí)行
這篇文章主要介紹了刷新頁(yè)面后讓控制臺(tái)的js代碼繼續(xù)執(zhí)行,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09
JavaScript oncopy事件用法實(shí)例解析
這篇文章主要介紹了JavaScript oncopy事件用法實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
jquery實(shí)現(xiàn)的圖片點(diǎn)擊滾動(dòng)效果
這篇文章主要介紹了jquery實(shí)現(xiàn)的圖片點(diǎn)擊滾動(dòng)效果,需要的朋友可以參考下2014-04-04
JavaScript電子時(shí)鐘倒計(jì)時(shí)
這篇文章主要介紹了JavaScript電子時(shí)鐘倒計(jì)時(shí)的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的朋友可以參考一下2016-01-01
javascript中bind函數(shù)的作用實(shí)例介紹
bind()的方法在ie,6,7,8中不適用,需要擴(kuò)展通過(guò)擴(kuò)展Function prototype可以實(shí)現(xiàn)此方法,下面為大家介紹下javascript中bind函數(shù)的作用2014-09-09

