MyNixOS website logo
Description

2048 game clone using Yampa/Gloss.

A simple game clone of a popular 2048 game using Yampa FRP library and Gloss for graphics.

Use the arrow keys to slide the rows or columns of the board and try to survive for as long as possible. When there is no more move possible you will be presented with a game over message for 5 seconds and the game will be restarted after that.

2048 game clone using Yampa FRP library

After trying to grasp the idea of FRP (mostly concentrating on Yampa library) I have finally found myself understanding it enough to write something simple.

yampa-2048 using Gloss

This project is based on some code by other people. I wasn't interested in implementing the logic of 2048 myself or drawing to Gloss window from scratch. As a result this repository contains some chunks of the code written by other people:

Josh Kirklin and his excellent implementation of 2048 in Elm provided me with the game logic.

Maia Werbos and her great implementation of 2048 using Gloss provided me with the rendering chunk of code.

I was able to come up with my solution after reading the code by Keera Studios and their amazing Haskanoid project

Running:

cabal sandbox init
cabal install --dependencies-only
cabal run

The gameplay is pretty simple. Nothing fancy. Try to survive for as long as possible.

Things I would like to change but probably won't:

  • Gloss lacks the ability to style the font, therefore those numbers don't look nice but as long as works it seems to be ok
  • I wanted the game to exit upon the Esc button press but didn't bother to investigate why it is not closing or how to do it.
Metadata

Version

0.1.0.0

License

Platforms (75)

    Darwin
    FreeBSD 13
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd13
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd13
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows