为Tetris

1. 软件

StandardTetris_2007June4.zip
Tetris的源代码( C#和C++版本)和计划( “exe” ) ;
4068277 bytes
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
 
 
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平台。
 

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
 
 
这一网际网路浏览器的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的游戏
 
 
上图中显示NTSC / PAL视频输出所产生的一PIC16F84 12 MHz微控制器运行软件写的Rickard Gunee在1998 。
视频信号是由软件控制的数字输出。
 
 

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

scopetris_lars_pontoppidan_2007_aug.jpg
“scopetris”示波器Tetris的由Lars Pontoppidan (2007.8)
 
 
Lars Pontoppidan写代码为AtMega32微控制器,并补充说:简单的模拟电路,创造一个Tetris的版本可以发挥对示波器。
某些选民登记册的AtMega32单片机控制的8位输出信号,以及时通过一“R-2R”电器电阻电路的数位类比转换(D/A) ,由此产生的模拟信号可以控制(x,y)坐标示波器束(当示波器是设置为“X-Y模式” ) 。
 
YouTube视频:
 
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);}
 
 

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;
 
 

4.3.8 Mozilla SVG为Tetris

Scalable Vector Graphics (SVG)是一个标准的描述图形对象使用XML 。
 
tetris_svg_640x480.gif
Mozilla SVG Tetris的: Tetris的实施使用Scalable Vector Graphics (SVG)说明
 
 
 

4.3.9 Google “widget”为Tetris

Google , Yahoo! , Microsoft ,和其他公司,促进了微型基于互联网的软件名为“widgets”表示,通常是由一些使用动态数据在互联网上提供。
这样一个widget可通过Google是一个Tetris的游戏。
 
下面的例子是可爱的,但形状旋转,在恼人的方法:
 
tetris_google_widget.gif
Google “widget”为Tetris
 
 
其他Google widgets :
 

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

下列文件载有研究证明某种Tetris的变异是“NP完成” 。
 
 
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的。
 
 

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)
 
 
“从那些给你们带来了Triforce在2006 ...谈到下一代的无生命的物体skit ...  Tetris的。”
 
本地缓存的视频在Flash视频(FLV)格式(使用VLC发挥) :
 

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

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

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)
 
 
从描述上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发挥) :
 

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的互联网浏览器:
 
 
三维立体Tetris的为Windows作业系统:
 
 

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)
 
 

4.6 N三维为Tetris

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

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的游戏结束在一个可预见的数目的举动。
 
 
引述文章: “ 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 ”成碎片。
 
 
[ “标准Tetris的”软件相关的文件您正在阅读也有一个模式,会产生交替“ S ”和“ Z ”成碎片。 ]
 
Heidi Burgiel声称游戏涉及交替“ S ”和“ Z ”件(一个标准的Tetris的董事会10列和20列)必须结束前不少于70000件,下降了。
 
标准Tetris的软件,包括与本文件,使一个人玩游戏与交流“ S ”和“ Z ”件,改变董事会的宽度。
这是很容易看到议会,其宽度是整数倍数,四根柱子(例如: 4栏, 8个栏目, 12个栏目,等)可以发挥永远当件候补之间的“ S ”和“ Z ” ,与桩上升没有高于4行。我提到这一点要说清楚,有限的生存中描述的研究上述文件是专门为案件的标准为Tetris局( 10列和20列) 。
 

6.3 无法解决的一块序列在一般

有整个类别的病理序列不能存活。
 
这将是令人感兴趣的计算总的概率遇到的一个游戏终止序列,因为这将付诸表决,一上界的表现,任何策略,甚至完整的知识,将来所有的作品在任何特定点,在一场比赛。
 

6.4 总理事会可能配置

鉴于该委员会已10 * 20 = 200细胞,鉴于每一个细胞,只能在一两个国家(空或占用) ,总数董事会配置必须小于或等于: (2 ^ 200)
 
由于每件增加了4细胞,以一局,和每一列完成,消除了10个细胞的董事会中,有多少被占领的细胞对董事会将永远甚至。举例来说, (3*4 - 1*10) = 2(1*4 - 0*10) = 4(4*4 - 1*10) = 6(2*4 - 0*10) = 8(5*4 - 1*10) = 10等,因此,只有一半的(2 ^ 200)局配置可以达成的玩游戏。
 
因此,总人数董事会配置大约是: (2 ^ 199) = 8.03469...  * 10^59
 
但是,我们也应该排除在我们的总的任何配置,其中包括填补行,因为填补行淘汰,在年底前完成,每动议。任何配置与一个或一个以上填写行会崩溃,到另一个配置不包含任何填补行。
 
同时,我们应排除任何配置,其中包括一个非空行以上的一个或多个空行,因为一个非空行上述一空行都会下降,下降停止所有在年底前每个动议。
 
每一行都可以在2^10 = 1024国,其中之一是“空白” ,其中之一是“充分” ,并(1024 - 2) = 1022 ,其中部分被占领。我们排除“充分”的情况考虑。
 
如果底部一行是空的,那么所有的行上述底部一行还必须是空的。
 
如果底部一行是部分被占领,那么,第二行可以为空或部分占领。
 
继续这样分析,我们可以计算若干董事会的配置需要在帐户排除充分行和限制的空行: 1 + (1022 * (1 + 1022 * (1 + 1022 * (1 + 1022 * (...  * (1023)))))) ,这大约是((1022 ^ 19) * (1023))
 
因此,我们找到一个更精确的估计,总人数稳定局配置: (1/2) * ((1022 ^ 19) * (1023)) = 0.9625...  * (2 ^ 199) ,即大约3.74 % ,低于(2 ^ 199)的估计。
 
