|Number of watchers on Github||26|
|Number of open issues||9|
|Average time to close an issue||6 days|
|Open pull requests||0+|
|Closed pull requests||0+|
|Last commit||almost 2 years ago|
|Repo Created||over 4 years ago|
|Repo Last Updated||over 1 year ago|
|Organization / Author||hdgarrood|
|Do you use multipac? Leave a review!|
|View open issues (9)|
|View multipac activity|
|View on github|
|Fresh, new opensource launches 🚀🚀🚀|
Trendy new open source projects in your inbox! View examples
multipac is a multiplayer version of pacman. Since it's featured on the http://purescript.org website, I recently decided it would be nice to tidy it up and document it a bit, so that it can be used as a learning resource too.
An instance of the game is live at https://mpac.herokuapp.com/.
multipac has examples of many useful PureScript patterns:
purescript-node-http, and the server and clients exchange data types using the
Genericinstance deriving mechanism together with
purescript-foreign-genericin order to exchange data as JSON with minimal boilerplate.
package.jsonfile contains scripts to build the server and the client parts of the game.
Gamemodule, make use of lenses (from
purescript-profunctor-lenses) in order to make deeply nested updates easy.
StateTtransfomer, which holds information about all the objects in the current game, as well as a
WriterTtransformer, which accumulates information about all the changes which were made to the game. The
WriterTis used so that all of the changes which occur in each game step can be sent to each of the clients, so that they can update their versions of the game.
If you want to browse the source code, here are some pointers:
Typesmodule is perhaps the most important module. It contains type declarations and a few basic functions for all of the types involved, in particular, types for games, players, game items, messages sent between the server and clients, and so on. Most of the other modules import
Gamemodule contains the bulk of the game logic, exporting functions such as
stepGame, which advances the game by one step, returning a new game and a list of things that changed.
Renderingmodule is for functions which draw a game onto an HTML canvas element.
BaseServercontains a basic HTTP server which deliberately has no knowledge of multipac specifically, and could potentially be useful for implementing any similar multiplayer HTML5 game.
Server, which is the entry point module for the server part, builds on
BaseClientdeliberately has no knowledge of multipac specifically, and
Client, the client entry point module, builds on
Note that not everything in here is perfect! I'm sure there are lots of places that could benefit from a little bit of refactoring. Please feel free to ask if anything seems weird — I would like this project to function as a good learning resource as well as a fun experiment.
If you want to compile multipac, it currently requires the
master version of
the PureScript compiler, because of a bug in
Generic instance deriving. At
the time of writing, the most recent version, 0.8.0-rc1, is affected by this
bug. Any later releases will most probably contain the fix.