Tetris
Colin Fahey
1. Logiciels
StandardTetris_2007June4.zip
Tetris code source (C# et C++ versions) et des programmes (« exe »);
4068277 octets
MD5: 4e957e0ead66064183e9f7e04e618ec0
2. Introduction
Cet article décrit comment un ordinateur peut jouer le classique jeu vidéo Tetris par obtenir des informations sur le conseil, la détermination de bonnes actions, et la réalisation de ces actions.
Cet article comprend un logiciel capable de jouer Tetris en temps réel.
Le logiciel comprend les meilleurs temps réel du jeu Tetris algorithme dans le domaine public.
Cet article définit des règles « standard » pour « Tetris, » une spécification basée sur l'original 1986 pré-version commerciale de Tetris pour les Personal Computer (PC).
En 2003, le logiciel inclus dans le présent article a été utilisé pour permettre à un ordinateur pour jouer Tetris tourne sur un ordinateur distinct.
Un simple USB caméra vidéo a été utilisée pour permettre à l'ordinateur pour « voir » l'écran de l'autre ordinateur.
Un relais bord a été contrôlé par une interface RS-232 pour permettre à l'ordinateur « appuyez sur des touches » sur le clavier de l'autre ordinateur.
Ainsi, le premier ordinateur a une relation à la deuxième ordinateur qui est semblable à un joueur humain typique de la relation à un ordinateur lors de la lecture de Tetris, le jeu état n'est connue que par la recherche à l'écran, des actions et le joueur ne peut se faire qu'à travers un clavier .
La configuration dans cette démonstration établi qu'un ordinateur peut jouer Tetris mieux que l'homme, dans des conditions normales en temps réel conditions de jeu Tetris.
3. Histoire de Tetris
En 1985, Alexey Pajitnov et Dmitry Pavlovsky sont les ingénieurs informaticiens à la Computing Center of the Russian Academy of Sciences.

Dorodnicyn Computing Centre du Russian Academy of Sciences
Alexey et Dmitry étaient intéressés dans le développement et la vente de dépendance des jeux vidéo.
Ils ont testé plusieurs jeux différents.
Alexey a été inspiré par le grec ancien jeu de puzzle, Pentaminos, qui implique l'organisation de pièces de puzzle de cinq places.
Alexey pensée de l'idée d'organiser Pentamino pièces comme ils sont tombés à une coupe rectangulaire, mais s'est rendu compte que les douze cinq différentes formes carrés étaient trop complexe pour un jeu vidéo.
Alexey connectée à la base de sept « tetramino » morceaux, chacun constitué de quatre carrés.
En 1985.6, Alexey Pajitnov programmé la première version de Tetris sur un Electronica 60.

Dmitry Pavlovsky, Alexey Pajitnov, et Tetris.
En 1985-1986, Vadim Gerasimov, une de 16 ans de lycée ordinateur prodige qui a travaillé à l'académie, mise en œuvre de Tetris pour la IBM PC fonctionnement du système d'exploitation MS-DOS.
(Vadim Gerasimov plus tard que la recherche au MIT Media Laboratory, de 1994 à 2003, la réception d'un doctorat après l'achèvement de nombreux projets intéressants:
http://vadim.www.media.mit.edu)

L'introduction de l'écran 1987-1988 pré-commerciale de Tetris pour la PC

Le jeu écran de l'1987-1988 pré-commerciale de Tetris pour la PC
Après 1987, Tetris se propager partout dans le monde entier.
The Tetris Company, LLC, est propriétaire de la marque Tetris.
4. Projets inspirée par Tetris
4.1 0-dimensional Tetris
Pas encore développé.
4.2 1-dimensional Tetris
Ziga Hajdukovic a développé 1-dimensional Tetris logiciel qui peut être joué dans un navigateur Internet.
Ziga Hajdukovic a également mis au point 1-dimensional Tetris logiciels pour les téléphones mobiles utilisant la plate-forme Java J2ME.
4.3 2-dimensional Tetris
Toutes les variantes de Tetris classique sont dans cette catégorie.
Cette section comprend intéressantes variantes.
4.3.1 Le plus grand jeu jamais Tetris: Delft University of Technology (1995)

Tetris joué sur un bâtiment; 2000 m^2 surface; Delft University of Technology (1995)

Tetris joué sur un bâtiment; 2000 m^2 surface; Delft University of Technology (1995)
4.3.2 Un autre jeu Tetris sur un bâtiment: Brown University (2000)

Tetris jeu en utilisant les lumières dans les fenêtres d'un immeuble à Brown University (2000.4-200.5) http://bastilleweb.techhouse.org
« Je pense qu'il était tout simplement le plus incroyable d'un jour chose que j'ai pu imaginer dans ma vie. Comme Steve Jobs toujours dit, le voyage est la récompense. »
« Il me fait penser de projets que nous ne retour au collège. Les choses qui étaient presque annulée que d'autres personnes ne pensent de faire. »
Steve Wozniak (2000)
4.3.3 Navigateur Internet jeu avec MIT « Green Building » image

Vadim Gerisimov's navigateur Internet Tetris
Ce navigateur Internet variante de Tetris a été créé par Vadim Gerasimov.
Ce navigateur Internet Tetris « Green » les caractéristiques de construction sur le campus de MIT.
Cette variante de Tetris a seulement neuf colonnes au lieu de la norme dix colonnes.
Cette variante de Tetris présente de nouvelles pièces avec des orientations aléatoires.
Vadim Gerasimov est la personne qui a écrit le code informatique pour la PC version de Tetris en 1986.
Vadim Gerasimov n'a Ph.D. à la recherche MIT Media Laboratory au cours de 1994-2003, travaillant sur de nombreux projets intéressants.
4.3.4 PIC16F84 12 MHz microcontrôleur à base de NTSC / PAL jeu vidéo Tetris

PIC16F84 12 MHz microcontrôleur à base de NTSC / PAL jeu vidéo Tetris
L'image ci-dessus montre la NTSC / PAL vidéo produite par un microcontrôleur PIC16F84 12 MHz fonctionner des logiciels écrits par Rickard Gunee dans 1998.
Le signal vidéo est généré par un logiciel de contrôle des sorties numériques.
4.3.5 « Scopetris » oscilloscope Tetris par Lars Pontoppidan (2007.8)

« Scopetris » oscilloscope Tetris par Lars Pontoppidan (2007.8)
Lars Pontoppidan a écrit le code pour AtMega32 microcontrôleur, et a ajouté simple circuit analogique, de créer une version de Tetris qui pourrait être joué sur un oscilloscope.
Certains registres du contrôle AtMega32 microcontrôleur 8 bits signaux de sortie et, le cas passés par une résistance électrique « R-2R » circuit numérique-analogique (D/A) de conversion, les signaux analogiques peuvent contrôler la (x,y) coordonnées d'un oscilloscope de faisceau (lorsque l'oscilloscope est réglé sur « le mode X-Y). »
YouTube vidéo:
FLV vidéo:
4.3.6 Obfuscated code Tetris: C / Unix
Les informations suivantes ont été accordées « 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
Ce qui suit est Tetris pour la Perl interprète: Perltris (version 20050717) de 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) est un standard pour décrire les objets graphiques en utilisant XML.

