Devlog – Adventures in Pathfinding

I am currently prototyping a new game that works a lot like Pac Man except you’re a farmer planting and harvesting flowers.

The finer details of the game are still to be worked out. The first prototype had an open grid of squares and the player was able to move freely in any direction.

Flower Plower Prototype

An open grid did not work well with Pac Man style controls.

This approach did not work due to how the movement system works. The player’s tractor moves continuously in a straight line but is only allowed to turn when it is in the centre of a tile. Turning felt unresponsive if the player turned between tiles.

As a solution I decided to try mazes with long corridors. I wanted a maze that would start small but grow into a large maze as the player progressed.

Starting Maze

The maze starts with 1 square and grows as the player scores points.

After dusting of the old Data Structures and Algorithms textbooks I thought that a good approach would be to use a graph data structure. I put together a simple implementation using C# that I’ll share on GitHub in the future.

One constraint on the grid is that there should always be an Euler Cycle available. This means that it should be able to visit every path in the maze without repeats. The player’s score will scale with big combos of flowers so it’d be nice to always have plenty of scope for long chains without repeats.

The easiest way to accomplish this was to make sure that each node in the grid has 2 or 4 paths as continuous graphs where all nodes have an even number of vertices will always have an Euler cycle.

Maze Extension

The results of applying 1 extension to the grid.

The algorithm for extending the maze is as follows:

  1. Select 2 random degree two nodes. (I.e. Nodes with 2 links.)
  2. Add an extra link to each of these nodes so there are 2 nodes in the graph with 1 link.
  3. While there remains an odd node in the graph: Link it to another odd node.

All being well this method can be used to extend the maze while ensuring there’s an Euler cycle.

Big Maze

A large maze created by repeatedly extending the maze with this algorithm.

When the method works it can generate large mazes with Euler cycles very quickly however it has 2 major disadvantages:

  1. It is complex and error prone: On the plus side I now know how to recover Unity from an infinite loop. On the negative side I put Unity into many infinite loops and chased many frustrating bugs trying to get the thing to work. It would be difficult to further tune the algorithm for varied gameplay.
  2. The mazes aren’t that fun: There’s an infinite variety of mazes but they’re all quite ‘samey’. Playing on random mazes doesn’t seem like it will be terribly engaging.

So while the random maze prototype did not completely pan out it wasn’t a total waste of time. I have a decent graph data structure that can be used to represent levels in future version and some path-finding code that can be used for AI.

Scratch Memory Match

Memory match card game tutorial in progress.

In other news I have a Scratch tutorial in progress detailing how a memory match card game could work.

The Scratch code is nearly complete and I’ll be starting the write-up soon.

AirConsole RTS Devlog – Map Generation

I’m working on a Real Time Strategy game for Air Console. I’m working out the gameplay mechanics before deciding on the theme. There will be a map of nodes with links between them on the screen and players will control the nodes with their personal device and use them to attack other player’s nodes. Each player will see the data on the nodes they control on their controller and any ongoing battles will be displayed on the big screen.

My time so far has mostly been spent setting up my development environment and figuring out how to structure the project. I am using Brackets to write my Javascript and Closure to compile it. While Javascript is an interpreted language using this tool from Google will optimize it.

I have started work on the map generation:

RTS map

The map is a set of nodes with links between them. Nodes can attack other nodes if they are linked. Right now 2 planets are linked together if there are no other planets between them. In future versions I will add more complicated rules to link planets and try to position the planets so they look less like they’re on a grid.

Namespaces and classes in Javascript

I am currently working on a game for Air Console. It’s a cool platform for local multiplayer web games.

So far most of my time has been spent experimenting with HTML5 game frameworks. For this project I have settled on the CreateJS suite. It seems to be functional, minimal and up to date.

I have also been learning a bit more about how to organize a HTML/javascript application. Javascript doesn’t have special keywords for ‘class’ or ‘namespace’. Everything is done using functions, which left me scratching my head and wondering how you’re supposed to manage a large codebase without constantly running into name conflicts.

There were two articles I found helpful. The first is a simple rundown of some common ways to use Javascript’s functions like a class:

http://www.phpied.com/3-ways-to-define-a-javascript-class/

The second article explains a slightly more complex concept that allows you to create namespaces within Javascript. This allows you to encapsulate all the variables in your app within a single root var, which helps reduce the chance that one of your variables is defined in another module.

https://appendto.com/2010/10/how-good-c-habits-can-encourage-bad-javascript-habits-part-1/

The article features my new favourite piece of technical jargon: Self-executing anonymous function. It’s a phrase that would strike terror in a student’s heart if it appeared at the top of a lecture slide.

Experimenting with AirConsole

airconsole-logo

AirConsole allows for local multi-player in web games. On a big screen you connect your browser to the AirConsole site and then multiple players can connect their phones or tablets and use them as controllers.

I love local multiplayer games and AirConsole makes it really easy to get a party game going as everyone generally has a phone in their pocket to use as a controller. There’s more info on the AirConsole site:

https://www.airconsole.com/

I’ve started work on a project with AirConsole. I’ve set up my dev environment and got a Hello World program created using a tutorial from Phaser:

http://phaser.io/news/2016/04/airconsole-tutorial

You can try the Hello World yourself using my site here:

http://www.airconsole.com/?http=1#https://www.goshdarngames.com/airconsole/helloworld/

Tutorial – How to Use a USB Xbox 360 Dance Mat with Windows 10

I have written a tutorial that explains how to set up a USB Xbox 360 Dance Mat to work with Windows 10.

Find the tutorial here:

https://www.goshdarngames.com/how-to-use-a-usb-xbox-360-dance-mat-with-windows-10/

it’s great for games like Step Mania

Konami DDR Mat

A compatible mat would look something like this.

http://www.stepmania.com/

Maybe in future I’ll make a game designed with dance mats in mind!