為Tetris
Colin Fahey
1. 軟件
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 。

Dorodnicyn Computing Centre的Russian Academy of Sciences
Alexey和Dmitry有興趣的開發和銷售上癮的電腦遊戲。
他們測試了幾種不同的遊戲。
Alexey的啟發而古希臘的益智遊戲, Pentaminos ,其中涉及安排益智件製成的五平方。
Alexey思想的想法安排Pentamino件作為他們跌倒在一個矩形杯,但認識到,不同的5 12平方米的形狀過於複雜的一個視頻遊戲。
Alexey切換到使用7 “tetramino”件,每四個方陣。
在1985.6 , Alexey Pajitnov程序的第一版本的俄羅斯方塊就一Electronica 60 。

Dmitry Pavlovsky , Alexey Pajitnov ,和俄羅斯方塊。
在1985-1986 , Vadim Gerasimov ,一名16歲的高學校的電腦神童誰,任職於中國科學院,實施Tetris的為IBM PC運行MS-DOS作業系統。

引入屏幕的1987-1988預商用釋放Tetris的為PC

該遊戲畫面的1987-1988預商用釋放Tetris的為PC
後1987 , Tetris的蔓延世界各地。
The Tetris Company, LLC ,擁有Tetris的商標。
4. 項目的啟發,為Tetris
4.1 0 -三維為Tetris
尚未制定。
4.2 一維為Tetris
Ziga Hajdukovic已開發1個三維Tetris的軟件可以發揮在一個互聯網瀏覽器。
Ziga Hajdukovic還開發了一維Tetris的手機軟件使用Java J2ME平台。
4.3 2維為Tetris
所有常規Tetris的變種是在這一類。
本節包含了有趣的變種。
4.3.1 最大的Tetris的遊戲以往任何時候都: Delft University of Technology (1995)

Tetris的發揮對建築物; 2000 m^2表面積; Delft University of Technology (1995)

Tetris的發揮對建築物; 2000 m^2表面積; Delft University of Technology (1995)
4.3.2 另一Tetris的遊戲中發揮對建築物: Brown University (2000)

Tetris的遊戲顯示燈的使用,在Windows的一個大廈Brown University (2000.4-200.5) http://bastilleweb.techhouse.org
“我認為這只不過是最不可思議的一次為期一天的事,我能想像在我的生活。像史蒂夫喬布斯總是說,旅程是回報。”
“它使我覺得項目的,我們沒有回在高校。事情幾乎撤消,其他人不會認為這樣做。”
Steve Wozniak (2000)
4.3.3 網際網路瀏覽器的遊戲與MIT “綠色建築”形象

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的遊戲

PIC16F84 12 MHz基於微控制器NTSC / PAL視頻Tetris的遊戲
上圖中顯示NTSC / PAL視頻輸出所產生的一PIC16F84 12 MHz微控制器運行軟件寫的Rickard Gunee在1998 。
視頻信號是由軟件控制的數字輸出。
4.3.5 “scopetris”示波器Tetris的由Lars Pontoppidan (2007.8)

“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 。

