Platform & Category
The Maze is created for the Lenovo Horizon All-in-One device, category Games.
The basic objective of The Maze is quite simple. Move a rectangle safely through the maze area without touching any walls or obstacles around you. Built for touch, the game experience is very natural and engaging.
Here are some of the main featues of The Maze.
The game will offer multiple level packs, each with unique experiences and exciting new obstacles to overcome (moving platforms, unlockable doors and keys, levers, guards, ...). Furthermore - there will be multiple game worlds, each with it's own specific textures, background music and sounds and theme. This will make the The Maze more fun and will keep the players engaged for a longer period of time.
After players finish all levels the game has in-box, they will be able to create
their own mazes using the Maze Editor. Their creations can then be even shared
with community, so players will be able to download mazes built by others, rate
them and compare their scores.
Random Maze Generator
If the mazes are still not sufficient, you can use the Random
Maze Generator that will create a new maze for every supplied integer number. Every
number will produce a different result, so the possibilities will be almost
On-line and Connected
By taking advantage of the modern world of on-line gameplay, players will be able
to compare each other's maze completion times and scores in
on-line leaderboards. Also - these scores will be available in multiple
time frames - last 24 hours, last month, last year, overall - so the players
will be able to compete daily for the top positions on each leaderboard.
The All-in-One Advantage
In it's original form, The Maze game has a
pretty simple objective. With Lenovo Horizon All-in-One devices
however, it can really shine and become an addictive experience.
The 10-point multitouch technology and the stunning 27'' Full HD Display will
enable a local multiplayer game of up to for players on one device. In
this case, players can play in either the co-op mode (helping each other in
multiplayer designed levels – picking up keys and unlocking doors, that only
some players have access to), or the competition mode (with all players playing
the same maze at the same time to see who can arrive at the finish line the
The Lenovo Horizon All-in-One device comes with special Joystick,
that will be also enabled to control the rectangle. If you are already done
playing all the levels with touch, why not try to see how well you can handle the
movements with the Joystick?
Another accessory that Lenovo Horizon All-in-One offers and The Maze makes use of is
the E-dice. The Maze with the E-dice can become a thrilling party game. The
Party Mode will first let players choose a set of levels. Then they take turns
and by throwing the e-dice are given a maze to solve. The winner of the game is
the one player, that survives the longest.
Development & Language
I intend to use the MonoGame Framework to develop The Maze.
This will give me a great out-of-the-box functionality and will also allow me
to use my favorite programming language - C#.
Because each level can be played either in single-player on
in multi-player mode, we need to supply multiple assets for each texture /
image so that images are always crisp and clear whatever the number of players
are there. The approach I take here is to have each image with three different
assets – 4x scale, 2x scale and 1x scale. The 4x scale will be used for single player
/ co-op gameplay, when the single maze covers the entire Full HD screen. The 2x
scale will be used for two-player competition mode with the display divided in
two halves. Finally, the 1x scale is for the three to four player competition mode,
where the screen has four equally sized game regions.
In MonoGame developer Framework, the right place to decide
which textures and images should be loaded is the LoadContent method of
individual game components. The LoadContent method is fired only once when the
level is first loaded so we can embed the decision making logic there.
public enum GameMode
class GameplayScreen : GameScreen
ContentManager content = null;
GameMode currentMode = GameMode.SingleMaze;
public GameplayScreen( GameMode mode )
currentMode = mode;
public override void LoadContent()
if (content == null)
content = new ContentManager(ScreenManager.Game.Services, "Content");
string contentScaleString = "4x";
switch ( currentMode )
contentScaleString = "2x";
contentScaleString = "1x";
Textures.Add( content.Load<Texture2D>("Player." + contentScaleString) );
Textures.Add( content.Load<Texture2D>("LevelBackground." + contentScaleString ) );
Textures.Add( content.Load<Texture2D>("WallTexture." + contentScaleString ) );
The "hovering finger" Problem
Many games that require dragging an object around the screen have the "hovering finger" problem. When you drag a fingertip-sized object, your finger essentially blocks your view of the graphics and surroundings. In our case, this is an even more important issue, because the player needs to have a clear view of the path and of his player block. The solution is luckily quite easy – we can make the whole screen touchable and handle the dragging motion anywhere, without the requirement of touching the object itself.
Point? previousLocation = null;
public override void HandleDrag( Point currentPointerLocation )
if ( previousLocation.HasValue )
Vector2 dragDirection = new Vector2(
currentPointerLocation.X - previousLocation.Value.X,
currentPointerLocation.Y - previousLocation.Value.Y );
previousLocation = currentPointerLocation;