Coursera’s Game Design and Development (Part 1/4)

A few months ago, I acquired a few eBooks from the O’Reilly website. This led me to purchase a book recently released titled “Building a Game with Unity and Blender” by Lee Zhi Eng. Reading through Zhi Eng’s book, I look for an online course on game design and development.

Having used the Coursera and Treehouse learning platforms in the past, I signed up to Coursera’s Game Design and Development Specialization. It is composed of five courses focusing on different aspects of game development and design with the last course being a capstone project (more details on the specialization here).


First Course Impressions: Introduction to Game Development

The first course, Introduction to Game Development, was, as I suspected, there to motivate me to learn more. It’s a basic introduction to Unity 3D and works the students through a number of hands-on exercises to work with the game engine.

During this course, I got to make a few basic systems and game iterations. The first project was a simple 3D system of our Solar System (not to scale) with a mini-map. Clicking on any planet either via the main camera view or via the mini-map would toggle the camera to follow that planet instead of staying centered on the Sun.

Game Design and Development: Solar System
Solar System

The second project was a simple game with a set camera angle that followed a ball on a platform. Using the ball, the player has to collect a number of coins while avoiding the enemy cubes falling out of the sky and onto the platform.

Game Design and Development: Roller Madness
Roller Madness

The third project was a basic shooter in a Tron like setting. The player has a set amount of time to shoot the right boxes to gain points; green boxes give points, white boxes grant additional time, and yellow boxes take away time. There’s a number of boxes already present when a level starts, but most boxes are generated dynamically; much like the coins and enemies were in the previous projects.

Game Design and Development: Box Shooter
Box Shooter

All three projects used mostly prototype and standard Unity assets. Other assets used in the project (such as certain textures and sounds) were provided via Coursera.


Second Course Impressions: Principles of Game Design

The second course, Principles of Game Design, was focused on coming up with a game idea and documenting a number of things to flesh out this game idea. I decided to work on one continuous game idea, titled ACCURSED, throughout this course and submitted the following documents:

  • High Concept Document
  • Story Bible
  • Game Design Document
  • Non-digital Game Mechanic Prototype

ACCURSED is a project I intend to further work on. Therefore, I do not feel inclined to upload the documents listed above at the moment, except for an excerpt of the Story Bible document:

ACCURSED is a futuristic cooperative first person shooter that takes during a space expedition mission to Saturn. Both players are cosmonaut researchers contracted by a private military corporation that operates on one of Saturn’s moons. This PMC is known as CAVAL. The players must ultimately reach the CAVAL headquarters and the established colonies of Saturn on their return journey back from Jupiter.

Each chapter takes place on a satellite of Saturn, starting with Iapetus.

On each satellite, there are stations built specifically to accommodate these long distance journeys. Each station is an opportunity for the players to refuel their ship and stock up on food and other resources. However, re-fueling and recharging the main generators of the ship takes a significant amount of time, usually up to 24 hours.

During this time, the players will have to use their tools and arsenal to survive together, face imminent environmental threats and enemies, and solve puzzles.

This course definitely provides valuable insight into how a game’s story, universe, systems, mechanics and gameplay all come together. It presents a model to follow in order to balance these aspects of the game to create an experience that is ultimately not only fun, but also engaging and exciting.

To be continued…

I’m enrolling in the third course now, and I’m interested to see what I’ll learn (surely a lot). I intend to make a new post to follow up on this one once I’ve completed the third and fourth courses.

Get any GitHub user’s email (Python)

Here’s a silly little Python script (github_email.py) I wrote to get a GitHub user’s email address based on their public event history.

It’s not bulletproof, but generally works:

from __future__ import print_function

import requests
import sys

from optparse import OptionParser


parser = OptionParser()
parser.add_option('-u', '--username', action='store', type='string', dest='username')
(options, args) = parser.parse_args()

gh_api_url = 'https://api.github.com/users/{username}/events/public'.format(username=options.username)

r = requests.get(gh_api_url)
r.raise_for_status()

gh_public_events = r.json()

if isinstance(gh_public_events, dict):
    if gh_public_events.get('message') and gh_public_events.get('message') == 'Not Found':
        print('User was not found!')
        sys.exit(0)

fullname = 'N/A'
email = 'N/A'

for event in gh_public_events:
    if event.get('payload').get('commits'):
        commits = event.get('payload').get('commits')
        for commit in commits:
            if commit.get('author'):
                fullname = commit.get('author').get('name')
                email = commit.get('author').get('email')
                break

print('Full Name: {name}'.format(name=fullname))
print('email: {email}'.format(email=email))

You can simply save this script as github_email.py (for example).

Also, do note, it uses Python 3, a deprecated standard library (optparse has been replaced by argparse) and one third party library, requests.

Usage Output

Usage: github_email.py [options]

Options:
  -h, --help            show this help message and exit
  -u USERNAME, --username=USERNAME

Expected Results

If the user exists and has public events:

$ github_email.py -u jbarnette
Full Name: John Barnette
email: jbarnette@github.com

If the user exists, but has no public events, you’ll get:

$ github_email.py -u test
Full Name: N/A
email: N/A

If the user does not exist, you’ll get:

$ github_email.py -u iou18y23123
User was not found!

And that’s how you get (almost) any GitHub user’s email!
It’s useful if you want to reach out to another contributor via email.

Disclaimer

The script is inspired from this blog post: How to Find Almost Any GitHub User’s Email Address

If you rather do this process manually, follow the instructions in the link right above.

github-email-blog