Tetris
Colin Fahey
1. Software
2. Introdução
Este artigo descreve como um computador pode jogar o clássico vídeo game Tetris em obter as informações sobre o conselho de administração, determinação boas ações, bem como a realização dessas acções.
Este artigo inclui software capaz de jogar Tetris em tempo real.
O software inclui o melhor tempo real Tetris-playing algoritmo de domínio público.
Este artigo define regras para “Standard Tetris,” uma especificação baseada no original 1986 pré-comerciais para a versão de Tetris Personal Computer (PC).
Em 2003, o software incluído neste artigo foi usado para permitir que um computador para jogar Tetris rodando em um computador separado.
Ordinária USB câmaras vídeo foi usado para permitir que o computador para “ver” a tela do outro computador.
Um relé bordo RS-232 foi controlada através de uma interface para permitir que o computador para “pressionar as teclas” no teclado do outro computador.
Assim, o primeiro computador tem uma relação com o segundo computador que é semelhante a um típico jogador do relacionamento humano a um computador quando jogando Tetris, o jogo só é conhecida pelo estado a olhar para o ecrã, eo jogador acções só pode ser iniciado através de um teclado .
A configuração neste demonstração estabelecido que um computador pode jogar Tetris melhor do que um ser humano, em condições normais de tempo real jogando Tetris condições.
3. História do Tetris
Em 1985, Alexey Pajitnov e Dmitry Pavlovsky eram engenheiros informáticos no Computing Center of the Russian Academy of Sciences.

Dorodnicyn Computing Centre do Russian Academy of Sciences
Alexey e Dmitry estavam interessados em desenvolver e vender computador viciantes jogos.
Eles experimentam as diferentes jogos.
Alexey foi inspirado no grego antigo puzzles, Pentaminos, que envolveu enigma arranjar peças feitas de cinco quadrados.
Alexey pensamento da ideia de organizar Pentamino peças como eles caíram em uma rectangular a taça, mas percebeu que a doze de cinco diferentes formas quadradas eram demasiado complexas para um jogo de vídeo.
Alexey comutada para “tetramino” utilizando sete peças, cada um constituído por quatro quadrados.
Em 1985.6, Alexey Pajitnov programada a primeira versão de Tetris em um Electronica 60.