不过,实际的数目稳定,易于委员会国家很可能会显着降低,由于一个事实,就是最顶层的行只能填补了几种方法。作为最顶层的行填补,新产生的作品,不能移动或旋转,非常欣赏。这限制了人数的方法最顶层的行可以得到填补。
 

6.5 原则上,最好的动议可以找到的任何委员会和一块配置

因为我们可以得到任何可能的七件为任何特定的国家委员会,总人数的游戏国是大约7 * (2 ^ 199) = 5.624...  * 10^60
 
因为我们可以在原则上,做了深刻的搜索一切可能的期货为所有可能的动作,对于给定游戏状态,我们可以有一个单一的“最佳”移动相关的每一个游戏状态。
 
我们假定我们没有获得任何资料,其他比目前的董事会和当前的一块,所以“最佳”的意思是“动议提供最大的机会,满足我们的长远目标的生存” 。
 
此举只是一个翻译(最多10个选项)和旋转(最多4个选项) ,我们可以轻易编码最好的动议在一个单一字节。
 
因此,在原则上,我们可以形成一个表与10^61作品(字节)告诉我们,最好的动议给予的任何委员会和国家当前的一块。
 
当然,这是不切实际的,正如列举的所有“ Go ”的董事局或“ Chess ”议会是不切实际的。但问题是,有一个真正的解决办法,有一个最佳动作对于任何给定的配置。可能会有同样的好举措,对于给定的配置,但我们可以任意选择一个单一的动议在这种情况下。
 
许多玩游戏的算法有表详尽列举所有游戏状态的可能性有限的背景下,如“开放(初期)的动作”或“结束游戏(最后)动作” ,在国际象棋。也许详尽列举的Tetris的桩表面(约(20 ^ 10)国家)是可行的。这是一个有趣的想法。
详尽列举的所有国家底部两行,再乘以七个可能的乐曲,和储存的最佳动议在一个单字节,会很容易;只需要7 MB的记忆体。也许性能优化,为这些七百点零零零万箱子会提供的原始数据为分析和发展的简单模型数据;这种模式可被视为一部分,整体的理想Tetris的公平战略。
 
请注意,执行最佳的动作仍然没有保护我们,对可能发生的病理游戏终止一块序列。它的正义,我们将始终执行的举动为我们提供了最大的潜能,为未来的生存鉴于未来所有作品,是完全随机(和未知的在时间,我们来决定如何提出一个单一的目前已知的一块) 。
 

6.6 实时性能

1约束面临着一些战略的算法是需要实时性能-意思是,该算法必须作出决定,在一个特定的大量的时间。
 
当一个人扮演Tetris的,件不停止下跌,让玩家有机会的想法。这部分的挑战Tetris的。因此,一A.I.制度,就是要模拟的作用,一个人的球员也必须作出决定,在利率均由Tetris的游戏。
 

6.7 连续作品总数

请注意,在长期,人数下降是件非常接近2.5倍,多少个已完成的行-因为每一行有1 0个细胞,每一块是4细胞,我们必须完整,连续,平均一次(10/4) = 2.5件下降。
因此,我们可以使用“完成行”和“下降作品”几乎可以互换与适当比例的常数。最大的错误是,当董事会是完全填满,除了一个单一的差距,在每一行(((10*20)-20)/4) = 45件下降,但A缺乏症的预测(45/2.5) = 18完成行。
 

6.8 目前片(板)的策略

如果我们只允许A.I.有知识,目前的董事会和当前作品,我们只考虑的结果,提出目前的一块,特别是方法,那么这可以叫做“一体式”的分析。
 
这里是一个轮廓如何一个作品的分析,才能决定后,此举在Tetris的:
 
tetris_piece_drop_with_metrics01.jpg
目前片分析1 Tetris的游戏状态
 
基本上,我们尝试所有可能的动作和挑选动议产量的最好成绩。
 
困难的部分是评价每个结果。
 
我们一定要率一个假设性的游戏状态,根据如何,以及这样一个国家支持我们的短期和长期目标。
 
我们的长远目标,是生存的问题。生存取决于对防止桩从溢流董事会。我们可以减少桩高度,形成完整的行是淘汰,然后从桩。
 
形成一个完整的行,我们必须适应部分作品在每栏行。因此,我们要求所有的部分连续暴露于高空掷件,如果我们要填补,最终在整个行。
 
如果由于某种原因,我们掩饰空洞的部分,一排由件,对任何更高的行,那么我们现在无法以填补在这些空白部分行。唯一的出路(假设没有滑动)来访问那些“埋洞”是要消除行上述有部分代理的障碍。
 
以下因素当中,我们可以使用率某一特定国家委员会:
 
Overall pile height
 
高桩,更糟的情况似乎是,因为我们是更接近溢流董事会。
 
Roughness of pile area (number of times cells alternate between empty and filled as any row or column is scanned)
 
该粗桩,就越有可能的是,这将很难以填补在所有的嵌入式复杂的轮廓,因为他们成为暴露到地表。
 
Number of buried empty cells
 
更洞我们已埋葬,我们的情况更糟的是,因为我们必须找出埋孔,我们才可以完成相应的行。
 
你可以想见其他因素,普遍率一个假设性的董事会就如何以及其桩可以容纳所有的未来可能的乐曲,以及如何良好的情况看来,所有这些可能成碎片。
 
下一个问题是如何确定的相对重要性,这些因素。
 
一个一般的做法是以下。转让一套的“砝码” (相对重要性) ,以这些因素,然后模拟很多游戏和记录的结果,这些游戏(最后评分等) 。然后,分配了一套新的权数,并模拟了一套新的游戏。基于对是否或不是一套新的游戏了更好的结果比以前的一套游戏,我们知道,如果一套新的权数,明显优于以往的设定权重。
 
