Tetris
Colin Fahey
1. Software
2. Inleiding
Dit artikel beschrijft hoe een computer kunt spelen de klassieke videospel Tetris door krijgen informatie over het bestuur, het bepalen van goede acties, en de uitvoering van deze acties.
Dit artikel bevat software die in staat is tot het spelen van Tetris in real time.
De software bevat de beste real-time Tetris-algoritme spelen in het publieke domein.
In dit artikel worden de regels voor „Standard Tetris,“ een specificatie gebaseerd op de originele 1986 pre-commerciële versie van Tetris voor de Personal Computer (PC).
In 2003, de software opgenomen in dit artikel werd gebruikt om een computer te spelen Tetris draaien op een aparte computer.
Een gewone USB video camera werd gebruikt om de computer te „zien“ op het scherm van de andere computer.
Een relais boord werd gecontroleerd via een RS-232 interface om de computer te „drukken toetsen“ op het toetsenbord van de andere computer.
Zo, de eerste computer heeft een relatie met de tweede computer die vergelijkbaar is met een typisch menselijke speler relatie tot een computer bij het afspelen van Tetris, het spel staat is alleen bekend door te kijken naar het scherm, en de speler acties kunnen alleen worden gestart door een toetsenbord .
De configuratie in deze demonstratie vastgesteld dat een computer kunt spelen Tetris beter dan een mens, onder normale real-time Tetris spelen.
3. Geschiedenis van Tetris
In 1985, Alexey Pajitnov en Dmitry Pavlovsky zijn computer ingenieurs van de Computing Center of the Russian Academy of Sciences.

Dorodnicyn Computing Centre van de Russian Academy of Sciences
Alexey en Dmitry geïnteresseerd waren in het ontwikkelen en verkopen van verslavende computerspelletjes.
Zij getest op een aantal verschillende spellen.
Alexey is geïnspireerd op de oude Griekse puzzelspel, Pentaminos, die betrokken zijn bemiddeling puzzel stukjes gemaakt van vijf pleinen.
Alexey denken van het idee van het organiseren van Pentamino stukken omdat ze in een rechthoekige kop, maar realiseerde zich dat de twaalf verschillende vijf vierkante vormen zijn te ingewikkeld voor een video game.
Alexey overgeschakeld op het gebruik van zeven „tetramino“ stuks, elk gemaakt van vier pleinen.
In 1985.6, Alexey Pajitnov geprogrammeerd de eerste versie van Tetris op een Electronica 60.

