A Review of Games Written in R on CRAN

R is primarily designed for statistical computing and graphics, and that’s where I’ve spent most of my time in R. This includes developing an R package, exSTRa, for my PhD. R isn’t an ideal language for video games, without native support for reactive programming. Though where there’s computing, there are games.

A brief review of games

I decided to look at what games are available on CRAN, searching for “game”. Games outside of CRAN may be covered in another post. For each R package that was a game, I’ve given a short review.

In this post, CLI stands for command-line interface (games without a graphics window).

Here’s the list, in a random order:

  • twenty48

    A CLI tile puzzle game where you slide the board in a direction to combine the same number. It didn’t come with instructions on the rules of the game but is similar to a game called Threes, so I was able to work it out. Overall a good implementation.

    twenty48 screenshot

  • proton

    A CLI text adventure game that gets you performing some data wrangling in order to solve the puzzles. This is a game that has a reason to be in R. I quite enjoyed it, really. This game could be recommended to students for teaching R.

    Pietraszko uses a password which is very difficult to guess.
    At first, try to hack an account of a person which is not as cautious as Pietraszko.
    But who is the weakest point? Initial investigation suggests that John Insecure doesn't 
    care about security and has an account on the Proton server. He may use a password 
    which is easy to crack.
    Let's attack his account first!
    Problem 1: Find the login of John Insecure.
    Bit has scrapped 'employees' data (names and logins) from the www web page of Technical 
    University of Warsaw. The data is in the data.frame `employees`. 
    Now, your task is to find John Insecure's login.
    When you finally find out what John's login is, use 
    `proton(action = "login", login="XYZ")` command, where XYZ is Insecure's login.
  • BetaBit

    BetaBit is a sequel to proton. Wait a minute, it has proton in it along with two other games! These are The Frequeon Game and The Regression Game. The programming tasks get a bit harder here, but still a good way to have some challenges for learning R.

     _____ _          _____                            _____
    |_   _| |_ ___   |   __|___ ___ ___ _ _ ___ ___   |   __|___ _____ ___
      | | |   | -_|  |   __|  _| -_| . | | | . |   |  |  |  | .'|     | -_|
      |_| |_|_|___|  |__|  |_| |___|_  |___|___|_|_|  |_____|__,|_|_|_|___|
    You've Got Mail
    From: 154eb7278fc44650bdd2bb39bb2b5c69@mail.tor
    To: c81632dce28ca740f2f2503656f3d62a@mail.tor
    Subject: Interested?
    We are looking for a smart guy with extraordinary hacking skills.
    Our mutual friend assured us that you are our man.
    TL;DR: We are observing a group of terrorists that are planning something.
    We have intercepted some data, but do not know how to read it (attached).
    There is a password somewhere. We have to find it to stop terrorists.
    Would you like to join our team? Help us and we will help you in the future.
    It's not clear how to start. Our informer told us that the key is somehow related with 
    three key phrases: `guns`, `and`, `roses`.
    Probably these are the names of some messages / datasets.
    Would you like to check if you have access to any of them?
    If you want to help, please type:
    `frequon(subject = "Re: Interested?", 
        content = "Text of the message that you have access to")`
    so as we could read the message too.
    Remember: any time you want, you can get some piece of advice, just
    type: `frequon(hint=TRUE)`.
  • wordler

    This is a CLI implementation of Wordle. Pretty standard stuff, except it also gives you a programmatic interface so you can explore properties and strategies for the game Wordle.

    wordler screenshot

  • ztype

    This isn’t really an R game, as it instead provides a function that is supposed to submit a form to https://zty.pe to include functions from a package. In my case, that didn’t seem to work and I just got ordinary words in the browser.

  • sokoban

    A transport puzzle game where you push crates around in a warehouse to get them to storage locations. An alright game. I couldn’t get it to work in R Studio, but did work in the R Gui on Windows.

    sokoban screenshot

  • happytime

    Another implementation of 2048. I prefer the twenty48 version more due to the use of colours.

    happytime screenshot

  • FourScores

    This is basically Connect 4, except you can choose the size of the board. You can play either against the AI or against another human player.

    FourScores screenshot

  • casino

    A CLI game implementing Blackjack, Poker and a 3-reel Slot machine. Performs well.

    casino screenshot

  • pixelpuzzle

    Pizzle puzzle is a variation on the jigsaw puzzle, where instead, you have to shift rows of pixels until the image matches the original pixel image. Not a bad CLI game at all. It can get quite challenging at the harder difficulty levels.

    pixelpuzzle screenshot

  • tictactoe

    A CLI game of Tic Tac Toe. Allows you to simulate games of two AIs against each other, optionally of different levels.

    tictactoe screenshot

  • rwarrior

    This is my own CLI game, so I am a bit biased. As a programming game, rwarrior would play differently if implemented in any other programming language. I hope to add a graphical interface.

    rwarrior screenshot

  • lightsout

    An R implementation of the Lights Out game in R. This Shiny app plays well and is quick to react. An excellent little puzzle game.

    lightsout screenshot

  • snake

    A graphical R implementation of the classic game snake. Unfortunately, it feels a bit laggy where you have to press your input when the snake is one block before when intending to move.

    snake screenshot

  • codebreaker

    A CLI implementation of Mastermind (though I don’t know if the rules vary here). Nice and colourful. A well-implemented game.

    codebreaker screenshot

Two-player-only games:

  • BoardGames

    Despite the name, this package only implements the game Ultimate Tic Tac Toe on a 9x9 board for two players (no option for a single player). Still a game you could do on pen and paper, this implementation helps to check you are following the rules properly. The game runs smoothly.

    Ultimate Tic Tac Toe

Other packages I found that simulated or analysed games, but not a game in themselves, included:

  • SnakesAndLaddersAnalysis

    Want to play Snakes and Ladders but only have a minute to play? Use SnakesAndLaddersAnalysis! This is more for simulating games of Snakes and Ladders than actual play. Learning to count is the point of the game, and you won’t get any of this here.

  • CamelUp

    Simulates the board game CamelUp in a Shiny interface but only supports the game as one player.

  • stockfish, bigchess, chess and rchess are packages related to Chess engines, file formats, playing chess programmatically and analysis. It wasn’t apparent how these may let you play chess against the Stockfish Chess engine or give a graphical interface.

Closing remarks

Have you tried any games in R? Games I’d recommend include BetaBit, pixelpuzzle, lightsout and my own package rwarrior. Some of the others aren’t really worth the hassle and you are better off playing a web version. With the Github released nara package, we might be seeing more graphical based games coming to R. Let’s just hope nara can get on CRAN soon.

Dr. Rick Tankard
Dr. Rick Tankard
Freelance Statistician, Bioinformatician and Data Scientist

I am a Bioinformatician and Statistician based in Australia, working at WEHI.