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 codul sursă (C# şi C++ versiuni) si programul ("exe");
4068277 octeţi
MD5: 4e957e0ead66064183e9f7e04e618ec0

2. Introducere

Acest articol descrie cum un computer poate juca clasic joc video Tetris de obtinerea de informatii cu privire la bord, determinarea bună de actiuni, iar efectuarea acestor acţiuni.
Acest articol include software capabile de a juca Tetris în timp real.
Produsul software include cele mai bune în timp real, Tetris-playing algoritm în domeniul public.
Acest articol defineşte regulile "standard" de "Tetris," pe baza unui caiet de sarcini, originale 1986 de pre-comerciale versiune de Tetris pentru calculator personal (PC).
În 2003, software-ul inclus în acest articol a fost folosit pentru a permite unui computer să joace Tetris execută pe un computer separat.
Un ordinare USB camera video a fost folosit pentru a permite computerului pentru a "vedea" ecranul de pe celălalt computer.
Un Releu de bord a fost controlată printr-o interfaţă RS-232 pentru a permite computerului să "apăsaţi tastele" de pe tastatură de celălalt computer.
Astfel, primul computer are o relaţie de la cel de-al doilea computer care este similar cu un jucător tipic umane relaţia cu un computer atunci când redaţi Tetris; jocul de stat este cunoscut doar de privirea de la ecran, precum şi acţiuni de jucator poate fi iniţiat numai printr-o tastatură .
De configurare în această demonstraţie a stabilit că un calculator poate juca Tetris mai bine decât un om, în condiţii normale în timp real Tetris joaca condiţii.

3. Istoria Tetris

În 1985, Alexey Pajitnov şi Dmitry Pavlovsky computerul au fost ingineri de la Computing Center of the Russian Academy of Sciences.
computer_center_russian_academy_of_sciences.jpg
Dorodnicyn Computing Centre a Russian Academy of Sciences
http://www.ccas.ru
Alexey şi Dmitry au fost interesate în dependenţă de vânzare în curs de dezvoltare şi de jocurile pe calculator.
Au testat mai multe jocuri diferite.
Alexey a fost inspirat de puzzle antice greco joc, Pentaminos, care a implicat amenajarea puzzle piesele făcute de cinci patrate.
Alexey crezut de ideea de a aranja piesele Pentamino în care acestea au scăzut în plan dreptunghiular la o cupă, dar dat seama ca cele douăsprezece diferite forme de cinci pătrate au fost prea complexe pentru un joc video.
Alexey trecut la utilizarea "tetramino" şapte piese, fiecare făcută de patru patrate.
În 1985.6, Alexey Pajitnov programată prima versiune de pe un Electronica 60 Tetris.
d_pavlovsky_and_a_pajitnov.jpg
Dmitry Pavlovsky, Alexey Pajitnov, şi Tetris.
În 1985-1986, Vadim Gerasimov, un 16 an vechi liceu computerul prodigy care a lucrat in cadrul Academiei, pentru punerea în aplicare Tetris IBM PC de MS-DOS rulează sistemul de operare.
(Vadim Gerasimov nu mai târziu de cercetare la MIT Media Laboratory, începând cu 1994, prin 2003, primesc un doctorat după finalizarea multe proiecte interesante: http://vadim.www.media.mit.edu)
original_tetris_splash_screen02.jpg
Introducerea ecran de 1987-1988 comerciale de pre-lansare de Tetris pentru PC
original_tetris_start_game02.jpg
Jocul juca ecran de 1987-1988 comerciale de pre-lansare de Tetris pentru PC
După 1987, Tetris răspândite pe tot globul.
The Tetris Company, LLC, deţine Tetris de patente.
www_tetris_com_site.jpg
The Tetris Company, LLC, site-ul de internet (ca aceasta a apărut în 2003).  http://www.tetris.com

4. Proiecte inspirat de Tetris

4.1 0-dimensionale Tetris

Nu a fost încă dezvoltat.

4.2 1-dimensional Tetris

Ziga Hajdukovic a dezvoltat 1-dimensional Tetris software care poate fi jucat într-un browser de Internet.
tetris_1d_ziga_hajdukovic.jpg
1-dimensional Tetris de Ziga Hajdukovic http://www.tetris1d.org
Ziga Hajdukovic-a dezvoltat de asemenea si 1-dimensional Tetris de software pentru telefoanele mobile folosind Java J2ME platforma.
(Instrucţiuni: http://www.tetris1d.org/mobile.php; WAP descărcare: http://www.tetris1d.org/wap)

4.3 2-dimensional Tetris

Toate variantele sunt Tetris convenţionale în această categorie.
Această secţiune cuprinde variante interesante.

4.3.1 Cel mai mare joc Tetris vreodată: Delft University of Technology (1995)

delft_univ_1995_2000sqmeters_tetris1.gif
Tetris jucat pe un imobil; 2000 m^2 suprafaţa; Delft University of Technology (1995)
delft_univ_1995_2000sqmeters_toveren.jpg
Tetris jucat pe un imobil; 2000 m^2 suprafaţa; Delft University of Technology (1995)

4.3.2 Un alt Tetris joc jucat pe o cladire: Brown University (2000)

brown_university_bastille_tetris_tetris_game_square.jpg
Tetris joc afişat folosind lumini în ferestre de la o clădire Brown University (2000.4-200.5) http://bastilleweb.techhouse.org
brown_university_bastille_tetris_woz_play.jpg
Steve Wozniak, cofounder de Apple Computers, joaca Tetris; Brown University (2000) http://bastilleweb.techhouse.org
"Cred că a fost doar cele mai incredibile, de o zi am putut imagina în viaţa mea.  Ca întotdeauna a spus Steve Jobs, călătoria este recompensa."
"Ea a făcut-mă credeţi că am de proiecte inapoi la colegiu.  Lucruri care au fost aproape undoable ca alte persoane să nu credeţi că de a face."
Steve Wozniak (2000)

4.3.3 Joc cu browser de Internet MIT "Green Building" imagine

tetris_vadim_green_building3.jpg
Vadim Gerisimov's browser de Internet Tetris
http://vadim.www.media.mit.edu/games/gbt.html
Acest browser de Internet Tetris variantă a fost creat de către Vadim Gerasimov.
Acest browser de Internet Tetris "Green" caracteristici de construire, la campusul din MIT.
Tetris Această variantă are doar nouă coloane în loc de standard de zece coloane.
Aceasta varianta de Tetris a prezentat noi piese cu orientări aleatoare.
Vadim Gerasimov este persoana care a scris de cod de computer pentru PC versiune de Tetris în 1986.
Vadim Gerasimov făcut doctoratul de cercetare la MIT Media Laboratory în timpul 1994-2003, de lucru cu privire la multe proiecte interesante.

4.3.4 PIC16F84 12 MHz microcontroler bazate pe NTSC / PAL joc video Tetris

tetris_pic_television_screen.jpg
PIC16F84 12 MHz microcontroler bazate pe NTSC / PAL joc video Tetris
http://www.pablin.com.ar/electron/circuito/mc/tetris
Imaginea de mai sus arată NTSC / PAL ieşire video produse de o PIC16F84 12 MHz microcontroler care rulează software-ul scris de Rickard Gunee în 1998.
De semnal video este generat de un software de control de iesiri digitale.
Alte proiecte PIC: http://etronics.free.fr/liens5.htm

4.3.5 "Scopetris" osciloscop Tetris de Lars Pontoppidan (2007.8)

scopetris_lars_pontoppidan_2007_aug.jpg
"Scopetris" osciloscop Tetris de Lars Pontoppidan (2007.8)
http://pontoppidan.info/lars/index.php?proj=scopetris
Lars Pontoppidan a scris codul pentru microcontroler AtMega32, adaugă şi simplu analogic circuitry, pentru a crea o versiune Tetris, care ar putea fi redat pe un osciloscop.
Anumite registre ale AtMega32 microcontroler de control cu 8 biţi de ieşire semnale, şi, atunci când a trecut printr-o rezistenţă electrică de circuit "R-2R" pentru digital-analogic (D/A) conversie, semnale analogice, rezultă posibilitatea de a controla (x,y) coordonate de un osciloscop grinda (atunci când este osciloscop pentru a stabili "modul de X-Y)."
YouTube video:
http://www.youtube.com/watch?v=Hui5Azx5jQo
FLV video:
scopetris_lars_pontoppidan_2007_aug.flv

4.3.6 Tetris Obfuscated cod: C / Unix

Următoarele au fost acordate "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);}
Referinţă: http://homepages.cwi.nl/~tromp/tetris.html

4.3.7 Tetris Obfuscated cod: Perl cod

Următoarele este Tetris pentru Perl interpret: Perltris (versiunea 20050717) de către 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;
Referinţă: http://www.seanadams.com/perltris

4.3.8 Mozilla SVG Tetris

Scalable Vector Graphics (SVG) este un standard de descriere a obiectelor grafice, folosind XML.
tetris_svg_640x480.gif
Mozilla SVG Tetris: Tetris implementat folosind o descriere Scalable Vector Graphics (SVG)
http://www.croczilla.com/svg/samples/svgtetris/svgtetris.svg
Alte exemple de SVG: http://www.croczilla.com/svg/samples

4.3.9 Google "widget" Tetris

Google, Yahoo!, şi Microsoft, şi alte companii, au promovat in miniatura de software bazate pe Internet numit "widgets" care sunt caracterizate de obicei de unele utilizarea dinamică a datelor disponibile pe Internet.
Un astfel de widget disponibile prin intermediul Google este un joc Tetris.
Următorul exemplu este dragut, dar cu forme roti în enervante moduri:
tetris_google_widget.gif
Google "widget" Tetris
http://www.playbie.com/Game.aspx?gm=1&wt=2&su=live.com&sn=Google&gn=Google
Alte Google widgets:
http://www.google.com/ig/directory?synd=open

4.3.10 MIT de cercetare hârtie: "Tetris is Hard, Even to Approximate" (2002)

Următoarele cercetare documentul conţine o dovadă că un anumit fel de Tetris varianta este "NP-completă."
http://theory.csail.mit.edu/~edemaine/papers/Tetris_TR2002
Erik D.  Demaine, Susan Hohenberger, şi David Liben-Nowell, "Tetris is Hard, Even to Approximate", Technical Report MIT-LCS-TR-865, Massachusetts Institute of Technology, 2002.10.21.
Local-o copie în cache (PDF): tetris_theory_mit_lcs_tr_865_0210020.pdf
"NP-completă" este o clasificare a costurilor în timp şi spaţiu de cost al unui algoritm.
Alte clasificări includ "P" şi "NP".
O clasificare a "NP-completă" implică faptul că, pentru probleme mai mari decât unele de dimensiuni mici, algoritm este puţin probabil să găsească o soluţie dorită de practică într-o perioadă de timp sau spatiu.

4.3.11 Cercetare document: "Applying reinforcement learning to Tetris"

Următoarele hârtie, publicat 2005.5.30, Donald Carr de la Departamentul de Informatică, la Rhodes University, Africa de Sud, prezinta cererea de "armare de învăţare" pentru a Tetris.
ApplyingReinforcementLearningToTetris_DonaldCarr_RU_AC_ZA.pdf

4.3.12 Tetris Fusta (2007.11)

tetris_skirt.jpg
Tetris Fusta (2007.11)
Tetris de fusta a fost creat de către "Lucy" ("hissyfitoly" pe etsy.com) înainte de 2007.11.
De la creatorul's descriere a diafragmei (oferite spre vânzare pe 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 comentarii referitoare la acest fusta:
"Omul care sucks la fusta Tetris"
"Ahahahaha, m-am gândit la acelaşi lucru."
"Există o linie completa jos în partea de jos, completat de linii ...  dispar."  "FACE PESTE" "."
"Nu ar trebui să fie un loc in spatele sau fata de lungă în cazul în care piesa ar potrivi perfect ..."
"E chiar urât fusta, totuşi.  Prietenul meu nu a putut-mi cumpar destul de ciocolată şi flori pentru a ma convinge sa poarte un lucru."

4.3.13 Tetris etapa actul (2007.4)

tetris_stage_act.jpg
Tetris etapa actul (2007.4)
http://www.youtube.com/watch?v=sZrs8ZCO8xM
"De la cele care au adus vă Triforce în 2006 ...  Comes următoarea generaţie de obiect inanimate Skit ...  Tetris."
Local-cache Flash video în format video (FLV) (utilizaţi pentru a juca VLC):
tetris_stage_act.flv

4.3.14 Hilar Tetris variaţii pe un show de televiziune japonez

tetris_funny_variations_japanese_tv.jpg
Tetris variaţii pe show de televiziune japonez
http://www.youtube.com/watch?v=SYRLTF71Sow
Acest video de la un segment de show de televiziune japonez include hilar variaţii de Tetris, inclusiv:
piese care vanish la debarcare, o piesa care umple o întreagă rând (astfel finalizarea, la un rând de destinaţie), mai multe piese care se încadrează în acelaşi timp, ocazional în formă de bucăţi, o bucată lungă că este puţin prea largă pentru a se potrivi într-un GAP (prevenire a 4-rând finalizarea!), Mario apăsarea de ciuperci şi de a deveni un enorm şi pe moarte!, mici piese rămăşiţe rămase după rânduri sunt distruse, piese de luare in sus gravitatea float la început, etc
Local-cache Flash video în format video (FLV) (utilizaţi pentru a juca VLC):
tetris_funny_variations_japanese_tv.flv

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

tetris_with_human_blocks_guillaume_reymond_2007nov.jpg
"The Original Human TETRIS Performance by Guillaume Reymond" (2007.11)
http://www.youtube.com/watch?v=G0LtUX_6IXY
Din descrierea pe YouTube:
"TETRIS jucat de-fiinţe umane reale de zi într-un auditorium:"
TETRIS este a 4-video de executare a GAME OVER Project, regizat de Guillaume REYMOND artist elveţian (NOTsoNOISY agentie de creatie).
Acest stop-motion video a fost împuşcat şi a jucat pentru "LES URBAINES" festivalului http://www.urbaines.ch la Palais de Rumine (Lausanne, Elvetia), pe November 24th 2007.
Puteţi găsi mai multe informaţii şi, de asemenea, SPACE INVADERS, PONG şi POLE POSITION pe site-ul nostru http://www.notsonoisy.com/gameover
Local-cache Flash video în format video (FLV) (utilizaţi pentru a juca VLC):
tetris_with_human_blocks_guillaume_reymond_2007nov.flv

4.3.16 2.5-dimensional Tetris

Termenul de "2.5-dimensional" este folosit aici pentru a înţelege un non-orthogonal vederea unei bidimensional versiune de Tetris, cu unele grosime în cea de-a treia dimensiune.
tetris_2andhalfd_andre_michelle.jpg
Andre Michelle's Tetris joc pentru o Flash player http://lab.andre-michelle.com
(Găsiţi pe link-ul de "tetris3d" în "F7: GAMES".)

4.4 3-dimensional Tetris

tetris_3d_gno3dtet_seb.jpg
Versiune Linux / GTK
Tri-dimensional Tetris, sub forma unui aplet pentru Internet Java browsere:
http://paperstack.com/brokout
Tri-dimensional Tetris pentru Windows sistem de operare:
http://www.sfu.ca/~vwchu/3dtetris.html

4.5 4-dimensional Tetris

4d_tetris.jpg
Greg Kaiser's "HyperTetris" (1996): un 4-dimensional Tetris
În [1996], [...], Greg Kaiser pus impreuna o perioada de patru-dimensionale pe varianta clasica de joc.
Utilizarea IrisGL (a.k.a.  igl) el a creat un grup de lucru, dacă este greu să joace, joc, utilizând patru ecrane pentru a depict tri-dimensională de diferite aspecte ale intregului joc-spatiu.
[Pentru că] nu există un uşor [inteligibile] modalitate de a atrage obiecte de patru-D pe o perioada de doi-D ecran, cele patru sub-punctele de vedere sunt o metodă practică de a manipula si vizualiza rotaţie şi de traduceri de piese prin cele patru dimensiuni ( în jocul numit x,y,z,w).
Decât completarea linii de blocuri ca în original, în acest caz, obiectivul este de a umple un cub în x,y,z subview (de obicei 4 de 4 de 4).
Celelalte subviews care conţin "w" dimensiune sunt aranjate în mod implicit 4 de 4 până la 10 bloc aranjament cu "w" fiind lung, "vertical" dimensiune în toate cele trei cazuri, cu diferite baze de (x,y), (x,z), (y,z).
Gravity acţionează în direcţia "-w", astfel de piese se încadrează "în" cele trei lung subviews care includ "w", şi nu se muta cu excepţia cazului în care controlul de către jucător în ultimele (x,y,z) subview.
Este nevoie de awhile folosit pentru a ajunge la, să zicem cel mai puţin.
Dacă unele miracol de răbdare sau de schimbare a parametrilor de joc, o face complet, un cub, va dispărea ca şi completat cote, în original Tetris, deşi nu Scorul este păstrat în HyperTetris.
Benjamin Bernard (2000)
http://archive.ncsa.uiuc.edu/Classes/MATH198/bernard/oldIndex.html

4.6 N-dimensional Tetris

polytope_tetris_screenshot3.jpg
Polytope Tetris (2003): o N-dimensional Tetris joc varianta
http://polytopetetris.sourceforge.net
Polytope Tetris este n-dimensionally Tetris.
Inspirat de HyperTetris program, Polytope Tetris va permite sa joace Tetris de tone, în orice NUMĂRUL DE dimensiune.
Joaca Tetris în 3D, 4D, 5D, sau mai mult.
HyperTetris este un nume de catchier mult decât Polytope (def) Tetris, dar eu nu pot fura numele.
http://polytopetetris.sourceforge.net

5. "Standard Tetris" caiet de sarcini

5.1 Introducere

Definiţia din "Standardul Tetris" idealizate este un model din cele mai importante caracteristici şi comportamente de prima punere în aplicare a IBM-PC Tetris joc (circa 1986-1988).
Idealizate de model se bazează pe inferring aparentă a intenţiilor de dezvoltatorii de la primul IBM-PC punerea în aplicare a jocului Tetris.
De exemplu, se pare că este rezonabil să se Inferred că dezvoltatorii de prima punere în aplicare a IBM-PC Tetris Joc destinate pentru a selecta forma de fiecare nouă piesă care se încadrează "la întâmplare," şi că utilizarea de Borland C punerea în aplicare a rand() funcţie a fost doar o practică de apropiere intenţia.
Definiţia din "Standardul Tetris" specifică faptul că forma nouă care se încadrează fiecare bucată este de a fi selectate "aleator."
Acest ideal de comportament nu poate fi atins prin orice punere în aplicare, dar implementările poate aproximative ideal comportament.
Deşi nu poate aplicare perfect punerea în aplicare a definiţiei "standard Tetris," idealurile "Standard Tetris" obiectiv implică caracteristici, aplicaţii şi pot fi comparate în funcţie de apropierea de relativă idealurile "Standard Tetris."
Această secţiune descrie un set de elemente, comportamente şi reguli, care, colectiv, să definească "Standard Tetris."

5.2 Standard Tetris bord

Consiliul este o grilă de celule, avand 10 de coloane, şi 20 de rânduri, pentru un total de 10 * 20 = 200 celule.
tetris_diagram_board_10x20_empty_new.jpg
Standard Tetris bord (10 coloane, 20 rânduri)
Fiecare celulă poate fi unoccupied (gol) sau ocupat (plin).

5.3 Standard piese Tetris

Există şapte (7) standard Tetris de bucăţi, literă cu următorul nume:
{ O, I, S, Z, L, J, T }
Scrisoarea nume sunt inspirate de forme de piese.
tetris_diagram_pieces_orientations_new.jpg
Cele şapte Standard Tetris de piese şi "orientările" lor
De la dot (0,0) coincide cu poziţia (6,20) bord în momentul în care piesa apare pentru prima dată.
Prima coloană arată iniţial "orientări."
În cele ce urmează, "orientare" cuvânt este folosit pentru a descrie orice stat dintr-o bucată, în termen de un set de permise de state, care pot rezulta dintr-o rotaţie counterclockwise eveniment.
Schimbarea "orientarii" de la o anumită "orientare" a unei "I, S," sau "Z" bucata, necesită o combinaţie de rotaţie şi de o traducere.
De aceea, cuvântul "orientare" este folosit aici pentru a însemna ceva mai mult de rotatie in pace.
Cu toate acestea, "orientarea" poate schimba doar ca răspuns la un eveniment counterclockwise de rotaţie, şi ciclul de "orientări" distincte pentru fiecare piesa apropie, sau meciuri, rezultate din ciclul de rotaţii pure.
Specială de utilizare a cuvântul "orientare," în acest context, este aproape echivalentă cu sensul de "rotaţie" cuvântul sau "cu unghi," dar cuvântul "orientare" este folosit în loc de "rotatie" la încercarea de a aduce atenţia asupra faptului că unele piese necesită mai mult de rotatie pentru a produce set de permise membre care decurg din counterclockwise "de rotaţie a" evenimentelor.
Piesele pot trece doar orientări (sau supuse unui anumit orizontale sau verticale de traducere) în cazul în care rezultă din bucata de stat nu vor avea nici o ocupate (full) dincolo de zona de celule de la bord şi nici nu ar fi ocupat de celule care se suprapun peste nici în prezent ocupate de celule de la bord.
(În această regulă, ocupat (complet) bucată de celule nu sunt considerate ca parte "în prezent" din "celulele ocupate de bord"
În următoarele comentarii, orice referire la o urmare a unui eveniment counterclockwise de rotaţie se face cu presupunerea că o astfel de rotaţie poate fi efectiv realizate, având în vedere condiţiile existente de piese si tabla.
De "O" (caseta) piesa are doar o singură orientare, si nu se schimba locaţiile de orice de la ocupate (full) de celule ca răspuns la orice eveniment counterclockwise de rotaţie.
De "I" (linie) piesa are două orientări posibile, apare într-o orientare orizontala.
"I" bucata de supleanţi între cele două orientări, ca răspuns la evenimente succesive counterclockwise de rotaţie.
De "S" şi "Z" piese au fiecare două posibile orientări.
Aceste piese de fiecare membru supleant între două orientări în răspuns la counterclockwise succesive de rotaţie a evenimentelor.
De "L", "J", şi "T" piese au fiecare patru orientări posibile, iar aceste orientări sunt rezultatele simplu rotaţii despre centrul de puncte de pe forme.
Atunci când apare pentru prima dată o bucată de pe bord, piesa a "axei" sale "importante" într-o orientare orizontală, iar piesa este în partea de sus a tablei de joc.
Prin urmare, nu sunt piese de iniţial, capabile de a avea orientari lor a fost schimbat.  De piese trebuie să coborâm de către un rând de a avea posibilitatea de a avea sale de orientare a fost schimbat.
Odată ce o bucata a scăzut cu un rând de pe tablã, toate orientările piesa poate fi atins (asumându-şi piesa nu este prea aproape de ziduri sau reacţii la curent gramada de piese).

5.4 Standard Tetris flowchart

Următorul este un flowchart aproximative pentru un standard Tetris joc.
standard_tetris_flowchart_for_timer_event_001.gif
Aproximativ flowchart pentru un joc standard Tetris
standard_tetris_flowchart_for_input_events_001.gif
Aproximativ flowchart pentru un joc standard Tetris

5.5 Standard Tetris bucata crearea

Următoarea diagramă arată (4 celule * 2 celule) regiune cu privire la bord în cazul în care toate piesele apărea atunci când a creat.
tetris_diagram_board_10x20_spawn_area.jpg
Regiunea unde apar piese atunci când a creat în standardul Tetris
Atunci când o nouă piesă apare pentru prima dată pe bord, originea acestuia coincide cu punctul de pe această diagramă, iar piesa va fi complet cuprinse de zona umbrită de pe acest diagrama.
Când este un joc nou inceput, un complet de free-toamna întârziere elapses, şi pe primul-gratuit toamna iteration spawned este o bucata din partea de sus a tablei de joc.
În timpul normal de joc joaca, atunci când un anumit liber-toamna iteration "terenuri-o" bucată, un complet de free-toamna întârziere elapses şi pe lângă liber-toamna iteration spawned este o bucata din partea de sus a tablei de joc.
Când o bucată este spawned, tipul de piesă este selectat utilizând următorul algoritm:
pieceIndex = 1 + (randomInteger % 7);  // 1..7
Pentru că există o constantă p (= 1/7) şansa de a selecta un anumit tip de piesa, si toate piesele de acelasi tip sunt indistinguishable, probabilitatea de a avea exact k piese de un anumit tip de teste de n după ce urmează un Binomial de distribuţie:
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 )
Când vom alege din rândul 7 (şapte) piese, la întâmplare, probabilitatea de a avea o anumită piesă este p=(1/7).
Dacă vom face acest lucru n=70 ori, de exemplu, probabilitatea de a avea exact k piese (cu k în intervalul 0 la n) este dat de binomial de distribuţie, aşa cum se arată în următoarea imagine.
binomial_distribution_n70_p7th.jpg
Binomial de distribuţie pentru n=70, p=(1/7)
Astfel, se poate anticipa o medie totală de piese de un singur tip de dat un număr total de piese aleatoare, şi se poate calcula de asemenea, varianta de aşteptat şi deviaţii standard (rădăcina pătrată de variabilitate):
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
Când vom converti o valoare aleatoare la o bucata index, va interpreta aceasta, după cum urmează:
value  piece
=====  =====
  1     "O"
  2     "I"
  3     "S"
  4     "Z"
  5     "L"
  6     "J"
  7     "T"
[De pre-comerciale MS-DOS versiune de Tetris folosit aleatoare număr funcţia oferite de Borland Pascal compilator.
Asta a utilizat o funcţie pe 32 de biţi variabilă de stat.
Prin urmare, secvenţă de numere aleatoare, a fost limitat la 2^32 distincte de valori.
De aceea, în principiu, un jucator ar putea descoperi, după ce îţi poate 10 de bucăţi, în loc exact în 2^32 set de numere corespunzătoare pentru starea actuală a jocului.
Dacă Tetris simulări sunt executate cu fix 2^32 succesiune de piese, apoi optime de decizii pot fi găsite pentru fiecare loc, în secvenţa.
(Nu par a fi suficiente oportunitati de a fi de bord la un bord complet gol de stat, permitandu-ne pentru a primi sincronizate cu precomputed soluţie optimă cale.)
Riscul de a folosi un număr aleatoriu simplu într-un generator de simulare destinate pentru a găsi o soluţie optimă pentru o problemă este că soluţia optimă va fi doar pentru o anumită problemă cale prin spatiu selectate de simplu aleatoare, generator de număr.  ]

5.6 Standard Tetris de control

În timpul jocului juca, sunt disponibile următoarele intrări:
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
Toate intrările în vigoare la marginea de creştere-pozitive de intrare (pe butonul de presa, ca spre deosebire de butonul de eliberare).
Când apare un buton de presa, acest lucru contează ca o cerere.
Deţine un buton jos dincolo de un anumit timp ar putea duce la "auto-repeat" facilitate de o tastatură, a apăsat butonul de generare de noi - dar această facilitate este externe ale motorului de joc.
Factorilor de producţie specificate mai sus, conforme cu originalul Tetris joc.
Rotire cererile pot fi executate dacă nu există nici o suprapunere între dorit de orientare şi de celule stabilite cu privire la bord (cu exceptia celor care se încadrează la bucată), şi în cazul în care nu a dorit de orientare a celulelor stabilite în afara zonei de bord.
Traduceţi cererile pot fi executate dacă nu există nici o suprapunere între dorit tradus şi setaţi configuraţia curentă a celulelor de pe bord (cu exceptia celor care se încadrează la bucată), şi în cazul în care doriţi tradus de configurare nu are nici un set de celule din afara zonei de bord.
Cererile de intrare sunt procesate cu o latenţă care depinde de rata de cadre ale jocului (de exemplu: 75 Hz), cererile şi să aibă efect (dacă este valabilă) instantaneu.
O piesă poate fi abandonat fără nici o linie care se încadrează paşi care au loc.
O piesă poate fi tradus de mai multe ori la stânga sau la dreapta, şi a scăzut ulterior, toate fără întâmpină o linie care se încadrează pas.
Pentru ca un nou spawned piesa nu poate fi rotit, eventual, (pentru că este blocat împotriva început marginea tablei de joc), jucatorul trebuie să accepte cel puţin o piesă care se încadrează pas rotaţii, dacă sunt necesare sau de dorit.
Efectul pe de scor este nesemnificativă.

5.7 Standard Tetris bucata "de destinaţie"

Dacă o piesă este pur şi simplu care se încadrează, care aparţine de un singur rând fiecare bucată care se încadrează în timpul iteration.
Nu va fi o iteration că ea se mută de la un loc cu nici un contact cu suprafete orizontale la un loc care are contact cu suprafete orizontale.  După ce se produce acest iterations, piesele sunt în repaus de contact.
Dacă o iteration incepe cu o bucata de repaus în contact cu o suprafata orizontala, piese de "terenuri," şi devine o parte din gramada statice.

5.8 Standard Tetris "linii de completat"

Un rând este completat de un rând de ansamblu în care toate celulele sunt ocupate.  Atunci când un rând este completat eliminate de la gramada, şi rândurile de mai sus sunt eliminate rând mutat de pe un rând pentru a elimina decalajul, acest lucru contează ca o "linie de" completat.
Când o bucată a terenurilor el devine o parte din gramada.
Imediat după ce piesa a terenurilor, de ansamblu este verificat pentru completat rânduri, şi completat toate rândurile sunt eliminate.
Până la patru rânduri să poată fi încheiat în acelaşi timp.
Următorul tabel oferă limita superioară pe linii încheiat în acelaşi timp de către o singură bucată:
piece   max. simultaneous
         rows completed
=====   ==================
 "O"           2
 "I"           4
 "S"           2
 "Z"           2
 "L"           3
 "J"           3
 "T"           2

5.9 Tetris "nivelurile" standard

Standard 10 Tetris are nivele de dificultate, numerotate de 1 (o) prin 10 (zece), cu nivel de 1 fiind "cel mai puţin dificilă."
Nivelul indicelui este de maxim două valori:
actualLevel = max( initialLevel, earnedLevel );
initialLevel de valoare este nivelul care jucatorul selecteaza atunci când porniţi un joc nou.
Modelul de nivel, în funcţie de liniile de completat este uşor de observat în pre-comerciale MS-DOS versiune de 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
Astfel, earnedLevel valoare este calculat în conformitate cu următorul algoritm:
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 care se încadrează iteration întârziere

Tetris standard are o întârziere în timp real între succesive de toamna-line gratuit iterations că este o funcţie de actualul nivel de dificultate.
Următoarele relaţie între nivelul indicelui şi care se încadrează iteration întârziere se bazează pe măsurători repetate Cronometru, la toate nivelurile de pre-comerciale MS-DOS versiune de 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
Astfel, vom stabili următoarea formulă pentru iteration întârziere valoare, în funcţie de nivelul real Index:
iterationDelay = ((11 - actualLevel) * 0.05);  // [seconds]
În cazul în care consiliul este gol, şi nu există nici un utilizator de intrare, o bucată spawned la nivelul real 1 terenurilor în aproximativ 10 secunde, si o bucata spawned la nivelul real 10 terenurilor în aproximativ două 1.

5.11 Standard "Scorul" Tetris

Standard Tetris doar premii de puncte pentru a actului de debarcare o bucată.
Nu sunt acordate puncte pentru completarea act de o singură linie, completarea sau două, trei sau patru linii simultan.
[Notă: Unele variante de atribuire Tetris puncte pentru completarea act de linii, cu o creştere exponenţial bun pentru un număr tot mai mare de simultan, completat de linii.
Astfel, strategia pentru maximizarea scorul în astfel de variante de Tetris implică înfiinţarea de şanse pentru a "obţine o Tetris," argou pentru utilizarea "I" forma de a obtine patru linii simultane şi o mulţime de puncte de achiziţie.  ]
Dacă aveţi un gol bord, şi veţi permite un nu-"I" face o bucată de liber se încadrează şi teren, sau dacă o picătură imediat ne-"I" bucata, aveţi posibilitatea să stabilească următoarele punct folosind diagrama de pre-comerciale MS-DOS versiune de 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" piese de toamna-un total de 18 rânduri.
Acest punct de conturi pentru diferenţa între libera-toamna si instant-drop cazuri.
Prin experimente intermediare cazuri, este usor de Inferred următorul punct formulă:
pointAward = ( (21 + (3 * actualLevel)) - freeFallIterations );
Notaţi faptul că această formulă nu are nimic de a face cu o bucata de distanta cade!
Este strict o funcţie de nivelul real, şi o penalizare pentru numărul de iterations o bucată este permis să se încadreze liber.
Acest punish un utilizator pentru a avea nevoie de timp să se gândească.
De asemenea, reţineţi că în cazul în care o piesă in