Project Proposal (Written April 2010)
A blend of software engineering, distributed systems and graphics, the aim of this project is to produce a series of three progressively challenging, multiplayer-enabled games that players are able to play on a wide variety of different computing platforms against each other.
The modern world sees a great opportunity for video game development, with many different platforms available for users and developers to choose from. These platforms don’t just range over traditional desktops and laptops running Windows, Mac, and Linux, but also across systems such as gaming consoles, tablet devices and phones. Each platform again varies in its operating systems (for example iOS, Android and Windows 7), its input methods (for example touch screens and keypads), its programming languages, and its physical processing constraints. This project’s deliverables will consist of three small games, the development of each game improving from the lessons learned from the previous. Crucially, each game will be designed and implemented in ways that will allow it to be played on as many different platforms as possible, so as no matter what the player’s preferred system is, he or she can still play the game with his or her friends!
The first game will be a simple turn-based strategy game similar to ‘Stratego’, which will provide an introduction to the networking and communication challenges in turn-based games. The second game will be real-time racing game involving vehicles on a racetrack, intended to explore the real-time challenges of networked video games such as latency and bandwidth management. The third and final game will be a real-time strategy game of a similar style to ‘Age of Empires’ or ‘Starcraft’. This final game will combine the lessons learned from the previous two games and will further increase the complexity of the design and the implementation required to create the game. The third game will be the main deliverable of this project. Each game will be designed with a set of requirements, of which a minimum will need to be fulfilled in order for the game to be considered “complete”. It is expected that the first two games will focus more heavily on research and experimentation, with the last putting the lessons, skills and knowledge learned to greater practice.
Each game will require a visual representation for each platform, and in the latter two games, 3D graphics will be required which will also need to be implemented in a reusable way for a wide variety of different devices. The various flavours of OpenGL for desktop and embedded systems (for phones and tablets) will be used. The designs will ensure that the game’s code can be reused across multiple platforms as much as possible. Where this is not so easy, scripts may be developed in order to minimise the amount of work required to convert code from one platform to another, for example converting OpenGL code into OpenGL ES code.
I intend to use C++ for the majority of the programming, alongside the Boost framework for networking, and the OpenGL frameworks for graphics, as I feel that the open nature of these technologies best suits the cross-platform requirements of the task. I’m now also very familiar with a wide variety of other programming languages outside those taught on the course including Objective-C, C#, Lua and Python, which may be useful. I have software engineering experience working at two companies, Apple and Schlumberger, and have developed for iPhone, iPad, Mac, Linux and Windows. Last year I took the Graphics, Distributed Systems and Software Engineering courses. I hope that the skills and experience I have developed so far over the course will provide solid foundation to start tackling this project.
The project was started on September 1st 2011, and will be finished by May 2012.