Mozilla SVG Tetris的: Tetris的實施使用Scalable Vector Graphics (SVG)說明
4.3.9 Google “widget”為Tetris
Google , Yahoo! , Microsoft ,和其他公司,促進了微型基於互聯網的軟件名為“widgets”表示,通常是由一些使用動態數據在互聯網上提供。
這樣一個widget可通過Google是一個Tetris的遊戲。
下面的例子是可愛的,但形狀旋轉,在惱人的方法:

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 。
“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的裙子(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的階段,法(2007.4)
“從那些給你們帶來了Triforce在2006 ...談到下一代的無生命的物體skit ... Tetris的。”
本地緩存的視頻在Flash視頻(FLV)格式(使用VLC發揮) :
4.3.14 搞笑Tetris的變化對日本的電視節目

Tetris的變化對日本電視節目
這部影片部分從日本的電視節目,包括搞笑的變化Tetris的,其中包括:
作品消失後,登陸,一塊填滿整個行(從而完成了一排後,降落) ,多件下降的同時,異型件,長期件是略過於廣泛,以適應差距(防止四排完成! ) , Mario打蘑菇,並成為巨大的生死! ,小塊碎片後,其餘的行被摧毀,向上的嚴重性,使件浮法至上方,等等。
本地緩存的視頻在Flash視頻(FLV)格式(使用VLC發揮) :
4.3.15 “The Original Human TETRIS Performance by Guillaume Reymond” (2007.11)

“The Original Human TETRIS Performance by Guillaume Reymond” (2007.11)
從描述上YouTube :
“TETRIS所扮演的真正的人為本,坐在一禮堂:”
TETRIS是第四視頻性能的GAME OVER Project ,指示由瑞士藝術家Guillaume REYMOND ( NOTsoNOISY創意機構) 。
本地緩存的視頻在Flash視頻(FLV)格式(使用VLC發揮) :
4.3.16 2.5三維為Tetris
任期“2.5三維”用在這裡是指非正交鑑於有兩維版本的俄羅斯方塊,與一些厚度在第三個層面。
(找到鏈接“tetris3d”在“F7: GAMES” ) 。
4.4 3維為Tetris

Linux / GTK版本
三維立體Tetris的,在形式的Java Applet的互聯網瀏覽器:
三維立體Tetris的為Windows作業系統:
4.5 4 -三維為Tetris

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 (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局( 10個欄目, 20行)
每個細胞可以是空置的(空)或佔用(全額) 。
5.3 Tetris的標準件
有7 (7)標準Tetris的樂曲,具有下列信的名字:
{ O, I, S, Z, L, J, T }
這封信的名字靈感的形狀的作品。

七個標準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遊戲。

近似流程圖標準Tetris遊戲

近似流程圖標準Tetris遊戲
5.5 標準Tetris作品創作
下面的圖表顯示( 4細胞* 2細胞)地區對董事會的所有作品出現時,創造的。

所在地區的作品出現時,創造了在標準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 )是由二項分佈,顯示在下面的形象。

二項分佈為n=70 , p=(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的:

目前片分析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的軟件使用這個策略時, “未來的作品”是啟用的用戶是可見的屏幕上,當兩件式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.扮演一個單一的遊戲使用的策略,涉及的知識“在未來的作品” ,我採取了隨機抽樣的遊戲狀態,複製樁高度直方圖,以試算表如下所示:

樁高度直方圖錄得的各點,在一個典型的遊戲(與目前和未來式策略)
您可以大規模每個直方圖由總件數(總人數已完成的動作) ,以獲得下列資料:

規模直方圖,以及理論
顯著的是,這些規模直方圖看相同的,儘管不同的命令的嚴重性件數(已完成的動作)所涉及的。
只要看看有多少我提出的假說的尾巴,曲線是一指數衰減。由試驗和錯誤我來到了與粗糙理論的尾巴是所描述的:
relative_frequency = ((0.122) * ((0.375)^(row-5)))
以下圖表顯示直方圖規模超過整個一系列行。

圖的規模直方圖
請注意,曲線為50000件,和曲線的2000000件,和曲線的尾巴理論是幾乎難以區分在這個規模。
以下是細看頭部的曲線。

較低的一部分,高度直方圖
以下是大大-放大,鑑於極端尾端的實測和理論直方圖曲線。

放大鑑於極端尾端規模直方圖
正如你可能期望,這是非常罕見的為樁達到這些高度,甚至在長期的實驗-不過,即使我們的證據有限,在這種極端地區,理論似乎仍是可以接受的。
在充分圖的理論似乎重疊的尾巴,分配“ ,正是” ,而在放大圖的尾巴,尾巴,我們看到明顯的錯誤。不過,我斷言,這是由於數據不足,在這些極端樁的高峰。如果我增加了遊戲局說,高度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 系統概述
這下面的圖表顯示,我的實驗設置。

整體系統的示範
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(TM) USB攝像機說明

USB攝像機(角)

USB攝錄機(前)

USB攝像機(局CCD )

USB攝像頭(主芯片)

OV511主要塊(注: USB攝像機是OV511+ )
7.4 OV511數據表
ov511ds.pdf
OV511數據表
1136328 bytes
MD5: e927d786e16baea59b7e7e54529778c0
7.5 OV511+ ( “附加” )功能的差異
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 Control Systems ADR2200 RS232 / RS485 Relay I/O Interface

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 開始出現
外觀時,該軟件是開始:

外觀時,該軟件是開始
8.4 單色模式
默認情況下,董事會出現在顏色:

默認情況下,董事會出現在顏色。
色彩模式是可以改變的,以單色(Shift + K) :

色彩模式是可以改變的,以單色。
8.5 影子模式
影子模式表明,如果將一塊土地。這是非常有幫助非常大議會,因為這是很難判斷的地方,將一塊土地。

影子模式表明,如果將一塊土地。
8.6 提示模式
提示模式顯示你的地方,目前選定的愛會動議鑑於目前的局勢。 (Shift + H)

提示模式表明,如果目前選定的愛會動議。
8.7 垃圾行
插入的“帆船”列在底部的樁,一個又一個,手動。 (Shift + J)

插入的“帆船”列在底部的樁。
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 ” (擊中'+'鍵兩次,如果偏見始於零) 。

高速偏見,改變的速度遊戲。
8.9 顯示未來作品
打擊' N '切換“下一步作品”展示。該A.I.將使用“未來的作品”的資料,只有當“未來的作品”出現在屏幕上。
你可以放心說,愛是不使用“未來的作品”的資料,當您無法看到“未來的作品”在屏幕上。

顯示未來作品
8.10 電路板尺寸
迫切Ctrl + (左,右,下,成立) ,一可以調整電路板尺寸任意大小從4 * 4最多200 * 400 。

電路板尺寸: 4 * 8

電路板尺寸: 20 * 40

電路板尺寸: 40 * 80

電路板尺寸: 20 * 5

電路板尺寸: 4 * 100
8.11 S/Z件只
研究有趣的交替S/Z格局。
這種模式解決不了的一個10 * 20局(寬*高) 。
不過,議會認為有寬度是倍數4 trivially顯示,允許無限的生存。
該AIs無限期地生存在這些情況下,即使他們沒有特別調整,以處理這個病理情況。

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 -左”的組合是不同的“左” ) 。

視頻校準模式
8.13 視頻捕捉和識別
迫切的' V '切換視訊擷取模式。如果適當地校準(見“視頻校準”在一前一節) ,件遠程視頻畫面將抓獲由攝像機和分類-和作品將促成在當地的遊戲為x azc考慮並作出反應。
該A.I.輸出然後必須傳送(通過RS-232界面,在示範本文中所描述的)到遠程的遊戲輸入(例如:鍵盤)為A.I.成功地發揮遠程遊戲。
如果在任何時候,這閉環不安(例如:視頻捕獲故障,或輸出信號故障) ,那麼A.I.將制定一項錯誤印象的地位,遠程遊戲,和A.I.會作出不適當的決定,很快失去遊戲。
(注:這個問題是可以克服的,與少量的努力: A.I.系統只需要研究整個遠程Tetris的屏幕是一項持續的“現實遏制”的整個董事會,並A.I.制度應準備一些輸出命令不以某種方式) 。

視頻捕捉和識別
9. 原來的Tetris的愛實驗( 2003 )
以下顯示了第一次工作版的Tetris的A.I.系統在2003年。

攝像機所面臨的計算機# 1運行任何平原Tetris的遊戲

計算機# 2運行標準Tetris的軟件在A.I.模式

左:繪圖網格校準視頻圖像識別;
右: Tetris的一塊承認案件。

幀由視頻為Tetris A.I.實驗在2003年
10. 最好是一整件Tetris的公平算法,在世界上
10.1 Pierre Dellacherie ( 2003年法國)
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 )
小p , ln(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理論與觀察到的分配遊戲。

表現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日)視頻

