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

1. Software

StandardTetris_2007June4.zip
Tetris codice sorgente (C# e C++ versioni) e programma (“exe„);
4068277 byte
MD5: 4e957e0ead66064183e9f7e04e618ec0

2. Introduzione

In questo articolo viene descritto come un computer può svolgere il classico Tetris videogioco di ricevere informazioni sul consiglio di amministrazione, determinare le azioni buone, e l'esecuzione di tali azioni.
Questo articolo include il software in grado di riprodurre Tetris in tempo reale.
Il software include il miglior tempo reale Tetris-giocare algoritmo di pubblico dominio.
Questo articolo definisce le norme “standard„ per “Tetris,„ un disciplinare sulla base di originale 1986 pre-commerciale di Tetris versione per Personal Computer (PC).
In 2003, il software incluso in questo articolo è stato utilizzato per consentire un computer per giocare Tetris in esecuzione su un computer separato.
USB una normale videocamera è stato utilizzato per consentire al computer per “vedere„ la schermata del computer.
A bordo del relè è stato controllato tramite un RS-232 interfaccia per consentire al computer di “premere i tasti„ sulla tastiera del computer.
Così, il primo computer ha un rapporto con il secondo computer che è simile a un tipico giocatore umano rapporto a un computer durante la riproduzione di Tetris, il gioco è stato conosciuto solo guardando lo schermo, e le azioni giocatore può solo essere avviato tramite una tastiera .
La configurazione in questa dimostrazione stabilito che un computer può svolgere Tetris meglio di un umano, in normali in tempo reale Tetris giocare condizioni.

3. Storia di Tetris

In 1985, Alexey Pajitnov e computer sono stati Dmitry Pavlovsky ingegneri a Computing Center of the Russian Academy of Sciences.
computer_center_russian_academy_of_sciences.jpg
Dorodnicyn Computing Centre dei Russian Academy of Sciences
http://www.ccas.ru
Alexey e Dmitry sono stati interessati allo sviluppo di dipendenza e di vendita di giochi per computer.
Essi testato su diversi giochi.
Alexey è stato ispirato dal greco antico gioco di puzzle, Pentaminos, che ha coinvolto l'organizzazione di puzzle fatto di cinque piazze.
Alexey di pensiero l'idea di organizzare Pentamino pezzi come sono diminuiti in una tazza di forma rettangolare, ma ha capito che i dodici diverse quadrato di cinque forme erano troppo complessi per un videogioco.
Alexey passato a sette utilizzando “tetramino„ pezzi, ciascuno composto di quattro piazze.
In 1985.6, Alexey Pajitnov programmato la prima versione di Tetris su un Electronica 60.
d_pavlovsky_and_a_pajitnov.jpg
Dmitry Pavlovsky, Alexey Pajitnov, e Tetris.
In 1985-1986, Vadim Gerasimov, a 16 anni di alta scuola di computer prodigio che ha lavorato presso l'accademia, attuato per il Tetris IBM PC in esecuzione il sistema operativo MS-DOS.
(Vadim Gerasimov più tardi ha fatto la ricerca al MIT Media Laboratory, tra il 1994 e il 2003, ricevendo un Ph.D.  dopo aver completato molti progetti interessanti: http://vadim.www.media.mit.edu)
original_tetris_splash_screen02.jpg
L'introduzione schermata del 1987-1988 pre-commerciale di rilascio di Tetris per la PC
original_tetris_start_game02.jpg
Il gioco schermata del 1987-1988 pre-commerciale di rilascio di Tetris per la PC
Dopo 1987, Tetris diffusione in tutto il mondo.
The Tetris Company, LLC, possiede il marchio Tetris.
www_tetris_com_site.jpg
The Tetris Company, LLC, sito Internet (come appariva nel 2003).  http://www.tetris.com

4. Progetti ispirati da Tetris

4.1 0-dimensionali Tetris

Non ancora sviluppato.

4.2 1-dimensionale Tetris

Ziga Hajdukovic ha sviluppato 1-dimensionale Tetris software che può essere giocato in un browser Internet.
tetris_1d_ziga_hajdukovic.jpg
1-dimensionale di Tetris Ziga Hajdukovic http://www.tetris1d.org
Ziga Hajdukovic ha anche messo a 1-dimensionale Tetris software per i telefoni cellulari utilizzando il Java J2ME piattaforma.
(Istruzioni: http://www.tetris1d.org/mobile.php; WAP download: http://www.tetris1d.org/wap)

4.3 2-dimensionale Tetris

Tutti i convenzionali Tetris varianti sono in questa categoria.
Questa sezione comprende interessanti varianti.

4.3.1 Tetris gioco più grande mai: Delft University of Technology (1995)

delft_univ_1995_2000sqmeters_tetris1.gif
Tetris svolto su un edificio; 2000 m^2 superficie; Delft University of Technology (1995)
delft_univ_1995_2000sqmeters_toveren.jpg
Tetris svolto su un edificio; 2000 m^2 superficie; Delft University of Technology (1995)

4.3.2 Un altro gioco Tetris svolto su un edificio: Brown University (2000)

brown_university_bastille_tetris_tetris_game_square.jpg
Tetris gioco visualizzata utilizzando luci nelle finestre di un edificio a Brown University (2000.4-200.5) http://bastilleweb.techhouse.org
brown_university_bastille_tetris_woz_play.jpg
Steve Wozniak, co-fondatore di Apple Computers, giocare a Tetris; Brown University (2000) http://bastilleweb.techhouse.org
Credo che sia stato solo il più incredibile di un giorno cosa che sono riuscito a immaginare nella mia vita.  Steve Jobs, come sempre detto, il viaggio è la ricompensa.
Mi ha fatto pensare a progetti abbiamo fatto ritorno a scuola.  Cose che sono state quasi annullata che altre persone non pensano di fare.
Steve Wozniak (2000)

4.3.3 Browser internet gioco con MIT “bioedilizia„ immagine

tetris_vadim_green_building3.jpg
Vadim Gerisimov's browser Internet Tetris
http://vadim.www.media.mit.edu/games/gbt.html
Questo browser Internet Tetris variante è stato creato da Vadim Gerasimov.
Questo browser Internet Tetris caratteristiche “Green„ la costruzione presso il campus della MIT.
Tetris questa variante ha solo nove colonne invece dello standard dieci colonne.
Tetris questa variante presenta nuovi pezzi con orientamenti casuali.
Vadim Gerasimov è la persona che ha scritto il codice per computer per il PC versione di Tetris in 1986.
Vadim Gerasimov ha fatto Ph.D.  la ricerca al MIT Media Laboratory durante 1994-2003, lavorando su molti progetti interessanti.

4.3.4 PIC16F84 12 MHz microcontrollore a base di NTSC / PAL video gioco Tetris

tetris_pic_television_screen.jpg
PIC16F84 12 MHz microcontrollore a base di NTSC / PAL video gioco Tetris
http://www.pablin.com.ar/electron/circuito/mc/tetris
L'immagine sopra mostra il NTSC / PAL uscita video prodotto da un microcontrollore PIC16F84 12 MHz in esecuzione il software scritto da Rickard Gunee in 1998.
Il segnale video è generato da software di controllo delle uscite digitali.
PIC altri progetti: http://etronics.free.fr/liens5.htm

4.3.5 “Scopetris„ oscilloscopio di Tetris Lars Pontoppidan (2007.8)

scopetris_lars_pontoppidan_2007_aug.jpg
“Scopetris„ oscilloscopio di Tetris Lars Pontoppidan (2007.8)
http://pontoppidan.info/lars/index.php?proj=scopetris
Lars Pontoppidan codice scritto per il microcontrollore AtMega32, e ha aggiunto semplici circuiti analogici, per creare una versione Tetris che possono essere riprodotti su un oscilloscopio.
Alcuni registri degli AtMega32 controllo microcontrollori a 8-bit, segnali di uscita, e, quando passò attraverso una resistenza elettrica “R-2R„ circuito per il digitale-analogico (D/A) conversione, la conseguente segnali analogici in grado di controllare la (x,y) coordinate di un oscilloscopio fascio (quando l'oscilloscopio è impostato su “modalità X-Y).„
YouTube video:
http://www.youtube.com/watch?v=Hui5Azx5jQo
FLV video:
scopetris_lars_pontoppidan_2007_aug.flv

4.3.6 Obfuscated codice Tetris: C / Unix

Il seguente è stato assegnato “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);}
Riferimento: http://homepages.cwi.nl/~tromp/tetris.html

4.3.7 Obfuscated codice Tetris: Perl codice

Il testo seguente è Tetris Perl per l'interprete: Perltris (versione 20050717) di 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;
Riferimento: http://www.seanadams.com/perltris

4.3.8 Mozilla SVG Tetris

Scalable Vector Graphics (SVG) è uno standard per la descrizione di oggetti grafici utilizzando XML.
tetris_svg_640x480.gif
Mozilla SVG Tetris: Tetris implementato usando un Scalable Vector Graphics (SVG) descrizione
http://www.croczilla.com/svg/samples/svgtetris/svgtetris.svg
Altri esempi di SVG: http://www.croczilla.com/svg/samples

4.3.9 Google “widget„ Tetris

Google, Yahoo!, e Microsoft, e altre società, hanno promosso in miniatura basati su Internet software denominato “widgets„ che sono generalmente caratterizzati da un uso dinamico di dati disponibili su Internet.
Uno di questi widget disponibili attraverso Google è un gioco Tetris.
Il seguente esempio è simpatico, ma le forme ruotare in fastidiosi modi:
tetris_google_widget.gif
Google “widget„ Tetris
http://www.playbie.com/Game.aspx?gm=1&wt=2&su=live.com&sn=Google&gn=Google
Altri Google widgets:
http://www.google.com/ig/directory?synd=open

4.3.10 MIT ricerca carta: “Tetris is Hard, Even to Approximate„ (2002)

I seguenti attività di ricerca del documento contiene una prova del fatto che un certo tipo di Tetris variante è “NP-completo.„
http://theory.csail.mit.edu/~edemaine/papers/Tetris_TR2002
Erik D.  Demaine, Susan Hohenberger, e David Liben-Nowell, “Tetris is Hard, Even to Approximate„, Technical Report MIT-LCS-TR-865, Massachusetts Institute of Technology, 2002.10.21.
Localmente-copia cache (PDF): tetris_theory_mit_lcs_tr_865_0210020.pdf
“NP-è„ una “completa„ classificazione di costo il tempo e lo spazio costo di un algoritmo.
Altre classificazioni comprendono “P„ e “NP„.
Una classificazione di “NP-completo„ implica che, per problemi più grandi di alcune piccole dimensioni, l'algoritmo non è in grado di trovare una soluzione desiderata in un pratico importo di tempo o di spazio.

4.3.11 Ricerca documento: “Applying reinforcement learning to Tetris„

Il seguente documento, pubblicato 2005.5.30, di Donald Carr presso il dipartimento di Informatica presso Rhodes University, Sud Africa, presenta la domanda di “rafforzamento imparare„ a Tetris.
ApplyingReinforcementLearningToTetris_DonaldCarr_RU_AC_ZA.pdf

4.3.12 Tetris gonna (2007.11)

tetris_skirt.jpg
Tetris gonna (2007.11)
Tetris la gonna è stato creato da “Lucy„ (“hissyfitoly„ a etsy.com) prima 2007.11.
Da parte del creatore della descrizione dei gonna (in vendita sul 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."
Forum commenti su questo gonna:
“L'uomo che succhia gonna a Tetris„
“Ahahahaha, ho pensato la stessa cosa.„
“C'è una linea completa giù in fondo ...  completato linee di scomparire.„  “FARE PIÙ DI„ “.„
“Ci dovrebbe essere un posto nella parte posteriore o anteriore lungo pezzo in cui si inseriscono perfettamente ...„
“Che è davvero un brutto se gonna.  Il mio fidanzato non ha potuto acquistare me abbastanza cioccolato e fiori di convincere me che cosa indossare.„

4.3.13 Tetris fase atto (2007.4)

tetris_stage_act.jpg
Tetris fase atto (2007.4)
http://www.youtube.com/watch?v=sZrs8ZCO8xM
“Da quelli che hanno portato la Triforce in 2006 ...  Proviene la prossima generazione di oggetto inanimato scenetta ...  Tetris.„
Localmente-cache Flash video in formato video (FLV) (VLC uso per giocare):
tetris_stage_act.flv

4.3.14 Hilarious Tetris variazioni su una televisione giapponese mostra

tetris_funny_variations_japanese_tv.jpg
Tetris variazioni sul mostrano la televisione giapponese
http://www.youtube.com/watch?v=SYRLTF71Sow
Il video da un segmento della televisione giapponese mostra comprende hilarious varianti di Tetris, tra cui:
pezzi che svaniscono allo sbarco, un pezzo che riempie un'intera riga (in modo da completare una riga su di sbarco), di cui più pezzi contemporaneamente, dalla forma irregolare pezzi, un lungo pezzo che è un po 'troppo grande per andare bene in un divario (prevenzione di un 4-riga completamento!), Mario colpire un fungo e di diventare enorme e morire!, piccolo pezzo detriti che rimane dopo le righe sono distrutti, verso l'alto la gravità pezzi galleggiante verso l'alto, ecc
Localmente-cache Flash video in formato video (FLV) (VLC uso per giocare):
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
Dalla descrizione YouTube a:
“TETRIS svolto dalla reale esseri umani-in seduta un auditorium:„
TETRIS è il 4 ° prestazioni video del GAME OVER Project, diretto da artista svizzero Guillaume REYMOND (NOTsoNOISY agenzia creativa).
Questo stop-motion video è stato girato e ha svolto per “LES URBAINES„ festival http://www.urbaines.ch presso il Palais de Rumine (Losanna, Svizzera) a November 24th 2007.
Potete trovare ulteriori informazioni e anche SPACE INVADERS, PONG e POLE POSITION sul nostro sito web http://www.notsonoisy.com/gameover
Localmente-cache Flash video in formato video (FLV) (VLC uso per giocare):
tetris_with_human_blocks_guillaume_reymond_2007nov.flv

4.3.16 2.5-dimensionale Tetris

Il termine “2.5-dimensionale„ è qui utilizzato per indicare un non-ortogonale vista di un bidimensionale versione di Tetris, con un certo spessore nella terza dimensione.
tetris_2andhalfd_andre_michelle.jpg
Andre Michelle's gioco Tetris Flash per un giocatore http://lab.andre-michelle.com
(Trovi il link “tetris3d„ in “F7: GAMES„.)

4.4 3-dimensionale Tetris

tetris_3d_gno3dtet_seb.jpg
Linux / GTK versione
Tridimensionale di Tetris in forma di un Java applet per Internet browser:
http://paperstack.com/brokout
Tridimensionale Tetris Windows per il sistema operativo:
http://www.sfu.ca/~vwchu/3dtetris.html

4.5 4-dimensionale Tetris

4d_tetris.jpg
Greg Kaiser's “HyperTetris„ (1996): un 4-dimensionale Tetris
In [1996], [...], Greg Kaiser mettere insieme un quattro-dimensionali variante per il gioco classico.
Utilizzando IrisGL (a.k.a.  igl) egli ha creato un gruppo di lavoro, se difficile da svolgere, gioco con quattro sotto-schermi di rappresentare diversi tridimensionale aspetti di tutto il gioco-spazio.
[Perché] non vi è un facilmente [comprensibili] modo di trarre quattro oggetti-D su una due-D schermo, le quattro sotto-opinioni sono un metodo pratico per manipolare e visualizzare la traduzione e la rotazione dei pezzi attraverso le quattro dimensioni ( nel gioco chiamato x,y,z,w).
Piuttosto che il completamento delle linee di blocchi come in originale, l'obiettivo in questo caso è di riempire un cubo in x,y,z subview (di solito 4 di 4 da 4).
Subviews gli altri che contengono la dimensione “w„ sono disposti in un default di 4 in 4 blocchi da 10 a disposizione “w„ essere lungo, “vertical„ dimensione in tutti e tre i casi, con diverse basi di (x,y), (x,z), (y,z).
Gravità agisce in “-w„ direzione, in modo pezzi “cadere„ nei tre lunghi subviews che includono “w„, e non muoverti a meno di controllo lettore negli ultimi (x,y,z) subview.
Ci vuole un po 'per abituarmi, per non dire altro.
Se per qualche miracolo di pazienza o modificare i parametri di gioco, si fa compilare un cubo, scompariranno come completato linee fare in originale Tetris, anche se non cliente è tenuto in HyperTetris.
Benjamin Bernard (2000)
http://archive.ncsa.uiuc.edu/Classes/MATH198/bernard/oldIndex.html

4.6 N-dimensionale Tetris

polytope_tetris_screenshot3.jpg
Polytope Tetris (2003): un N-dimensionale gioco Tetris variante
http://polytopetetris.sourceforge.net
Polytope Tetris è n-dimensionalmente Tetris.
Ispirato al programma HyperTetris, Polytope Tetris consente di tonnellate giocare in qualsiasi Tetris NUMERO DI dimensione.
Gioca Tetris in 3D, 4D, 5D, o più.
HyperTetris è molto catchier nome di Polytope (DEF) Tetris, ma non posso rubare il nome.
http://polytopetetris.sourceforge.net

5. “Tetris„ specifiche “standard„

5.1 Introduzione

La definizione di “standard di Tetris„ è un modello idealizzato dei più importanti caratteristiche e comportamenti dei primi IBM-PC attuazione del gioco Tetris (circa 1986-1988).
Idealizzato il modello si basa su di dedurre l'apparente intenzioni degli sviluppatori del primo IBM-PC attuazione del gioco Tetris.
Per esempio, sembra ragionevole dedurre che gli sviluppatori del primo IBM-PC attuazione del gioco Tetris destinato a selezionare la forma di ogni nuovo pezzo che rientrano “in maniera casuale,„ e che l'uso del Borland C attuazione del rand() funzione è stata solo una pratica di ravvicinamento l'intenzione.
La definizione di “standard di Tetris„ precisa che la forma di ogni nuovo pezzo di cui deve essere selezionato “in modo casuale.„
Questo ideale comportamento non può essere realizzato con qualsiasi applicazione, ma le implementazioni in grado di ravvicinare le comportamento ideale.
Anche se non perfettamente l'attuazione può applicare la definizione di “standard di Tetris,„ gli ideali di “Tetris Standard„ coinvolgere caratteristiche oggettive, e implementazioni può essere paragonata a seconda della loro relativa vicinanza agli ideali di “Standard Tetris.„
Questa sezione descrive una serie di elementi, comportamenti, e delle norme che, collettivamente, definire “standard di Tetris.„

5.2 Tetris standard di bordo

Il consiglio di amministrazione è una griglia di cellule, che hanno 10 colonne e 20 righe, per un totale di 10 * 20 = 200 cellule.
tetris_diagram_board_10x20_empty_new.jpg
Tetris standard di bordo (10 colonne, 20 righe)
Ogni cella può essere vuoto (vuoto) o occupato (full).

5.3 Tetris standard pezzi

Ci sono sette (7) standard Tetris pezzi, con la seguente lettera nomi:
{ O, I, S, Z, L, J, T }
La lettera nomi si ispirano le forme dei pezzi.
tetris_diagram_pieces_orientations_new.jpg
I sette pezzi standard di Tetris e la loro “orientamenti„
Il punto alla (0,0) coincide con bordo posizione (6,20) quando il primo pezzo appare.
La prima colonna mostra l'iniziale “orientamenti.„
Nei seguenti, la parola “orientamento„ è utilizzato per descrivere ogni stato di un pezzo, all'interno di un insieme di stati ammessi, che possono derivare da una rotazione antiorario.
Cambiare “l'orientamento„ da un determinato “orientamento„ di un “I, S,„ o “Z„ pezzo, richiede la combinazione di una rotazione e una traduzione.
Pertanto, la parola “orientamento„ è qui utilizzato per indicare qualcosa di più di rotazione solo.
Tuttavia, “l'orientamento„ può cambiare solo in seguito a un evento di rotazione antiorario, e il ciclo di distinti “orientamenti„ per ogni pezzo ravvicina, o partite, il ciclo derivanti da puro rotazioni.
La particolare uso della parola “orientamento„ in questo contesto è quasi equivalente al significato della parola o “angolo di rotazione,„ ma la parola “orientamento„ è usato al posto di “rotazione„ per tentare di portare l'attenzione sul fatto che alcuni pezzi richiedono più di rotazione per produrre il serie di permesso membri derivanti da eventi “di rotazione„ antiorario.
Pezzi non può che passare orientamenti (o sottoposti a una specifica orizzontale o verticale traduzione) se il conseguente stato di pezza non avrebbe occupato (full) le cellule al di là della zona del consiglio di amministrazione e non avrebbe occupato le cellule che si sovrappongono qualsiasi attualmente occupati cellule del consiglio di amministrazione.
(In questa regola, occupati (completo) delle cellule di pezza, non sono considerati come parte della “attualmente occupati cellule del consiglio di amministrazione„
Nei seguenti osservazioni, qualsiasi riferimento ad un risultato di una rotazione antiorario evento è realizzato con il presupposto che un tale rotazione può essere effettivamente eseguite, date le attuali condizioni del pezzo e il bordo.
La “O„ (box) solo pezzo ha un unico orientamento, e non cambia l'ubicazione di uno dei suoi occupati (completo) di cellule in risposta a qualsiasi evento di rotazione antiorario.
La “I„ (linea) pezzo ha due possibili orientamenti, inizialmente appare in un orientamento orizzontale.
I„ il pezzo alterna tra i due orientamenti in risposta a successivi eventi di rotazione antiorario.
La “S„ e “Z„ pezzi ogni possibile avere due orientamenti.
Questi pezzi si alternano ogni tra due orientamenti in risposta a successivi eventi di rotazione antiorario.
La “L„, “J„, e ogni “T„ pezzi sono quattro possibili orientamenti, e questi orientamenti sono il risultato di semplici rotazioni sul centro punti sulla forma.
Quando un pezzo prima che compare sul bordo, il pezzo ha il suo “asse maggiore„ in un orientamento orizzontale, e il pezzo è nella parte superiore del consiglio di amministrazione.
Pertanto, non pezzi sono inizialmente in grado di avere cambiato i loro orientamenti.  Il pezzo deve discendere da una fila di avere la possibilità di aver cambiato il suo orientamento.
Una volta che un pezzo è diminuito di una riga sul bordo, tutti gli orientamenti pezzo può essere raggiunto (supponendo che il pezzo non è troppo vicino alle pareti laterali o per l'attuale pila di pezzi).

5.4 Tetris diagramma di flusso standard

Il seguente è un approssimativo del diagramma di flusso per un semplice gioco Tetris.
standard_tetris_flowchart_for_timer_event_001.gif
Approssimativa del diagramma di flusso per un semplice gioco Tetris
standard_tetris_flowchart_for_input_events_001.gif
Approssimativa del diagramma di flusso per un semplice gioco Tetris

5.5 Standard Tetris pezzo creazione

Il diagramma seguente mostra l'(4 cella cella * 2) la regione a bordo di tutti i pezzi in cui vengono visualizzati quando creato.
tetris_diagram_board_10x20_spawn_area.jpg
Regione in cui vengono visualizzati quando pezzi creati in standard Tetris
Quando un nuovo pezzo prima che compare sul bordo, la sua origine coincide con il punto su questo diagramma, e il pezzo sarà completamente contenuta dalla zona ombreggiata a questo schema.
Quando un nuovo gioco è iniziato, una piena caduta libera trascorre ritardo, e il primo a caduta libera da un pezzo di iterazione è generato nella parte superiore del consiglio di amministrazione.
Durante il normale gioco, quando un determinato la caduta libera iterazione “terre„ un pezzo, una piena caduta libera ritardo trascorre e sulla prossima caduta libera iterazione un pezzo è generato nella parte superiore del consiglio di amministrazione.
Quando un pezzo è generato, il tipo di pezzo è scelto in base al seguente algoritmo:
pieceIndex = 1 + (randomInteger % 7);  // 1..7
Perché c'è un costante p (= 1/7) possibilità di selezionare uno specifico tipo di pezzo, e tutti i pezzi dello stesso tipo sono indistinguibili, la probabilità di avere esattamente k pezzi di un tipo specifico dopo n prove segue una distribuzione binomiale:
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 )
Quando abbiamo scelto tra i 7 (sette) pezzi a caso, la probabilità di ottenere un determinato pezzo è p=(1/7).
Se faremo questo n=70 volte, ad esempio, la probabilità di ottenere esattamente k pezzi (con k nella gamma 0 a n) è dato dalla distribuzione binomiale, come illustrato nella seguente immagine.
binomial_distribution_n70_p7th.jpg
Distribuzione binomiale per n=70, p=(1/7)
In tal modo, si può prevedere il totale medio di pezzi di un unico tipo di dato un numero totale di pezzi casuali, e si può anche calcolare l'atteso varianza e deviazione standard (radice quadrata della varianza):
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
Quando abbiamo convertire un valore casuale a un pezzo indice, noi interpretarlo come segue:
value  piece
=====  =====
  1     "O"
  2     "I"
  3     "S"
  4     "Z"
  5     "L"
  6     "J"
  7     "T"
[Il pre-commerciale MS-DOS versione di Tetris utilizzato il numero casuale funzione offerti dal Borland Pascal compilatore.
Che utilizzava una funzione a 32 bit stato variabile.
Pertanto, la sequenza di numeri casuali è stato limitato a 2^32 valori distinti.
Pertanto, in linea di principio, un giocatore potrebbe scoprire, dopo l'abbandono forse 10 pezzi, il luogo esatto in 2^32 serie di numeri corrispondenti allo stato attuale del gioco.
Se Tetris simulazioni sono effettuate con la sequenza fissa di 2^32 pezzi, poi ottimale decisioni possono essere trovati per ogni posto nella sequenza.
(Non vi sembrano essere sufficienti opportunità di essere a bordo di uno completamente vuoto bordo di Stato, permettendoci di avere sincronizzato con il precalcolate soluzione ottimale percorso.)
Il rischio di usare un semplice generatore di numeri casuali in una simulazione destinato a trovare una soluzione ottimale a un problema è che la soluzione sarà ottimale solo per il particolare percorso attraverso il problema di spazio selezionati dalla semplice generatore di numeri casuali.  ]

5.6 Tetris controlli standard

Durante il gioco, i seguenti fattori produttivi sono disponibili:
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
Tutti gli ingressi in vigore il crescente di punta del positivo ingresso (premere il pulsante, al contrario di pulsante di rilascio).
Quando un tasto si verifica, questo conta come una richiesta.
In possesso di un pulsante al di là di un certo periodo di tempo potrebbe comportare la “ripetizione automatica„ caratteristica di una tastiera, un pulsante di generare nuove presse - ma questa funzionalità è esterno al motore di gioco.
Gli ingressi di cui sopra sono conformi all'originale gioco Tetris.
Ruota di richieste può essere eseguito se non vi è alcuna sovrapposizione tra l'orientamento desiderato e impostare le cellule a bordo di corrente (esclusa la caduta pezzo), e se l'orientamento desiderato non ha fissato le cellule al di fuori della zona di bordo.
Tradurre le richieste può essere eseguito se non vi è alcuna sovrapposizione tra la configurazione desiderata tradotti e impostare le cellule a bordo di corrente (esclusa la caduta pezzo), e se la configurazione desiderata tradotto non ha fissato le cellule al di fuori della zona di bordo.
Le richieste di ingresso sono trattati con una latenza che dipende il frame rate del gioco (esempio: 75 Hz), e le richieste in vigore (se valido) immediatamente.
Un pezzo può essere eliminato senza alcuna linea di cui si verificano i passaggi.
Un pezzo può essere tradotto più volte a sinistra oa destra, e successivamente abbandonato, senza verifica un funzionario linea che rientrano passo.
Perché generato un nuovo pezzo non può essere ruotato (perché si è bloccata contro il bordo superiore del consiglio di amministrazione), il giocatore deve accettare almeno un pezzo di cui rotazioni passaggio se si desidera o richiesto.
L'effetto sul cliente è insignificante.

5.7 Tetris standard pezzo “di atterraggio„

Se un pezzo è semplicemente che rientrano, spetta di una sola riga nel corso di ogni pezzo che rientrano iterazione.
Ci sarà una iterazione che muove da un luogo senza alcun contatto con superfici orizzontali in un luogo che ha contatto con superfici orizzontali.  Una volta che questo si verifica iterazioni, i pezzi sono in contatto di riposo.
Se un iterazione inizia con un pezzo di riposo in contatto con una superficie orizzontale, il pezzo “terre,„ e diventa parte della statica palo.

5.8 Tetris “linee„ standard “completato„

Una fila è completata una fila di palo in cui tutte le cellule sono occupati.  Quando una riga completato viene eliminato dal palo, e le righe di sopra della riga eliminati sono spostati verso il basso di una riga per eliminare il divario, questo conta come una “linea„ completata.
Quando un pezzo terre diventa parte del palo.
Immediatamente dopo il pezzo terre, il palo è completato a controllo per verificare le righe, e completato tutti i file vengono eliminati.
Fino a quattro righe può essere completato contemporaneamente.
La tabella seguente fornisce il limite superiore a linee compiuta contemporaneamente da un unico pezzo:
piece   max. simultaneous
         rows completed
=====   ==================
 "O"           2
 "I"           4
 "S"           2
 "Z"           2
 "L"           3
 "J"           3
 "T"           2

5.9 Tetris “livelli„ standard

Tetris standard dispone di 10 livelli di difficoltà, numerate 1 (uno) attraverso 10 (dieci), a livello 1 essere “meno difficile.„
Il livello è l'indice massimo di due valori:
actualLevel = max( initialLevel, earnedLevel );
initialLevel il valore è il livello che il giocatore sceglie quando si inizia un nuovo gioco.
Il modello di livello in funzione di linee a termine è facilmente osservabile nel pre-commerciale MS-DOS versione di 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
Di conseguenza, il earnedLevel valore è calcolato secondo la seguente algoritmo:
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 standard di cui iterazione ritardo

Tetris standard ha un tempo reale ritardo tra successive linea caduta libera iterazioni che è una funzione dell 'attuale livello di difficoltà.
La seguente relazione tra indice del livello di iterazione e che rientrano ritardo è basato su misurazioni ripetute cronometro a tutti i livelli della pre-commerciale MS-DOS versione di 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
Quindi, stabilire la seguente formula per il valore di iterazione ritardo in funzione del livello effettivo indice:
iterationDelay = ((11 - actualLevel) * 0.05);  // [seconds]
Se il bordo è vuota, e non vi è alcun input, un pezzo generato a livello effettivo 1 terre in circa 10 secondi, e un pezzo generato a livello effettivo 10 terre in circa 1 secondo.

5.11 Tetris standard “cliente„

Tetris standard premi punti solo per l'atto di sbarco di un pezzo.
Non ci sono punti assegnati per l'atto di completare una sola riga, o il completamento di due, tre, o quattro linee contemporaneamente.
[Nota: Alcune varianti di Tetris assegnare punti per l'atto di completare le linee, con un aumento esponenziale di bonus per un numero sempre maggiore di linee contemporaneamente completato.
Quindi, la strategia per massimizzare il cliente in tali varianti di Tetris tratta di creare opportunità di “ottenere un Tetris,„ slang per l'utilizzo del “I„ forma per ottenere quattro linee di traduzione simultanea e ottenere un sacco di punti.  ]
Se si dispone di un vuoto bordo, e si lascia un non-“I„ fare un pezzo caduta libera e la terra, o immediatamente goccia non “I„ pezzo, è possibile stabilire il punto seguente grafico utilizzando il pre-commerciale MS-DOS versione di 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, non “I„ pezzi caduta di un totale di 18 righe.
Questo rappresenta il punto di differenza tra la caduta libera e immediata-drop casi.
Di sperimentazione di casi intermedi è facile dedurre il punto seguente formula:
pointAward = ( (21 + (3 * actualLevel)) - freeFallIterations );
Si noti che questa formula non ha nulla a che fare con la distanza cade un pezzo!
E 'severamente una funzione del livello effettivo, e una sanzione per il numero di iterazioni un pezzo è consentito a scendere liberamente.
Questo punisce per un utente che necessitano di tempo per riflettere.
Si noti inoltre che, perché un pezzo non può essere ruotato inizialmente quando depone le uova in un primo, un giocatore è punito con almeno una caduta libera iterazione se rotazioni sono tenuti a mettere un pezzo di palo.
Questo probabilmente non colpisce i giocatori umani, a meno che in qualche modo: riconoscere il pezzo, premere i tasti di traduzione (a “sinistra„ oa “destra),„ premere il tasto “ruotare„ una o più volte, e premere il tasto “goccia,„ tutte in meno di 0.5 secondi a livello 1, o meno di 0.05 secondi a livello 10.