Dmitry Pavlovsky, Alexey Pajitnov, e Tetris.
Em 1985-1986, Vadim Gerasimov, uma alta de 16-year old-escolar computador prodígio que trabalhou na Academia, implementado Tetris para o IBM PC correr o MS-DOS sistema operacional.
(Vadim Gerasimov mais tarde fez a investigação ao MIT Media Laboratory, a partir de 1994 até 2003, recebendo um Ph.D. após completar muitos projetos interessantes:
http://vadim.www.media.mit.edu)

A introdução da tela 1987-1988 pré-comerciais para a libertação de Tetris PC

A tela do jogo 1987-1988 pré-comerciais para a libertação de Tetris PC
Após 1987, Tetris espalhados ao redor do globo.
The Tetris Company, LLC, é proprietária da marca Tetris.
4. Projetos inspirado pelo Tetris
4.1 0-dimensional Tetris
Ainda não desenvolvido.
4.2 1-dimensional Tetris
Ziga Hajdukovic tem desenvolvido 1-dimensional Tetris software que pode ser jogado em um browser da Internet.
Ziga Hajdukovic também desenvolveu 1-dimensional Tetris software para telefones celulares usando a plataforma Java J2ME.
4.3 2-dimensional Tetris
Todas as variantes Tetris convencionais estão nesta categoria.
Esta seção inclui interessantes variantes.
4.3.1 Cada vez maior jogo Tetris: Delft University of Technology (1995)

Tetris jogado em um edifício; 2000 m^2 superfície; Delft University of Technology (1995)

Tetris jogado em um edifício; 2000 m^2 superfície; Delft University of Technology (1995)
4.3.2 Outro jogo Tetris jogado em um edifício: Brown University (2000)

Tetris jogo exibido usando luzes nas janelas de um edifício em Brown University (2000.4-200.5) http://bastilleweb.techhouse.org
“Acho que foi apenas um dos mais incríveis do dia-coisa que eu podia imaginar na minha vida. Tal como sempre disse Steve Jobs, a viagem é a recompensa.”
“Ele me fez pensar em projectos de volta fizemos na faculdade. Coisas que eram quase reversível que as outras pessoas que não pensam em fazer.”
Steve Wozniak (2000)
4.3.3 Internet browser jogo com MIT “Green Building” imagem

Vadim Gerisimov's navegador Internet Tetris
Este navegador Internet Tetris variante foi criada por Vadim Gerasimov.
Este navegador Internet Tetris as características “Green” a construção do campus da MIT.
Tetris Esta variante tem apenas nove colunas em vez de a norma dez colunas.
Esta variante apresenta Tetris com peças novas orientações aleatórias.
Vadim Gerasimov é a pessoa que escreveu o código para o computador PC versão de Tetris em 1986.
Vadim Gerasimov fez doutorado a investigação ao MIT Media Laboratory durante 1994-2003, trabalhando em vários projetos interessantes.
4.3.4 PIC16F84 12 MHz microcontrolador à base de NTSC / PAL video jogo Tetris

PIC16F84 12 MHz microcontrolador à base de NTSC / PAL video jogo Tetris
A imagem acima mostra o NTSC / PAL video output produzido por um microcontrolador PIC16F84 12 MHz rodar o software escrito por Rickard Gunee em 1998.
O sinal de vídeo é gerado pelo software de controlo das saídas digitais.
4.3.5 “Scopetris” osciloscópio Tetris por Lars Pontoppidan (2007.8)

“Scopetris” osciloscópio Tetris por Lars Pontoppidan (2007.8)
Lars Pontoppidan escreveu código para o microcontrolador AtMega32, e acrescentou circuitos analógicos simples, para criar uma versão Tetris que pode ser desempenhado por um osciloscópio.
Certos registos de controlo do AtMega32 microcontrolador 8-bit sinais de saída, e, quando passaram por uma “R-2R” resistor circuito elétrico para a digital para o analógico (D/A) conversão, o resultado pode controlar os sinais analógicos (x,y) coordenadas de um osciloscópio vara (quando for o osciloscópio “X-Y modo” a definir).
YouTube vídeo:
FLV vídeo:
4.3.6 Obfuscated código Tetris: C / Unix
O seguinte foi atribuído “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 código Tetris: Perl código
O que se segue é Tetris para o Perl intérprete: Perltris (versão 20050717) por 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) é um padrão para a descrição de objectos gráficos usando XML.

Mozilla SVG Tetris: Tetris implementado utilizando uma descrição Scalable Vector Graphics (SVG)
4.3.9 Google “widget” Tetris
Google, Yahoo!, e Microsoft, e de outras empresas, têm promovido miniatura baseados na Internet, software chamado “widgets” que normalmente são caracterizadas por alguns utilização de dados dinâmicos disponíveis na Internet.
Um desses widget disponíveis através Google é um jogo Tetris.
O exemplo a seguir é cute, mas molda a girar em irritar maneiras:

Google “widget” Tetris
Outros Google widgets:
4.3.10 MIT investigação papel: “Tetris is Hard, Even to Approximate” (2002)
O documento contém uma investigação após a prova de que um certo tipo de Tetris variante é “NP-completa.”
Erik D. Demaine, Susan Hohenberger, e David Liben-Nowell, “Tetris is Hard, Even to Approximate”, Technical Report MIT-LCS-TR-865, Massachusetts Institute of Technology, 2002.10.21.
“NP completa-se” uma classificação do custo do tempo e do espaço custo de um algoritmo.
Outras classificações incluem “P” e “NP”.
A classificação de “NP-completo” implica que, para os problemas maiores do que alguma pequena dimensão, é pouco provável o algoritmo para encontrar uma solução desejada em prática uma quantidade de tempo ou de espaço.
4.3.11 Investigação documento: “Applying reinforcement learning to Tetris”
O seguinte documento, publicado 2005.5.30, por Donald Carr no departamento de Ciência da Computação Rhodes University, África do Sul, apresenta o pedido de “reforço da aprendizagem” ao Tetris.
4.3.12 Tetris saia (2007.11)

