80行JavaScript代码实现的贪食蛇游戏,简约之美

简介: 80行JavaScript代码实现的贪食蛇游戏,简约之美

新建一个文本文件,将下列80行代码粘贴进去,重命名为.html, 用浏览器打开:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>snake</title> 
<style type="text/css"> 
body { overflow:hidden; text-align:center; background-color:lavender; } 
div#main { position:relative; overflow:hidden; margin:10px auto; border: 1px solid green; width:400px; height:400px; } 
div#main div { position:absolute; font-size:0; background-color:green; width:10px; height:10px; } 
div#main div#head { background-color:red; } 
div#main div#food { background-color:green; } 
</style> 
</head> 
<body> 
<div id="main"><div id="head"></div><div id="food" style='visibility:hidden;'></div></div> 
<script type="text/javascript"> 
var w=40, h=40, n=10, m=200; 
var S={},X=[],B=[],L=[],T=[],dirs=[-1,-w,1,w],dir=2,ifood=-5,pause,f,timer,D=document; 
function rnd(){return Math.floor(Math.random()*w*h)} 
function newd(i){var div=main.appendChild(D.createElement("div"));p(div,i);return div;} 
function p(o,i){o.style.left=L[i]+'px';o.style.top=T[i]+'px';} 
function m(o,dir){p(o,i);} 
function $(id){ return D.getElementById(id); } 
function cli(){ clearInterval(tmr); } 
function sei(m){ tmr=setInterval(Main,m); } 
function Main(){ 
    if(pause)return; 
    var ox=X[0],x=ox%w,y=(ox-x)/h,eat,die; 
    X[0]+=dirs[dir]; 
    if(x==0&&dir==0||x==w-1&&dir==2||y==0&&dir==1||y==h-1&&dir==3)die='Died'; 
    else if(S[X[0]])die='died'; 
    if(die){ 
        cli(); 
        alert(die+'/n/ndied'+(B.length-1)+'died'); 
        restart(); 
        return; 
    } 
    if(ifood==X[0]){ 
        eat=true; 
        food.style.visibility='hidden'; 
        ifood=-5; 
        B.unshift(newd(ox)); 
    }else if(ifood==-1){ 
        while(S[ifood=rnd()]); 
        food.style.visibility='visible'; 
        p(food,ifood); 
    }else if(ifood<-1){ifood++} 
    p(head,X[0]); 
    X.unshift(X[0]); 
    X[1]=ox; 
    S[X[0]]=true; 
    if(!eat){delete S[X.pop()];B.unshift(B.pop());p(B[0],ox);} 
} 
D.onkeydown=function(evt){ 
    var c=(evt||window.event).keyCode-37; 
    if(c==-24)pause=!pause; 
    else if(c>=0&&c<4){ 
        if(dir==c){if(!f){f=true;cli();sei(m/2)}} 
        else if(dir%2!=c%2)dir=c; 
    } 
} 
D.onkeyup=function(evt){ 
    var c=(evt||window.event).keyCode-37; 
    if(dir==c&&f){f=false;cli();sei(m)} 
} 
for(var i=w*h-1;i>=0;i--){L[i]=i%w*n, T[i]=(i-i%w)*n/h} 
var main=$("main"), head=$("head"), food=$("food"); 
function restart(){ 
S={},X=[],B=[],dir=2,ifood=-5,pause=f=false; 
while(main.childNodes.length>2)main.removeChild(main.lastChild); 
food.style.visibility='hidden'; 
X[1]=w*h/2; 
X[0]=X[1]+1; 
p(head,X[0]); 
B[0]=newd(X[1]); 
S[X[0]]=S[X[1]]=true; 
sei(m); 
} 
restart(); 
</script> 
</body> 
</html> 

image.png

想当年这个游戏我能玩一下午:

image.png

代码第20行的变量m代表setInterval的第二个参数,单位是毫米,如果大家把默认的200毫秒改成20毫米再启动游戏,看看是不是来到了地狱难度。

image.png