Mozilla SVG Tetris: Tetris mises en place en utilisant une description Scalable Vector Graphics (SVG)
4.3.9 Google « widget » Tetris
Google, Yahoo!, et Microsoft, et d'autres entreprises, ont fait la promotion de miniatures Internet des logiciels basés sur le nom « widgets » qui sont généralement caractérisés par une utilisation dynamique des données disponibles sur l'Internet.
L'un de ces widget disponibles par le biais de Google est un jeu Tetris.
L'exemple suivant est mignon, mais les formes tourner dans ennuyeux façons:

Google « widget » Tetris
Autres Google widgets:
4.3.10 MIT document de recherche: « Tetris is Hard, Even to Approximate » (2002)
Le document de recherche ci-après contient une preuve qu'une certaine variante de Tetris est « NP-complet. »
Erik D. Demaine, Susan Hohenberger, et David Liben-Nowell, « Tetris is Hard, Even to Approximate », Technical Report MIT-LCS-TR-865, Massachusetts Institute of Technology, 2002.10.21.
« NP-complet » est un classement des temps et l'espace coût coût d'un algorithme.
D'autres classifications, « P » et « NP ».
Une classification des « NP-complet » implique que, pour les problèmes de plus de quelques petites taille, l'algorithme est peu probable de trouver une solution souhaitée dans une pratique de temps ou d'espace.
4.3.11 Document de recherche: « Applying reinforcement learning to Tetris »
Le document suivant, publié 2005.5.30, par Donald Carr au département Informatique à Rhodes University, l'Afrique du Sud, présente l'application de « l'apprentissage par renforcement » de Tetris.
4.3.12 Tetris jupe (2007.11)