Dmitry Pavlovsky, Alexey Pajitnov, en Tetris.
In 1985-1986, Vadim Gerasimov, een 16-jarige high-school computer Prodigy die werkte aan de academie, uitgevoerd Tetris voor de IBM PC draait de MS-DOS besturingssysteem.
(Vadim Gerasimov later deed onderzoek op het MIT Media Laboratory, van 1994 tot 2003, het ontvangen van een Ph.D. na voltooiing van tal van interessante projecten:
http://vadim.www.media.mit.edu)

De invoering van het scherm 1987-1988 pre-commerciële versie van Tetris voor de PC

Het spel spelen scherm van de 1987-1988 pre-commerciële versie van Tetris voor de PC
Na 1987, Tetris verspreid over de hele wereld.
The Tetris Company, LLC, is eigenaar van het handelsmerk Tetris.
4. Projecten geïnspireerd door Tetris
4.1 0-dimensionale Tetris
Nog niet ontwikkeld.
4.2 1-dimensionale Tetris
Ziga Hajdukovic heeft ontwikkeld 1-dimensionale Tetris software die kunnen worden afgespeeld op een Internet-browser.
Ziga Hajdukovic heeft ook 1-dimensionaal Tetris software voor mobiele telefoons met behulp van de Java J2ME platform.
4.3 2-dimensionale Tetris
Alle klassieke Tetris-varianten zijn in deze categorie.
In deze sectie wordt het interessant varianten.
4.3.1 Grootste Tetris game ooit: Delft University of Technology (1995)

Tetris gespeeld op een gebouw; 2000 m^2 oppervlakte; Delft University of Technology (1995)

Tetris gespeeld op een gebouw; 2000 m^2 oppervlakte; Delft University of Technology (1995)
4.3.2 Een ander Tetris-spel gespeeld op een gebouw: Brown University (2000)

Tetris game weergegeven met behulp van de verlichting in de ramen van een gebouw op Brown University (2000.4-200.5) http://bastilleweb.techhouse.org
„Ik vind het alleen maar de meest indrukwekkende van een dag dat ik kon denken in mijn leven. Net als Steve Jobs altijd gezegd, de reis is de beloning.“
„Het deed me denken aan projecten die we nog terug op de universiteit. Dingen die zich vrijwel ongedaan worden gemaakt dat andere mensen niet zou doen denken.“
Steve Wozniak (2000)
4.3.3 Internet browser spel met MIT „Green Building“ afbeelding

Vadim Gerisimov's internet browser Tetris
Deze webbrowser Tetris variant is gemaakt door Vadim Gerasimov.
Deze webbrowser Tetris functies „Green“ het gebouw op de campus van MIT.
Dit Tetris variant heeft slechts negen kolommen in plaats van de standaard tien kolommen.
Dit Tetris variant presenteert nieuwe stukken met een willekeurige richting.
Vadim Gerasimov is de persoon die schreef de computer code voor de PC versie van Tetris in 1986.
Vadim Gerasimov heeft Ph.D. onderzoek op het MIT Media Laboratory tijdens 1994-2003, werkt op vele interessante projecten.
4.3.4 PIC16F84 12 MHz microcontroller-based NTSC / PAL video Tetris game

PIC16F84 12 MHz microcontroller-based NTSC / PAL video Tetris game
De afbeelding boven toont de video-uitgang NTSC / PAL geproduceerd door een PIC16F84 12 MHz microcontroller draait software geschreven door Rickard Gunee in 1998.
De video-signaal wordt gegenereerd door software controle van de digitale uitgangen.
4.3.5 „Scopetris“ oscilloscoop Tetris door Lars Pontoppidan (2007.8)

„Scopetris“ oscilloscoop Tetris door Lars Pontoppidan (2007.8)
Lars Pontoppidan schreef code voor de AtMega32 microcontroller, en de toegevoegde eenvoudige analoge schakelingen, voor het maken van een Tetris versie die kunnen worden afgespeeld op een oscilloscoop.
Sommige registers van de AtMega32 microcontroller controle 8-bit output-signalen, en, wanneer door een „R-2R“ elektrische weerstand circuit voor de digitaal-naar-analoog conversie (D/A), de daaruit analoge signalen kunt de (x,y) coördinaten van een oscilloscoop balk (wanneer de oscilloscoop is ingesteld op „X-Y modus).“
YouTube video:
FLV video:
4.3.6 Obfuscated code Tetris: C / Unix
Het volgende werd toegekend „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 Obfuscated code Tetris: Perl code
Het volgende is Tetris voor de Perl tolk: Perltris (versie 20050717) door 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) is een standaard voor het beschrijven van grafische objecten met behulp van XML.

Mozilla SVG Tetris: Tetris uitgevoerd met behulp van een beschrijving Scalable Vector Graphics (SVG)
4.3.9 Google „widget“ Tetris
Google, Yahoo!, en Microsoft, en andere bedrijven, hebben bevorderd miniatuur op internet gebaseerde software genaamd „widgets“ dat zijn doorgaans gekenmerkt door enkele gebruik van de dynamische gegevens die beschikbaar zijn op het internet.
Een van die widget beschikbaar via Google is een spel Tetris.
Het volgende voorbeeld is schattig, maar de vormen draaien in vervelende manieren:

