quoridor-hs alternatives and similar packages
Based on the "Game" category.
Alternatively, view quoridor-hs alternatives based on common mentions on social networks and blogs.
LambdaHack9.8 7.3 quoridor-hs VS LambdaHackHaskell game engine library for roguelike dungeon crawlers; please offer feedback, e.g., after trying out the sample game with the web frontend at
haskanoid9.6 0.0 quoridor-hs VS haskanoidA free and open source breakout clone in Haskell using SDL and FRP, with Wiimote and Kinect support.
Allure9.5 0.0 quoridor-hs VS AllureAllure of the Stars is a near-future Sci-Fi roguelike and tactical squad combat game written in Haskell; please offer feedback, e.g., after trying out the web frontend version at
rattletrap9.3 2.7 quoridor-hs VS rattletrap:car: Parse and generate Rocket League replays.
dominion9.2 0.0 quoridor-hs VS dominionA Dominion simulator in Haskell
FunGEn9.1 5.9 quoridor-hs VS FunGEnA lightweight, cross-platform, OpenGL-based 2D game engine in Haskell
Nomyx-Core8.8 0.0 quoridor-hs VS Nomyx-CoreThe Nomyx game
HGE2D8.8 0.0 quoridor-hs VS HGE2D2D game engine written in Haskell
Nomyx8.8 0.0 quoridor-hs VS NomyxThe Nomyx game
ecstasy8.7 0.0 quoridor-hs VS ecstasy:pill: a GHC.Generics-based entity component system
falling-turnip8.5 0.0 quoridor-hs VS falling-turnipfalling sand game with regular parallel arrays.
Monadius8.5 0.0 quoridor-hs VS Monadius2-D arcade scroller
SFML8.5 0.0 quoridor-hs VS SFMLLow level Haskell bindings for SFML 2.x
octane8.1 0.0 quoridor-hs VS octaneParse Rocket League replays.
reflex-sdl28.0 0.0 quoridor-hs VS reflex-sdl2A minimal host for sdl2 based reflex apps.
ActionKid7.9 0.0 quoridor-hs VS ActionKidA video game framework for haskell
hsudoku7.8 0.0 quoridor-hs VS hsudokuA native gtk sudoku game written in haskell
werewolf7.8 0.0 quoridor-hs VS werewolfA game engine for running werewolf in a chat client
chessIO7.8 0.0 quoridor-hs VS chessIOFast haskell chess move generator library and console UCI frontend
yampa20487.6 0.0 quoridor-hs VS yampa20482048 game clone using Yampa FRP library
Hipmunk7.6 0.0 L5 quoridor-hs VS HipmunkHaskell binding for Chipmunk, 2D physics engine.
Monaris7.5 0.0 quoridor-hs VS MonarisA simple tetris clone
sylvia7.2 0.0 quoridor-hs VS sylviaLambda calculus visualization
affection7.2 5.5 quoridor-hs VS affectionA simple Game Engine using SDL
halma7.1 0.0 quoridor-hs VS halmaChinese Checkers Haskell library, GUI application and Telegram bot
hoodie7.1 0.0 quoridor-hs VS hoodieA toy roguelike game in Haskell
macbeth-lib7.0 0.0 quoridor-hs VS macbeth-libA beautiful FICS client
htiled6.9 0.0 quoridor-hs VS htiledImport from the Tiled map editor.
call6.9 0.0 quoridor-hs VS callNot an insufficient game engine
battleships6.8 0.0 quoridor-hs VS battleshipsAngewandte Funktionale Programmierung
aeson-tiled6.5 3.2 quoridor-hs VS aeson-tiledAeson instances for Tiled map editor types
Ninjas6.5 0.0 quoridor-hs VS NinjasHaskell game where multiple players attempt to blend in with computer controlled characters while being first to visit the key locations on the board.
werewolf-slack6.4 0.0 quoridor-hs VS werewolf-slackA chat interface for playing werewolf in Slack
hs20486.4 0.0 quoridor-hs VS hs2048:1234: A 2048 game clone in Haskell.
gloss-game6.3 0.0 quoridor-hs VS gloss-gameA convenience wrapper around the Gloss library to make writing games in Haskell even easier
h20486.2 0.0 quoridor-hs VS h2048An Implementation of Game 2048
fwgl6.2 0.0 quoridor-hs VS fwglGame engine
SpacePrivateers6.1 0.0 quoridor-hs VS SpacePrivateersSimple roguelike set in space
wxAsteroids6.1 0.0 quoridor-hs VS wxAsteroidsA demonstration of how to use wxHaskell
MazesOfMonad5.8 0.0 quoridor-hs VS MazesOfMonadsimple game
gore-and-ash5.8 0.0 quoridor-hs VS gore-and-ashAttempt to build game engine with networking in Haskell using FRP as core idea.
ixshader5.8 0.0 quoridor-hs VS ixshaderA shallow embedding of the OpenGL Shading Language in Haskell
Tic-Tac-Toe5.7 0.0 quoridor-hs VS Tic-Tac-Toe:x: :o: TicTacToe in Haskell.
Liquorice5.6 0.0 quoridor-hs VS LiquoriceHaskell embedded domain-specific language (eDSL) for the algorithmic construction of maps for the computer game "Doom"
animate-frames5.6 0.0 quoridor-hs VS animate-frames🎞️ Sprite frames to spritesheet & metadata
battleship5.6 0.0 quoridor-hs VS battleshipBattleship... Pure.. Functional... Haskell + MongoDB + TypeScript + React... https://battleship-fp.com/
netwire-input-glfwMonadInput instances for GLFW based netwire programs
betris5.5 0.0 quoridor-hs VS betrisA horizontal version of tetris for braille display users
dice5.4 0.0 quoridor-hs VS diceSimplistic D&D style dice-rolling system.
layers-game5.4 0.0 quoridor-hs VS layers-gameA prototypical 2d platform game
Access the most powerful time series database as a service
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of quoridor-hs or a related project?
For anyone wishing to look through the commits history, I apologize in advance for not using rebase -i to make sure I submit concise and meaningful commits only. This was really just a Haskell learning exercise for me. Having said that, I'll be happy to solve any unclarity regarding quoridor-hs.
An implementation in Haskell of the 2-to-4-player strategy game.
Here's a description of the game's rules: http://en.wikipedia.org/wiki/Quoridor#Rules_of_the_game
Web browser interface
quoridor-hs runs as a command-line application (quoridor-exec).
The executable can be run in one of the following modes:
- Local play: The default mode (also flag -l), where all player play on the same terminal, specifying their moves in turn.
- Host: with flag -h, the executable runs as a host of a game. Listening to connecting players. Port and ip address can be specified in the format ADDR:Port, or only one of them can be specified without using colons. In which case an attempt will be made to figure out if a port was given or an address. Defaults are 127.0.0.1 and 33996. Even if prospective players do not have access or wish to use the executable, they can connect to the server through the browser, as the host hosts an Http server as well. It's port can be set with -t. Default is 33997.
- Client: with flag -j, the executable is run as a client, to be connected to an executable that is running as a host. IP address and a port are specified the same way as Host mode.
Executing in local mode, or multiplayer's host mode, allows for the passage of arguments to specify game settings:
- Board size: -b, limited up to 9 rows and columns for now. (Just need to adjust the output to accomodate a ruler with numbers of 2 digits).
- Initial number of gates per player: -g
- Number of players: -n (2 to 4 players)
Starting a local game of 2 players, on a board of 9x9, with 10 gates.
Starting a host on default address (localhost) and port 4545, with an http server listening on port 4646. Game board size will be 7x7 and number of players is 3.
./quoridor-exec -b 7 -n 3 -h4545 -t4646
A multiplayer game will not begin until the required number of players joined. A player can disconnect before a game begins, the remaining players will have to wait for an extra player.
The game does not try to recover from a player leaving midgame (for now at least). Expect a crash.
There is a chat panel which enables players to chat freely during game. Currently the chat is only available for players using the browser interface. If and when the CLI interface will migrate to ncurses and the like, this chat will be available there as well.
Gates in quoridor are 2 in length, i.e. they block the path of 2 pairs of tiles. In order to facilitate game flow, a player is required to put the coordinates of the 2x2 square the wraps the 4 tiles and the 2 gates in question. In order to place the following horizontal gate (in a small piece of the game board) the player had to type g 6 3 v. g meaning the gate command, 6 3 being the x and y coordinates of the aforementioned square, and 'v' representing vertical (as opposed to h, horizontal).
3 4 6 x|x 7 x|x
Players using the CLI interface can play with players using the browser interface.
Before you laugh at the 'command-line'y interface in the browser, let me defend my meager attempt by suggesting this was a learning exercise at general Haskell, not at client-side web development. As such, I wanted to maximize reuse of the CLI client, in the browser itself. As such, when connecting in the browser to the host, the host actually spawns a CLI client, connecting its stdout and stdin to the Websockets port that communicates with the client. And the client's js simply dumps whatit receives on screen.
Option 1: Install package from hackage
$ mkdir quoridor-hs $ cd quoridor-hs $ cabal sandbox init $ cabal install quoridor-hs
After which you should have a quoridor-exec in .cabal-sandbox/bin/ where you 'cabal install'ed.
Option 2: clone from Github
$ git clone https://github.com/talw/quoridor-hs.git $ cd quoridor-hs $ cabal sandbox init $ cabal install
After which you should have a quoridor-exec in .cabal-sandbox/bin/ where you 'cabal install'ed.
- [ ] Competent AI
- [x] A CLI interface
- [x] Online multiplayer
- [x] A browser interface
- [x] Should handle the case where a player disconnects
not during midgame, but during waiting for the rest of the players
- [x] For that, a function that sends a dummy message should be made. And using that function to test if the socket is alive. (Socket's IsConnected and IsReadable still return true even when the socket is dead)
- [x] Should add a chat window
- [x] Should recode the server so as to handle clients concurrently, rather than with one thread
which will enable the addition of a chat window.
- [ ] Will require changing the cli client to use a lib (ncurses?) to modify the terminal buffer, instead of just printing more output
- [x] Should recode the server so as to handle clients concurrently, rather than with one thread which will enable the addition of a chat window.
- [ ] Should add tests for render module and parsing module
- [ ] Should try adding some QuickCheck tests, to try it.
- [ ] Should use lens to manipulate and access GameState, to try it.
- [ ] Add another distribution package without the http-server. It makes for a much smaller package for those not interested in that feature.
- [x] Will have to move to a method where you calculate valid positions instead of getting a position and checking if it's valid. It will fix some edge cases.
- [x] Consider changing the rendering functions to return strings without causing IO. In which case use an efficient data structure to support the concatenations (difference lists?)
- [x] Consider adding some of the static configuration variables, like board size to a data type and using the ReaderT monad inside Game
- [x] DFS's visited list is made up for each sub traversal, instead of there being just a universal one. Might be able to be solved by sequencing the recursion with a state monad of the visited cells. Avoid pre-optimization though. Wait for profiling results
- [x] Should handle the case where a player disconnects not during midgame, but during waiting for the rest of the players to connect.