Tetris jupe (2007.11)
La jupe de Tetris a été créé par « Lucy » (« hissyfitoly » sur etsy.com) avant 2007.11.
De la description du créateur de la jupe (offert à la vente sur 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 de commentaires au sujet de cette jupe:
« Jupe homme qui aspire à Tetris »
« Ahahahaha, je pensais la même chose. »
« Il ya une ligne vers le bas au fond ... achevé lignes disparaissent. » «&NBSP;FAIRE PLUS DE&NBSP;» « . »
« Il devrait y avoir une place à l'arrière ou l'avant long morceau où s'intégrerait parfaitement ... »
« C'est vraiment une jupe si moche. Mon ami n'a pas pu m'acheter suffisamment de chocolat et des fleurs à me convaincre de porter ce truc. »
4.3.13 Tetris stade acte (2007.4)

Tetris stade acte (2007.4)
« De ceux qui ont la Triforce vous en 2006 ... Comes la prochaine génération de sketch objet inanimé ... Tetris. »
- En cache localement dans Flash vidéo (FLV) le format vidéo (utilisation VLC à jouer):
4.3.14 Hilarious Tetris variations sur une émission de télévision japonais

Tetris variations sur japonais émission de télévision
Cette séquence vidéo à partir d'une émission de télévision japonaise comprend hilarante variations de Tetris, y compris:
pièces qui disparaissent à l'atterrissage, une pièce qui remplit toute une ligne (donc de remplir une ligne à l'atterrissage), plusieurs pièces relevant simultanément, pièces de forme irrégulière, un long morceau qui est un peu trop large pour s'adapter à un écart (prévention d'un 4-ligne achèvement!), Mario frapper un champignon et de devenir énorme et de la mort!, petit morceau de débris restant après les lignes sont détruits, la hausse la gravité des pièces flottent vers le haut, etc
- En cache localement dans Flash vidéo (FLV) le format vidéo (utilisation VLC à jouer):
4.3.15 « The Original Human TETRIS Performance by Guillaume Reymond » (2007.11)

« The Original Human TETRIS Performance by Guillaume Reymond » (2007.11)
De la description de YouTube:
« TETRIS joué par de vrais êtres humains-assis dans un auditorium: »
TETRIS est la 4ème performance vidéo de la GAME OVER Project, réalisé par l'artiste suisse Guillaume REYMOND (NOTsoNOISY agence de création).
Ce stop-motion vidéo a été tournée et jouée pour « LES URBAINES » festival
http://www.urbaines.ch au Palais de Rumine (Lausanne, Suisse) sur November 24th 2007.
- En cache localement dans Flash vidéo (FLV) le format vidéo (utilisation VLC à jouer):
4.3.16 2.5-dimensionnelle Tetris
Le terme « 2.5-dimensionnelle » est utilisée ici pour signifier un non-orthogonal vue d'un deux-dimensionnelle version de Tetris, avec peu d'épaisseur dans la troisième dimension.
(Trouvez le lien « tetris3d » dans « F7: GAMES ».)
4.4 3-dimensional Tetris

Linux / GTK version
Trois dimensions de Tetris, sous la forme d'une applet Java pour les navigateurs Internet:
Trois dimensions de Tetris pour la Windows système d'exploitation:
4.5 4 dimensions Tetris