Tetris的碩士( 2001年,日本)視頻
Arika介紹了日本Tetris的決賽碩士( 2001年1月27日) 。 “ TETRIS THE ABSOLUTE PLUS --The Grandmaster2-- DEATH-MODE ”
12. 反饋
12.1 Slashdot的線程( 2003 )
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 ]

漫畫的靈感,我為Tetris A.I.項目(2003) (我第一次過的一本漫畫的靈感! )

漫畫的靈感,我為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攝像機和繼電器。
聲繼電器點擊,觀看件自旋和下降,在荒謬的,超人的速度,取得的經驗,令人非常滿意,在多重方式。
我應邀出現在“ Screen Savers ”電視節目對TechTV數字電視網絡。
我去了舊金山和出現在表演,和經驗,是偉大的。
後來在2003 ,我收到一個訊息,從Henk Rogers ,邀請我到夏威夷,以滿足他和Alexey Pajitnov談論建立某種形式的標準為Tetris ,為施行後, Tetris的比賽。
1特別感興趣的是讓球員使用手提電話, “互相競爭” ,間接地,通過A.I.認為模仿的球員(前分析每個球員的行動) ,從而避免影響手機上網的延遲,使球員的“競爭” *非常人類最好的球員,在世界上(*...或相反, A.I.模仿人類最好的球員,在世界上) 。
我是興奮的前景,會議的創作者為Tetris 。不幸的是,飛行令我著急,我拒絕了邀請。
在2006年,我改裝我的“標準Tetris的”軟件從C++ ,以C#使該軟件更易於訪問和有用的當代程序員。