在我自己的实验,我曾尝试系统的搜索和随机搜索良好的重量组合,但我并没有通知任何大规模的趋势,我可以追求。不过,我看到很多出乎意料的顺利坎坷。我还以为这是有趣的是,平均业绩可能形成一个光滑曲线,当一个参数是缓慢不同与其他参数举行的一些价值的组合。
 
最好的实时时间,是一件式Tetris的算法,在世界上所创造的Pierre Dellacherie (法国)在2003 ,在很大程度上是其成功的其一套测量(或数据) 。寻找权重是必要的,当优化战略,但它也是至关重要的开始与种测量显示,有关的特点,国家。
Pierre Dellacherie's发明的新方法的特点,每个委员会作出他的算法,真正优秀的;理事会刻画捕获的重要战略层面的董事会状态。
一可以发展一个非常不同的表征层面工作,同样,我深信它是有可能的跨度有关董事会的状态空间在很多不同的方法可以用来指定一个策略功能。关键是要找到特色项目的状态空间下降至一个小数目,尺寸可用于开发一个简单的评价函数(例如:线性加权组合的特点,所使用的Pierre's算法) 。
 
一个一块算法所用的“ bot ” ,在“ xtris ”软件( 1996年)所写的Roger Espel Llima使用权重确定的一个大型的探索可能的重量组合,由“遗传算法” 。模拟退火是另一个可能的方法,探索多维空间的重量组合。
 
看来,基于不同的意见,多维函数的平均Tetris的表现,作为一个功能的权重,例如: F(w1,w2,w3,...) ,是“粗糙” (大量的局部极小和Maxima ) ,这意味着一个简单的多层面的“爬山”可能是行不通的。
 

6.9 战略时,目前的一块,明年一块,和董事会是众所周知的

如果一个策略算法,是鉴于目前的一块,明年一块,和局,那么它可以作出决定,充分利用相结合的作品。
 
知识在未来一块可以改善的成功,一玩Tetris的算法由几个数量级。人们很容易理解,如何知道未来作品作出了很大的不同策略。
一可以做的“疯狂”的举动,如涉及庞大的洞穴等,因为他们已经知道未来一块可以用来“修正”的情况。如果您不知道下次一块,你不断尝试发挥的赔率,试图让您的选择,开放的情况下,明年是一块并不理想。
 
以下示意图显示了如何所有可能的举动,目前的一块是考虑,并为每个这样的动议,我们考虑一切可能的举动,涉及未来作品。
 
tetris_piece_and_next_with_metrics01.jpg
战略涉及当前和未来一块一块
 
标准Tetris的软件使用这个策略时, “未来的作品”是启用的用户是可见的屏幕上,当两件式A.I.启用(如一个写我, Colin Fahey ) 。如果“未来的作品”是不可见的屏幕上,我的两件式瀑布回到一个一块A.I. 。
我是一整件A.I.很可怕,当相比其他AIs在标准的Tetris的软件;因此,这表明你有益的更多信息(例如:下一条)可到一A.I.系统,它是足以改善的表现我自己平庸的两件式A.I.由几个数量级-轻松超越的表现最好的单件x azf在世界上。
(不过,转换的最佳单件A.I.在世界上要考虑两件很容易会改善它的几个数量级,太!知道下次是一块巨大的! )
 
我的第一次测试的游戏与我的两件式A.I.持续了大约一百八十二小时( 7.6天) 1 800 MHz PC ,完成7216290行。我没有测试,该算法在一个更快的计算机。
 
当您保存国家的一个Tetris的游戏(Shift-W)到一个文本文件,然后,您就可以复制并粘贴清单号码,从一节“ heightHistogram ” , Excel试算表。
 
每个斌在直方图显示多少个已完成的动作结束了与某一特定桩高度(后完成行淘汰) 。正如你可以想见,作出动议,完全消除了一桩是罕见的,所以总人数的举动,结束与桩的高度,零是比较低。
同时,你可能预期桩高度一般围绕一些波动,平均,所以相应的回收箱,以这些行会称霸直方图。最后,垃圾桶为最顶层行(我们所处的危险,满溢的董事会)有非常低的总数。
 
超过的过程中多小时,与A.I.扮演一个单一的游戏使用的策略,涉及的知识“在未来的作品” ,我采取了随机抽样的游戏状态,复制桩高度直方图,以试算表如下所示:
 
std_tetris_pile_height_hist_raw01.jpg
桩高度直方图录得的各点,在一个典型的游戏(与目前和未来式策略)
 
您可以大规模每个直方图由总件数(总人数已完成的动作) ,以获得下列资料:
 
std_tetris_pile_height_hist_scaled01.jpg
规模直方图,以及理论
 
显着的是,这些规模直方图看相同的,尽管不同的命令的严重性件数(已完成的动作)所涉及的。
 
只要看看有多少我提出的假说的尾巴,曲线是一指数衰减。由试验和错误我来到了与粗糙理论的尾巴是所描述的:
 
relative_frequency = ((0.122) * ((0.375)^(row-5)))
 
以下图表显示直方图规模超过整个一系列行。
 
std_tetris_pile_height_hist_curve_full01.jpg
图的规模直方图
 
请注意,曲线为50000件,和曲线的2000000件,和曲线的尾巴理论是几乎难以区分在这个规模。
 
以下是细看头部的曲线。
 
std_tetris_pile_height_hist_curve_head01.jpg
较低的一部分,高度直方图
 
以下是大大-放大,鉴于极端尾端的实测和理论直方图曲线。
 
std_tetris_pile_height_hist_curve_tail01.jpg
放大鉴于极端尾端规模直方图
 
正如你可能期望,这是非常罕见的为桩达到这些高度,甚至在长期的实验-不过,即使我们的证据有限,在这种极端地区,理论似乎仍是可以接受的。
 
在充分图的理论似乎重叠的尾巴,分配“ ,正是” ,而在放大图的尾巴,尾巴,我们看到明显的错误。不过,我断言,这是由于数据不足,在这些极端桩的高峰。如果我增加了游戏局说,高度25行而不是20行,使游戏并没有终止,突然,我觉得理论我提出以上的配合完全可以与趋势。
 
我的感觉是,这个直方图是一个直接的结果相结合的Tetris的A.I.和议事规则Tetris的。所以,这相同的分布,将遵守任何随机长远的游戏Tetris的使用我的 ,特别是A.I.战略玩弄“下一步作品”的知识。
 
此外,我认为这种类型的直方图可以用来比较AIs雇用相同的信息,而玩。因此,你没有发挥完整的游戏(其中可能会持续几天或数年)比较长期的表现,不同的策略算法。
 
举例来说,尽管简单,我的模型,我认为它可以用来预测的平均游戏时间!我们只是数字有多少件,使“连续21 ”桩高度显着号码,如计数1 。
 
相对频率为连续21日,据我简单的理论,是:
 
((0.122) * ((0.375)^( 21 -5 ))) = 1.8 * 10^(-8)
 
您必须乘以这个数目(5.3 * 10^(7)) ,大约50万美元,获得价值一。
 
因此,我粗略估计,我国目前的“未来的作品”的策略是不仅有利于对秩序的大约一千万完成行。其中一个原因,我这个保守的估计是事实,即使是18行,可致命的,我A.I. ,因为我不容许我A.I.考虑件,直到他们已经下跌了至少一列! (这是我手边没有担心无法旋转件) 。
 
令我印象深刻的事实,只能播放50000件(可能少得多件)可以给你一个非常好的估计长远的高度直方图,因此,一个良好的估计,该命令的震级完成行前的游戏结束。这种做法是极其宝贵的快速评估微妙的变化,在一A.I.这是已经这样做非常好。
 

6.10 董事会的评价指标模仿投机了望未来

如果一种算法,例如一个我提出这个计划,只要尝试的所有作品取向和翻译为下降,并导致利率每局的配置,据一些措施的好处,该算法基本上是模仿“超前进” 。
 
当一个员工指标,如“桩高度” , “埋孔” , “表面粗糙度”或“以及深度” ,一个是真正使用的一种简化形式的“向前看” 。这些一般性的刻画董事会提供一些迹象显示长期生存能力的董事会。
 
理想的做法,给予无限量的计算能力,将是评价一个董事会的配置获得一切可能的一块序列可以遵循的模式。
虽然你必须考虑所有7件,作为同样可能在每一级的外观未来,您需要优化的实际翻译(最多10个)和方向(最多4个) ,每件在一切可能的序列!说的最多(7*10*4) = 280分行的每一个层次上董事会的评价!所以,这的最多((280)^(LookAheadLevels))董事会的配置,考虑的问题。
 
因为我们必须终止分析后,一个有限人数的水平,我们需要有一些非了望未来的评价方法委员会国家-的一种方式给予的价值观向叶节点我们的搜索树。因此,这些叶节点,我们又回到使用一个公式,它体现了一般预测未来的可行性董事会!
 
这种类型的投机可以尝试与单件和两件式算法在地方,简单的董事会评价指标。假设所有随后的作品也同样可能和总结的能力,董事会,以容纳件各种在尽可能最好的方式。这可以进行与一,二,或任何数量的投机性动议的深度-与所有件被同样可能( x azb) 。
终端节点,这树可能还需要加权指标评价,但投机层更准确地捕捉的本质是什么,我们想做的事情:确定如何,以及某一特定委员会可以接受所有可能的乐曲,包括积极的因素,如完成线和消极因素,如增加整体桩高度,等等。
 

7. Tetris的A.I.系统示范

 

7.1 系统概述

这下面的图表显示,我的实验设置。
 
tetris_diagram_overall_system_03.jpg
整体系统的示范
 

7.2 设备

这里是一个简短的清单所使用的设备在这方面的示范:
 
[1] Ontrak Control Systems ADR2200 RS-232 8-Relay Board: $149.00 (USD 2003)
[2] Ontrak Control Systems ADRPWR Power Supply         : $ 12.95 (USD 2003)
[3] Creative WebCam Pro (640x480 USB video camera)     : $ 39.95 (USD 2003)
 
显然,您可以使用类似的设备来完成相同的结果。更详细的关于设备所描述的相应部分的这篇文章。
 
这里简要说明个人使用的电脑,在这方面的示范:
 
[1] Personal Computer (PC), 350 MHz, Windows 98   [Runs video game]
[2] Personal Computer (PC), 800 MHz, Windows 2000 [Runs AI program]
 
这次示威很容易被复制与其他作业系统,例如Linux 。这是更重要的是要有CPU速度对秩序的800 MHz或更快的计算机是运行A.I.软件,因为这台电脑将做实时处理的视频内容。
 

7.3 视频捕获硬件

我用一个共同的USB摄像机作为一个视讯撷取装置,为我国A.I.制度。具体来说,我用了Creative "WebCam Pro" , USB摄像机与640 * 480决议。
 
creative_web_cam_pro_site.jpg
Creative(TM) USB摄像机说明
 
 
tetris_web_cam_angle.jpg
USB摄像机(角)
 
tetris_web_cam_front.jpg
USB摄录机(前)
 
tetris_web_cam_ccd.jpg
USB摄像机(局CCD )
 
tetris_web_cam_chips.jpg
USB摄像头(主芯片)
 
tetris_web_cam_ov511_blocks.jpg
OV511主要块(注: USB摄像机是OV511+ )
 

7.4 OV511数据表

ov511ds.pdf
OV511数据表
1136328 bytes
MD5: e927d786e16baea59b7e7e54529778c0
 

7.5 OV511+ ( “附加” )功能的差异

ov511plus_101.pdf
OV511+的特性差异
56271 bytes
MD5: 388a03c56d6f67d6d5d80e3d06c4de21
 

7.6 视频采集软件

Microsoft有一个很旧的API名为“ Video for Windows ” (VFW) ,我成功地用于这一项目。 (您连结到“ vfw32.lib ”在您的C++项目,或做了DllImport “ vfw32.dll ”在您的C#代码)的例子,使用VFW API是广泛使用的。
 
一个替代方案是用Microsoft's “ DirectShow ” API做视频捕捉功能。
 
因为VFW只花了十几行代码的使用,并履行接受我的800 MHz机,我并没有理会探索替代APIs 。但DirectShow是一个更当代API为Windows视频捕获,以及潜在的收益率高得多的帧速率为相同的硬件。
 
看看“ CPF.StandardTetris.STVideoCapture ”源代码文件在标准的Tetris的软体,看看它是如何的方便,以获得视频捕获在自己的项目。
 

7.7 计算机接口,以继电器(途经的RS232 )

有一台电脑“按键”的键盘上的另一台计算机上,我用了一个“中继局”所控制的文本命令发送从串行通信端口(例如: “ COM1 ” ) ,通过一个RS-232电缆。我用每个中继连接两个电线一个具体的键盘键模拟的一个关键。
这需要开放键盘和联系。有很多更容易的方法模拟的关键迫切的在一台电脑,但我想做点事,似乎尽可能接近一个人真的就打字键盘。
 
一个非常灵活和福祉作出继电器董事会是ADR2200所作的Ontrak Control Systems :
 
ontrak_adr2200_board.jpg
Ontrak Control Systems ADR2200 RS232 / RS485 Relay I/O Interface
 
ontrak_adr2200_web_site.jpg
Ontrak Control Systems ADR2200 RS232 / RS485 Relay I/O Interface
 
 
你可以看看“ CPF.StandardTetris.STRS232 ”源代码文件,看看它是如何的方便发送字节通过串行端口,然后可以用来控制设备,如该ADR2200局如上所示。
 

8. 标准Tetris的软件

 

8.1 下载软件

到本月初的文章中找到一个链接,下载的源代码( C#和C++版本)和内置软件( *.exe ) 。
 

8.2 特点摘要

软件特点:
 
指示屏幕和学分
单色模式
影子模式
提示模式
垃圾行
利率管制
明年一块
电路板尺寸
S/Z件
校准模式
视频捕捉和识别
调试控制台
储存游戏
负载游戏
 

8.3 开始出现

外观时,该软件是开始:
 
tetris_app_startup.jpg
外观时,该软件是开始
 
 

8.4 单色模式

默认情况下,董事会出现在颜色:
 
tetris_app_colormode01.jpg
默认情况下,董事会出现在颜色。
 
色彩模式是可以改变的,以单色(Shift + K) :
 
tetris_app_colormode02.jpg
色彩模式是可以改变的,以单色。
 

8.5 影子模式

影子模式表明,如果将一块土地。这是非常有帮助非常大议会,因为这是很难判断的地方,将一块土地。
 
tetris_app_shadowmode.jpg
影子模式表明,如果将一块土地。
 

8.6 提示模式

提示模式显示你的地方,目前选定的爱会动议鉴于目前的局势。 (Shift + H)
 
tetris_app_hintmode.jpg
提示模式表明,如果目前选定的爱会动议。
 

8.7 垃圾行

插入的“帆船”列在底部的桩,一个又一个,手动。 (Shift + J)
 
tetris_app_junkrows.jpg
插入的“帆船”列在底部的桩。
 

8.8 利率管制

该'+' (加号)和'-' (减号)键控制速度的游戏。
 
默认情况下,游戏运行在一个标准的速度,根据议事规则的标准为Tetris (速度的基础上水平) 。
 
这里是一个表的含义速度偏见:
 
-3,-4,...  :缓慢,比例偏见
-2 :慢,比第1级
-1 :正常,但只限于第6级( 0.2秒)的速度;
0 :正常;标准Tetris的速度控制;
+1 :稍快,比9级( 0.05 sec延误) ;
+2 :范围渲染率(例如: 75 Hz ) ;
+3,+4,...  :多重复,使每帧;
 
我喜欢运行A.I.在设置“ +2 ” (击中'+'键两次,如果偏见始于零) 。
 
tetris_app_speedcontrol.jpg
高速偏见,改变的速度游戏。
 

8.9 显示未来作品

打击' N '切换“下一步作品”展示。该A.I.将使用“未来的作品”的资料,只有当“未来的作品”出现在屏幕上。
你可以放心说,爱是不使用“未来的作品”的资料,当您无法看到“未来的作品”在屏幕上。
 
tetris_app_nextpiece.jpg
显示未来作品
 

8.10 电路板尺寸

迫切Ctrl + (左,右,下,成立) ,一可以调整电路板尺寸任意大小从4 * 4最多200 * 400
 
tetris_app_boardsize.jpg
电路板尺寸: 4 * 8
 
tetris_app_board20x40.jpg
电路板尺寸: 20 * 40
 
tetris_app_board40x80.jpg
电路板尺寸: 40 * 80
 
tetris_app_board20x5.jpg
电路板尺寸: 20 * 5
 
tetris_app_board4x100.jpg
电路板尺寸: 4 * 100
 

8.11 S/Z件只

研究有趣的交替S/Z格局。
这种模式解决不了的一个10 * 20局(宽*高) 。
不过,议会认为有宽度是倍数4 trivially显示,允许无限的生存。
该AIs生存无限期地在这些情况下,即使他们没有特别调整,以处理这个病理情况。
 
tetris_app_sz_pieces.jpg
S/Z件只
 

8.12 视频校准模式

打击' C '进入“校准模式” 。当在校准模式,您可以按下数字键: {1,2,3,4,5,6,7}选择一块{O,I,S,Z,L,J,T}在上方的发挥董事会。
这是非常有用的作为一个参考的形象,为视频捕捉关于第二个标准Tetris软件。
如果你击中0 (零)的关键,它将使董事会空白。
您可以假装产卵件选择一块(1..7) ,然后选择一个空白(0) ,而第二台计算机上做的视频捕获手表件。
您可以运行A.I.在第二台计算机上,并看它如何处理与您的手动进入病理Tetris的情景!
 
校准模式是唯一的时间,您可以操纵视讯撷取图像处理模板( 4 * 2网格) 。您可以使用鼠标提请矩形,但那样的话你可以使用光标键( “上升” , “下降” , “左” , “权利” )具有优良的控制边界-使用x azc键来选择对面的边界矩形(例如: “ Shift -左”的组合是不同的“左” ) 。
 
tetris_app_calibrate.jpg
视频校准模式
 

8.13 视频捕捉和识别

迫切的' V '切换视讯撷取模式。如果适当地校准(见“视频校准”在一前一节) ,件远程视频画面将抓获由摄像机和分类-和作品将促成在当地的游戏为x azc考虑并作出反应。
该A.I.输出然后必须传送(通过RS-232界面,在示范本文中所描述的)到远程的游戏输入(例如:键盘)为A.I.成功地发挥远程游戏。
如果在任何时候,这闭环不安(例如:视频捕获故障,或输出信号故障) ,那么A.I.将制定一项错误印象的地位,远程游戏,和A.I.会作出不适当的决定,很快失去游戏。
(注:这个问题是可以克服的,与少量的努力: A.I.系统只需要研究整个远程Tetris的屏幕是一项持续的“现实遏制”的整个董事会,并A.I.制度应准备一些输出命令不以某种方式) 。
 
tetris_app_videocapture.jpg
视频捕捉和识别
 

9. 原来的Tetris的爱实验( 2003 )

以下显示了第一次工作版的Tetris的A.I.系统在2003年。
 
standard_tetris_demo_camera.jpg
摄像机所面临的计算机# 1运行任何平原Tetris的游戏
 
standard_tetris_demo_ai.jpg
计算机# 2运行标准Tetris的软件在A.I.模式
 
standard_tetris_pattern_sequence.jpg
左:绘图网格校准视频图像识别;
右: Tetris的一块承认案件。
 
tetris_experiment_video_clip_frame.jpg
从视频帧的Tetris的A.I.实验在2003年
 

10. 最好是一整件Tetris的公平算法,在世界上

 

10.1 Pierre Dellacherie ( 2003年法国)

photo_pierre_dellacherie.jpg
flag_france.jpg
 
Pierre Dellacherie ( 2003年法国) ,开发商最好的是一整件Tetris的公平算法,在世界上
 
最好是一整件,实时时间Tetris的算法,据我所知,是由Pierre Dellacherie的法国。
他惊人的算法,有时填补了200多万行!
平均表现,是对秩序的650000行。
该算法需要很少的内存,并运行在高速(约160行,每秒对我的800 MHz电脑) 。
 
 
表现Pierre Dellacherie's算法:
 
我目前的模型的表现Tetris的认可机构的是,对于任何给定有一块是一个不断的概率,该游戏将终止, p
因此,概率一块将不会终止游戏q=(1-p)
概率的游戏终止后, k的举动只不过是产品的概率尚存(k-1)的举动,即q^(k-1) ,概率终止对下一步的行动,即p
这相当于一个“ Geometric Distribution ” :
 
Geometric Distribution:

P(k) =  p * [(1-p)^(k-1)] = p * [q^(k-1)]  = p * exp[ln(q) * (k-1)]

MEAN:                [1/p]
VARIANCE:            [q/(p*p)]
STANDARD DEVIATION:  sqrt( VARIANCE )
 
pln(q)大约是(-p) ,我们有以下几点:
 
Exponential Distribution:

P(k) =  p * exp[-p * (k-1)]
     =  p * exp[-p *  k   ] approximately

MEAN:                [1/p]
VARIANCE:            [1/(p*p)]
STANDARD DEVIATION:  sqrt( VARIANCE )
 
我们期望分数总数的游戏,以终止与一些完成的行间隔[k1, k2]是:
 
Integral of the Exponential Distribution:

I(k1,k2) = exp[-p * k1] - exp[-p * k2]
 
完成后, 36场比赛在我的电脑上,一个时期二天,我发现了一个平均674827完成行。
按照一般理论,上述情况,我期望以下的相对分数,游戏中从头到尾都处于连续完成以下范围:
 
p = (1/674827) = 0.000001482 = 1.482*10^(-6)

  Completed Row Range       Relative Fraction of Total Games
=======================     =================================
        0 ...   400 000      [exp( 0   )-exp(-0.59)] = 0.447
  400 000 ...   800 000      [exp(-0.59)-exp(-1.19)] = 0.250
  800 000 ... 1 200 000      [exp(-1.19)-exp(-1.78)] = 0.135
1 200 000 ... 1 600 000      [exp(-1.78)-exp(-2.37)] = 0.075
1 600 000 ... 2 000 000      [exp(-2.37)-exp(-2.96)] = 0.042
2 000 000 ... 2 400 000      [exp(-2.96)-exp(-3.55)] = 0.023
 
这里是一个图形比较Exponential Distribution理论与观察到的分配游戏。
 
tetris_pdellacherie_exponential_theory01.jpg
表现Pierre's算法超过36完成游戏
 
虽然有极少数游戏在这方面的数据集,很明显,该模型是相当不错的,在相匹配的分布观察。
 
 
Pierre's介绍其算法:
 
Pierre开始这方面的工作是一件式算法在2003.1 。
Pierre寄给我的一封电子邮件,他的算法, 2003.4.9 ,举报以下的表现超过20场比赛:
 
Game  1 :  1 213 220 rows
Game  2 :    876 618 rows
Game  3 :     37 327 rows
Game  4 :    260 337 rows
Game  5 :    165 349 rows
Game  6 :  2 288 991 rows
Game  7 :  1 112 094 rows
Game  8 :    138 648 rows
Game  9 :    107 089 rows
Game 10 :  1 284 387 rows
Game 11 :    935 011 rows
Game 12 :     80 766 rows
Game 13 :    253 158 rows
Game 14 :  1 877 331 rows
Game 15 :    145 034 rows
Game 16 :    888 081 rows
Game 17 :    433 694 rows
Game 18 :     15 446 rows
Game 19 :    494 498 rows
Game 20 :     16 273 rows

Average is   631167 completed rows.
 
“该算法是在Turbo Pascal实施和完成7000行/分钟。与一Athlon 1600+ ” 。
 
i转换Pierre's算法C++在2003.6 ,经过多次电子邮件的交流与Pierre 。我们验证了该A.I. ,在C++版本作出同样的决定,该Pascal版本。
我注意到类似的表现,他原来的报告;平均约65.0万完成行,和一些游戏完成200.00万行。
难以置信!
 
 

10.2 交谈Pierre Dellacherie

 
[ 1 ]您是在什么时候第一次创建此代码?
 
我一直工作在算法从2003年1月下旬到现在。
 
[ 2 ]多久,你的工作呢?
 
我的工作就它差不多每个星期...但不是每天长时间,因为我有其他活动:可惜我要赚钱一样,别人!
 
[ 3 ]什么启发,设计程式码?
 
我打Tetris的10年或15年前,但我并没有再次发挥了相当长的时间。我会说我是一个“平均”的球员谁知道的规则和一些伎俩。
不过,当我开始工作,对算法,我并没有发挥这么多,因为我发现这是较为有效的观赏电脑播放,并分析他的弱点。
 
[ 4 ]你使用任何自动化,以“培养”您的代码以更好的表现呢?您有任何意见,以改善算法?
或你根本看结果,并决定作出修改?
 
我从“老同学” :我只是看了结果,并决定作出修改。
“自动学习”是一种中继算法所以我不放心,这样做,这样会得到更容易,因为这元算法,都必须建立在太,这是不那么容易了!
何况,我同意与Roger Penrose时,他说, (在他的著作“ Shadows of the mind ” ) ,人类的理解和直觉不能算法(例如:可计算) 。
 
[ 5 ]您是在什么时候首次开始播放Tetris的,当你的思想,解决Tetris的一个A.I. ?
 
i教导算法和计算机编程( Turbo Pascal和Scilab )为学生谁的列车为高考学位工程师的学校。
在第一, “电脑发挥Tetris ”是一种思想,我想发展,为我的下一个年级的学生。
我不知道您的网页,当我开始工作,该算法。
事实上,我很幸运知道您的网页只有几个星期前,因为我想我会已气馁,您的结果(正如你可能猜测,早期版本的我的算法没有发挥好! ) 。
 
[ 6 ]什么是您的现状?
 
我几乎30 [在2003年前4月27日] 。我有几项活动:我是大提琴家,我撰写的音乐和我教计算机编程。
我有一个硕士学位,在音乐( 1994年)和“ Artificial Intelligence and Algorithmic ”文凭( 1998年) 。
在法国,这文凭对应到第五年就读于大学(第四,今年是硕士和第六,今年是论文) 。
 
Pierre's组成:
 
[ 7 ]如果你住在哪里?
 
我法语和我住在鲁昂(诺曼底) 。
 
[ 8 ]其他评论:
 
最终我没有任何新的想法,以改善它。
我曾尝试了这么多无用的(无聊)的东西,我怀疑它可加以改进。
在另一方面,我认为有可能存在完全不同的算法可能有较好的性能。
由的方式,更快的测试构成,在发射件,在一个半盒( 10行× 10列) :在一个半框,我的算法使得平均完成280行。
还有一点:该算法可以很容易地改变了在双层算法( [我将尽]测试尽快) 。
 
我爱电影音乐:成为电影作曲家,是我的部分,主要的梦想(但它只是梦想! ) 。
 

11. 人类的最佳球员,在世界上

 

11.1 日本Tetris的硕士( 2001年1月27日)视频

flag_japan.jpg
 
tetris_japanese_master_2001_frame.jpg
Tetris的硕士( 2001年,日本)视频
 
Arika介绍了日本Tetris的决赛硕士( 2001年1月27日) 。 “ TETRIS THE ABSOLUTE PLUS --The Grandmaster2-- DEATH-MODE ”
 

12. 反馈

 

12.1 Slashdot的线程( 2003 )

在2003年,我国Tetris的A.I.项目讨论了该Slashdot互联网论坛( http://slashdot.org ) 。
 
tetris_slashdot_article_headlines.jpg
Slashdot ( http://slashdot.org )互联网论坛的标题为讨论我的Tetris的A.I.项目
 
 
Benefactor of mankind--thank you! (Score:4, Funny)
by EnlightenmentFan (617608) on Tuesday January 28, @02:29PM
(#5176294)
(http://betsydevine.weblogger.com/ | Last Journal: Tuesday
January 21, @01:55PM)

Now I can set up computer #1 to play an infinite, obsessive
game of Tetris on computer #2, leaving me free at last to sit
down at computer #3 and get some work done. The $200 for
webcam and other hardware is cheap for an invention like this,
with the revolutionary potential of the wheel, or fire, or
even pizza delivery.

Thank you! Thank you! Thank you!

[ Reply to This ]
 
 
The New 4th law... (Score:5, Funny)
by gokubi (413425) on Tuesday January 28, @02:09PM (#5176135)
(http://www.gokubi.com/kinggeorge)

1. A robot may not injure a human being, or, through inaction,
allow a human being to come to harm.

2. A robot must obey the orders given it by human beings
except where such orders would conflict with the First Law.

3. A robot must protect its own existence as long as such
protection does not conflict with the First or Second Law.

4. A robot must never place the long skinny ones horizontally,
unless it leads to a long skinny vertical hole so 4 rows can
be cleared at once the next time a long skinny one comes
around.

[ Reply to This ]

    Re:The New 4th law... (Score:5, Funny)
    by GuyMannDude (574364) on Tuesday January 28,
    @02:14PM (#5176179)

    I thought Directive 4 was that any attempt to arrest a
    senior officer of OCP Corporation would result in
    immediate shutdown!

    GMD
    [ Reply to This | Parent ]
 
 
fullarb_hotmail_com_tetris_ed209.jpg
漫画的灵感,我为Tetris A.I.项目(2003) (我第一次过的一本漫画的灵感! )
 
 
fullarb_hotmail_com_tetris_ed209_02.jpg
漫画的灵感,我为Tetris A.I.项目(2003) (我第二次过的一本漫画的灵感! )
 

13. 历史上的Tetris的A.I.项目

在春天, 1989年我是忙碌的飞(和不)第二学期一年级班级在University of Pennsylvania 。
我的一位室友, Bill Matthews ,有Mac Classic ,有时扮演视频游戏。
人谁得到承认Ivy League学校通常倾向于竞争,与其他人在任何时候-所以,当x azc得到游戏T etris的他x azd,我们立即开始了长期战斗的高评分。
作为分数攀升,时间,所需的投资,使一个小增益急剧增加。
使一个长期的故事,总之, Bill理应拥有的高评分,我们之间,但我怀疑他利用ResEdit和黑客的分数档案!
Bill了课堂时间是在Wharton商学院, alma mater的Michael Milken和Donald Trump ,因此它不是不可想象的,有人操纵的一个极端的高评分...
 
在1990年夏季我借来一30 MHz Intel 80386 IBM PC从我的室友, Alex Haidas 。
我买了Mac键盘在跳蚤市场为1元。
i内建并行端口电路,让PC控制Mac键盘。
(我用了一个CMOS 4040芯片作为一种固态继电器加入键盘内部的触点Mac键盘) 。
我写了一个计算机程序所使用的决策树作为其战略玩游戏Tetris的。在短短数星期,我有一个PC玩Tetris的游戏上运行Mac 。
不过,我必须使用键盘PC告诉A.I.约每下降的一块屏幕上。
我一开始工作就电路使用CdS (Cadmium Sulfide)的光探测器将精益对Mac屏幕和“看到”高空掷件,但CdS传感器的反应过于缓慢的变化,在亮度,对比Tetris的作品和背景就Mac Classic屏幕太低,可靠的歧视。
在那些日子我没有多的钱,所以这是风险太高,购买2元Radio Shack光敏三极管可能不会做什么我想。
此外,由于对比度的问题,我是持悲观态度的整体做法。
 
当我买我的第一个人电脑在1996年,我无法取得软件下Windows 95就一100 MHz CPU做视频处理速度不够快,使一个简单的视觉系统的工作。
我写的图像处理代码在汇编语言,但却有这么多的开销之前,我的代码实际收到的视频数据,这似乎是不可能做任何事情是值得的。
 
在2003年,技术,特别是CPU速度,已达到的水平,取得了整理项目,几乎微不足道。
i挖了我的旧的个人项目,并终于完成它,越来越从一定意义上的封闭。
这是非常激动人心地看到,在一台计算机上玩另一台计算机上通过USB摄像机和继电器。
声继电器点击,观看件自旋和下降,在荒谬的,超人的速度,取得的经验,令人非常满意,在多重方式。
 
在2003年,我的工作是公认的Slashdot ( http://slashdot.org ) ,我收到了很多很好的意见。
我应邀出现在“ Screen Savers ”电视节目对TechTV数字电视网络。
我去了旧金山和出现在表演,和经验,是伟大的。
 
后来在2003 ,我收到一个讯息,从Henk Rogers ,邀请我到夏威夷,以满足他和Alexey Pajitnov谈论建立某种形式的标准为Tetris ,为施行后, Tetris的比赛。
1特别感兴趣的是让球员使用手提电话, “互相竞争” ,间接地,通过A.I.认为模仿的球员(前分析每个球员的行动) ,从而避免影响手机上网的延迟,使球员的“竞争” *非常人类最好的球员,在世界上(*...或相反, A.I.模仿人类最好的球员,在世界上) 。
我是兴奋的前景,会议的创作者为Tetris 。不幸的是,飞行令我着急,我拒绝了邀请。
 
在2006年,我改装我的“标准Tetris的”软件从C++ ,以C#使该软件更易于访问和有用的当代程序员。
posted @ 2011-12-18 03:36  牛德彪  阅读(1607)  评论(0)    收藏  举报