60行代码:Javascript 写的俄罗斯方块游戏
哈哈这个实在是有点意思
备受打击当初用java各种类写的都要几百行啦
先看效果图:

游戏结束图:

javascript实现源码:
- <!doctype html>
 - <html><head><title>俄罗斯方块</title>
 - <meta name="Description" content="俄罗斯方块Javascript实现">
 - <meta name="Keywords" content="俄罗斯方块,Javascript,实现,短小精悍,游戏,ithomer,ithomer.net">
 - </head><body>
 - <div id="box" style="margin: 20px auto; text-align:center; width:252px;font:25px/25px 宋体;background:#000;color:#9f9;border:#999 20px ridge;text-shadow:2px 3px 1px #0f0;"></div>
 - <div id="footer" style="margin-top: 200px auto; text-align:center; font-size: 16px;">© 2009 - 2014 All Rights by <a href="http://blog.ithomer.net">ithomer.net</a></div>
 - <script>
 - var domain="***";
 - var author="zuidaima";
 - var map=eval("["+Array(23).join("0x801,")+"0xfff]");
 - var tatris=[[0x6600],[0x2222,0xf00],[0xc600,0x2640],[0x6c00,0x4620],[0x4460,0x2e0,0x6220,0x740],[0x2260,0xe20,0x6440,0x4700],[0x2620,0x720,0x2320,0x2700]];
 - var keycom={"38":"rotate(1)","40":"down()","37":"move(2,1)","39":"move(0.5,-1)"};
 - var dia, pos, bak, run;
 - function start(){
 - dia=tatris[~~(Math.random()*7)];
 - bak=pos={fk:[],y:0,x:4,s:~~(Math.random()*4)};
 - rotate(0);
 - }
 - function over(){
 - document.onkeydown=null;
 - clearInterval(run);
 - alert("GAME OVER");
 - }
 - function update(t){
 - bak={fk:pos.fk.slice(0),y:pos.y,x:pos.x,s:pos.s};
 - if(t) return;
 - for(var i=0,a2=""; i<22; i++)
 - a2+=map[i].toString(2).slice(1,-1)+"<br/>";
 - for(var i=0,n; i<4; i++)
 - if(/([^0]+)/.test(bak.fk[i].toString(2).replace(/1/g,"\u25a1")))
 - a2=a2.substr(0,n=(bak.y+i+1)*15-RegExp.$_.length-4)+RegExp.$1+a2.slice(n+RegExp.$1.length);
 - document.getElementById("box").innerHTML=a2.replace(/1/g,"\u25a0").replace(/0/g,"\u3000");
 - }
 - function is(){
 - for(var i=0; i<4; i++)
 - if((pos.fk[i]&map[pos.y+i])!=0) return pos=bak;
 - }
 - function rotate(r){
 - var f=dia[pos.s=(pos.s+r)%dia.length];
 - for(var i=0; i<4; i++)
 - pos.fk[i]=(f>>(12-i*4)&15)<<pos.x;
 - update(is());
 - }
 - function down(){
 - ++pos.y;
 - if(is()){
 - for(var i=0; i<4 && pos.y+i<22; i++)
 - if((map[pos.y+i]|=pos.fk[i])==0xfff)
 - map.splice(pos.y+i,1), map.unshift(0x801);
 - if(map[1]!=0x801) return over();
 - start();
 - }
 - update();
 - }
 - function move(t,k){
 - pos.x+=k;
 - for(var i=0; i<4; i++)
 - pos.fk[i]*=t;
 - update(is());
 - }
 - document.onkeydown=function(e){
 - eval(keycom[(e?e:event).keyCode]);
 - };
 - start();
 - run=setInterval("down()",400);
 - </script></body></html>
 
原文: http://blog.ithomer.net/2014/05/60-lines-of-code-the-small-javascript-written-in-russia-block-game/
版权声明:本文为博主原创文章,未经博主允许不得转载。
60行代码:Javascript 写的俄罗斯方块游戏的更多相关文章
- 【转】shell脚本写的俄罗斯方块游戏
		
亲测一个很好玩的shell脚本写的俄罗斯方块游戏,脚本来自互联网 先来讲一下思维流程 一.方块的表示 由于shell不能定义二维数组,所以只能用一维数组表示方块,俄罗斯方块主要可以分为7类,每一类方块 ...
 - Python 写一个俄罗斯方块游戏
		