Tetris saia (2007.11)
O Tetris saia foi criado por “Lucy” (“hissyfitoly” em etsy.com) antes 2007.11.
Desde o criador da descrição da saia (colocados à venda em 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."
Fórum comentários sobre este saia:
“O homem que saia suga a Tetris”
“Ahahahaha, pensei a mesma coisa.”
“Existe uma linha completa para baixo no fundo ... concluídas linhas desaparecem.” “FAZER MAIS” “.”
“Não deveria haver um espaço na parte traseira ou dianteira longa peça onde se enquadraria perfeitamente ...”
“Isso é realmente uma saia embora feio. O meu namorado não podia comprar flores e chocolate-me suficiente para convencer-me ao desgaste que a coisa.”
4.3.13 Tetris fase acto (2007.4)

Tetris fase acto (2007.4)
“Desde aqueles que lhe trouxe a Triforce em 2006 ... Vem a próxima geração de objeto inanimado skit ... Tetris.”
Localmente-cache Flash vídeo (FLV) vídeo em formato (utilize a desempenhar VLC):
4.3.14 Hilariante Tetris variações sobre um japonês de televisão mostram

Tetris variações em japonês de televisão mostram
Este vídeo segmento de televisão mostram um japonês inclui hilariante variações de Tetris, incluindo:
peças que desaparecem após a aterragem, uma peça que preenche toda uma fila (completando assim uma fila após a aterragem), várias peças caindo em simultâneo, irregularmente peças moldadas, uma longa peça que está ligeiramente demasiado grande para caber em um fosso (impedindo uma linha 4 - conclusão!), Mario acertando um cogumelo e se tornando enorme e morrer! de pequeno pedaço detritos remanescentes após filas são destruídos, fazendo peças flutuar para cima gravidade para o topo, etc
Localmente-cache Flash vídeo (FLV) vídeo em formato (utilize a desempenhar VLC):
4.3.15 “The Original Human TETRIS Performance by Guillaume Reymond” (2007.11)

“The Original Human TETRIS Performance by Guillaume Reymond” (2007.11)
A partir da descrição sobre YouTube:
“TETRIS desempenhado pelos verdadeiros seres humanos-sentado em um auditório:”
TETRIS é o 4o vídeo desempenho do GAME OVER Project, dirigida pelo artista suíço Guillaume REYMOND (NOTsoNOISY criativo da agência).
Este stop-motion video foi baleado e jogado para “LES URBAINES” festival
http://www.urbaines.ch no Palais de Rumine (Lausanne, Suíça) em November 24th 2007.
Localmente-cache Flash vídeo (FLV) vídeo em formato (utilize a desempenhar VLC):
4.3.16 2.5-dimensional Tetris
“2.5-dimensional” O termo é usado aqui para significar um não-ortogonais vista de uma bidimensional versão de Tetris, com cerca de espessura na terceira dimensão.
(Encontre o link “tetris3d” em “F7: GAMES”.)
4.4 3-dimensional Tetris

Linux / GTK versão
Tetris tridimensional, sob a forma de uma applet Java para navegadores Internet:
Tridimensional Tetris Windows para o sistema operacional:
4.5 4-dimensional Tetris

Greg Kaiser's “HyperTetris” (1996): a 4-dimensional Tetris
Em [1996], [...], Greg Kaiser juntos um quatro-dimensional variante sobre o clássico jogo.
Usando IrisGL (a.k.a. igl) ele criou um grupo de trabalho, se for difícil de jogar, jogo com quatro sub-telas retratam a três dimensões diferentes aspectos do jogo-a totalidade do espaço.
[Porque] não existe uma facilidade [compreensível] maneira de chamar a quatro-D dois objetos em uma tela-D, as quatro sub-pontos de vista são um método prático de manipular e visualizar a rotação e tradução das peças, através das quatro dimensões ( no jogo chamado x,y,z,w).
Ao invés de completar linhas de blocos, como no original, o objetivo neste caso é a de preencher um cubo completo no x,y,z subview (geralmente 4 a 4 em 4).
Os outros subviews que contêm as “w” dimensão são dispostos em um padrão 4 a 4 por 10 blocos acordo com “w” sendo o longa, “vertical” dimensão em todos os três casos, com diferentes bases de (x,y), (x,z), (y,z).
Gravidade atua no “-w” direcção, de modo “caio” em pedaços os três longos subviews que incluem “w”, e não se desloquem a menos que o último jogador no controle (x,y,z) subview.
Demora algum tempo a habituar-, para dizer o mínimo.
Se por algum milagre de paciência ou alterando os parâmetros do jogo, faz uma completa um cubo, ele irá desaparecer, as linhas concluída em fazer o Tetris original, embora não seja mantido na pontuação HyperTetris.
Benjamin Bernard (2000)
4.6 N-dimensional Tetris

Polytope Tetris (2003): um N-dimensional jogo Tetris variante
Polytope Tetris é n-dimensionalmente Tetris.
Inspirado no programa HyperTetris, Polytope Tetris toneladas permite que você joga em qualquer Tetris NÚMERO DE dimensão.
Jogue Tetris em 3D, 4D, 5D, ou mais.
HyperTetris é um nome muito catchier do que Polytope (def) Tetris, mas eu não posso roubar o nome.
5. “Standard Tetris” especificação
5.1 Introdução
A definição do “padrão Tetris” é um modelo idealizado das mais importantes características e comportamentos dos primeiros IBM-PC implementação do jogo Tetris (circa 1986-1988).
O modelo idealizado baseia-se em deduzir as aparentes intenções dos promotores do primeiro IBM-PC implementação do jogo Tetris.
Por exemplo, parece razoável inferir que os desenvolvedores do primeiro IBM-PC implementação do jogo Tetris destinado a selecionar a forma de cada nova queda peça “ao acaso,” e que a utilização do Borland C execução do rand() função era apenas uma aproximação das práticas a intenção.
A definição do “padrão Tetris” especifica que a forma de cada peça nova queda, deve ser seleccionados “aleatoriamente.”
Este comportamento ideal não pode ser alcançada por qualquer aplicação, mas implementações podem aproximar o comportamento ideal.
Apesar de não aplicação pode perfeitamente aplicar a definição da “norma Tetris,” os ideais de “Tetris Standard” envolvem características objectivas, e implementações podem ser comparados de acordo com a sua relativa proximidade com os ideais da “Standard Tetris.”
Esta seção descreve um conjunto de elementos, comportamentos, regras e que, coletivamente, definem “Standard Tetris.”
5.2 Standard Tetris bordo
O conselho de administração é uma grade de células, com 10 colunas, e de 20 linhas, para um total de 10 * 20 = 200 células.

Standard Tetris bordo (10 colunas, 20 linhas)
Cada célula pode ser desocupados (vazio) ou ocupados (completo).
5.3 Standard peças Tetris
Há sete (7) padrão Tetris pedaços, com os seguintes nomes carta:
{ O, I, S, Z, L, J, T }
Os nomes são inspirados por carta as formas das peças.

Os sete Standard peças e suas “orientações” Tetris
O dot (0,0) coincide com a posição (6,20) bordo quando a peça apareceu pela primeira vez.
A primeira coluna mostra as “orientações” iniciais.
Nos seguintes, o termo “orientação” é usado para descrever qualquer estado de uma peça, dentro de um conjunto de estados permitidos, que podem resultar de uma rotação counterclockwise evento.
Mudar de “orientação” a partir de uma determinada “orientação” de um “I, S,” ou “Z” peça, requer a combinação de uma rotação e uma tradução.
Portanto, a “orientação” palavra é usada aqui para significar algo mais do que rotação sozinho.
No entanto, a “orientação” pode mudar apenas em resposta a uma rotação counterclockwise evento, bem como o ciclo de distintas “orientações” para cada peça aproxima, ou jogos, o ciclo resultantes da pura rotações.
O uso da palavra especial “orientação,” neste contexto, é quase equivalente ao significado da palavra “rotação” ou “ângulo,” mas a “orientação” palavra é usada em vez de “rotação” a tentativa de aproximar a atenção para o facto de algumas peças exigem mais do que a rotação de produzir conjunto de estados permitidos resultante de acontecimentos counterclockwise “rotação.”
As peças só podem mudar de orientações (ou submetidos a um específico horizontal ou vertical tradução) se o estado resultante da peça não teria qualquer ocupados (completo) células além da área da administração e não teria qualquer ocupados células que qualquer sobreposição actualmente ocupados células do conselho de administração.
(Em esta regra, os ocupados (completo) células da peça, não são consideradas como parte das “células actualmente ocupados do conselho de administração”
Nos seguintes observações, qualquer referência a um resultado de um acontecimento counterclockwise rotação é feita com o pressuposto de que uma tal rotação pode realmente ser executada, tendo em conta as actuais condições da peça e do conselho de administração.
O “O” (casa) só tem uma peça única orientação, e não alterar os locais de qualquer um dos seus ocupados (completo) células em resposta a qualquer rotação counterclockwise evento.
O “I” (linha) peça tem duas possíveis orientações, inicialmente, aparecendo em uma orientação horizontal.
A peça “I” alterna entre as duas orientações em resposta a sucessivos counterclockwise rotação eventos.
O “S” e “Z” peças cada uma, duas possíveis orientações.
Estas peças cada alternam entre duas orientações em resposta a sucessivos counterclockwise rotação eventos.
O “L”, “J”, e “T” peças têm cada quatro orientações possíveis, e estas orientações são os resultados de cerca de rotações simples center pontos sobre as formas.
Quando uma peça primeira vez em que o conselho de administração, a peça tem o seu “eixo principal” de uma orientação horizontal, bem como a peça está no topo do tabuleiro.
Por isso, não peças são inicialmente capaz de ter mudado as suas orientações. A peça tem de descer por uma fila de ter a possibilidade de ter mudado a sua orientação.
Uma vez que um pedaço caiu em uma fila no conselho de administração, peça todas as orientações podem ser atingidos (assumindo que a peça não é demasiado próximo da paredes laterais ou para o atual pilha de peças).
5.4 Standard Tetris fluxograma
O que se segue é um fluxograma para aproximar um padrão Tetris jogo.

Aproximado de um fluxograma simples jogo Tetris

Aproximado de um fluxograma simples jogo Tetris
5.5 Standard Tetris peça criação
O diagrama a seguir mostra a (4 * 2 celular de células) no conselho de administração região onde aparecem quando todas as peças criadas.

Região onde aparecem quando criado em pedaços Standard Tetris
Quando uma nova peça primeira vez em que o conselho de administração, a sua origem coincide com o ponto sobre este esquema, e a peça será totalmente contida pela área sombreada sobre este esquema.
Quando um novo jogo é iniciado, uma plena queda livre demora decorre, e sobre a primeira iteração a queda-livre é uma peça desovado no topo do tabuleiro.
Durante o jogo normal, quando uma determinada queda livre iteração “terras” uma peça, uma plena queda livre e demora decorre na próxima iteração queda livre é uma peça desovado no topo do tabuleiro.
Quando uma peça é desovado, o tipo de peça é selecionada usando o seguinte algoritmo:
pieceIndex = 1 + (randomInteger % 7); // 1..7
Porque há uma constante p (= 1/7) chance de seleção de um determinado tipo de peça, e todas as peças do mesmo tipo são indistinguíveis, a probabilidade de se ter exatamente k pedaços de um tipo específico após julgamentos n segue uma distribuição binomial:
P(k) = (1-p)^(n-k) * p^k * ( n! / ( (n-k)! k! ) );
p = 0.0 ... 1.0;
k = 0, 1, 2, ..., n;
mean = ( n * p )
variance = ( n * p *(1-p) )
standard deviation = sqrt( variance )
Quando temos de escolher entre as 7 (sete) peças ao acaso, a probabilidade de obter uma determinada peça é p=(1/7).
Se o fizermos n=70 vezes, por exemplo, a probabilidade de obter exactamente k peças (com k na faixa 0 a n) é dada pela distribuição binomial, como mostrado na imagem seguinte.

Distribuição binomial para n=70, p=(1/7)
Assim, é possível prever a média total de peças de um único tipo de dado um número total de peças aleatória, e um também pode calcular o desvio padrão esperado e variância (raiz quadrada da variância):
p = (1/7):
total random standard
pieces (n) mean variance deviation
============ ======= ======== =========
70 10 8 3
700 100 85 9
7000 1000 857 29
70000 10000 8571 93
Quando nos converter um valor aleatório para uma peça índice, nós interpretá-lo como se segue:
value piece
===== =====
1 "O"
2 "I"
3 "S"
4 "Z"
5 "L"
6 "J"
7 "T"
[O pré-comercial MS-DOS versão do Tetris utilizado o número aleatório funções oferecidas pela Borland Pascal compilador.
Essa função utilizada uma variável de 32 bits estado.
Por isso, a seqüência de números aleatórios foi limitada a 2^32 valores distintos.
Por isso, em princípio, um jogador poderá descobrir, depois de cair talvez 10 peças, o local exato, no conjunto de 2^32 números correspondentes ao actual estado do jogo.
Se Tetris simulações são executadas com o fixo seqüência de 2^32 pedaços e, em seguida, ideal decisões podem ser encontrados para cada lugar na seqüência.
(Parece haver oportunidades suficientes para estar a bordo de um Estado totalmente vazio bordo, permitindo-nos ter sincronizado com o pré solução óptima caminho.)
O risco de usar um simples gerador de números aleatórios, em uma simulação destinada a encontrar uma solução ideal para um problema que é a solução ideal será apenas para o caminho através do problema particular espaço seleccionados pelo simples gerador de números aleatórios. ]
5.6 Standard Tetris controles
Durante o jogo, estão disponíveis os seguintes factores:
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
Todos os insumos ter efeito sobre a subida de ponta do contributo positivo (a tecla imprensa, em oposição à libertação botão).
Ao pressionar um botão ocorre, esta conta como um pedido.
Segurando um botão para baixo além de um certo tempo pode resultar em “auto-repetir” a funcionalidade de um teclado, gerando novas prensas botão - mas esse recurso é externa para o jogo motor.
As entradas acima especificados conformes com o original jogo Tetris.
Rodar os pedidos podem ser executados se não houver uma sobreposição entre a orientação desejada e células conjunto sobre a actual administração (excluindo a queda peça) e, se a orientação desejada não tem qualquer conjunto células fora da área bordo.
Traduzir os pedidos podem ser executados se não houver uma sobreposição entre a configuração desejada traduzidos e células conjunto sobre a actual administração (excluindo a queda peça) e, se a configuração desejada traduzido não tem qualquer conjunto células fora da área bordo.
Entrada de pedidos são tratados com uma latência que depende da taxa de quadros de o jogo (exemplo: 75 Hz), e dos pedidos ter efeito (se válidos) instantaneamente.
A peça pode ser eliminados sem qualquer linha queda etapas ocorrendo.
A peça pode ser traduzida por diversas vezes à esquerda ou à direita, e, posteriormente retirada, todas sem experimentar uma linha oficial queda etapa.
Uma vez que um recém-desovado peça não pode ser girado (porque é furado contra a borda superior da placa), o jogador tem que aceitar, pelo menos, um pedaço queda passo se rotações são desejadas ou necessárias.
O efeito sobre a pontuação é insignificante.
5.7 Standard Tetris peça “aterragem”
Se uma peça é simplesmente cair, cai em uma única linha durante cada peça queda iteração.
Haverá uma iteração que move-lo a partir de um local sem nenhum contato com superfícies horizontais para um local que tenha contato com superfícies horizontais. Uma vez que isso ocorre iterações, as peças estão em contacto descansando.
Se uma iteração começa com uma peça em repouso contacto com uma superfície horizontal, a peça “terras,” e se torna parte da pilha estática.
5.8 Standard Tetris “linhas concluída”
Uma fila é preenchido um fila do monte em que todas as células são ocupadas. Quando concluída uma fila é eliminada a partir do monte, e as linhas acima da linha são eliminados deslocada para baixo em uma fila para eliminar o fosso, este conta como uma “linha” concluída.
Quando uma peça terras torna-se parte do baralho.
Imediatamente após a peça terras, a pilha está marcada para concluídas fileiras, e todas as linhas estão concluídas eliminados.
Até quatro linhas podem ser preenchidos simultaneamente.
A tabela a seguir apresenta o limite superior concluído em linhas simultaneamente por uma única peça:
piece max. simultaneous
rows completed
===== ==================
"O" 2
"I" 4
"S" 2
"Z" 2
"L" 3
"J" 3
"T" 2
5.9 Standard “níveis” Tetris
Standard Tetris tem 10 níveis de dificuldade, numeradas 1 (um) através 10 (dez), com nível 1 a ser o “menos difícil.”
O índice é o nível máximo de dois valores:
actualLevel = max( initialLevel, earnedLevel );
initialLevel O valor é o nível que o jogador escolhe quando se inicia um novo jogo.
O padrão de nível como uma função de linhas concluída é facilmente observado na fase pré-comercial MS-DOS versão 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
Assim, o earnedLevel valor é calculado de acordo com o seguinte algoritmo:
if (linesCompleted <= 0)
{
earnedLevel = 1;
}
else if ((linesCompleted >= 1) && (linesCompleted <= 90))
{
earnedLevel = 1 + ((linesCompleted - 1) / 10);
}
else if (linesCompleted >= 91)
{
earnedLevel = 10;
}
5.10 Standard Tetris queda iteração demora
Standard Tetris em tempo real, tem um atraso entre sucessivas linha queda livre iterações que é uma função da dificuldade actual nível.
A seguinte relação entre nível e índice de queda iteração atraso é baseada em medições repetidas cronómetro em todos os níveis da pré-comercial MS-DOS versão 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
Assim, temos a seguinte fórmula para determinar o valor iteração atraso como uma função do nível real índice:
iterationDelay = ((11 - actualLevel) * 0.05); // [seconds]
Se o tabuleiro está vazio, e não há informações fornecidas pelo usuário, uma peça desovado em nível real 1 terras em cerca 10 segundos, e um pedaço desovado em nível real 10 terras em cerca 1 segundo.
5.11 Standard Tetris “pontuação”
Standard Tetris apenas prêmios pontos para o ato de uma peça desembarque.
Não há pontos concedidos para o ato de preenchimento de uma única linha, ou completando dois, três ou quatro linhas em simultâneo.
[Nota: Algumas variantes de Tetris adjudicação pontos para o ato de preenchimento de linhas, com um bônus para um aumento exponencial aumento do número de linhas simultaneamente preenchidos.
Assim, a estratégia de maximização de pontuação em tais variantes de Tetris envolve a criação de oportunidades para “obter uma Tetris,” usando a gíria para “I” forma simultânea para obter quatro linhas e recebendo lotes de pontos. ]
Se você tem um tabuleiro vazio, e você não deixar um pedaço “I” fazer uma queda livre e de terrenos, ou você imediatamente uma queda não-“I” peça, você pode definir o ponto seguinte tabela utilizando o pré-comercial MS-DOS versão 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, não-“I” peças cair um total de 18 linhas.
Tal explica a diferença entre o ponto a queda-livre e instantânea-gota casos.
Por intermédio experimentação de casos, é fácil de deduzir o ponto seguinte fórmula:
pointAward = ( (21 + (3 * actualLevel)) - freeFallIterations );
Note que esta fórmula não tem nada a ver com a distância cai um pedaço!
É estritamente uma função do nível real, e uma penalidade para o número de iterações uma peça é deixado cair livremente.
Este castiga um usuário que necessitam de tempo para pensar.
Observe também que, porque uma peça não pode ser girado inicialmente no momento em que primeiro desovas, um jogador é punido por, pelo menos, uma queda livre iteração se rotações são obrigados a colocar uma peça na película.
Isso provavelmente nunca afeta humanos jogadores, a menos que algum modo: reconhecer a peça, pressione as teclas tradução “(à esquerda” ou “à direita),” pressione a tecla “rodar” uma ou mais vezes, e pressione a tecla “queda,” tudo dentro de menos de 0.5 segundo a nível 1, ou 0.05 menos, segundo a nível 10.
6. Standard estratégia Tetris
6.1 Introdução