本文实例为大家分享了js实现贪吃蛇的具体代码,供大家参考,具体内容如下
游戏思路:
- 创建方块、控制按钮(showBlock)
- 方块移动(点击开始,不断创建并移除前面的方块,用到队列先进先出)
- 控制移动(doUp\doDown\doLeft\doRight,加入用键盘控制)
- 产生食物方块(generateFood)
- 吃到食物变长(当方块位置相同时,吃食物)
- 判断撞墙、撞到自己游戏结束
- 设置积分
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <style> body { margin: 0; padding: 0; } .content { width: 800px; height: 400px; background-color: gray; display: absolute; } </style> <div id="content" class="content"> </div> <button onclick="start()">开始游戏</button> <button onclick="doUp()">上</button> <button onclick="doDown()">下</button> <button onclick="doLeft()">左</button> <button onclick="doRight()">右</button> <div id="score">0</div> <script> //定义参数 var snackBlock = {}; snackBlock.top = 20; snackBlock.left = 20; var firstDiv = showBlock(snackBlock.left, snackBlock.top, "red"); var snackDivArray = [];//装方块的数组 snackDivArray.push(firstDiv); var left = 1, right = 2, up = 3, down = 4; var direction = right; var food = generateFood();//生成食物 var hasEat = false; var score = 0; function generateFood() { var left = getRandomNum(39); var top = getRandomNum(19); var foodBlock = showBlock(left, top, "pink"); foodBlock.left = left; foodBlock.top = top; return foodBlock; } function getRandomNum(max) { return Math.round(Math.random() * max) * 20; } function start() { var interval = setInterval(function () { var newBlock = {}; switch (direction) { case up: newBlock.top = snackBlock.top - 20; newBlock.left = snackBlock.left; break; case down: newBlock.top = snackBlock.top + 20; newBlock.left = snackBlock.left; break; case left: newBlock.top = snackBlock.top; newBlock.left = snackBlock.left - 20; break; case right: newBlock.top = snackBlock.top; newBlock.left = snackBlock.left + 20; break; } var currentLeft = newBlock.left; var currentTop = newBlock.top; var eat = false; //吃食物 if (currentLeft == food.left && currentTop == food.top) { removeBlock(food); food = generateFood(); eat = true; hasEat = true; score += 10;//吃一个加10分 document.getElementById("score").innerHTML = score;//写入div } snackBlock = newBlock; //是否撞墙 if (currentLeft < 0 || currentLeft >= 800 || currentTop < 0 || currentTop >= 400) { alert("game over!"); clearInterval(interval); return; } if (eat == false) { //移除尾巴 removeBlock(snackDivArray.shift(div)); } //是否撞到自己 snackDivArray.forEach(function (item, index, array) { if (item.top == currentTop && item.left == currentLeft) { alert("game over!"); clearInterval(interval); return; } }); //创建新的身体 var div = showBlock(newBlock.left, newBlock.top, "red"); div.left = newBlock.left; div.top = newBlock.top; snackDivArray.push(div); }, 300); } //方向控制 function doUp() { if (direction == down && hasEat) { return; } direction = up; } function doDown() { if (direction == up && hasEat) { return; } direction = down; } function doRight() { if (direction == left && hasEat) { return; } direction = right; } function doLeft() { if (direction == right && hasEat) { return; } direction = left; } function showBlock(left, top, color) {//产生方块 var content = document.getElementById("content"); var snackDiv = document.createElement("div"); snackDiv.style.width = "20px"; snackDiv.style.height = "20px"; snackDiv.style.left = left + "px"; snackDiv.style.top = top + "px"; snackDiv.style.background = color; snackDiv.style.position = "absolute"; content.appendChild(snackDiv); return snackDiv; } function removeBlock(div) {//移除方块 div.parentNode.removeChild(div); } //键盘控制方向 document.onkeydown = function (e) { if (e && e.keyCode == 38) { doUp(); } else if (e && e.keyCode == 40) { doDown(); } else if (e && e.keyCode == 37) { doLeft(); } else if (e && e.keyCode == 39) { doRight(); } } </script> </body> </html>
更多有趣的经典小游戏实现专题,分享给大家:
C++经典小游戏汇总
python经典小游戏汇总
python俄罗斯方块游戏集合
JavaScript经典游戏 玩不停
java经典小游戏汇总
javascript经典小游戏汇总
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
风云阁资源网 Design By www.bgabc.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
风云阁资源网 Design By www.bgabc.com
暂无评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2024年11月16日
2024年11月16日
- 第五街的士高《印度激情版》3CD [WAV+CUE][2.4G]
- 三国志8重制版哪个武将智力高 三国志8重制版智力武将排行一览
- 三国志8重制版哪个武将好 三国志8重制版武将排行一览
- 三国志8重制版武将图像怎么保存 三国志8重制版武将图像设置方法
- 何方.1990-我不是那种人【林杰唱片】【WAV+CUE】
- 张惠妹.1999-妹力新世纪2CD【丰华】【WAV+CUE】
- 邓丽欣.2006-FANTASY【金牌大风】【WAV+CUE】
- 饭制《黑神话》蜘蛛四妹手办
- 《燕云十六声》回应跑路:年内公测版本完成95%
- 网友发现国内版《双城之战》第二季有删减:亲亲环节没了!
- 邓丽君2024-《漫步人生路》头版限量编号MQA-UHQCD[WAV+CUE]
- SergeProkofievplaysProkofiev[Dutton][FLAC+CUE]
- 永恒英文金曲精选4《TheBestOfEverlastingFavouritesVol.4》[WAV+CUE]
- 群星《国风超有戏 第9期》[320K/MP3][13.63MB]
- 群星《国风超有戏 第9期》[FLAC/分轨][72.56MB]