相关文章
|
1月前
|
JSON JavaScript 前端开发
JavaScript原生代码处理JSON的一些高频次方法合集
JavaScript原生代码处理JSON的一些高频次方法合集
|
2月前
|
JavaScript 前端开发 算法
设计一个简单的JavaScript版“俄罗斯方块”游戏的基本逻辑流程。
```md 设计JavaScript版俄罗斯方块游戏涉及初始化环境、创建游戏容器、管理变量、加载音效。游戏循环中生成方块、键盘控制移动与旋转、碰撞锁定、行消除及分数更新。当游戏区域填满时结束游戏,显示结束画面。还包括暂停、重置等辅助功能。伪代码示例展示了核心逻辑,实际实现需考虑更多细节和用户体验增强。 ```
31 3
|
2月前
|
存储 JavaScript 前端开发
非常实用的JavaScript一行代码(整理总结)
非常实用的JavaScript一行代码(整理总结)
32 0
|
2月前
|
移动开发 JavaScript 前端开发
游戏框架 - 描述Phaser、Three.js等JavaScript游戏框架的核心功能和使用场景。
Phaser是开源2D游戏引擎,适合HTML5游戏,内置物理引擎和强大的图形渲染功能,适用于2D游戏,如消消乐。Three.js是基于WebGL的3D库,用于创建和显示3D图形,支持交互和多种3D效果,广泛应用在游戏、可视化等多个领域。两者各有侧重,选择取决于项目需求和图形交互要求。
44 3
|
4天前
|
JavaScript 前端开发 测试技术
编写JavaScript模块化代码主要涉及将代码分割成不同的文件或模块,每个模块负责处理特定的功能或任务
【5月更文挑战第10天】编写JavaScript模块化代码最佳实践:使用ES6模块或CommonJS(Node.js),组织逻辑相关模块,避免全局变量,封装细节。利用命名空间和目录结构,借助Webpack处理浏览器环境的模块。编写文档和注释,编写单元测试以确保代码质量。通过这些方法提升代码的可读性和可维护性。
9 3
|
13天前
|
JavaScript 前端开发 开发工具
【JavaScript 与 TypeScript 技术专栏】TypeScript 如何提升 JavaScript 代码的可读性与可维护性
【4月更文挑战第30天】TypeScript 提升 JavaScript 代码的可读性和可维护性,主要通过静态类型系统、增强代码组织、智能提示与错误检测、文档化和在大型项目中的优势。静态类型减少误解,类和接口提供结构,智能提示提高编码效率,类型注解充当内置文档。在大型项目中,TypeScript 降低理解差异,平滑迁移现有 JavaScript 项目,助力提高开发效率和项目质量。
|
20天前
|
JavaScript 前端开发 算法
< JavaScript小技巧:如何优雅的用【一行代码 】实现Js中的常用功能 >
在开发中,采用简洁的语法和结构,遵循一致的命名规范,具有良好的代码组织和注释,能很好的提高代码的质量。可读性:易于阅读和理解。清晰的命名、简洁的语法和良好的代码结构可以使代码的意图更加明确,降低理解代码的难度,提高代码的可读性。可维护性:易于维护。当代码逻辑清晰、结构简洁时,开发者可以更快速地定位和修复bug,进行功能扩展或修改。同时,可读性高的代码也有助于后续的代码重构和优化。可扩展性:更具有扩展性和灵活性。清晰的代码结构和简洁的代码风格使得添加新功能、修改现有功能或扩展代码更加容易。
< JavaScript小技巧:如何优雅的用【一行代码 】实现Js中的常用功能 >
|
21天前
|
前端开发 JavaScript 容器
JavaScript、CSS像素动画特效代码
此示例创建一个带有像素粒子的容器,每隔300毫秒就会动态添加一个新的像素粒子,然后通过CSS的关键帧动画(`@keyframes`)使它们产生上升和逐渐消失的动画效果。你可以根据需要修改像素粒子的颜色、大小、动画效果和创建速度。
14 0
|
27天前
|
JavaScript
js校验统一社会信用代码
js校验统一社会信用代码
29 0
|
1月前
|
监控 前端开发 JavaScript
如何在浏览器中使用javaScript进行代码调试
【4月更文挑战第11天】在浏览器中调试JavaScript是前端开发的关键技能。使用开发者工具(可通过F12、右键检查或菜单栏访问),遵循以下步骤:1) 打开Sources标签页查看所有脚本;2) 设置断点在需要暂停的代码行;3) 刷新页面触发断点;4) 利用调试工具如Scopes、Watch、Call Stack等检查代码状态;5) 使用Console辅助调试;6) 利用其他工具如Network、Performance和Memory进行性能分析。确保使用最新工具,保持代码清晰,以提升调试效率。
52 4