使用 Python 的 PyGame 库写一个俄罗斯方块游戏的逐步指南 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人 ...
 - 60行自己动手写LockSupport是什么体验?
		
60行自己动手写LockSupport是什么体验? 前言 在JDK当中给我们提供的各种并发工具当中,比如ReentrantLock等等工具的内部实现,经常会使用到一个工具,这个工具就是LockSupp ...
 - 3行代码,为QQ轻游戏加上语音互动能力
		
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯游戏云 发表于云+社区专栏 游戏和社交往往有着密不可分的关系,QQ轻游戏就是一款集成在手Q里面的游戏平台,直接通过手Q入口就能随开 ...
 - 用C写的俄罗斯方块游戏  By:    hoodlum1980   编程论坛
		
/************************************ * Desc: 俄罗斯方块游戏 * By: hoodlum1980 * Email: jinfd@126.com * Dat ...
 - 280行代码:Javascript 写的2048游戏
		
2048 原作者就是用Js写的,一直想尝试,但久久未动手. 昨天教学生学习JS代码.最好还是就做个有趣的游戏好了.2048这么火,是一个不错的选择. 思路: 1. 数组 ,2维数组4x4 2. 移动算 ...
 - javascript写贪吃蛇游戏(20行代码!)
		
<!doctype html> <html> <body> <canvas id="can" width="400" ...
 - JavaScript写一个拼图游戏
		
拼图游戏的代码400行, 有点多了, 在线DEMO的地址是:打开: 因为使用canvas,所以某些浏览器是不支持的: you know: 为什么要用canvas(⊙o⊙)? 因为图片是一整张jpg或 ...
 - 1000行代码徒手写正则表达式引擎【1】--JAVA中正则表达式的使用
		
简介: 本文是系列博客的第一篇,主要讲解和分析正则表达式规则以及JAVA中原生正则表达式引擎的使用.在后续的文章中会涉及基于NFA的正则表达式引擎内部的工作原理,并在此基础上用1000行左右的JAVA ...
 
随机推荐
- thinkPHP写txt日志文件
			
file_put_contents(DATA_PATH.'文件名.txt', '收到请求:' . date('Y-m-d H:i:s') . PHP_EOL . '通知信息:' . $显示的变量名. ...
 - 嵌入式C语言自我修养 11:有一种函数,叫内建函数
			
11.1 什么是内建函数 内建函数,顾名思义,就是编译器内部实现的函数.这些函数跟关键字一样,可以直接使用,无须像标准库函数那样,要 #include 对应的头文件才能使用. 内建函数的函数命名,通常 ...
 - 树莓派3B+学习笔记:13、不间断会话服务screen
			
screen是一款能够实现多窗口远程控制的开源服务程序,简单来说就是为了解决网络异常中断或为了同时控制多个远程终端窗口而设计的程序.用户还可以使用screen服务程序同时在多个远程会话中自由切换,能够 ...
 - linux打patch简单示例
			
在项目中,有些模块是开源的,没有源码或者不能改动源码,想要修复.优化里面的Bug,这时就需要用到patch了. 1. 生成patch 制作补丁有两种法法,diff和quilt. 1.1 di ...
 - RUBY惯用方法(转)
			
RUBY惯用方法 目录 迭代 ||=赋值 程序入口 预设变量和特殊记号 inject 并行赋值 *的匹配 rescue简单用法 命名参数的默认值 精细duck typing控制 获取metaclass ...
 - scala (6)  Map
			
在scala中Map分为可变长(mutable)和不可变长(imtable) /** * 不可变长map 长度一旦初始化,就不能在进行更改 */ // 通过对偶元组的方式创建map val map = ...
 - Opencv3.0-python: 编译报错color.cpp:7456: error: (-215) scn == 3 || scn == 4 的解决方案
			
结合Opencv3.0读取视频时,出现报错:C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:11111: error: ( ...
 - PAT-A 1009. Product of Polynomials
			
参考:https://www.jianshu.com/p/e7a3ee0f82d9 #include<bits/stdc++.h> using namespace std; ; doubl ...
 - express添加权限拦截
			
express通过中间件的方式添加权限拦截 示例代码如下 app.get('/logout', checkLogin); app.get('/logout', function(req, res) { ...
 - SAP 直接修改程序的方法
			
一般项目上都会有这么个神奇的程序,能在测试机和生产机上直接修改程序... REPORT ztest_change. "变量定义 , line() TYPE c, "如果代码中某行大 ...
 
			
		