English  Español  Português  Français  Italiano  Deutsch  Nederlands  Svenska  Dansk  Suomi  Norsk  Русский  Polski  Română  Български  Hrvatski  Česky  中国  中國  日本語  한국어  Ελληνική  हिन्दी  العربية 
为Tetris
Colin Fahey

1. 软件

StandardTetris_2007June4.zip
Tetris的源代码( C#和C++版本)和计划( “exe” ) ;
4068277 字节
MD5: 4e957e0ead66064183e9f7e04e618ec0

2. 导言

本文介绍如何在电脑上可以发挥的经典视频游戏Tetris的,由获取信息的有关董事会,确定好行动,并执行这些行动。
本文包括软件能够发挥在Tetris的实时性。
该软件包括最佳实时Tetris的公平算法在公共领域。
本文定义的规则“Tetris的标准” ,规格在原有基础上1986预商用版的Tetris的用于个人电脑(PC) 。
在2003 ,该软件包括在这条被用来使电脑播放Tetris的运行在一个单独的计算机。
一个普通的USB摄像机被用来使电脑, “看看”屏幕上的其他计算机。
继电器控制董事会通过一RS-232界面,使电脑“按键”键盘上的其他计算机。
因此,第一台计算机上有一个关系到第二台计算机上是类似一个典型的人类球员的关系提高到一个电脑当播放Tetris的;游戏状态是唯一已知的看屏幕上,播放器的行动,只能发起的通过键盘。
配置在这方面的示范成立一个电脑可以发挥Tetris的总比一个人,在正常的实时时间Tetris的公平条件。

3. 历史为Tetris

在1985 , Alexey Pajitnov和Dmitry Pavlovsky被电脑工程师在Computing Center of the Russian Academy of Sciences 。
computer_center_russian_academy_of_sciences.jpg
Dorodnicyn Computing Centre的Russian Academy of Sciences
http://www.ccas.ru
Alexey和Dmitry有兴趣的开发和销售上瘾的电脑游戏。
他们测试了几种不同的游戏。
Alexey的启发而古希腊的益智游戏, Pentaminos ,其中涉及安排益智件制成的五平方。
Alexey思想的想法安排Pentamino件作为他们跌倒在一个矩形杯,但认识到,不同的5 12平方米的形状过于复杂的一个视频游戏。
Alexey切换到使用7 “tetramino”件,每四个方阵。
在1985.6 , Alexey Pajitnov程序的第一版本的俄罗斯方块就一Electronica 60 。
d_pavlovsky_and_a_pajitnov.jpg
Dmitry Pavlovsky , Alexey Pajitnov ,和俄罗斯方块。
在1985-1986 , Vadim Gerasimov ,一名16岁的高学校的电脑神童谁,任职于中国科学院,实施Tetris的为IBM PC运行MS-DOS作业系统。
( Vadim Gerasimov后来的研究在MIT Media Laboratory ,从1994年到2003年,接受博士学位后,完成了许多有趣的项目: http://vadim.www.media.mit.edu
original_tetris_splash_screen02.jpg
引入屏幕的1987-1988预商用释放Tetris的为PC
original_tetris_start_game02.jpg
该游戏画面的1987-1988预商用释放Tetris的为PC
后1987 , Tetris的蔓延世界各地。
The Tetris Company, LLC ,拥有Tetris的商标。
www_tetris_com_site.jpg
The Tetris Company, LLC ,互联网网站(因为它出现在2003 ) 。 http://www.tetris.com

4. 项目的启发,为Tetris

4.1 0 -三维为Tetris

尚未制定。

4.2 一维为Tetris

Ziga Hajdukovic已开发1个三维Tetris的软件可以发挥在一个互联网浏览器。
tetris_1d_ziga_hajdukovic.jpg
一维Tetris的由Ziga Hajdukovic http://www.tetris1d.org
Ziga Hajdukovic还开发了一维Tetris的手机软件使用Java J2ME平台。
(说明: http://www.tetris1d.org/mobile.php ; WAP下载: http://www.tetris1d.org/wap

4.3 2维为Tetris

所有常规Tetris的变种是在这一类。
本节包含了有趣的变种。

4.3.1 最大的Tetris的游戏以往任何时候都: Delft University of Technology (1995)

delft_univ_1995_2000sqmeters_tetris1.gif
Tetris的发挥对建筑物; 2000 m^2表面积; Delft University of Technology (1995)
delft_univ_1995_2000sqmeters_toveren.jpg
Tetris的发挥对建筑物; 2000 m^2表面积; Delft University of Technology (1995)

4.3.2 另一Tetris的游戏中发挥对建筑物: Brown University (2000)

brown_university_bastille_tetris_tetris_game_square.jpg
Tetris的游戏显示灯的使用,在Windows的一个大厦Brown University (2000.4-200.5) http://bastilleweb.techhouse.org
brown_university_bastille_tetris_woz_play.jpg
Steve Wozniak ,创始人之一的Apple Computers ,玩Tetris的; Brown University (2000) http://bastilleweb.techhouse.org
我认为这只不过是最不可思议的一次为期一天的事,我能想象在我的生活。像史蒂夫乔布斯总是说,旅程是回报。
它使我觉得项目的,我们没有回在高校。事情几乎撤消,其他人不会认为这样做。
Steve Wozniak (2000)

4.3.3 网际网路浏览器的游戏与MIT “绿色建筑”形象

tetris_vadim_green_building3.jpg
Vadim Gerisimov's的网际网路浏览器为Tetris
http://vadim.www.media.mit.edu/games/gbt.html
这一网际网路浏览器的Tetris的变异造成的Vadim Gerasimov 。
这一网际网路浏览器的Tetris的特点“Green”建设,在校园MIT 。
这Tetris的变异,不但九栏而不是标准的10列。
这Tetris的变异介绍了新的作品与随机取向。
Vadim Gerasimov是人谁写电脑程式码为PC版的Tetris的在1986 。
Vadim Gerasimov没有博士学位研究在MIT Media Laboratory期间1994-2003 ,工作对很多有趣的项目。

4.3.4 PIC16F84 12 MHz基于微控制器NTSC / PAL视频Tetris的游戏

tetris_pic_television_screen.jpg
PIC16F84 12 MHz基于微控制器NTSC / PAL视频Tetris的游戏
http://www.pablin.com.ar/electron/circuito/mc/tetris
上图中显示NTSC / PAL视频输出所产生的一PIC16F84 12 MHz微控制器运行软件写的Rickard Gunee在1998 。
视频信号是由软件控制的数字输出。
其他PIC项目: http://etronics.free.fr/liens5.htm

4.3.5 “scopetris”示波器Tetris的由Lars Pontoppidan (2007.8)

scopetris_lars_pontoppidan_2007_aug.jpg
“scopetris”示波器Tetris的由Lars Pontoppidan (2007.8)
http://pontoppidan.info/lars/index.php?proj=scopetris
Lars Pontoppidan写代码为AtMega32微控制器,并补充说:简单的模拟电路,创造一个Tetris的版本可以发挥对示波器。
某些选民登记册的AtMega32单片机控制的8位输出信号,以及时通过一“R-2R”电器电阻电路的数位类比转换(D/A) ,由此产生的模拟信号可以控制(x,y)坐标示波器束(当示波器是设置为“X-Y模式” ) 。
YouTube视频:
http://www.youtube.com/watch?v=Hui5Azx5jQo
FLV视频:
scopetris_lars_pontoppidan_2007_aug.flv

4.3.6 模糊代码为Tetris : C / Unix

以下被授予“1989 IOCCC Best Game” 。
long h[4];t(){h[3]-=h[3]/3000;setitimer(0,h,0);}c,d,l,v[]={(int)t,0,2},w,s,I,K
=0,i=276,j,k,q[276],Q[276],*n=q,*m,x=17,f[]={7,-13,-12,1,8,-11,-12,-1,9,-1,1,
12,3,-13,-12,-1,12,-1,11,1,15,-1,13,1,18,-1,1,2,0,-12,-1,11,1,-12,1,13,10,-12,
1,12,11,-12,-1,1,2,-12,-1,12,13,-12,12,13,14,-11,-1,1,4,-13,-12,12,16,-11,-12,
12,17,-13,1,-1,5,-12,12,11,6,-12,12,24};u(){for(i=11;++i<264;)if((k=q[i])-Q[i]
){Q[i]=k;if(i-++I¦¦i%12<1)printf("\033[%d;%dH",(I=i)/12,i%12*2+28);printf(
"\033[%dm  "+(K-k?0:5),k);K=k;}Q[263]=c=getchar();}G(b){for(i=4;i--;)if(q[i?b+
n[i]:b])return 0;return 1;}g(b){for(i=4;i--;q[i?x+n[i]:x]=b);}main(C,V,a)char*
*V,*a;{h[3]=1000000/(l=C>1?atoi(V[1]):2);for(a=C>2?V[2]:"jkl pq";i;i--)*n++=i<
25¦¦i%12<2?7:0;srand(getpid());system("stty cbreak -echo stop u");sigvec(14,v,
0);t();puts("\033[H\033[J");for(n=f+rand()%7*4;;g(7),u(),g(0)){if(c<0){if(G(x+
12))x+=12;else{g(7);++w;for(j=0;j<252;j=12*(j/12+1))for(;q[++j];)if(j%12==10){
for(;j%12;q[j--]=0);u();for(;--j;q[j+12]=q[j]);u();}n=f+rand()%7*4;G(x=17)¦¦(c
=a[5]);}}if(c==*a)G(--x)¦¦++x;if(c==a[1])n=f+4**(m=n),G(x)¦¦(n=m);if(c==a[2])G
(++x)¦¦--x;if(c==a[3])for(;G(x+12);++w)x+=12;if(c==a[4]¦¦c==a[5]){s=sigblock(
8192);printf("\033[H\033[J\033[0m%d\n",w);if(c==a[5])break;for(j=264;j--;Q[j]=
0);while(getchar()-a[4]);puts("\033[H\033[J\033[7m");sigsetmask(s);}}d=popen(
"stty -cbreak echo stop \023;sort -mnr -o HI - HI;cat HI","w");fprintf(d,
"%4d from level %1d by %s\n",w,l,getlogin());pclose(d);}
参考: http://homepages.cwi.nl/~tromp/tetris.html

4.3.7 模糊代码为Tetris : Perl代码

以下是Tetris的为Perl翻译: Perltris (版本20050717 ) Sean Adams 。
#!/usr/bin/perl

$_='A=15; B=30; select(stdin); $¦=1; select(stdout);$¦=1; system
"stty -echo -icanon eol \001"; for C(split(/\s/,"010.010.010.010
77.77 022.020.020 330.030.030 440.044.000 055.550.000 666.060.".
"000")){D=0;for E(split(/\./,C)){F=0;for G(split("",E)){C[P][F++
][D]=G} D++}J[P]=F; I[P++] =D}%L=split(/ /,"m _".chr(72)." c 2".
chr(74)." a _m");sub a{for K(split(/ /,shift)){(K,L)=split(/=/,K
);K=L{K};K=~s/_/L/; printf "%c[K",27}}sub u{a("a=40");for D(0..B
-1){for F(0..A-1){M=G[F][D];if(R[F][D]!=M) {R[F][D]=M;a("m"."=".
(5+D).";".(F*2+5)); a("a=".(40+M).";" .(30+M));print " "x2}}}a(
"m=0;0 a=37;40")}sub r{(N)=@_;while(N--) {Q=W;W=O=H;H=Q;for F( 0
..Q-1){for D(0..O-1) {Q[F][D]=K[F][D]}}for F(0..O-1){for D(0..Q-
1){K[F][D]= Q[Q-D-1][F]}}}}sub l{for F(0..W-1){for D(0..H-1){(K[
F][D]&& ((G[X+F][Y+D])¦¦ (X+F<0)¦¦(X+F>=A)¦¦ (Y+D>=B)))&& return
0}}1}sub p{for F(0..W-1){for D(0..H-1){(K[F][D]>0)&&(G[X+F][Y+D]
=K[F][D]) }}1}sub o{for F(0..W-1){for D(0..H-1){(K[F][D]>0)&&(G[
X+F][ Y+D]=0)}}}sub n{C=int(rand(P)) ;W=J[C];H=I[C];X=int(A/2)-1
;Y=0;for F(0..W-1){for D(0..H-1){K[F][D]= C[C][F][D]}}r(int(rand
(4)));l&&p}sub c{d:for(D=B;D>=0;D--){for F(0..A-1){G[F][D]¦¦next
d}for(D2=D;D2>=0; D2--){for F(0..A-1){G[F][D2]= (D2>1)?G[F][D2-1
]:0; }}u;}}a ("m=0;0 a=0;37;40 c");print "\n\n".4x" "." "x(A-4).
"perltris\n".(" "x4)."--"xA."\n".((" "x3)."¦"." "x(A*2)."¦\n")xB
.(" "x4). "--"xA."\n";n;for(;;) {u;R=chr(1); (S,T)=select(R,U,V,
0.01);if(S) {Z=getc;}else {if($e++>20){Z=" ";$e=0;}else{next;} }
if(Z eq "k"){o;r(1);l¦¦r(3);p}; if(Z eq "j"){o;X--;l¦¦X++;p}; if
(Z eq "l"){o;X++;l¦¦X--;p};if(Z eq " "){o;Y++;(E=l)¦¦Y--;p;E¦¦ c
¦c¦c¦c¦c¦n¦¦goto g;};if(Z eq "q"){last;}}g: a("a=0 m=".(B+8).";0
" ); system "stty sane"; '; s/([A-Z])/\$$1/g; s/\%\$/\%/g; eval;
参考: http://www.seanadams.com/perltris

4.3.8 Mozilla SVG为Tetris

Scalable Vector Graphics (SVG)是一个标准的描述图形对象使用XML 。
tetris_svg_640x480.gif
Mozilla SVG Tetris的: Tetris的实施使用Scalable Vector Graphics (SVG)说明
http://www.croczilla.com/svg/samples/svgtetris/svgtetris.svg
其他的例子SVG : http://www.croczilla.com/svg/samples

4.3.9 Google “widget”为Tetris

Google , Yahoo! , Microsoft ,和其他公司,促进了微型基于互联网的软件名为“widgets”表示,通常是由一些使用动态数据在互联网上提供。
这样一个widget可通过Google是一个Tetris的游戏。
下面的例子是可爱的,但形状旋转,在恼人的方法:
tetris_google_widget.gif
Google “widget”为Tetris
http://www.playbie.com/Game.aspx?gm=1&wt=2&su=live.com&sn=Google&gn=Google
其他Google widgets :
http://www.google.com/ig/directory?synd=open

4.3.10 MIT研究论文: “Tetris is Hard, Even to Approximate” (2002)

下列文件载有研究证明某种Tetris的变异是“NP完成” 。
http://theory.csail.mit.edu/~edemaine/papers/Tetris_TR2002
Erik D.  Demaine , Susan Hohenberger , David Liben-Nowell , “Tetris is Hard, Even to Approximate” , Technical Report MIT-LCS-TR-865 , Massachusetts Institute of Technology , 2002.10.21 。
本地缓存副本(PDF) : tetris_theory_mit_lcs_tr_865_0210020.pdf
“NP完成”是一个分类的时间成本和空间成本的一种算法。
其他分类包括“P”和“NP” 。
分类“NP完成”意味着,为问题大于一些体积小,该算法是不可能找到一个理想的解决方案在实际所需的时间或空间。

4.3.11 研究文件: “Applying reinforcement learning to Tetris”

下列文件,发表了2005.5.30 ,由Donald Carr在计算机科学系在Rhodes University ,南非,介绍了应用“的强化学习” ,以Tetris的。
ApplyingReinforcementLearningToTetris_DonaldCarr_RU_AC_ZA.pdf

4.3.12 Tetris的裙子(2007.11)

tetris_skirt.jpg
Tetris的裙子(2007.11)
该Tetris的裙子是由“Lucy” ( “hissyfitoly”对etsy.com )前2007.11 。
从创作者的描述裙(要约出售就etsy.com ) :
"Okay, so I was a secret, closet Tetris fanatic from about, oh, 1993 to 1996. It was a bitter-sweet obsession. My life wasn't so great, but I could control the stacking of a few measly blocks, [damn it]! Or could I? Video games have been coming back to haunt my dreams as of late, and I find myself stacking blocks, jumping away from a frighteningly-large Q*Bert, and slipping off of logs next to a pixellated frog. This skirt is the result of those nightmares."
论坛的意见,这方面的裙子:
“男子说,裙sucks为在为Tetris”
“ahahahaha ,我以为同样的事情。”
“有一个完整的线下行在底部...完成线消失。” “做” “。”
“应该有一个点在后面或前面的地方,只要将作品完美地...”
“这真是一个丑陋的裙子,虽然。我男朋友无法购买我足够的巧克力和鲜花,以说服我穿那个东西。”

4.3.13 Tetris的阶段,法(2007.4)

tetris_stage_act.jpg
Tetris的阶段,法(2007.4)
http://www.youtube.com/watch?v=sZrs8ZCO8xM
“从那些给你们带来了Triforce在2006 ...谈到下一代的无生命的物体skit ...  Tetris的。”
本地缓存的视频在Flash视频(FLV)格式(使用VLC发挥) :
tetris_stage_act.flv

4.3.14 搞笑Tetris的变化对日本的电视节目

tetris_funny_variations_japanese_tv.jpg
Tetris的变化对日本电视节目
http://www.youtube.com/watch?v=SYRLTF71Sow
这部影片部分从日本的电视节目,包括搞笑的变化Tetris的,其中包括:
作品消失后,登陆,一块填满整个行(从而完成了一排后,降落) ,多件下降的同时,异型件,长期件是略过于广泛,以适应差距(防止四排完成! ) , Mario打蘑菇,并成为巨大的生死! ,小块碎片后,其余的行被摧毁,向上的严重性,使件飘落到顶端,等等。
本地缓存的视频在Flash视频(FLV)格式(使用VLC发挥) :
tetris_funny_variations_japanese_tv.flv

4.3.15 “The Original Human TETRIS Performance by Guillaume Reymond” (2007.11)

tetris_with_human_blocks_guillaume_reymond_2007nov.jpg
“The Original Human TETRIS Performance by Guillaume Reymond” (2007.11)
http://www.youtube.com/watch?v=G0LtUX_6IXY
从描述上YouTube :
“TETRIS所扮演的真正的人为本,坐在一礼堂:”
TETRIS是第四视频性能的GAME OVER Project ,指示由瑞士艺术家Guillaume REYMOND ( NOTsoNOISY创意机构) 。
这个一站式的议案,视频遭到枪击,并发挥为“LES URBAINES”节http://www.urbaines.ch宫举行的德rumine (洛桑,瑞士)对November 24th 2007 。
您可以找到更多的资料和也SPACE INVADERS , PONG和POLE POSITION在我们的网站上http://www.notsonoisy.com/gameover
本地缓存的视频在Flash视频(FLV)格式(使用VLC发挥) :
tetris_with_human_blocks_guillaume_reymond_2007nov.flv

4.3.16 2.5三维为Tetris

任期“2.5三维”用在这里是指非正交鉴于有两维版本的俄罗斯方块,与一些厚度在第三个层面。
tetris_2andhalfd_andre_michelle.jpg
Andre Michelle's Tetris的游戏为Flash播放器http://lab.andre-michelle.com
(找到链接“tetris3d”在“F7: GAMES” ) 。

4.4 3维为Tetris

tetris_3d_gno3dtet_seb.jpg
Linux / GTK版本
三维立体Tetris的,在形式的Java Applet的互联网浏览器:
http://paperstack.com/brokout
三维立体Tetris的为Windows作业系统:
http://www.sfu.ca/~vwchu/3dtetris.html

4.5 4 -三维为Tetris

4d_tetris.jpg
Greg Kaiser's “hypertetris” (1996) : 4 -三维为Tetris
在[1996], [...] , Greg Kaiser放在一起四年的三维变对经典游戏。
使用IrisGL (a.k.a.  igl)他创造了一个工作小组,如果难以发挥,游戏用4个分屏幕上描绘出不同的三维立体方面的整个游戏空间。
[由于]是不是一个很容易[理解]的方式提请4三维物体上一两个三维画面中,四个小组的意见,是一种实用方法操纵和可视化的旋转和翻译的作品通过四个层面(在游戏中所谓的x,y,z,w ) 。
而非完成线大厦作为在原来的,目标在这种情况下,以填补一个完整的立方体,在x,y,z subview (通常为4 4 4 ) 。
其他subviews含有“w”维安排在一个预设的4 4 10座的安排,与“w”被长期, “vertical”维在所有这三个个案中,与不同的基地(x,y), (x,z), (y,z) 。
重力的行为,在“-w”方向,所以件“摔倒”在这三个长期subviews ,包括“w” ,不要移动,除非由播放器的控制,在过去(x,y,z) subview 。
它需要一段时间才习惯使用,至少可以这样说。
如果一些奇迹的耐性,或改变的参数游戏,一不完整的立方体,它将会消失,作为完成线在原来的Tetris的,虽然没有评分是存放在HyperTetris 。
Benjamin Bernard (2000)
http://archive.ncsa.uiuc.edu/Classes/MATH198/bernard/oldIndex.html

4.6 N三维为Tetris

polytope_tetris_screenshot3.jpg
Polytope Tetris (2003) : 1 N三维Tetris的游戏变
http://polytopetetris.sourceforge.net
Polytope Tetris是n三维Tetris的。
灵感源于HyperTetris计划, Polytope Tetris让您吨Tetris的发挥在任何人数层面。
发挥Tetris的在3D , 4D , 5D ,或更多。
HyperTetris是一个catchier名称比Polytope (高清) Tetris的,但我不能窃取的名称。
http://polytopetetris.sourceforge.net

5. “Tetris的标准”规格

5.1 导言

的定义, “标准为Tetris”是一个理想化的模型,最重要的特征和行为的第一IBM-PC执行该Tetris的游戏(大约1986-1988 ) 。
理想化模型是基于推断明显的意图发展的第一IBM-PC执行该Tetris的游戏。
举例来说,似乎可以合理地推断,开发商的第一IBM-PC执行该Tetris的游戏拟选择形状,每一个新的下降,一块“随机” ,并使用该Borland C执行该rand()功能仅仅是一种实用的逼近意图。
的定义, “标准为Tetris”指定的形状每一个新的下降,一块是要“随机”挑选。
这个理想的行为不能取得任何的执行情况,但可以实现近似的理想行为。
虽然没有实施,可以完全落实的定义, “标准Tetris的” ,理想“的标准为Tetris”涉及的客观特征,并实现比较,可以根据它们的相对接近的理想“标准Tetris的” 。
本节介绍了一套元素,行为和规则,其中,集体,界定“标准为Tetris” 。

5.2 标准Tetris的董事会

该委员会是一个网格的细胞,有10个栏目,和20列,共计10 * 20 = 200细胞。
tetris_diagram_board_10x20_empty_new.jpg
标准为Tetris局( 10个栏目, 20行)
每个细胞可以是空置的(空)或占用(全额) 。

5.3 Tetris的标准件

有7 (7)标准Tetris的乐曲,具有下列信的名字:
{ O, I, S, Z, L, J, T }
这封信的名字灵感的形状的作品。
tetris_diagram_pieces_orientations_new.jpg
七个标准Tetris的作品和他们的“取向”
点在(0,0) ,刚好与董事会的立场, (6,20)时,一块第一次出现。
第一列显示的初步“方向” 。
在下面的,字“的方向”是用来形容任何国家的一块,一套允许各国,可导致从counterclockwise轮换的事件。
转变的“方向,”从指定的“方向,”一“I” , “S” ,或“Z一块” ,需要结合轮换和一个翻译。
因此,这个词“的方向”是用在这里是指以上轮作。
不过, “方向”可以改变,只有在回答一个counterclockwise轮换的事件,和周期具有鲜明的“方向” ,每件接近,或火柴,周期导致从纯粹的轮换。
特别一词的使用“方向,”在这方面几乎是相当于一词的含义或“轮换的角度看” ,但这个词“的方向”是用而不是“旋转” ,企图把注意一个事实,即一些作品需要更多的比旋转产生一套允许各国所造成的counterclockwise “轮换”的事件。
件只能开关的方向(或经历一个具体的横向或纵向的翻译) ,如果由此产生的国家的作品不会有任何被占领(全额)细胞以外的地区委员会和不会有任何被占领的细胞重叠,目前被占领的任何细胞该委员会。
(在这条规则时,被占领(全额)细胞的作品不被视为一部分, “目前被占领的细胞董事会”
在下面的意见,任何参考的结果,一counterclockwise轮换的事件是与假设,这种轮换其实是可以执行的,由于现有条件的作品和董事会。
该“O” (框)一块只有一个单一的方向,不会改变的地点,其任何被占领(全额)细胞在回应任何counterclockwise轮换的事件。
该“I” (线)一块有两个可能的方向,最初出现在一个水平方向。
该“I”一块候补两国之间的取向在回应连续counterclockwise轮换的事件。
该“S”和“Z”件,每人有两个可能的方向。
这些作品每候补之间的两个方向,在回应连续counterclockwise轮换的事件。
该“L” , “J” , “T”件每人有四个可能的方向,这些方向是结果,简单的轮换约中心点上的形状。
当一块首次出现的白板上,一块有其“重大的轴”在一个水平方向,和一块是首要的董事会。
因此,没有件,最初能有自己的方向改变。作品必须下降,由一列有可能有其方向改变。
一旦一块下降了一列对董事会,所有作品的方向,才能实现(假设一块是不是太接近一侧墙壁或到目前的桩件) 。

5.4 标准Tetris流程图

以下是一种近似流程图标准Tetris游戏。
standard_tetris_flowchart_for_timer_event_001.gif
近似流程图标准Tetris游戏
standard_tetris_flowchart_for_input_events_001.gif
近似流程图标准Tetris游戏

5.5 标准Tetris作品创作

下面的图表显示( 4细胞* 2细胞)地区对董事会的所有作品出现时,创造的。
tetris_diagram_board_10x20_spawn_area.jpg
所在地区的作品出现时,创造了在标准Tetris
当一个新的作品首次出现在董事会,其产地,刚好与斑点就这个图,和一块将完全由所载的阴影区就这个图。
当一个新的游戏开始,全面免费下降拖延经过,并就第一项免费下降迭代一块是促成在上方的董事会。
在正常的游戏,当一个具体的自由属于迭代“地”一块,充分的自由属于延迟经过和对未来的自由属于迭代一块是促成在上方的董事会。
当一块是促成,类型的作品是选定使用以下算法:
pieceIndex = 1 + (randomInteger % 7);  // 1..7
因为有一个不断p (= 1/7)的机会,选择一种特定的一块,所有件同类型是无法区分的,概率有,正是k件特定类型后, n审判如下1二项分布:
P(k) = (1-p)^(n-k)  *  p^k  *  ( n! / ( (n-k)! k! ) );

  p  =  0.0   ...   1.0;
  k  =  0, 1, 2, ..., n;

mean                = ( n * p )
variance            = ( n * p *(1-p) )
standard deviation  = sqrt( variance )
当我们选择从其中7 ( 7 )件随机抽样,概率获得具体的一块是p=(1/7)
如果我们这样做n=70倍,举例来说,概率越来越正是k件(与k在范围0 ,以n )是由二项分布,显示在下面的形象。
binomial_distribution_n70_p7th.jpg
二项分布为n=70p=(1/7)
因此,人可以预测的平均总件一个单一的类型给予总数的随机件,其中还可以计算,预计方差和标准偏差(的平方根差额) :
p = (1/7):

total random                      standard
pieces (n)     mean    variance   deviation
============  =======  ========   =========
      70          10         8         3
     700         100        85         9
    7000        1000       857        29
   70000       10000      8571        93
当我们转换一个随机值一块指数,我们将它解释如下:
value  piece
=====  =====
  1     "O"
  2     "I"
  3     "S"
  4     "Z"
  5     "L"
  6     "J"
  7     "T"
[预商用MS-DOS版本的Tetris用随机数函数所提供的Borland Pascal编译器。
该功能使用了32位元的状态变量。
因此,随机数序列是有限的,以2^32独特的价值观。
因此,在原则上,一名球员可以发现,后下降,也许10枚,确切地点在一套2^32相对应的号码现状的游戏。
如果Tetris模拟执行与固定序列2^32件,然后最优决策,可以发现每一个地方,在序列。
(似乎有足够的机会,被董事会以一个完全空局国家,使我们能够得到同步与precomputed最优解的路径) 。
的风险,使用一个简单的随机数发生器在一个仿真打算找到一个最优解的一个问题是,该解决方案将优化只适用于特定的路径,通过空间的问题,选定由简单的随机数发生器。 ]

5.6 标准Tetris的管制

游戏的过程中,下列的投入,可用:
left   : request to translate left  by one column
right  : request to translate right by one column
rotate : request to do a counterclockwise rotation
drop   : request to instantly drop the piece
所有的投入,采取的影响上升前沿的积极投入, (对按钮按下,作为反对按钮释放) 。
当按下一个按钮,就会发生,这计数作为一个要求。
持有按钮超过一定时间,可能会导致“自动重复”的特点,键盘,产生新的按钮,压力机-但这个功能是外部的游戏引擎。
投入上述指定符合原来的Tetris的游戏。
旋转的要求能获得执行,如果没有相互重叠所期望的方向,并设置细胞对目前的董事会(不包括属于一块) ,如果想要的方向,没有设置细胞以外的电路板面积。
翻译的要求能获得执行,如果没有相互重叠所期望的翻译配置和设置细胞对目前的董事会(不包括属于一块) ,如果想要翻译的配置并没有设定细胞以外的电路板面积。
投入的要求,是处理与延迟这取决于帧速率的游戏(例如: 75 Hz ) ,并请生效(如果有效)即刻。
一块可以下降,没有任何线下降的步骤发生。
一块可以翻译多次向左边或右边,随后下降,所有没有经历一场正式线下降的一步。
因为一个新衍生出一块不可能旋转(因为它是坚持反对的顶部边缘城规会) ,球员必须接受至少一件下降的一步,如果轮换是可取的或要求。
该效应对评分是微不足道的。

5.7 标准Tetris的一块“登陆”

如果一块简直是下降,这属于一个单列在每一块属于迭代。
会有一个迭代移动,它从一个地方与没有接触与水平表面到一个地方,已与水平表面。一旦这个重复发生,件是在休息的联系。
如果一个迭代开始一块在休息的联系与横向从表面上看,这块“土地” ,成为部分的静态桩。

5.8 标准为Tetris “线完成”

一列完成,是一排桩,其中所有细胞都被占领。当一个完成连续被淘汰,从桩,以及行以上的连续淘汰转移下跌一列,以消除差距,这计数作为一个完成的“路线” 。
当一块土地成为部分的桩。
后,立即一块土地,桩是检查完成行,所有已完成的行淘汰。
截至4行可以同时完成。
下表给出了上限,线路完成,同时由一个单件:
piece   max. simultaneous
         rows completed
=====   ==================
 "O"           2
 "I"           4
 "S"           2
 "Z"           2
 "L"           3
 "J"           3
 "T"           2

5.9 “各级”标准为Tetris

标准Tetris的有10个难度水平,编号1 (一)通过10 ( 10 ) ,与水平1正在“最少”的“困难” 。
水平指数是最高的两个值:
actualLevel = max( initialLevel, earnedLevel );
initialLevel值是水平,球员选择时,开始一个新的游戏。
模式水平作为一个功能的完成线是很容易观察到预商用MS-DOS版的Tetris的:
{ 0,  1,  2, ..., 10 }  --> earned level  1
{    11, 12, ..., 20 }  --> earned level  2
{    21, 22, ..., 30 }  --> earned level  3
{    31, 32, ..., 40 }  --> earned level  4
{    41, 42, ..., 50 }  --> earned level  5
{    51, 52, ..., 60 }  --> earned level  6
{    61, 62, ..., 70 }  --> earned level  7
{    71, 72, ..., 80 }  --> earned level  8
{    81, 82, ..., 90 }  --> earned level  9
{    91, ...         }  --> earned level 10
因此, earnedLevel值是计算按照以下算法:
if (linesCompleted <= 0)
{
  earnedLevel = 1;
}
else if ((linesCompleted >= 1) && (linesCompleted <= 90))
{
  earnedLevel = 1 + ((linesCompleted - 1) / 10);
}
else if (linesCompleted >= 91)
{
  earnedLevel = 10;
}

5.10 标准Tetris的下降迭代延误

Tetris的标准有一个实时时间延迟之间的连续线免费下降迭代这是一个功能,目前的难易程度。
以下之间的关系水平指数下降迭代延误是基于对重复秒表测量各个层面的预商用MS-DOS版的Tetris的。
actualLevel      iterationDelay [seconds]
                (rounded to nearest 0.05)
============    =========================
     1                 0.50
     2                 0.45
     3                 0.40
     4                 0.35
     5                 0.30
     6                 0.25
     7                 0.20
     8                 0.15
     9                 0.10
    10                 0.05
因此,我们建立下列公式为迭代延误的价值作为一个功能的实际水平指数:
iterationDelay = ((11 - actualLevel) * 0.05);  // [seconds]
如果董事会是空的,并没有用户输入,产生了一块在实际水平1地在大约10秒,并衍生出一条在实际水平10地在大约1秒。

5.11 “评分”标准为Tetris

Tetris的唯一标准,奖分的行为登陆一块。
有没有点,批出该法完成一个单一的路线,或完成二,三个或四个线同时进行。
[注:有些变种Tetris的奖分,该法完成线,与1的指数增加奖金为越来越多的同时完成线。
因此,战略,最大限度地评分在这种变种Tetris的涉及成立的机会, “得到Tetris” ,俚语使用“I”形状获得四同步线和获得大量的点。 ]
如果你有一个空局,你让一个非“I”一块做一个自由的下降和土地,或者您立即下降,非“I”一块,您可以建立以下点图表使用预商用MS-DOS版的Tetris的:
actualLevel   free-fall   instant-drop
                points       points
===========   =========   ============
     1             6           24
     2             9           27
     3            12           30
     4            15           33
     5            18           36
     6            21           39
     7            24           42
     8            27           45
     9            30           48
    10            33           51
unrotated ,非“I”件属于共有18行。
此帐户为点之间的差额免费下降和即时压降案件。
由试点中间案件是很容易推断点以下公式:
pointAward = ( (21 + (3 * actualLevel)) - freeFallIterations );
请注意,这个公式完全没有与距离一条瀑布!
这是从严治党的一项功能的实际水平,以及刑罚为迭代次数一块是允许属于自由。
这惩罚的使用者需要时间思考。
也请注意,因为一块不能最初旋转时,它首先会产生,一名球员被处以至少有一个免费的下降迭代,如果轮换需要的地方,一块在桩。
这大概不会影响人类的球员,除非他们在某种程度上:承认一块,按翻译键( “左”或“右” ) ,按下“旋转”的关键一次或更多次,并按下“下拉”的关键,所有在不到0.5秒级1 ,或少于0.05秒级10 。

6. 标准Tetris的策略

6.1 导言

战略上玩游戏,就看游戏规则。
一策略取决于哪一个参数是要优化。
在标准Tetris的,一赖以生存的完成行,得到点降落件,和得分点,最有可能,每件执行下降之前,一个或多个免费下降迭代transpire 。
1 A.I.可以优化点奖励,每件只需决定对此举迅速而“紧迫的关键在于”执行。
更重要的一A.I.是生存,因为无限期的生存手段,任意高分数可以达到。因为Tetris的件属于在某一特定率, A.I.必须作出决定,至少这个快速发展-和x azd必须作出的举动,完成行率的平均值至少1行每2 .5件。 (每一块有4个细胞,每一列有10个细胞) 。
当然,一可以推迟完成行积累了件和建设的一个大桩,但也有只有200个细胞,对整个委员会,该委员会在原则上只能举行50件,因此任何播放器(如1 A.I. )必须完成线一个基本优先事项。
在标准的俄罗斯方块,游戏状态,包括当前董事会的占领和目前的下降作品(类型,位置和方向) 。游戏状态可能选择,包括“未来的作品” 。

6.2 1交替序列的“ S ”和“ Z ”件

Heidi Burgiel ,博士研究生的Department of Mathematics, Statistics and Computer Science在University of Illinois at Chicago ,证明交替序列的“ S ”和“ Z ”件将迫使标准( 10 -列, 20列) Tetris的游戏结束在一个可预见的数目的举动。
http://www.math.uic.edu/~burgiel/Tetris/explanation.html
引述文章: “ You can't win a game in which only alternating 'S' and 'Z' pieces appear.  ”
印刷相关文章: Mathematical Gazette , 1997年7月, “ How to Lose at Tetris ”
Heidi Burgiel提供了一个Java applet运行在一个互联网浏览器的特点是改变了Tetris的克隆即会产生交替“ S ”和“ Z ”成碎片。
http://www.math.uic.edu/~burgiel/Tetris
[ “标准Tetris的”软件相关的文件您正在阅读也有一个模式,会产生交替“ S ”和“ Z ”成碎片。 ]
Heidi Burgiel声称游戏涉及交替“ S ”和“ Z ”件(一个标准的Tetris的董事会10列和20