R também pode ser diversão!

O R, assim como toda linguagem de programação, permite que seja feita uma grande gama de coisas, mesmo quando elas não possuem nada a ver com estatística. Dois exemplos disso podem ser encontrados no próprio site do R: os pacotes fun e sudoku, que possuem algumas funções para passar o tempo, inclusive jogos. Sim, você leu certo: jogos no R.

Para passar o tempo livre que eu tinha na época de graduação (que meus professores não vejam isso...) e inspirado nos pacotes citados anteriormente, me desafiava a fazer alguns jogos no R também. Na época eu enviei eles para a lista de e-mails R-br, e recentemente ressuscitaram o assunto, o que me motivou a divulga-los novamente. Ao total foram 6 jogos (ou 5, dependendo da definição de jogo), e todos estão disponibilizados no meu Github (falamos um pouco sobre o Github nessa postagem).


Jogo da Velha

Perdi :(

Acredito que esse jogo não precisa de explicação, mas la vai: Após carregar o código, basta digitar jv() e clicae na casa em que você quer colocar a sua peça (X) que em seguida o computador irá fazer a sua jogada. O destaque desse jogo está para a IA, que eu considero uma boa jogadora.

Campo Minado

Clássico do Windows, agora no R!
Outro jogo que também não precisa de apresentação, ainda mais se você tinha acesso a um computador na década de 90, e sua funcionalidade é exatamente igual ao do Windows: após carregar o código, basta digitar cm() para abrir no default (mapa 15x15, com 20 minas). É possível alterar o tamanho do mapa e a quantidade de minas, conforme mostra nas primeiras linhas do código!

Reversi

Levando uma surra da IA :(
Outro clássico do Windows, aqui  objetivo é terminar com mais quadrados da cor vermelha. Para jogar, você deve clicar em uma casa vazia ao lado de uma casa preenchida que coloque 1 ou mais peças da IA (azul) entre 2 vermelhas, e essas peças mudarão de cor. O jogo tem 2 níveis de dificuldades (jogo(1) ou jogo(2), onde 2 é mais difícil)

Jogo da Vida

Antes de tudo, calma: não é o jogo de tabuleiro. O jogo da Vida de Conway (Wiki) é um jogo proposto por Conway (Não brinca!) em 1970 para a revista Scientific American. Seu objetivo é criar um cenário simples, mas que evolua o máximo de ciclos possível - ou seja: infinitamente. A ideia é bem simples: as células pretas são células vidas e as brancas são células mortas. Se uma célula vida possui menos de 2 ou mais de 3 vizinhos vivos, ela morre e se uma célula morta tiver 3 vizinhos, ela 'nasce' (nos demais casos, a célula não muda de status). Para jogar é bem fácil: após carregar o jogo, basta digitar jv(x, y), onde x e y são o número de linhas e colunas do mapa. Caso queira iniciar numa posição aleatória, basta informar o terceiro parâmetro como FALSE.

Bônus: Procure por Conways game of life no Google!

2014

Não conhece o 2048? Então veja o original
No auge da fama da versão original do 2048, resolvi fazer uma versão para R também (na época, eu ainda postava no meu antigo blog). O objetivo do jogo é bem simples: juntar peças de valores iguais até conseguir chegar em uma peça com 2048. O desafio? Você movimenta todas as peças ao mesmo tempo, e as peças de mesmo valor se juntam automaticamente. Por ter sido o último jogo que fiz, ele é bastante customizável, permitindo alterar o tamanho do mapa (parâmetro mapa, padrão c(4,4)), a base da potência utilizada (parâmetro base, padrão 2), o valor objetivo (parâmetro máximo, padrão 11 (2 ^ 11 = 2048)), as os blocos que surgiram aleatoriamente a cada movimento (parâmetro sorteio, padrão c(1, 2)) e as cores. Após carregar o código, basta digitar joga().

Tanks



Por fim, o que me deu mais trabalho de todos (e que nunca ficou 100% :(): Tanks. Acredito que esse jogo também dispensa apresentação. Direcionais para o lado mudam a inclinação do canhão; direcional para cima/baixo alteram a força do tiro e espaço atira. Após carregar o código, basta digitar tank() para jogar.

Considerações finais

Embora seja uma maneira bastante fora do usual, programar esses jogos me ajudou tanto a evoluir meus conhecimentos em algoritmos quanto - e principalmente - a dominar mais os comandos básicos de gráficos do R. E você, o que faz para treinar programação? Conhece mais algum jogo feito em R? Tem alguma sugestão de postagem? Deixe seu comentário!

9 comentários:

  1. Rodrigo,

    muito legal a postagem! Alguma ideia do porque estou recebendo essa mensagem de erro depois de rodar o código igualzinho está no github? No jogo da velha até aparece as linhas bonitinho, mas ai quando clico em alguma das posições pra escolher não acontece nada.

    Error in setGraphicsEventEnv(which, as.environment(list(...))) :
    this graphics device does not support event handling

    Será que tem alguma coisa errada nesse trecho?

    setGraphicsEventEnv(which, as.environment(list(...)))
    3 setGraphicsEventHandlers(prompt = prompt, onMouseDown = onMouseDown,
    onMouseMove = onMouseMove, onMouseUp = onMouseUp, onKeybd = onKeybd)
    2 getGraphicsEvent("Tic-Tac-Toe :)", onMouseUp = clica, onKeybd = tecla)
    1 jv()


    Abraço!

    ResponderExcluir
    Respostas
    1. André,

      Tu ta no Linux ou Mac? Se estiver, tenta digitar x11(type = "Xlib") antes de rodar os códigos

      Excluir
    2. Não, o sistema do meu pc é windows 7 home basic. quando digito essa linha de código, vem a seguinte mensagem:

      Error in x11(type = "Xlib") : unused argument (type = "Xlib")

      Ia ser muito útil usar essas demonstrações em uma apresentação que vou fazer do R =/

      Excluir
    3. Até agora só tinha dado esse erro no Linux ou Mac :/

      Tu utiliza alguma IDE?

      Excluir
    4. Não que eu saiba hahaha acho que não uso nenhuma IDE não. Quando deu erro, eu pesquisei na internet e vi que esse comando que você sugeriu resolveu o problema de alguns usuários, mas como não resolveu o meu vim te perguntar porque parece que eu fui o único sortudo a ficar de fora da brincadeira... vou tentar executar os códigos amanhã num pc mais novo com tela touch screen, pq nesse aqui parece q não vai rolar.

      Excluir
    5. Rodrigo, RStudio conta como IDE né, se eu estivesse familiarizado com essa sigla já teria resolvido... tentei jogar diretamente no R e agora deu, valeu!

      Excluir
  2. Coster, Sudoku! Milhares de fãs pelo globo. https://cran.r-project.org/web/packages/sudoku/index.html

    ResponderExcluir
    Respostas
    1. Sim! Já gastei muitas horas nesse pacote... :P

      Excluir