Greg Kaiser's « HyperTetris » (1996): un 4-dimensional Tetris
En [1996], [...], Greg Kaiser mis en place un quatre dimensions variante sur le jeu classique.
Utilisation IrisGL (a.k.a. igl) il a créé un groupe de travail, si difficile à jouer, jeu en utilisant quatre sous-écrans pour décrire différentes dimensions de trois aspects de l'ensemble de l'espace-jeu.
[Car] il n'est pas facilement un [compréhensible] façon de tirer quatre-D objets sur un deux-D écran, les quatre sous-vues sont une méthode pratique pour manipuler et visualiser la rotation et la traduction des pièces à travers les quatre dimensions ( dans le jeu x,y,z,w).
Plutôt que de remplir des lignes de blocs comme dans l'original, l'objectif dans ce cas est de combler un cube dans la x,y,z subview (généralement 4 par 4 par 4).
Les autres subviews qui contiennent la dimension « w » sont classés par défaut dans un 4 par 4 de 10 bloc accord avec « w » être long, « vertical » dimension dans les trois cas, avec différentes bases de (x,y), (x,z), (y,z).
Gravité des actes dans l'« -w » direction, de sorte pièces « tomber » dans les trois à long subviews qui comprennent « w », et ne bougent pas à moins que par lecteur dans la dernière (x,y,z) subview.
Il prend un certain temps à s'habituer à-dire le moins.
Si, par miracle de patience ou de modifier les paramètres du jeu, on ne complète un cube, il disparaîtra comme les lignes ne achevé dans le Tetris original, mais pas de client est conservée dans HyperTetris.
Benjamin Bernard (2000)
4.6 N dimensions Tetris

Polytope Tetris (2003): un N dimensions Jeu de Tetris
Polytope Tetris est n dimensions Tetris.
Inspiré par le programme HyperTetris, Polytope Tetris vous permet de tonnes jouer en toute Tetris NOMBRE DE dimension.
Jouer à Tetris 3D, 4D, 5D, ou plus.
HyperTetris est beaucoup catchier nom que Polytope (bat) Tetris, mais je ne peux pas voler le nom.
5. « Tetris » spécification « standard »
5.1 Introduction
La définition de la « norme de Tetris » est un modèle idéalisé des caractéristiques les plus importantes et les comportements de la première IBM-PC mise en œuvre du jeu Tetris (vers 1986-1988).
Le modèle idéalisé est basée sur l'apparente déduire les intentions des développeurs de la première IBM-PC mise en œuvre du jeu Tetris.
Par exemple, il semble raisonnable de supposer que les développeurs de la première IBM-PC mise en œuvre du jeu Tetris destiné à sélectionner la forme de chaque nouvelle pièce relevant « hasard, » et que l'utilisation de la Borland C application de la rand() fonction est simplement un rapprochement des pratiques l'intention.
La définition de la « norme Tetris » précise que la forme de chaque pièce nouvelle baisse doit être choisi « de manière aléatoire. »
Cet idéal de comportement ne peut être réalisée par toute mise en œuvre, mais la mise en œuvre peut rapprocher les comportement idéal.
Bien qu'il n'existe pas de la mise en œuvre peut parfaitement appliquer la définition de la « norme de Tetris, » les idéaux de la « norme Tetris » associer des caractéristiques objectives, et la mise en œuvre peuvent être comparées en fonction de leur proximité par rapport aux idéaux de la « norme de Tetris. »
Cette section décrit un ensemble d'éléments, des comportements et des règles qui, collectivement, de définir « la norme de Tetris. »
5.2 Standard Tetris bord
Le conseil est une grille de cellules, ayant 10 colonnes et 20 lignes, pour un total de 10 * 20 = 200 cellules.

Standard Tetris bord (10 colonnes, 20 lignes)
Chaque cellule peut être soit inoccupés (vide) ou occupés (complet).
5.3 Standard Tetris pièces
Il ya sept (7) Tetris pièces standard, avec la lettre suivante noms:
{ O, I, S, Z, L, J, T }
La lettre noms sont inspirés par les formes des pièces.

