Recentemente assisti a um vídeo que comparava as diferenças de probabilidades entre dados e um baralho de cartas. O valor de um dado não influencia o valor dos demais, nem as probabilidades dos demais. O mesmo não pode ser dito sobre cartas num baralho, já que a probabilidade de tirar um 8 – por exemplo – diminui ou aumenta dependendo da quantidade de cartas restantes num baralho e da quantidade de 8s restante no baralho.

O vídeo é bem interessante e apesar de não definir com precisão as especificidades dos sorteios traz alguns insights. Quando o narrador fala de “Fairness” me lembrei do sorteio de peças em jogos modernos de Tetris, e é sobre isso que eu gostaria de falar aqui.

Tetris Clone, por Caio Amaral

Acho que eu não preciso explicar o jogo de Tetris. A imagem acima está em russo e é possível entender o que acontece na tela. Aliás, esse tetris fui eu quem programou, e você pode jogar neste link.

Do lado direito da tela, na imagem acima, vemos 3 peças dentro de um retângulo, essa é a fila das próximas peças. O sorteio de peças é crucial para o gameplay e contribui imensamente para game feel. Uma situação que acontecia nos primeiros jogos de Tetris e que tem sido evitada nos jogos mais recente é o chamado “Drought”, ou “Seca” de peças na qual o jogo demora para enviar uma peça de algum tipo para o jogador. No alto nível os jogadores otimizam ao máximo seu jogo de modo a fazer o máximo de tetrises possível (eliminar 4 linhas de uma vez) pois assim ganha-se mais pontos. Assim podemos entender como “Droughts” de i-pieces (peças em forma de i, 4 blocos empilhados verticalmente) é particularmente dramático.

No vídeo abaixo os jogadores jogam uma versão antiga de Tetris que não tem o sorteio moderno que explicarei mais adiante. O jogador Sidnev enfrentou 2 Droughts consideráveis tendo de esperar 30 peças por uma i-piece, depois 5, depois 21.

Droughts transmitem um sentimento de Injustiça (Unfairness), de que o jogo está prejudicando o jogador. Por isso os jogos modernos sacrificam um pouco a aleatoriedade dos sorteios em favor de Fairness. Como?

Random Generator

A solução encontrada é bem elegante e fácil de entender, ela reduz drasticamente os períodos de Drought e mantém uma sensação de aleatoriedade, até torna possível que uma peça apareça duas vezes seguidas. O algoritmo de sorteio é o seguinte:

  • Sorteie uma fila de peças com 7 peças (1 de cada tipo)
  • Fim

O sorteio pode ser melhor visualizado se imaginarmos que ele ocorre da seguinte forma:

  • Coloque 7 peças (1 de cada tipo) num saco
  • Tire as peças uma a uma e enfileire-as
  • Fim

Esse método de sorteio garante que o maior Drought seja de 12 peças.
Se a primeira peça da fila é um i-piece e a última peça da próxima fila for um i-piece, há 12 peças que não são i-pieces entre elas. Logo, Drought máximo de 12 peças.

Além disso, há 1 chance em 7 de que a última peça de uma fila seja igual à primeira peça da próxima fila. Mas este é o único momento onde uma peça pode aparecer duas vezes seguidas. Assim, a chance de uma peça aparecer 2 vezes é de pouco mais d 2%. No jogo aleatório é de 1/7, aproximadamente 14%.

Links

Why Cards Remember (And Dice Forget) – YouTube
https://www.youtube.com/watch?v=GIgkG-ucEqY

Tetris Clone by Caio MGA
https://caiomga.itch.io/phaser-tetris

Tetris Clone | Phaser World
https://phaser.io/news/2017/07/tetris-clone/

Random Generator | Tetris Wiki | Fandom
https://tetris.fandom.com/wiki/Random_Generator

Sidnev Survives a MASSIVE Line Piece Drought at the Worst Time – YouTube
https://www.youtube.com/watch?v=e2TbzHTImj8

By caio

Leave a Reply

Your email address will not be published. Required fields are marked *