Project Proposal

11/11/2013 Supervisor: Kevin Casey Student: Daniel Malone ID: 10375043

Project Proposal

“If I have seen further it is by standing on the shoulders of giants.” - Bernard of Chartres

A Real Time Strategy Game on an iOS Device

 

General area covered by the project:

This project covers:
  1. Mobile applications
  2. Graphics
  3. HCI
  4. AI
  5. Persistence
  6. W eb services
  7. Gaming

Description of the proposed project:

I intend to write a game for an iOS device, this game will take advantage of HCI features to make it comfortable on a mobile device. This project will utilize a web service to store state across devices, store high scores visible by other players, and allow playing against the same AI enemy.

Background

Android

I have spent the last two years primarily working with Android my thoughts are: there is a huge amount of boiler plate and up to recently there was no dedicated IDE (Android Studio is currently in beta) or stable dependency manager (Maven, Gradle etc....), creating layouts is XML hell and it is difficult to control communications between threads. This has pushed me to a change of platform; the grass looks far green in iOS land.

I do not intend to use Android in this project, this is a justification for my move to a new device set.

IOS

The iOS ecosystem seems to be a lot healthier, for example: the boilerplate for basic tasks like persistence is greatly reduced and persistence seems more flexible. The IDE xcode has a far more intuitive interface builder.

Most importantly of all: iOS works off Objective-C. I have spent a lot of time in the Java world, which doesn’t transfer too well to other languages. Objective-C would be a great way to gather generic C knowledge; which I could then apply to C and C++.

Controls

I have spent a lot of time gaming on computers and mobile gaming doesn’t stand up by any means, I don’t believe mobiles lack power but I consider it more of a HCI issue. Controls are limited; the usual WASD controls aren’t present without onscreen buttons, I believe a swipe control system would allow an RTS system similar to ‘Command and Conquer’ or ‘Age of Empires’.

Graphics

I have developed a game before using a pure OpenGL approach, so I feel I have already cultivated some skills there, I also intend to take ‘Computer Graphics’ next semester to solidify my knowledge in this section.

I intend to use an iOS graphics framework the ‘Sprite Framework’; Sprite Kit is a graphics rendering and animation infrastructure for Apple phones and desktops. This framework will hopefully expatiate the process of adding features to my application, at the moment this doesn’t allow for pure OpenGL but it is being added as a later feature.

NodeJS/DART

I intend to use NodeJS or DART to create a Web Service, to either store game state or a high score between players, I have used Grails before to create Web Services and websites.

I would like to gain further knowledge in JavaScript, Node.js is a platform built on Chrome's JavaScript runtime for easily building fast scalable web services; this is a technology I would like to have knowledge of also .

DART is a new language for scalable web app engineering, it is very similar to Java and compiles to JS; the compiled source is now out preforming hand written JS.

REST

I have had to conform a lot recently to SOAP and other web services that regard no standards; this needs to end. The Grails API’ I have written have been RESTful, and I intend to have serialized RESTful endpoints for this projects web services.

NoSQL

I hope to use a NoSQL database; I have worked with SQL, Oracle and such and would like to broaden horizons. I have heard very good reports of the speed and maintainability of NoSQL, along with transactions, and table structure migration.

Artificial Intelligence

My third year project involved the implementation of a swarm intelligence example; I created an Android based Ant Colony Simulator. This first taste made me eager to creating a more involved system, I believe what I learnt with the Gatherer type of ant and Solider type will be somewhat similar to military and resource gathering units.

Testing

Testing is under rated in our degree, I use a lot of unit tests in my java code to help me avoid tight coupling and good software practices... as well as the obvious benefits of having tests when editing code. I hope to continue this habit during this project.

Achievements

This application is intended as a game. I hope to attract a user base of casual gamers.

I hope to include the features listed below

GAME

Save State locally

Save State Remote

Save Score or Vanity statistic

Random Map Generation

Justification:

Choose difficulty Harvest Resources e.g. Trees, Place Buildings on the map rocks...

AI

Create Unit e.g. soldier, gatherer... Move units in swiped direction Destroy enemy buildings Gather animation Attack enemy groups or units Grouped units move around obstacles and rejoin group

Animation

Select unit by circling

Attack Animation

Movement Animation

Select group of units by circling

I believe the application will be entertaining, I intend to either commercialize it or open source it at the end of the project. It will be fun for people comparing scores, for bus journeys and extending periods away from primary gaming devices.
In the occasion of open sourcing it will make implementing similar features easier for future students.

Programming language(s):

List the proposed language(s) to be used

  • Objective C
  • JavaScript
  • Bash

    Programming tools:

    List tools (compiler, database, web server, etc.) to be used

  • NoSQL – MongoDB or CouchDB
  • NodeJS – Backend service writing
  • DART – Backend service writing
  • Typescript – Adds type and object orientation to JavaScript
  • Express – A web framework for NodeJS to allow structured NodeJS projects
  • ARC – Memory management in iOS
  • Tiled – For creating tile maps in games
  • Sprite framework – For creating graphics and animations on iOS devices
  • Webserver – Apache, this will be used to expose my web services
  • Debian – I will host my NodeJS/DART and NoSQL DB on a Debian server, most likely on Rackspace or Amazons AWS.

Learning Challenges:

List the main new things (technologies, languages, tools, etc.) that you will have to learn:

  1. Objective-C
  2. NodeJS/DART
  3. Express
  4. JavaScript
  5. Typescript
  6. MongoDB or CouchDB
  7. Tile and Graphic design
  8. Sprite Framework
  9. Path Finding Algorithms
Hardware / software platform: State the hardware and software platform for development.
EMAIL
DCU Daniel.malone9@mail.dcu.ie
PROJECT PROPOSAL
1. Debian
  1. iPad, iPhone
  2. MacBook Pro, OSX Mountain Lion
EMAIL  Daniel.malone9@mail.dcu.ie