Les sept pièces standard Tetris et leurs « orientations »
Le point à (0,0) coïncide avec la position (6,20) bord lorsque la pièce la première fois.
La première colonne indique les « orientations » initiales.
Par la suite, le mot « orientation » est utilisé pour décrire tout état d'une pièce, dans un ensemble de permis aux États, qui peuvent résulter d'un événement dans le sens de rotation.
Changer « l'orientation » de une « orientation » d'un « I, S, » ou « Z » pièce, exige la combinaison d'une rotation et une traduction.
Par conséquent, le mot « orientation » est utilisée ici pour signifier quelque chose de plus que la seule rotation.
Toutefois, « l'orientation » peut changer seulement en réponse à un événement dans le sens de rotation, et le cycle des « orientations » distinctes pour chaque pièce rapproche, ou des allumettes, le cycle résultant de la rotation pure.
L'utilisation particulière du mot « d'orientation, » dans ce contexte, est presque équivalente à la signification du mot ou de « l'angle de rotation, » mais le mot « orientation » est utilisé à la place de la « rotation » de tenter d'attirer l'attention sur le fait que certaines pièces nécessitent plus de rotation pour produire le ensemble de permis aux États résultant de « la rotation » dans le sens des événements.
Pièces ne peuvent changer leur orientation (ou subir une horizontale ou verticale traduction) si l'état résultant de la pièce n'aurait pas occupé (complet) des cellules au-delà du domaine du conseil et n'aurait pas occupé les cellules qui se chevauchent tout actuellement occupés cellules du conseil.
(Dans cette règle, occupés (complet) des cellules de la pièce ne sont pas considérés comme faisant partie des « cellules actuellement occupés du conseil »
Dans les observations ci-après, toute référence à un résultat d'un événement dans le sens de rotation est effectuée avec l'hypothèse qu'une telle rotation peut être effectué, étant donné les conditions actuelles de la pièce et le conseil.
Le « O » (boîte) le morceau ne dispose que d'une seule orientation, et ne modifie pas l'emplacement de l'un de ses occupés (complet) des cellules en réponse à un événement dans le sens de rotation.
Le « I » (ligne) pièce a deux orientations possibles, figurant initialement dans une orientation horizontale.
« I » La pièce alterne entre les deux orientations en réponse à successives dans le sens de rotation.
Le « S » et « Z » pièces ont chacun deux orientations possibles.
Ces pièces chaque alterner entre deux orientations en réponse à successives dans le sens de rotation.
Le « L », « J », et « T » pièces ont chacune quatre orientations possibles, et ces orientations sont le résultat de simples rotations sur des points centraux sur les formes.
Quand une pièce apparaît sur le plateau, la pièce a son « grand axe » dans une orientation horizontale, et la pièce est au dessus du conseil.
Par conséquent, aucune pièces sont d'abord susceptibles d'avoir changé leurs orientations. La pièce doit descendre par une rangée d'avoir la possibilité d'avoir changé son orientation.
Une fois un morceau a diminué par une rangée sur le plateau, toutes les orientations pièce peut être atteint (en supposant que la pièce n'est pas trop étroite aux parois latérales ou à la pile de pièces).
5.4 Standard Tetris organigramme
Ce qui suit est un schéma approximatif pour un jeu standard Tetris.

Diagramme approximatif pour un jeu standard Tetris

Diagramme approximatif pour un jeu standard Tetris
5.5 Standard Tetris pièce création
Le schéma suivant montre l'(4 * 2 cellule cell) région sur la carte où figurent toutes les pièces lors de sa création.

Région où les pièces apparaissent lors de sa création dans la norme Tetris
Quand une nouvelle pièce apparaît sur le plateau, son origine coïncide avec le point sur ce schéma, et la pièce sera entièrement contenu dans un endroit ombragé sur ce diagramme.
Quand un nouveau jeu est lancé, une chute libre délai s'écoule, et sur la première chute libre itération une pièce est donné naissance au sommet du conseil.
Dans des conditions normales de jeu, quand une chute libre itération « terres » une pièce, une chute libre de retard et s'écoule sur la prochaine chute libre itération une pièce est donné naissance au sommet du conseil.
Quand une pièce est donné naissance, le type de pièce est choisi en utilisant l'algorithme suivant:
pieceIndex = 1 + (randomInteger % 7); // 1..7
Parce qu'il ya une constante p (= 1/7) chance de choisir un type de pièce, et toutes les pièces du même type sont identiques, la probabilité d'avoir exactement k pièces d'un type particulier après n procès suit une loi 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 )
Lorsque nous choisissons parmi les sept (7) morceaux au hasard, la probabilité d'obtenir une pièce spécifique est p=(1/7).
Si nous ne n=70 cette fois, par exemple, la probabilité d'obtenir exactement k pièces (avec k dans la gamme 0 à n) est donnée par la loi binomiale, comme le montre l'image suivante.

Binomial distribution pour n=70, p=(1/7)
Ainsi, on peut prédire le total moyen des pièces d'un seul type donné un nombre total de pièces au hasard, et l'on peut également calculer la variation attendue et l'écart-type (racine carrée de la variance):
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
Lorsque nous convertir une valeur aléatoire à un morceau indice, nous l'interprétons comme suit:
value piece
===== =====
1 "O"
2 "I"
3 "S"
4 "Z"
5 "L"
6 "J"
7 "T"
[Le pré-commerciale MS-DOS version de Tetris utilisé la fonction de nombres aléatoires offert par le compilateur Borland Pascal.
Cette fonction utilisé une 32-bit variable d'état.
Par conséquent, la séquence de nombres aléatoires a été limitée à 2^32 valeurs distinctes.
Par conséquent, en principe, un joueur peut découvrir, peut-être après avoir déposé 10 pièces, le lieu exact de l'ensemble des 2^32 des numéros correspondant à l'état actuel de la partie.
Si Tetris simulations sont effectuées avec la séquence fixe de 2^32 morceaux, puis optimale les décisions peuvent être trouvées pour chaque lieu dans la séquence.
(Il semble y avoir suffisamment d'occasions d'être le conseil d'un conseil totalement vide état, ce qui nous permet d'obtenir synchronisé avec la solution optimale précalculées chemin.)
Le risque d'utiliser un simple générateur de nombre aléatoire dans une simulation visant à trouver une solution optimale à un problème, c'est que la solution optimale sera uniquement pour le chemin à travers l'espace, sélectionnez le problème par la simple générateur de nombres aléatoires. ]
5.6 Standard Tetris contrôles
Au cours de jeu, les entrées suivantes sont disponibles:
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
Toutes les entrées de prise d'effet de l'augmentation de pointe de la contribution positive (appuyez sur le bouton, par opposition à la libération bouton).
Quand une pression sur le bouton se produit, cela est considéré comme une demande.
La tenue d'un bouton vers le bas au-delà d'un certain temps risquent de déboucher sur « l'auto-repeat » fonctionnalité d'un clavier, bouton générer de nouvelles presses - mais cette fonction est externe au jeu du moteur.
Les entrées indiquées ci-dessus sont conformes à l'original Tetris.
Rotation des demandes peut être exécuté s'il n'ya pas de chevauchement entre les orientations et fixer les cellules sur le bord (à l'exclusion de la baisse du morceau), et si l'orientation désirée a pas de cellules en dehors de la zone.
Traduire les demandes peuvent être exécutés en l'absence de chevauchement entre les traduit et mis en configuration de cellules sur le bord (à l'exclusion de la baisse du morceau), et si la configuration désirée a traduit pas de cellules en dehors de la zone.
Entrée les demandes sont traitées avec un temps de latence qui dépend de la vitesse du jeu (exemple: 75 Hz), et les demandes prennent effet (si valide) instantanément.
Une musique peut être abandonnée sans n'importe quelle ligne se relevant pas.
Une musique peut être traduit plusieurs fois vers la gauche ou la droite, puis a chuté, tous sans éprouver une ligne officielle relevant pas.
Parce que récemment donné naissance à une pièce ne peut être tournée (car il est coincé contre le bord supérieur du panneau), le joueur doit accepter au moins une pièce relevant pas si les rotations sont désiré ou nécessaire.
L'effet sur le client est insignifiant.
5.7 Standard Tetris pièce « d'atterrissage »
Si une pièce est tout simplement tomber, il tombe par une seule rangée au cours de chaque pièce relevant itération.
Il y aura une itération qui se déplace de l'endroit sans contact avec les surfaces horizontales à un endroit qui est en contact avec les surfaces horizontales. Une fois cette itérations se produit, les pièces sont en contact de repos.
Si une itération commence par une pièce de repos en contact avec une surface horizontale, la pièce « terres, » et devient partie statique de la pile.
5.8 Standard Tetris « lignes achevé »
Une ligne est achevé une ligne de la pile dans laquelle toutes les cellules sont occupées. Quand une ligne est terminée éliminé de la pile, et les lignes au-dessus de la ligne éliminés sont décalés par une ligne à éliminer l'écart, cela est considéré comme une « ligne » terminée.
Quand une pièce terres, il devient un élément de la pile.
Immédiatement après la pièce terres, la pile est vérifié pour les lignes terminé, achevé et toutes les lignes sont éliminés.
Jusqu'à quatre lignes peut être mené à bien simultanément.
Le tableau suivant donne la limite supérieure sur les lignes mené à bien simultanément par une seule pièce:
piece max. simultaneous
rows completed
===== ==================
"O" 2
"I" 4
"S" 2
"Z" 2
"L" 3
"J" 3
"T" 2
5.9 Standard Tetris « niveaux »
Standard Tetris a 10 niveaux de difficulté, numérotée 1 (un) par 10 (dix), avec le niveau 1 étant le « moins difficile. »
Le niveau indice est la durée maximale de deux valeurs:
actualLevel = max( initialLevel, earnedLevel );
La valeur initialLevel est le niveau que le joueur choisit pour lancer une nouvelle partie.
Le modèle de niveau en fonction de lignes est terminé facilement observés dans la pré-commerciale MS-DOS version 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
Ainsi, le earnedLevel valeur est calculée selon l'algorithme suivant:
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 relevant itération retard
Tetris standard a un réel délai écoulé entre la ligne successifs chute libre itérations qui est une fonction de l'actuel niveau de difficulté.
La relation suivante entre le niveau d'index et de la baisse itération retard est basée sur des mesures répétées chronomètre à tous les niveaux de la pré-commerciale MS-DOS version 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
Ainsi, nous établissons la formule suivante pour l'itération retard valeur en fonction du niveau réel indice:
iterationDelay = ((11 - actualLevel) * 0.05); // [seconds]
Si le conseil d'administration est vide, et il n'ya pas de saisie de l'utilisateur, donné naissance à une pièce au niveau réel 1 terres dans environ 10 secondes, et donné naissance à une pièce au niveau réel 10 terres dans environ 1 seconde.
5.11 Standard Tetris « client »
Standard Tetris seulement octroie des points pour le fait d'une pièce d'atterrissage.
Il n'existe pas de points attribués pour le fait de remplir une seule ligne, ou de l'achèvement de deux, trois ou quatre lignes en même temps.
[Note: Certaines variantes de Tetris attribuer des points de l'acte de l'achèvement des lignes, avec une croissance exponentielle de bonus pour un nombre croissant de lignes en même temps achevé.
Ainsi, la stratégie de maximisation de client dans les variantes de Tetris consiste à mettre en place les possibilités « d'obtenir un Tetris, » pour l'utilisation d'argot « I » la forme à obtenir quatre lignes simultanément et obtenir beaucoup de points. ]
Si vous avez un vide bord, et vous laisser un non-« I » pièce faire une chute libre et la terre, ou vous immédiatement une baisse non-« I » pièce, vous pouvez établir le point suivant en utilisant le tableau pré-commerciale MS-DOS version 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, la non-« I » morceaux tombent un total de 18 lignes.
Cela explique la différence entre la chute libre et instantanée cas de chute.
En expérimentant avec les intermédiaires cas, il est facile d'en déduire le point suivant la formule:
pointAward = ( (