貪吃蛇

貪吃蛇效果:


貪吃蛇

鍵盤(pán)的w奥额、s、a歇僧、d分別來(lái)控制蛇移動(dòng)方向:上图张、下、左诈悍、右
js代碼:

// 創(chuàng)建地圖
var map = document.createElement('div')
// 設(shè)置樣式
setStyle(map,{
    width:"800px",
    height:"500px",
    border:"3px solid #000",
    position:"relative",
    backgroundColor:"#eee"   
})
// 將地圖放入body中
document.body.appendChild(map)
// 創(chuàng)建食物
var food = createFood()
function createFood(){
    var div = document.createElement('div')
    // 設(shè)置樣式
    setStyle(div,{
        width:"10px",
        height:"10px",
        backgroundColor:"#0f0",
        position:"absolute",
        // 因?yàn)樯呤且淮我苿?dòng)10px祸轮,所以left和top是隨機(jī)的,但是必須保證是10的倍數(shù)
        left:parseInt(getRandom(map.clientWidth - 10)/10)*10 + 'px',
        top:parseInt(getRandom(map.clientHeight - 10)/10)*10 + 'px',
    })
    // 將食物放在地圖中
    map.appendChild(div)
    return div
}
// 定義蛇的身體的坐標(biāo)
var body = [
    {
        x:0,
        y:0
    },
    {
        x:10,
        y:0
    },
    {
        x:20,
        y:0
    },
]
// 根據(jù)蛇的身體坐標(biāo)顯示蛇的身體
show()
function show(){
    for(var i=0;i<body.length;i++){
        var div = document.createElement('div')
        setStyle(div,{
            width:"10px",
            height:"10px",
            backgroundColor:"blue",
            position:"absolute",
            left:body[i].x + 'px',
            top:body[i].y + 'px'
        })
        // 給蛇身體div設(shè)置類(lèi)名
        div.className = 'snake';
        // 蛇頭的特殊樣式
        if(i === body.length-1){
            div.style.borderRadius = '50%';
            div.style.backgroundColor = 'red';
        }
        // 將蛇的身體放進(jìn)地圖中
        map.appendChild(div)
    }
}
// 定義蛇的默認(rèn)移動(dòng)方向
var direction = 'right';
// 設(shè)置鍵盤(pán)事件更改移動(dòng)方向
document.onkeydown = function(){
    var e = window.event;
    // 通過(guò)鍵盤(pán)碼獲取到當(dāng)前按下的鍵的字符
    var keycode = e.keyCode || e.which;
    var word = String.fromCharCode(keycode).toLowerCase()
    switch(word){
        case 'a':
            direction = 'left';
        break;
        case 'w':
            direction = 'up';
        break;
        case 'd':
            direction = 'right';
        break;
        case 's':
            direction = 'down';
        break;
    }
}
// 讓蛇根據(jù)方向移動(dòng)身體
var timerId = setInterval(function(){
    // 將之前的身體刪除 - 創(chuàng)建新的身體
    var snakes = document.querySelectorAll('.snake');
    if(snakes.length){
        for(var i=0;i<snakes.length;i++){
            map.removeChild(snakes[i])
        }
    }
    // 修改身體坐標(biāo) - 除了蛇頭的坐標(biāo)外侥钳,其他身體的坐標(biāo)是前一節(jié)身體的坐標(biāo)
    for(var i=0;i<body.length-1;i++){
        body[i].x = body[i+1].x;
        body[i].y = body[i+1].y;
    }   
    // 根據(jù)移動(dòng)方向修改蛇頭的坐標(biāo)
    switch(direction){
        case 'up':
            body[body.length-1].y -= 10
        break;
        case 'down':
            body[body.length-1].y += 10
        break;
        case 'left':
            body[body.length-1].x -= 10
        break;
        case 'right':
            body[body.length-1].x += 10
        break;
    }
    // 根據(jù)新的坐標(biāo)重新顯示身體
    show()
    // 移動(dòng)過(guò)程判斷是否吃到食物
    eat()
    // 移動(dòng)過(guò)程判斷是否死亡
    die()
},500)
// 蛇死亡
function die(){
    // 蛇頭撞墻
    if(body[body.length-1].x<0 || body[body.length-1].x>map.clientWidth-10 || body[body.length-1].y<0 || body[body.length-1].y>map.clientHeight-10){
        alert('GAME OVER')
        // 清除定時(shí)器
        clearInterval(timerId)
    }
    // 蛇頭撞自己身體
    for(var i=0;i<body.length-1;i++){
        if(body[i].x===body[body.length-1].x && body[i].y===body[body.length-1].y){    
            alert('GAME OVER')
            // 清除定時(shí)器
            clearInterval(timerId)
        }
    }
}
// 蛇吃到食物
function eat(){
    // 如果蛇頭的坐標(biāo)跟食物的坐標(biāo)完全重疊就表示吃到了食物
    if(body[body.length-1].x === food.offsetLeft && body[body.length-1].y === food.offsetTop){
        // 刪除食物
        map.removeChild(food)
        // 蛇的身體增加一節(jié)
        body.unshift({
            x:body[0].x,
            y:body[0].y
        })
        // 重新創(chuàng)建食物
        food = createFood()
    }
}
// 獲取隨機(jī)數(shù)的函數(shù)
function getRandom(a,b=0){
    var max = a;
    var min = b;
    if(a<b){
        max = b;
        min = a;
    }
    return Math.floor(Math.random() * (max - min)) + min;
}
// 設(shè)置樣式的函數(shù)
function setStyle(ele, styleObj){
    for(var attr in styleObj){
        ele.style[attr] = styleObj[attr];
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末适袜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子舷夺,更是在濱河造成了極大的恐慌苦酱,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冕房,死亡現(xiàn)場(chǎng)離奇詭異躏啰,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)耙册,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)给僵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人详拙,你說(shuō)我怎么就攤上這事帝际。” “怎么了饶辙?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵蹲诀,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我弃揽,道長(zhǎng)脯爪,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任矿微,我火速辦了婚禮痕慢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘涌矢。我一直安慰自己掖举,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布娜庇。 她就那樣靜靜地躺著塔次,像睡著了一般方篮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上励负,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天藕溅,我揣著相機(jī)與錄音,去河邊找鬼熄守。 笑死蜈垮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的裕照。 我是一名探鬼主播攒发,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼晋南!你這毒婦竟也來(lái)了惠猿?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤负间,失蹤者是張志新(化名)和其女友劉穎偶妖,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體政溃,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡趾访,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了董虱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扼鞋。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖愤诱,靈堂內(nèi)的尸體忽然破棺而出云头,到底是詐尸還是另有隱情,我是刑警寧澤淫半,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布溃槐,位于F島的核電站,受9級(jí)特大地震影響科吭,放射性物質(zhì)發(fā)生泄漏昏滴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一对人、第九天 我趴在偏房一處隱蔽的房頂上張望影涉。 院中可真熱鬧,春花似錦规伐、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鲜棠。三九已至,卻和暖如春培慌,著一層夾襖步出監(jiān)牢的瞬間豁陆,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工吵护, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盒音,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓馅而,卻偏偏與公主長(zhǎng)得像祥诽,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瓮恭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 前言 最近在學(xué)習(xí)Python3屯蹦,看了一下語(yǔ)法和基本數(shù)據(jù)類(lèi)型维哈,有多年P(guān)HP經(jīng)驗(yàn)的我感覺(jué)難度不是很大。Python作為...
    大佬Sam閱讀 587評(píng)論 0 0
  • 今天呢登澜,將分享一個(gè)關(guān)于 游戲制作的小案例阔挠;僅用不到 200 行代碼實(shí)現(xiàn)一個(gè)貪吃蛇游戲,作為 Python游戲 系列...
    小張Python閱讀 432評(píng)論 1 1
  • 貪吃蛇是眾多90后小時(shí)候玩過(guò)的一款經(jīng)典手游脑蠕,但是在程序員眼中則是幾頁(yè)代碼的編輯购撼,代碼里所涉及的內(nèi)容也比較簡(jiǎn)...
    3c58eba4eb74閱讀 449評(píng)論 0 0
  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險(xiǎn)厭惡者,不喜歡去冒險(xiǎn)空郊,但是人生放棄了冒險(xiǎn)份招,也就放棄了無(wú)數(shù)的可能。 ...
    yichen大刀閱讀 6,049評(píng)論 0 4
  • 公元:2019年11月28日19時(shí)42分農(nóng)歷:二零一九年 十一月 初三日 戌時(shí)干支:己亥乙亥己巳甲戌當(dāng)月節(jié)氣:立冬...
    石放閱讀 6,879評(píng)論 0 2