Juice is an experiment in terrain generation algorithms and the beginnings of a top-down scolling engine built on Python 3, NumPy / SciPy, pyglet (and OpenGL, transitively).
Terrain generation is relatively feature-complete, including:
- An underlying heightmap for various purposes, e.g. river and sea generation.
- Various terrain layers generated on top of the heightmap (seas, rivers, biomes, roads and city locations).
- Normalization of the terrain layers so their elements would be presentable with a standard tile set (four straight edges, four convex corners, four concave corners and a solid tile).
This is mostly isolated into the Terrain, TerrainLayer (and subclasses
thereof) and HeightMap classes. Juice was initially envisoned as a standalone
game, hence there has been no effort to package this functionality into a
library, but the codebase could be a solid starting point for a game utilizing
a 2D terrain. The resulting map can be visualized by passing the -m flag to
juice.py.
This project also includes basic final rendering of the game world onto a
scrollable pyglet / OpenGL viewport. The LPC Tile
Atlas is utilized (see LICENSE for details), but
as this is missing some graphics (rivers, roads,
cities), these features are represented by runtime-generated mock tiles. For a
demo, simply run juice.py without arguments.
Ensure scipy, numpy, pyglet and PIL
(Pillow) are installed and available in the
environment before attempting to run juice.py. The most convenient way to
achieve this is to use a virtual
environment.
$ ./juice.py --help
usage: juice.py [-h] [-r RANDOM_SEED] [-d DIMENSION] [-t] [-L LOG_LEVEL] [-m]
[-s SAVE] [-l LOAD]
Juice: the power grid game
optional arguments:
-h, --help show this help message and exit
-r RANDOM_SEED, --random-seed RANDOM_SEED
Specify random seed
-d DIMENSION, --dimension DIMENSION
Game field side length
-t, --timing Timing / profiling mode, exit after terrain generation
-L LOG_LEVEL, --log-level LOG_LEVEL
Log level, one of CRITICAL, ERROR, WARNING, INFO,
DEBUG.
-m, --map Display overview map instead of entering the game
-s SAVE, --save SAVE Save a map to file
-l LOAD, --load LOAD Load a saved map
There is no documentation besides the commented source. This project is not under active development. It was imported to GitHub mainly in the hope of possibly becoming a somewhat rough building block for a game needing terrain generation and possibly a rough skeleton of a scrollable game world rendering.