Google „widget“ Tetris
Andere Google widgets:
4.3.10 MIT onderzoek papier: „Tetris is Hard, Even to Approximate“ (2002)
Het volgende onderzoek document bevat een bewijs dat een bepaald soort Tetris variant is „NP-compleet.“
Erik D. Demaine, Susan Hohenberger, en David Liben-Nowell, „Tetris is Hard, Even to Approximate“, Technical Report MIT-LCS-TR-865, Massachusetts Institute of Technology, 2002.10.21.
„NP-compleet“ is een indeling van de kosten tijd en ruimte kosten van een algoritme.
Andere indelingen behoren „P“ en „NP“.
Een indeling van „NP-complete“ impliceert dat, voor de problemen groter zijn dan enkele kleine omvang is het algoritme is het onwaarschijnlijk dat het vinden van een gewenste oplossing in een concreet bedrag van tijd of ruimte.
4.3.11 Onderzoek document: „Applying reinforcement learning to Tetris“
De volgende papier, gepubliceerd 2005.5.30, door Donald Carr op het Computer Science-afdeling van het Rhodes University, Zuid-Afrika, presenteert de toepassing van „reinforcement leren“ om Tetris.
4.3.12 Tetris rok (2007.11)

Tetris rok (2007.11)
Tetris De rok is gemaakt door „Lucy“ („hissyfitoly“ op etsy.com) vóór 2007.11.
Van de maker van de beschrijving van de rok (te koop aangeboden op 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 opmerkingen over deze rok:
„Een man die rok zuigt op Tetris“
„Ahahahaha, ik dacht dat het hetzelfde.“
„Er is een complete lijn vast aan de onderkant ... afgesloten lijnen verdwijnen.“ „DOEN OVER“ „.“
„Er moet een plek in de rug of de voorzijde waar lange stuk zou perfect passen ...“
„Dat is echt een heel lelijke rok al is. Mijn vriendje niet kon kopen mij genoeg chocolade en bloemen te overtuigen mij om te dragen dat ding.“
4.3.13 Tetris stadium treden (2007.4)

Tetris stadium treden (2007.4)
„Van degenen die geleid heeft u de Triforce in 2006 ... Komt de volgende generatie van levenloze object skit ... Tetris.“
Lokaal-cachegeheugen video in Flash video (FLV)-formaat (gebruik VLC te spelen):
4.3.14 Hilarious Tetris variaties op een Japanse tv-show

Tetris varianten op Japanse tv-show
Deze video segment van een Japanse tv-show bevat hilarische varianten van Tetris, waaronder:
stukken die verdwijnen bij de landing, een stuk dat vult een hele rij (dus de voltooiing van een rij bij de landing), meerdere stuks tegelijk vallen, onregelmatig gevormde stukken, een lang stuk dat is iets te groot om te passen in een kloof (het voorkomen van een 4-rij voltooiing!), Mario raken een paddestoel en steeds enorm en sterven!, klein stukje van brokstukken die resteren na rijen worden vernietigd, stijgende ernst maken van stukken vlotter naar de top, enz.
Lokaal-cachegeheugen video in Flash video (FLV)-formaat (gebruik VLC te spelen):
4.3.15 „The Original Human TETRIS Performance by Guillaume Reymond“ (2007.11)

„The Original Human TETRIS Performance by Guillaume Reymond“ (2007.11)
Uit de beschrijving van YouTube:
„TETRIS gespeeld door echte menselijke wezens-vergadering in een auditorium:“
TETRIS is de 4e video prestaties van de GAME OVER Project, geregisseerd door de Zwitserse kunstenaar Guillaume REYMOND (NOTsoNOISY creatief bureau).
Deze stop-motion video werd neergeschoten en speelde voor „LES URBAINES“ festival
http://www.urbaines.ch op het Palais de Rumine (Lausanne, Zwitserland) op November 24th 2007.
Lokaal-cachegeheugen video in Flash video (FLV)-formaat (gebruik VLC te spelen):
4.3.16 2.5-dimensionale Tetris
De term „2.5-dimensionale“ wordt hier verstaan een niet-orthogonale oog van een twee-dimensionale versie van Tetris, met enkele dikte in de derde dimensie.
(Zoek de link „tetris3d“ in „F7: GAMES“.)
4.4 3-dimensionaal Tetris

Linux / GTK versie
Driedimensionale Tetris in de vorm van een Java applet voor Internet-browsers:
Driedimensionale Tetris voor de Windows besturingssysteem:
4.5 4-dimensionale Tetris

Greg Kaiser's „HyperTetris“ (1996): een 4-dimensionale Tetris
In [1996], [...], Greg Kaiser samen een vier-dimensionale variant op het klassieke spel.
Met behulp van IrisGL (a.k.a. igl) hij een werkgroep, zo hard te spelen, game met vier sub-schermen te tonen verschillende driedimensionale aspecten van de hele game-ruimte.
[Door] is er niet een gemakkelijk [begrijpelijke] weg te trekken vier-D objecten op een twee-D-scherm, de vier sub-standpunten zijn een praktische manier te manipuleren en te visualiseren, rotatie en vertaling van de stukken door de vier dimensies ( in het spel genaamd x,y,z,w).
In plaats van de voltooiing van lijnen van blokken zoals in het origineel, het doel is in dit geval in te vullen een complete kubus in de x,y,z subview (meestal 4 bij 4 bij 4).
De andere subviews die de „w“ dimensie zijn ingedeeld in een standaard 4 bij 4 met 10 blok regeling met „w“ wordt de lange, „vertical“ dimensie in alle drie de gevallen, met verschillende grondslagen van (x,y), (x,z), (y,z).
Zwaarte handelingen in de „-w“ richting, dus stukjes „vallen“ in de drie lange subviews die „w“, en niet verplaatsen, tenzij door de speler de controle in de laatste (x,y,z) subview.
Het duurt even wennen aan, op zijn zachtst gezegd.
Als door een wonder van geduld of het wijzigen van de parameters van het spel, heeft een complete een kubus, zal verdwijnen als de afgesloten lijnen doen in de originele Tetris, maar geen gast is gehouden in HyperTetris.
Benjamin Bernard (2000)
4.6 N-dimensionale Tetris

Polytope Tetris (2003): een N-dimensionale spel Tetris variant
Polytope Tetris is n-qua afmetingen Tetris.
Geïnspireerd door de HyperTetris programma, kunt u Polytope Tetris ton Tetris spelen in ieder AANTAL dimensie.
Speel Tetris in 3D, 4D, 5D, of meer.
HyperTetris is een veel catchier naam dan Polytope (def) Tetris, maar ik kan niet stelen van de naam.
5. „Standard Tetris“ specificatie
5.1 Inleiding
De definitie van „Standard Tetris“ is een geïdealiseerde model van de belangrijkste kenmerken en gedragingen van de eerste IBM-PC uitvoering van het spel Tetris (circa 1986-1988).
De geïdealiseerde model is gebaseerd op afgeleid van de zichtbare bedoelingen van de ontwikkelaars van het eerste IBM-PC uitvoering van het spel Tetris.
Zo lijkt het redelijk te concluderen dat de ontwikkelaars van het eerste IBM-PC uitvoering van het spel Tetris bestemd voor het selecteren van de vorm van elke nieuwe vallen stuk „willekeurig,“ en dat het gebruik van de Borland C uitvoering van de rand() functie was slechts een praktische aanpassing van de de bedoeling.
De definitie van „Standard Tetris“ is bepaald dat de vorm van elke nieuwe vallen stuk te worden „willekeurig“ geselecteerd.
Dit ideaal gedrag niet kan worden bereikt door een uitvoering, maar implementaties kan bij benadering de ideale gedrag.
Hoewel er geen uitvoering kan perfect de uitvoering van de definitie van „Standard Tetris,“ de idealen van „Standard Tetris“ betrekken objectieve kenmerken, en implementaties kunnen worden vergeleken op basis van hun relatieve afstand tot de idealen van „Standard Tetris.“
Dit hoofdstuk beschrijft een aantal elementen, gedrag en regels, die gezamenlijk bepalen „Standard Tetris.“
5.2 Standard Tetris boord
Het bestuur is een raster van cellen, met 10 kolommen en 20 rijen, voor een totaal van 10 * 20 = 200 cellen.

Standard Tetris boord (10 kolommen, 20 rijen)
Elke cel kan worden onbezet (leeg) of bezet (volledig).
5.3 Standard Tetris stuks
Er zijn zeven (7) standaard Tetris stukken, met de volgende brief namen:
{ O, I, S, Z, L, J, T }
De brief namen zijn geïnspireerd door de vormen van de stukken.

De zeven standaard Tetris stukken en hun „oriëntaties“
De stip op (0,0) samenvalt met raad standpunt (6,20) wanneer het stuk eerste gezicht lijkt.
De eerste kolom geeft het de eerste „richtsnoeren.“
In de volgende, het woord „geaardheid“ wordt gebruikt voor de beschrijving van de toestand van een stuk binnen een verzameling van toegelaten landen, die het gevolg kan zijn van een tegen de rotatie evenement.
Het veranderen van „richting“ van een bepaalde „oriëntatie“ van een „I, S,“ of „Z“ stuk, moet de combinatie van een rotatie en een vertaling.
Daarom is het woord „oriëntatie“ wordt hier verstaan iets meer dan de rotatie alleen.
Maar „geaardheid“ kan veranderen alleen als reactie op een tegen de rotatie gebeurtenis, en de cyclus van de verschillende „oriëntaties“ voor elk stuk benadert, of wedstrijden, de cyclus die uit pure rotaties.
De bijzondere gebruik van het woord „geaardheid“ in dit verband is nagenoeg gelijk is aan de betekenis van het woord of de „rotatie hoek,“ maar het woord „geaardheid“ wordt gebruikt in plaats van de „rotatie“ aan poging om de aandacht op het feit dat sommige stukken meer dan rotatie voor de productie van de verzameling van toegelaten staten die voortvloeien uit tegen de „rotatie“ evenementen.
Stukken kunnen alleen switch oriëntaties (of aan een specifieke horizontale of verticale vertaling) indien de resulterende toestand van het stuk niet zou hebben alle bezette (volledige) cellen buiten het gebied van de raad van bestuur en hebben zij geen bezette cellen die elkaar overlappen elk moment bezette cellen van de raad van bestuur.
(In deze regel, de bezette (volledige) cellen van de tunnel niet beschouwd als een deel van de „momenteel bezet cellen van de raad van bestuur“
In de volgende opmerkingen, elke verwijzing naar een resultaat van een tegen de rotatie geval is gemaakt met de veronderstelling dat een dergelijke rotatie daadwerkelijk kan worden uitgevoerd, gezien de huidige omstandigheden van het stuk en de raad van bestuur.
De „O“ (vak) stuk heeft slechts een enkele oriëntatie, en geen wijziging van de locaties van een van zijn bezet (volledige) cellen in reactie op elk geval tegen de roulatie.
De „I“ (lijn) stuk heeft twee mogelijke oriëntaties, die aanvankelijk in een horizontale richting.
De plaatsvervangers „I“ stuk tussen de twee oriëntaties in het kader van de opeenvolgende gebeurtenissen tegen de roulatie.
De „S“ en „Z“ stukken hebben elk twee mogelijke oriëntaties.
Deze stukken elk afwisselend twee oriëntaties in het kader van de opeenvolgende gebeurtenissen tegen de roulatie.
De „L“, „J“, en „T“ stukken hebben elk vier mogelijke oriëntaties, en deze richtsnoeren worden de resultaten van eenvoudige rotaties over punten van het centrum vormen.
Wanneer een stuk eerste gezicht lijkt op het bord, het stuk heeft een „belangrijke as“ in horizontale richting, en het stuk is aan de bovenkant van het bord.
Daarom is er geen stukken zijn in eerste instantie om te kunnen werken met hun uitgangspunten veranderd. Het stuk moet dalen door een rij te hebben aan de mogelijkheid van het oriënterend veranderd.
Zodra een stuk is gedaald door een rij op het bord, alle oriëntaties stuk kan worden bereikt (uitgaande van het stuk is niet te dicht aan de zijkanten of aan de huidige stapel stuks).
5.4 Standard Tetris stroomschema
Het volgende is een aanpassing van stroomschema voor een standaard Tetris spel.

Geschatte stroomdiagram voor een standaard Tetris spel

Geschatte stroomdiagram voor een standaard Tetris spel
5.5 Standard Tetris stuk oprichting
Het volgende diagram toont de (4 * 2 cel-cel) regio op het bord waar alle stukken verschijnen wanneer gemaakt.

Regio waar de stukken weergegeven als in Standard Tetris
Wanneer een nieuw stuk eerste gezicht lijkt op het bord, de herkomst ervan samenvalt met de stip op dit schema, en het stuk wordt volledig opgenomen door het gearceerde gebied op dit diagram.
Wanneer een nieuw spel gestart is, een volledige vrije val vertraging verstrijkt, en op de eerste vrije val iteratie een stuk is aanleiding tot aan de bovenkant van het bord.
Tijdens de normale spel spelen, wanneer een specifieke vrije val iteratie een stuk „land,“ een volledig vrije val vertraging verstrijkt en op de volgende vrije val iteratie een stuk is aanleiding tot aan de bovenkant van het bord.
Wanneer een stuk aanleiding is, het soort stuk is geselecteerd met behulp van de volgende algoritme:
pieceIndex = 1 + (randomInteger % 7); // 1..7
Want er is een constante p (= 1/7) kans op het selecteren van een specifieke vorm van stuk, en alle stukken van dezelfde soort te onderscheiden, dan is de kans dat precies k stukken van een specifiek type na n proeven volgt een Binomiale verdeling:
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 )
Wanneer we kiezen uit de 7 (zeven) stukken willekeurig, dan is de kans op het krijgen van een bepaald stuk is p=(1/7).
Als we dit doen n=70 tijden, bijvoorbeeld de kans op het krijgen van exact k stuks (met k in de range 0 te n) wordt gegeven door de binomiale verdeling, zoals weergegeven in de volgende afbeelding.

Binomiale verdeling voor n=70, p=(1/7)
Zo kan men voorspellen van de gemiddelde totale stukken van een enkel type een aantal willekeurige stukken, en men kan ook berekenen de verwachte variantie en standaarddeviatie (vierkantswortel van de variantie):
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
Als we het omzetten van een willekeurige waarde aan een stuk index, interpreteren we het als volgt:
value piece
===== =====
1 "O"
2 "I"
3 "S"
4 "Z"
5 "L"
6 "J"
7 "T"
[De pre-commerciële MS-DOS versie van Tetris gebruikt de random number functie aangeboden door de Borland Pascal compiler.
Deze functie gebruikt een 32-bit staat variabele.
Daarom is de volgorde van de nummers willekeurig was beperkt tot 2^32 verschillende waarden.
Daarom is in principe een speler kon ontdekken, na te laten vallen misschien wel 10 stuks, de exacte plaats in de reeks van 2^32 nummers die overeenkomen met de huidige stand van het spel.
Als Tetris simulaties worden uitgevoerd met de vaste volgorde van de 2^32 stuks, dan optimale beslissingen kan worden gevonden voor elke plaats in de reeks.
(Er lijken voldoende mogelijkheden om in de raad aan een geheel leeg bord staat, waardoor we in staat zijn om gesynchroniseerd met de precomputed optimale oplossing weg.)
Het risico van het gebruik van een eenvoudige random number generator in een simulatie te vinden van een optimale oplossing voor een probleem is dat de optimale oplossing wordt alleen voor het specifieke probleem weg door de ruimte geselecteerd door de eenvoudige random number generator. ]
5.6 Standard Tetris controles
Tijdens het spel spelen, de volgende ingangen zijn beschikbaar:
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
Alle ingangen van kracht op de stijgende-rand van de positieve inbreng (op de knop drukt, in tegenstelling tot de release-knop).
Als een knop drukt gebeurt, telt dit als een verzoek.
Holding een button down na een bepaalde tijd zouden kunnen resulteren in de „auto-herhaal“ functie van een toetsenbord, het genereren van nieuwe knop persen - maar deze functie is van buiten de game engine.
De ingangen hierboven omschreven in overeenstemming zijn met het originele spel Tetris.
Draai verzoeken kunnen worden uitgevoerd als er geen overlapping is tussen de gewenste koers en de cellen van de huidige raad (met uitzondering van de vallende stuk), en als de gewenste oriëntatie heeft geen vaste cellen buiten de raad.
Vertaal verzoeken kunnen worden uitgevoerd als er geen overlapping is tussen de gewenste vertaald configuratie en set-cellen op de huidige raad (met uitzondering van de vallende stuk), en als de gewenste configuratie vertaald heeft geen vaste cellen buiten de raad.
Input verzoeken worden verwerkt met een latency dat hangt af van de frame rate van het spel (bijvoorbeeld: 75 Hz), en de verzoeken van kracht (als geldig) meteen.
Een stuk kan worden weggelaten zonder enig lijn vallende stappen die zich voordoen.
Een stuk kan worden vertaald meerdere keren naar links of rechts, en vervolgens gedaald, zonder dat er een officiële lijn vallende stap.
Omdat een nieuw stuk was aanleiding kunnen onmogelijk worden gedraaid (want het is geplakt tegen de bovenrand van de raad van bestuur), moet de speler met ten minste een stuk vallende stap als rotaties zijn gewenst of nodig.
Het effect op de score, is te verwaarlozen.
5.7 Standard Tetris stuk „landing“
Als een stuk is gewoon vallen, komt het door een enkele rij tijdens elk stuk vallen iteratie.
Er wordt een iteratie dat beweegt hij van een plaats met geen contact met horizontale oppervlakken op een plek waar u contact opnemen met horizontale oppervlakken. Zodra dit gebeurt herhalingen worden de stukken in contact te rusten.
Als een iteratie begint met een stukje rust in contact komen met een horizontaal vlak, het stuk „land,“ en wordt onderdeel van de statische stapel.
5.8 Standard Tetris „lijnen afgesloten“
Een afgesloten rij is een rij van de stapel waarbij alle cellen zijn bezet. Wanneer een afgesloten rij wordt uit de stapel, en de rijen boven de geëlimineerd rij zijn verschoven naar een rij om een einde te maken van de kloof, telt dit als een afgesloten „lijn.“
Wanneer een pion wordt het deel van de paal.
Onmiddellijk na de pion, de paal wordt gecontroleerd op afgesloten rijen, en alle afgesloten rijen worden geëlimineerd.
Tot vier rijen tegelijk kunnen worden afgesloten.
De volgende tabel geeft de bovengrens op de lijnen, gelijktijdig door een enkel stuk:
piece max. simultaneous
rows completed
===== ==================
"O" 2
"I" 4
"S" 2
"Z" 2
"L" 3
"J" 3
"T" 2
5.9 Standard Tetris „niveaus“
Standard Tetris heeft 10 moeilijkheidsgraden, genummerd 1 (een) door middel van 10 (tien), met 1 niveau worden de „minste moeilijk.“
Het niveau van de index is de hoogste van twee waarden:
actualLevel = max( initialLevel, earnedLevel );
De initialLevel waarde is het niveau dat de speler kiest bij het starten van een nieuw spel.
Het patroon van niveau als functie van de lijnen afgerond is gemakkelijk waargenomen in de pre-commerciële MS-DOS versie van 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
Zo heeft de earnedLevel waarde wordt berekend volgens de volgende algoritme:
if (linesCompleted <= 0)
{
earnedLevel = 1;
}
else if ((linesCompleted >= 1) && (linesCompleted <= 90))
{
earnedLevel = 1 + ((linesCompleted - 1) / 10);
}
else if (linesCompleted >= 91)
{
earnedLevel = 10;
}
5.10 Standard Tetris vallen iteratie vertraging
Standard Tetris is een real-time vertraging tussen opeenvolgende regel de vrije val iteraties dat is een functie van het huidige niveau.
De volgende relatie tussen niveau-index en de dalende iteratie vertraging is gebaseerd op herhaalde metingen stopwatch op alle niveaus van de pre-commerciële MS-DOS versie van 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
Dus hebben we de volgende formule voor de iteratie vertraging waarde als functie van de werkelijke index:
iterationDelay = ((11 - actualLevel) * 0.05); // [seconds]
Als het bord leeg is, en er is geen input van de gebruiker, was aanleiding tot een stuk in het werkelijke niveau 1 landt in ongeveer 10 seconden, en was aanleiding tot een stuk in het werkelijke niveau 10 landt in ongeveer 1 seconde.
5.11 Standard Tetris „gast“
Standard Tetris alleen kent punten toe voor het handelen van de aanvoer een stuk.
Er zijn geen punten voor het handelen van de voltooiing van een enkele regel, of het voltooien van twee, drie of vier tegelijk.
[NB: Sommige varianten van Tetris punten toekennen voor het handelen van de voltooiing van lijnen, met een exponentieel groeiende bonus voor een toenemend aantal gelijktijdig afgesloten.
Zo is de strategie voor het maximaliseren van gast in dergelijke varianten van Tetris brengt de instelling van de mogelijkheden „om een Tetris,“ jargon voor het gebruik van de „I“ vorm te krijgen vier gelijktijdige lijnen en krijg veel punten. ]
Als u een leeg bord, en je laat een niet-„I“ stuk doen een vrije val en land, of u onmiddellijk een daling van de niet-„I“ stuk, kunt u het volgende punt grafiek met behulp van de pre-commerciële MS-DOS versie van 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, niet-„I“ stukjes vallen op een totaal van 18 rijen.
Dit is goed voor het verschil tussen de vrije val en instant-drop gevallen.
Door te experimenteren met tussenliggende gevallen is het eenvoudig te concluderen het volgende punt formule:
pointAward = ( (21 + (3 * actualLevel)) - freeFallIterations );
Merk op dat deze formule heeft niets te maken met de afstand een stuk valt!
Het is enkel afhankelijk van de werkelijke niveau, en een boete voor het aantal iteraties een stuk moet vrij kunnen vallen.
Dit straft een gebruiker voor nodig is tijd om na te denken.
Merk ook op dat, omdat een stuk kan in eerste instantie niet worden gedraaid toen het voor het eerst spawns, een speler wordt gestraft met ten minste een vrije val iteratie als rotaties nodig zijn om een stuk in de stapel.
Dit is waarschijnlijk geen gevolgen voor de menselijke spelers, tenzij ze op de een of andere manier: herkent het stuk, druk op de vertaling-toetsen „(links“ of „rechts),“ druk op de toets „draaien“ een of meerdere keren, en druk op de „drop-toets,“ die allemaal op minder dan 0.5 seconde op niveau 1 of minder dan 0.05 seconde op niveau 10.
6. Standard Tetris strategie
6.1 Inleiding
Een strategie voor het spelen van een spel hangt af van de regels van het spel.