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-Source-Code (C# und C++ Versionen) und Programm („exe“);
4068277 Bytes
MD5: 4e957e0ead66064183e9f7e04e618ec0

2. Einleitung

Dieser Artikel beschreibt, wie ein Computer spielen können, das klassische Videospiel Tetris von Informationen über den Vorstand, die Festlegung gute Aktionen, und die Durchführung dieser Maßnahmen.
Dieser Artikel enthält Software der Lage, Tetris spielen in Echtzeit.
Die Software beinhaltet unter anderem den besten Echtzeit-Tetris-Spielen Algorithmus für die Öffentlichkeit zugänglich.
Dieser Artikel legt Regeln für „Standard-Tetris,“ eine Spezifikation basiert auf dem ursprünglichen 1986 pre-kommerzielle Version von Tetris für den heimischen Computer (PC).
In 2003, die Software in diesem Artikel wurde benutzt, um einen Computer zu spielen Tetris läuft auf einem separaten Computer.
Ein gewöhnlicher USB Videokamera verwendet wurde, um den Computer, um zu „sehen,“ den Bildschirm des anderen Computers.
Ein Relais-Platine wurde über ein RS-232 Schnittstelle zu ermöglichen, den Computer zu „drücken Tasten“ auf der Tastatur des anderen Computers.
So, die ersten Computer hat eine Beziehung zu dem zweiten Computer, der ähnlich wie bei einem typischen menschlichen Spieler die Beziehung zu einem Computer beim Abspielen von Tetris, das Spiel Staat ist nur bekannt, indem Sie auf dem Bildschirm, Spieler und Aktionen können nur begonnen werden, über eine Tastatur .
Die Konfiguration in dieser Demonstration fest, dass ein Computer spielen können, Tetris besser als ein Mensch, unter normalen Echtzeit-Tetris spielen.

3. Die Geschichte von Tetris

In 1985, Alexey Pajitnov und Dmitry Pavlovsky wurden Computer-Ingenieure auf die Computing Center of the Russian Academy of Sciences.
computer_center_russian_academy_of_sciences.jpg
Dorodnicyn Computing Centre der Russian Academy of Sciences
http://www.ccas.ru
Alexey und Dmitry daran interessiert waren, in Entwicklungs-und Verkauf von Computerspielen süchtig.
Sie testeten mehrere verschiedene Spiele.
Alexey wurde inspiriert durch die antike griechische Puzzlespielspiel, Pentaminos, der Vermittlung beteiligt Puzzleteile aus fünf Plätzen.
Alexey dachte an die Idee der Vermittlung Pentamino Stücke, wie sie fielen sich in einem rechteckigen Tasse, aber realisiert, dass die zwölf verschiedenen Fünf-Quadrat Formen waren zu komplex für ein Videospiel.
Alexey auf „tetramino“ mit sieben Stücken, die jeweils aus vier Quadraten.
In 1985.6, Alexey Pajitnov programmierte die erste Version von Tetris auf einem Electronica 60.
d_pavlovsky_and_a_pajitnov.jpg
Dmitry Pavlovsky, Alexey Pajitnov, und Tetris.
In 1985-1986, Vadim Gerasimov, eine 16-jährige High-School-Computer-Wunderkind, arbeitete an der Akademie, umgesetzt Tetris für den IBM PC laufen MS-DOS Betriebssystem.
(Vadim Gerasimov später hat die Forschung auf die MIT Media Laboratory, von 1994 bis 2003, einen Doktortitel erhalten nach Abschluss viele interessante Projekte: http://vadim.www.media.mit.edu)
original_tetris_splash_screen02.jpg
Die Einführung Bildschirm des 1987-1988 pre-kommerzielle Freisetzung von Tetris für den PC
original_tetris_start_game02.jpg
Das Spiel spielen Bildschirm des 1987-1988 pre-kommerzielle Freisetzung von Tetris für den PC
Nach 1987, Tetris Ausbreitung rund um den Globus.
The Tetris Company, LLC, Eigentümer der Marke Tetris.
www_tetris_com_site.jpg
The Tetris Company, LLC, Internet-Seiten (wie sich herausstellte, in 2003).  http://www.tetris.com

4. Projekte inspiriert von Tetris

4.1 0-dimensionale Tetris

Noch nicht entwickelt.

4.2 1-dimensionale Tetris

Ziga Hajdukovic entwickelt hat 1-dimensionale Tetris-Software, die gespielt werden können in einem Internet-Browser.
tetris_1d_ziga_hajdukovic.jpg
1-dimensionale Tetris von Ziga Hajdukovic http://www.tetris1d.org
Ziga Hajdukovic hat auch 1-dimensionale Tetris-Software für Mobiltelefone mit dem Java J2ME Plattform.
(Anleitung: http://www.tetris1d.org/mobile.php; WAP Download: http://www.tetris1d.org/wap)

4.3 2-dimensionale Tetris

Alle herkömmlichen Tetris-Varianten sind in dieser Kategorie.
Dieser Abschnitt umfasst interessante Varianten.

4.3.1 Größte Tetris-Spiel aller Zeiten: Delft University of Technology (1995)

delft_univ_1995_2000sqmeters_tetris1.gif
Tetris spielte in einem Gebäude; 2000 m^2 Fläche; Delft University of Technology (1995)
delft_univ_1995_2000sqmeters_toveren.jpg
Tetris spielte in einem Gebäude; 2000 m^2 Fläche; Delft University of Technology (1995)

4.3.2 Ein weiteres Tetris Spiel in einem Gebäude: Brown University (2000)

brown_university_bastille_tetris_tetris_game_square.jpg
Tetris Spiel angezeigt mit Lichter in den Fenstern eines Gebäudes in Brown University (2000.4-200.5) http://bastilleweb.techhouse.org
brown_university_bastille_tetris_woz_play.jpg
Steve Wozniak, Mitbegründer von Apple Computers, spielt Tetris; Brown University (2000) http://bastilleweb.techhouse.org
Ich glaube, es war nur die unglaublichsten Ein-Tages-Ding Ich könnte mir vorstellen, in meinem Leben.  Wie Steve Jobs immer gesagt, die Fahrt ist der Lohn.
Es machte mich der Meinung von Projekten haben wir im College zurück.  Dinge, die waren fast rückgängig gemacht, dass andere Menschen nicht denken tun.
Steve Wozniak (2000)

4.3.3 Internet-Browser-Spiel mit MIT „Green Building“ Bild

tetris_vadim_green_building3.jpg
Vadim Gerisimov's Internet-Browser Tetris
http://vadim.www.media.mit.edu/games/gbt.html
Diese Internet-Browser Tetris-Variante wurde entwickelt durch Vadim Gerasimov.
Diese Internet-Browser Tetris Funktionen der „Green“ Gebäude auf dem Campus der MIT.
Diese Tetris-Variante hat nur neun Spalten statt der Standard aus zehn Spalten zusammen.
Diese Tetris-Variante präsentiert neue Stücke mit zufälligen Orientierungen.
Vadim Gerasimov ist die Person, schrieb der Computer-Code für die PC Version von Tetris in 1986.
Vadim Gerasimov hat Ph.D.  Forschung an den MIT Media Laboratory bei 1994-2003, arbeitet an vielen interessanten Projekten.

4.3.4 PIC16F84 12 MHz Mikrocontroller-basierten NTSC / PAL Video-Tetris-Spiel

tetris_pic_television_screen.jpg
PIC16F84 12 MHz Mikrocontroller-basierten NTSC / PAL Video-Tetris-Spiel
http://www.pablin.com.ar/electron/circuito/mc/tetris
Das Bild oben zeigt die NTSC / PAL Video-Ausgang von einem PIC16F84 12 MHz Mikrocontroller laufende Software, die von Rickard Gunee in 1998.
Die Video-Signal wird generiert durch Software-Steuerung der digitalen Ausgänge.
Andere PIC Projekte: http://etronics.free.fr/liens5.htm

4.3.5 „Scopetris“ Oszilloskop Tetris von Lars Pontoppidan (2007.8)

scopetris_lars_pontoppidan_2007_aug.jpg
„Scopetris“ Oszilloskop Tetris von Lars Pontoppidan (2007.8)
http://pontoppidan.info/lars/index.php?proj=scopetris
Lars Pontoppidan schrieb Code für die AtMega32 Mikrocontroller, und fügte hinzu, einfache analoge Schaltungen, um eine Tetris Version werden könnten, gespielt auf einem Oszilloskop.
Bestimmte Register der Kontrolle AtMega32 Microcontroller 8-Bit-Output-Signale und, wenn durch ein „R-2R“ elektrischen Widerstand Schaltung für Digital-Analog-(D/A) Umwandlung, die sich daraus ergebende analoge Signale können die Koordinaten des (x,y) ein Oszilloskop Strahl (wenn das Oszilloskop ist auf „X-Y-Modus).“
YouTube Video:
http://www.youtube.com/watch?v=Hui5Azx5jQo
FLV Video:
scopetris_lars_pontoppidan_2007_aug.flv

4.3.6 Obfuscated Code Tetris: C / Unix

Die folgenden erhielt „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);}
Bezug: http://homepages.cwi.nl/~tromp/tetris.html

4.3.7 Obfuscated Code Tetris: Perl Code

Der folgende Text ist Tetris für den Perl Dolmetscher: Perltris (Version 20050717) von 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;
Bezug: http://www.seanadams.com/perltris

4.3.8 Mozilla SVG Tetris

Scalable Vector Graphics (SVG) ist ein Standard zur Beschreibung von grafischen Objekten mit XML.
tetris_svg_640x480.gif
Mozilla SVG Tetris: Tetris umgesetzt mit einer Beschreibung Scalable Vector Graphics (SVG)
http://www.croczilla.com/svg/samples/svgtetris/svgtetris.svg
Weitere Beispiele für SVG: http://www.croczilla.com/svg/samples

4.3.9 Google „widget“ Tetris

Google, Yahoo! und Microsoft, und andere Unternehmen, haben die Mini-Internet-basierte Software namens „widgets“ das sind in der Regel zeichnen sich durch einige Verwendung von dynamischen Daten über das Internet verfügbar.
Eine solche widget über Google ist ein Tetris-Spiel.
Das folgende Beispiel ist niedlich, aber die Formen drehen auf lästige Wege:
tetris_google_widget.gif
Google „widget“ Tetris
http://www.playbie.com/Game.aspx?gm=1&wt=2&su=live.com&sn=Google&gn=Google
Andere Google widgets:
http://www.google.com/ig/directory?synd=open

4.3.10 MIT Forschung Papier: „Tetris is Hard, Even to Approximate“ (2002)

Die folgenden Forschungs-Dokument enthält ein Beweis dafür, dass eine bestimmte Art von Tetris-Variante ist „NP-abgeschlossen.“
http://theory.csail.mit.edu/~edemaine/papers/Tetris_TR2002
Erik D.  Demaine, Susan Hohenberger und David Liben-Nowell, „Tetris is Hard, Even to Approximate“, Technical Report MIT-LCS-TR-865, Massachusetts Institute of Technology, 2002.10.21.
Lokal-Cache-Kopie (PDF): tetris_theory_mit_lcs_tr_865_0210020.pdf
„NP-Complete“ ist eine Klassifizierung der Kosten Zeit und Raum Kosten eines Algorithmus.
Andere Klassifikationen umfassen „P“ und „NP“.
Eine Einteilung der „NP-Komplett“ bedeutet, dass für die Probleme größer als einige kleine Größe, den Algorithmus ist unwahrscheinlich, dass eine gewünschte Lösung in einem praktischen Höhe der Zeit und Raum.

4.3.11 Forschung Dokuments: „Applying reinforcement learning to Tetris“

Die folgenden Papier, 2005.5.30 veröffentlichte, von Donald Carr am Department of Computer Science in Rhodes University, Südafrika, präsentiert die Anwendung von „Reinforcement Learning“ an Tetris.
ApplyingReinforcementLearningToTetris_DonaldCarr_RU_AC_ZA.pdf

4.3.12 Tetris Rock (2007.11)

tetris_skirt.jpg
Tetris Rock (2007.11)
Die Tetris Rock wurde entwickelt durch „Lucy“ („hissyfitoly“ in etsy.com), bevor 2007.11.
Aus der Schöpfer der Beschreibung der Rock (zum Verkauf angeboten in 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 Kommentare zu diesem Rock:
„Man saugt das Rock in Tetris“
„Ahahahaha, dachte ich dasselbe.“
„Es gibt eine komplette Zeile nach unten auf den Boden ...  ausgefüllte Linien verschwinden.“  „SIE ÜBER“ „.“
„Es sollte ein Platz in der Vorder-oder Rückseite, wo langes Stück passen würde perfekt ...“
„Das ist eine wirklich hässliche Rock though.  Mein Freund kann mich nicht kaufen genug Schokolade und Blumen zu überzeugen, mich zu tragen, dass die Sache.“

4.3.13 Tetris Bühne agieren (2007.4)

tetris_stage_act.jpg
Tetris Bühne agieren (2007.4)
http://www.youtube.com/watch?v=sZrs8ZCO8xM
„Von denen, die dir die Triforce in 2006 ...  Kommt die nächste Generation der unbelebten Objekt skit ...  Tetris.“
Lokal zwischengespeichert Video in Flash Video (FLV) Format (benutze VLC zu spielen):
tetris_stage_act.flv

4.3.14 Hilarious Tetris Variationen über ein japanisches TV-Show

tetris_funny_variations_japanese_tv.jpg
Tetris Variationen über japanische Fernseh-Show
http://www.youtube.com/watch?v=SYRLTF71Sow
Dieses Video-Segment von einem japanischen TV-Show umfasst hilarious Varianten von Tetris, unter anderem:
Stücke, die verschwinden nach der Landung ein Stück, füllt eine ganze Reihe (womit eine Zeile nach der Landung), mehrere Stücke gleichzeitig fallen, unregelmäßig geformte Stücke, ein langes Stück, die etwas zu weit, sich in eine Lücke (Verhinderung einer 4-reihig Abschluss!), Mario Schlagen ein Pilz und immer enorm und sterben!, kleines Stück Trümmer, die nach Zeilen werden zerstört, die Schwerkraft nach oben zu schweben Stück nach oben, usw.
Lokal zwischengespeichert Video in Flash Video (FLV) Format (benutze VLC zu spielen):
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
Aus der Beschreibung auf YouTube:
„TETRIS gespielt von realen menschlichen Wesen-Sitzung in einem Auditorium:“
TETRIS ist der 4. Video-Performance der GAME OVER Project, geleitet von dem Schweizer Künstler Guillaume REYMOND (NOTsoNOISY Kreativ-Agentur).
Diese Stop-Motion-Video wurde gedreht und spielte für „LES URBAINES“ Festival http://www.urbaines.ch im Palais de Rumine (Lausanne, Schweiz) auf November 24th 2007.
Sie finden weitere Informationen und auch SPACE INVADERS, PONG und POLE POSITION auf unserer Website http://www.notsonoisy.com/gameover
Lokal zwischengespeichert Video in Flash Video (FLV) Format (benutze VLC zu spielen):
tetris_with_human_blocks_guillaume_reymond_2007nov.flv

4.3.16 2,5-dimensionale Tetris

Der Begriff „2,5-dimensional“ ist hier im Sinne einer nicht-orthogonale Hinblick auf eine zweidimensionale Version von Tetris, mit einigen Dicke in der dritten Dimension.
tetris_2andhalfd_andre_michelle.jpg
Andre Michelle's Tetris-Spiel für einen Flash Spieler http://lab.andre-michelle.com
(Finden Sie den Link „tetris3d“ in „F7: GAMES“.)

4.4 3-dimensionale Tetris

tetris_3d_gno3dtet_seb.jpg
Linux / GTK Version
Dreidimensionale Tetris in Form einer Java-Applet für den Internet-Browser:
http://paperstack.com/brokout
Dreidimensionale Tetris für den Windows Betriebssystem:
http://www.sfu.ca/~vwchu/3dtetris.html

4.5 4-dimensionale Tetris

4d_tetris.jpg
Greg Kaiser's „HyperTetris“ (1996): ein 4-dimensionale Tetris
In [1996], [...], Greg Kaiser zusammengenommen ein Vier-dimensionalen Variante auf dem klassischen Spiel.
Verwenden IrisGL (a.k.a.  igl) schuf er eine Arbeitsgruppe, wenn schwer zu spielen, Spiel mit vier Unter-Bildschirmen zu zeigen verschiedene dreidimensionale Aspekte der gesamten Spiel-Raum.
[Weil] es ist nicht leicht [verständlich] Art und Weise zu ziehen Vier-D-Objekte in einer Zwei-D-Bildschirm, die vier Sub-Ansichten sind eine praktische Methode zu manipulieren und zu visualisieren die Drehung und Übersetzung der Stücke durch die vier Dimensionen ( im Spiel namens x,y,z,w).
Anstatt die Vollendung von Blöcken Zeilen wie im Original, das Ziel ist in diesem Fall füllen einen kompletten Würfel in der x,y,z subview (in der Regel 4 von 4 von 4).
Die anderen subviews, die die „w“ Dimension sind in eine Standard-4 von 4 von 10 Block Absprache mit „w“ gegen den langen, „vertical“ Dimension in allen drei Fällen mit unterschiedlichen Grundlagen der (x,y), (x,z), (y,z).
Gravity Handlungen in der „-w“ Richtung, so dass Teile „herunterfallen“ in den drei langen subviews, die „w“, und nicht bewegen, es sei denn, durch die Spieler in den letzten (x,y,z) subview.
Es dauert eine Weile gewöhnen, gelinde gesagt.
Wenn durch ein Wunder der Geduld oder eine Veränderung der Parameter des Spiels, man tut, ein Würfel, sie werden verschwinden, wenn die das ausgefüllte Linien tun in der ursprünglichen Tetris, obwohl keine der Gäste wird in HyperTetris.
Benjamin Bernard (2000)
http://archive.ncsa.uiuc.edu/Classes/MATH198/bernard/oldIndex.html

4.6 N-dimensionale Tetris

polytope_tetris_screenshot3.jpg
Polytope Tetris (2003): ein N-dimensionale Spiel Tetris-Variante
http://polytopetetris.sourceforge.net
Polytope Tetris ist n-dimensional Tetris.
Inspiriert durch die HyperTetris Programm, ermöglicht es Ihnen Polytope Tetris Tonnen Tetris spielen in irgendeiner ZAHL DER Dimension.
Tetris spielen in 3D, 4D, 5D, oder mehr.
HyperTetris ist ein viel catchier Name als Polytope (def) Tetris, aber ich kann nicht stehlen den Namen.
http://polytopetetris.sourceforge.net

5. „Standard Tetris“ Spezifikation

5.1 Einleitung

Die Definition von „Standard-Tetris“ ist ein idealisiertes Modell der wichtigsten Merkmale und Verhaltensweisen der ersten IBM-PC Umsetzung des Tetris-Spiel (ca.  1986-1988).
Die idealisierten Modell basiert auf inferring die scheinbare Absicht der Entwickler des ersten IBM-PC Umsetzung des Tetris-Spiel.
Beispielsweise scheint es vernünftig zu folgern, dass die Entwickler der ersten IBM-PC Umsetzung des Tetris-Spiel dient zur Auswahl der Form von jedem neuen Stück „zufällig“ fallen, und dass die Verwendung des Borland C Umsetzung der rand() Funktion war lediglich eine praktische Annäherung der die Absicht.
Die Definition von „Standard-Tetris“ legt fest, dass die Form von jedem neuen Stück fallen wird „zufällig“ ausgewählt.
Dieses ideale Verhalten kann nicht erreicht werden durch eine Umsetzung, aber Implementierungen können Angleichung der ideale Verhalten.
Obwohl keine Umsetzung kann durchaus Umsetzung der Definition von „Standard-Tetris,“ die Ideale der „Norm Tetris“ mit objektiven Merkmale und Implementierungen verglichen werden können entsprechend ihrer relativen Nähe zu den Idealen der „Norm Tetris.“
Dieser Abschnitt beschreibt eine Reihe von Elementen, Verhaltensweisen und Regeln, die gemeinsam definieren „Standard Tetris.“

5.2 Standard Tetris Bord

Die Platine ist ein Raster von Zellen, mit 10 Spalten und 20 Zeilen, mit einem Gesamtvolumen von 10 * 20 = 200 Zellen.
tetris_diagram_board_10x20_empty_new.jpg
Tetris Standard Board (10 Spalten, 20 Zeilen)
Jede Zelle kann entweder unbesetzt (leer) oder besetzt (voll).

5.3 Standard Tetris Stücke

Es gibt sieben Tetris (7) Standard-Stück, mit folgendem Schreiben Namen:
{ O, I, S, Z, L, J, T }
Das Schreiben Namen sind inspiriert von den Formen der Stücke.
tetris_diagram_pieces_orientations_new.jpg
Die sieben Tetris Standard-Stücke und ihre „Ausrichtung“
Der Punkt in (0,0) fällt mit Bord Position (6,20), wenn das Stück den ersten Blick scheinen mag.
Die erste Spalte zeigt die „ersten“ Einschätzungen.
Im folgenden wird das Wort „Orientierung“ dient zur Beschreibung von jedem Staat ein Stück, in einer Reihe von Staaten erlaubt, das kann dazu führen, von einer Rotation entgegen dem Ereignis.
Ändern der „Ausrichtung“ von einer bestimmten „Ausrichtung“ eines „I, S“ oder „Z“ Stück, erfordert die Kombination aus einer Rotation und einer Übersetzung.
Daher ist das Wort „Orientierung“ ist hier im Sinne von etwas mehr als Rotation allein.
Allerdings, „Orientierung“ ändern kann nur in Reaktion auf eine Rotation entgegen dem Ereignis, und der Zyklus beginnt von unterschiedlichen „Orientierungen“ für jedes Stück kommt, oder Streichhölzer, den Zyklus aus reinen Rotationen.
Die besondere Verwendung des Wortes „Orientierung“ in diesem Zusammenhang ist fast gleichbedeutend mit der Bedeutung des Wortes „Dreh-oder Winkel,“ aber das Wort „Orientierung“ dient anstelle der „Rotation“ zu versuchen, um die Aufmerksamkeit auf die Tatsache, dass einige Stücke erfordern mehr als die Rotation um die Reihe von Staaten erlaubt die sich aus Veranstaltungen „Rotation“ entgegen dem Uhrzeigersinn.
Teile können nur Orientierungen Schalter (oder an einem bestimmten horizontalen oder vertikalen Übersetzung), wenn die sich ergebende Zustand der das Stück hätte keine besetzten (ganze) Zellen außerhalb des Gebiets des Vorstands und hätte keine besetzten Zellen, die sich derzeit alle besetzten Zellen des Vorstandes.
(In dieser Regel, den besetzten (ganze) Zellen des Stückes sind nicht als Teil der „derzeit besetzten Zellen des Vorstands“
In den folgenden Bemerkungen, jede Bezugnahme auf das Ergebnis einer Rotation entgegen dem Wettkampf wird mit der Annahme, dass eine solche Rotation kann tatsächlich durchgeführt werden, da die bestehenden Bedingungen des Stückes und das Brett.
Die „O“ (box) Stück hat nur eine einzige Ausrichtung, und ändert nichts an den Standorten eines seiner besetzten (voll) Zellen in Reaktion auf eine Rotation entgegen dem Ereignis.
Die „I“ (Linie) Stück hat zwei mögliche Ausrichtungen, zunächst in eine horizontale Ausrichtung.
Die „I“ Stück wechselt zwischen den beiden Orientierungen als Reaktion auf Rotation entgegen dem Uhrzeigersinn aufeinanderfolgenden Veranstaltungen.
Die „S“ und „Z“ Stücke jeweils über zwei mögliche Orientierungen.
Diese Stücke wechseln sich jeweils zwischen zwei Orientierungen als Reaktion auf Rotation entgegen dem Uhrzeigersinn aufeinanderfolgenden Veranstaltungen.
Die „L“, „J“ und „T“ Stücke jeweils über vier möglichen Orientierungen, und diese Leitlinien sind die Ergebnisse von einfachen Drehungen um Punkte-Center in die Formen.
Wenn ein Stück nach der Installation auf dem Brett, das Stück hat seinen „großen Achse“ in eine horizontale Ausrichtung, und das Stück ist auf der Oberseite des Brettes.
Es wird daher keine Stücke werden zunächst der Lage, die ihren Leitlinien verändert.  Das Stück muss Abstieg durch eine Zeile haben die Möglichkeit, ihre Ausrichtung ändern.
Sobald ein Stück zurückgegangen ist durch eine Zeile auf dem Brett, alle Stück Leitlinien erreicht werden kann (vorausgesetzt, das Stück ist nicht zu nah an den Seitenwänden oder an der aktuellen Haufen Stück).

5.4 Standard Tetris Flussdiagramm

Im Folgenden finden Sie eine ungefähre Flussdiagramm für ein Standard-Tetris Spiel.
standard_tetris_flowchart_for_timer_event_001.gif
Voraussichtliche Flussdiagramm für ein Standard-Tetris Spiel
standard_tetris_flowchart_for_input_events_001.gif
Voraussichtliche Flussdiagramm für ein Standard-Tetris Spiel

5.5 Standard Tetris Stück Schöpfung

Die folgende Abbildung zeigt die (4 * 2 Zelle Zelle) Region auf dem Brett, in dem alle Stücke angezeigt, wenn erstellt.
tetris_diagram_board_10x20_spawn_area.jpg
Region, in Stücke angezeigt werden, wenn im Standard Tetris
Wenn ein neues Stück nach der Installation auf dem Brett, seinen Ursprung fällt mit dem Punkt in diesem Diagramm, und das Stück wird vollständig durch den schattigen Bereich auf dieser Abbildung.
Wenn ein neues Spiel gestartet wird, eine vollständige freien Fall Verzögerung abgelaufen ist, und auf der ersten freien Fall Iteration ein Stück ist, brachte in die Oberseite des Brettes.
Während des normalen Spiel spielen, wann ein bestimmtes freien Fall Iteration ein Stück „Land,“ eine vollständige freien Fall Verzögerung abgelaufen ist und auf der nächsten freien Fall Iteration ein Stück ist, brachte in die Oberseite des Brettes.
Wann ist ein Stück hervorgebracht, die Art von Stück ausgewählt ist mit dem folgenden Algorithmus:
pieceIndex = 1 + (randomInteger % 7);  // 1..7
Denn es ist ein konstanter p (= 1/7) Chance der Auswahl einer bestimmten Art von Stück, und alle Stücke des gleichen Typs werden nicht unterschieden, die Wahrscheinlichkeit, dass genau k Stücke eines bestimmten Typs nach n Studien folgt eine Binomialverteilung:
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 )
Wenn wir wählen aus dem Kreis der 7 (sieben) Stück nach dem Zufallsprinzip, liegt die Wahrscheinlichkeit, daß sich ein bestimmtes Stück ist p=(1/7).
Wenn wir dies tun n=70 mal, zum Beispiel die Wahrscheinlichkeit, sich genau k Stücke (mit k im Bereich 0 zu n) ist gegeben durch die Binomialverteilung, wie im folgenden Bild.
binomial_distribution_n70_p7th.jpg
Binomialverteilung für n=70, p=(1/7)
So kann man vorhersagen, die durchschnittlichen Gesamtkosten Stücke von einer einzigen Art eine Gesamtzahl von zufälligen Stück, und man kann auch die Berechnung der zu erwartenden Varianz und Standardabweichung (Quadratwurzel der Varianz):
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
Wenn wir konvertieren einem zufälligen Wert zu einem Stück Inhalt, wir interpretieren sie wie folgt:
value  piece
=====  =====
  1     "O"
  2     "I"
  3     "S"
  4     "Z"
  5     "L"
  6     "J"
  7     "T"
[Die vor-kommerziellen MS-DOS Version von Tetris verwendet die Zufallszahl-Funktion bietet die Borland Pascal Compiler.
Diese Funktion verwendet eine 32-Bit-Status-Variable.
Daher ist die Folge von Zufallszahlen beschränkte sich auf 2^32 unterschiedliche Werte.
Daher ist im Prinzip ein Spieler könnte entdecken, nach Fallenlassen vielleicht 10 Stücke, die genaue Stelle in einer Reihe von 2^32 Zahlen entsprechen dem derzeitigen Stand des Spiels.
Wenn Tetris Simulationen ausgeführt werden mit der festen Abfolge von 2^32 Stücke, dann optimale Entscheidungen finden Sie für jeden Platz in der Sequenz.
(Es scheint ausreichend zu sein Chancen zu verwirklichen, die an Bord einer völlig leeren Zustand Bord, das uns erlaubt, synchronisiert mit dem precomputed optimale Lösung Pfad.)
Die Gefahr der Verwendung einer einfachen Zufallszahlengenerator in eine Simulation zu finden, eine optimale Lösung für ein Problem ist, dass die Lösung optimal nur für den jeweiligen Weg durch das Problem Raum von der einfachen Zufallszahlengenerator.  ]

5.6 Standard Tetris Kontrollen

Während des Spiels werden die folgenden Eingänge stehen zur Verfügung:
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 Eingänge nehmen Einfluss auf die steigende Kante der positiven Eingang (auf den Knopf drücken, im Gegensatz zu Button release).
Wenn eine Taste drücken auftritt, gilt dies als Antrag.
Holding eine Taste nach unten ab einem bestimmten Zeitpunkt könnte dazu führen, dass die „auto-repeat“ Merkmal einer Tastatur, neue Schaltfläche Pressen - aber diese Funktion ist außerhalb der Game-Engine.
Die Eingänge oben mit dem ursprünglichen Spiel Tetris.
Drehen Anfragen ausgeführt werden können, wenn es keine Überschneidungen zwischen der gewünschten Ausrichtung und Zellen auf dem aktuellen Board (mit Ausnahme der sinkenden Stück), und wenn die gewünschte Ausrichtung hat keine festgelegten Zellen außerhalb der Platine.
Übersetzen Anfragen ausgeführt werden können, wenn es keine Überschneidungen zwischen der gewünschten Konfiguration übersetzt und Zellen auf dem aktuellen Board (mit Ausnahme der sinkenden Stück), und wenn die gewünschte Konfiguration übersetzt hat keine festgelegten Zellen außerhalb der Platine.
Input-Anfragen werden verarbeitet mit einer Latenz hängt davon ab, dass die Framerate des Spiels (Beispiel: 75 Hz), und ersucht wirksam (falls gültig) sofort.
Ein Stück entfallen kann ohne Linie fallen Schritte auftritt.
Ein Stück kann übersetzt werden mehrmals nach links oder rechts, und später fallen gelassen, ohne alle erleben eine offizielle Linie fallen Schritt.
Weil ein Stück neu hervorgebracht, kann sich nicht gedreht werden (denn es ist steckengeblieben gegen die Oberkante der Platine), der Spieler muss akzeptieren, zumindest ein Stück fallen Schritt, wenn Rotationen sind erwünscht oder erforderlich.
Die Auswirkungen auf die Partitur ist unbedeutend.

5.7 Standard Tetris Stück „Landung“

Wenn ein Stück ist einfach fallen, es fällt durch eine einzige Zeile bei jedem Stück fallen Iteration.
Es wird eine Iteration bewegt, dass er von einem Ort ohne Kontakt mit horizontalen Flächen zu einem Ort, hat Kontakt mit horizontalen Flächen.  Sobald dieser Iterationen tritt auf, die Stücke sind im ruhenden Kontakt.
Wenn eine Iteration beginnt mit einem Stück Ruhe in Kontakt mit einer horizontalen Fläche, das Stück „Land,“ und wird Teil der statischen Haufen.

5.8 „Standard-Tetris-Linien abgeschlossen“

Ein ausgefülltes Zeile ist eine Zeile des Haufens, in denen alle Zellen besetzt sind.  Wenn eine Zeile abgeschlossen wird eliminiert aus dem Haufen, und die Zeilen über dem eliminiert Zeile nach unten verschoben werden, indem eine Zeile, um die Lücke, dieses gilt als „abgeschlossen.“
Wenn ein Stück Land wird es Teil des Haufens.
Unmittelbar nach dem Stück Land, den Haufen kontrolliert wird für abgeschlossene Reihen, und alle Zeilen abgeschlossen werden eliminiert.
Bis zu vier Zeilen können gleichzeitig abgeschlossen werden kann.
Die folgende Tabelle gibt die obere Grenze auf Strecken gleichzeitig abgeschlossen durch ein einziges Stück:
piece   max. simultaneous
         rows completed
=====   ==================
 "O"           2
 "I"           4
 "S"           2
 "Z"           2
 "L"           3
 "J"           3
 "T"           2

5.9 Standard Tetris „Ebenen“

Standard Tetris hat 10 verschiedene Schwierigkeitsstufen, nummeriert 1 (eins) durch 10 (zehn), mit Niveau 1 werden die „am wenigsten schwierig.“
Die Höhe Index ist die maximal zwei Werte:
actualLevel = max( initialLevel, earnedLevel );
Die initialLevel Wert ist die Ebene, dass die Spieler wählt beim Start ein neues Spiel.
Das Muster der Stufe als Funktion der ausgefüllten Zeilen ist problemlos in die vor-kommerziellen MS-DOS Version von 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
Somit ist die earnedLevel Wert wird nach den folgenden Algorithmus:
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 fallen Iteration Verzögerung

Standard Tetris ist ein Echtzeit-Verzögerung zwischen aufeinanderfolgenden Linie den freien Fall Iterationen, dass ist eine Funktion des aktuellen Schwierigkeitsgrad.
Die folgende Beziehung zwischen dem Umfang und Inhalt fallen Iteration Verzug auf Stoppuhr wiederholten Messungen auf allen Ebenen der vor-kommerziellen MS-DOS Version von 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
So schaffen wir die folgende Formel für die Iteration Verzögerung Wert als Funktion der tatsächlichen Inhalt:
iterationDelay = ((11 - actualLevel) * 0.05);  // [seconds]
Wenn die Platine ist leer, und es gibt keine Benutzereingaben, brachte ein Stück auf tatsächliche Höhe 1 landet in etwa 10 Sekunden, und brachte ein Stück auf tatsächliche Höhe 10 landet in etwa 1 Sekunde.

5.11 Standard Tetris „des Gastes“

Standard Tetris nur vergibt Punkte für den Akt der Landung ein Stück.
Es gibt keine Punkte vergeben für den Akt der Abschluss einer einzigen Zeile, oder den Abschluß zwei, drei oder vier Zeilen gleichzeitig.
[Anmerkung: Einige Varianten von Tetris Punkte vergeben für die Handlung der Vollendung Linien, mit einer exponentiell steigenden Bonus für eine zunehmende Anzahl von Zeilen gleichzeitig abgeschlossen.
Somit ist die Strategie zur Maximierung des Gastes in solchen Varianten von Tetris verlangt die Schaffung Chancen bekommt „man einen Tetris“ vom Slang für die Benutzung der „I“ Form zu vier gleichzeitige Linien und bekommen viele Punkte.  ]
Wenn Sie einen leeren Karton, und Sie lassen einen nicht „I“ Stück eine den freien Fall und landen, oder Sie sofort ein Drop-„I“ Stück, können Sie die folgende Nummer Diagramm mit dem vor-kommerziellen MS-DOS Version von 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, nicht „I“ Stücke fallen insgesamt 18 Zeilen.
Dies entspricht dem Punkt Unterschied zwischen den freien Fall und Instant-Drop-Fällen.
Durch das Experimentieren mit Zwischen-Fällen ist es einfach zu schließen, die folgende Nummer Formel:
pointAward = ( (21 + (3 * actualLevel)) - freeFallIterations );
Beachten Sie, dass diese Formel hat das nichts zu tun mit der Entfernung ein Stück fällt!
Es ist unbedingt eine Funktion der tatsächlichen Niveau, und eine Strafe für die Anzahl der Iterationen ein Stück darf frei fallen.
Dies straft eines Benutzers für benötigen Zeit zum Nachdenken.
Beachten Sie bitte auch, dass da ein Stück kann nicht gedreht werden zunächst als es zum ersten Mal Spawns, ein Spieler bestraft wird von mindestens einem freien Fall, wenn Iteration Rotationen sind erforderlich, um ein Stück auf den Haufen.
Dies wirkt sich wahrscheinlich nie menschlichen Spielern, es sei denn, sie irgendwie: erkennen, das Stück, drücken Sie die Übersetzung Tasten „(links“ oder „rechts),“ drücken Sie die Taste „rotieren“ ein oder mehrere Male, und drücken Sie die Taste „Drop,“ alle innerhalb von weniger als 0.5 Sekunden