From 7c3380f6bf929dc9078f87e8664ecb8404521dae Mon Sep 17 00:00:00 2001 From: Phoenix Perry Date: Wed, 14 May 2014 21:52:17 -0400 Subject: [PATCH] adding another update --- 09_game_design/book_chapter_draft_1.md | 1024 +++++++++++++++++++++++ 09_game_design/controls.png | Bin 0 -> 41205 bytes 09_game_design/game_interval_time.png | Bin 0 -> 21328 bytes 09_game_design/label1_label2.png | Bin 0 -> 15314 bytes 09_game_design/sync.png | Bin 0 -> 8069 bytes 09_game_design/updatedvals_interval.png | Bin 0 -> 17811 bytes 6 files changed, 1024 insertions(+) create mode 100644 09_game_design/book_chapter_draft_1.md create mode 100644 09_game_design/controls.png create mode 100644 09_game_design/game_interval_time.png create mode 100644 09_game_design/label1_label2.png create mode 100644 09_game_design/sync.png create mode 100644 09_game_design/updatedvals_interval.png diff --git a/09_game_design/book_chapter_draft_1.md b/09_game_design/book_chapter_draft_1.md new file mode 100644 index 00000000..28462178 --- /dev/null +++ b/09_game_design/book_chapter_draft_1.md @@ -0,0 +1,1024 @@ +#Experimental Game Development in openFrameworks + +Game developers are, in greater and greater numbers, turning to openFrameworks' creative coding toolkit to develop their games. Unlike platforms like Unity, GameMaker, and Construct2, oF was not specifically developed for game makers. However, oF's ability to port to mobile, manipulate video, utilize camera input, support generative graphics, and hook in with devices like Arduino and Kinect (among other features) makes it a very attractive option for developers who want to be able to rapidly produce compelling, unique games. + +In this chapter, we'll learn about game development in openFrameworks. We'll cover what goes into making a game, as well as how to code a simple space shooter. Finally, we'll put an experimental oF twist on our game by implementing OSC functionality, which will allow you to alter the difficulty of the game live—while a player is playing it. + +Ready? Let's go! + +## How do game developers actually make games? + +There are as many ways to make games as there are game developers. However, many developers follow an iterative process: that is, adding a single component, testing it, adding an additional component, testing it again, and so on. Regardless of the platform, this method allows game developers to quickly figure out what parts of the initial idea are worth keeping and rapidly test additions they think might be interesting--without having to risk wasting time on building out a complete game that, in retrospect, isn't compelling. + +This iterative process can be done digitally or physically. Paper prototyping is the process of testing mechanics and interactions with paper models and analogs. Although these paper prototypes don't necessarily look like the final game, they can be mocked up quickly and thrown away cheaply, allowing developers to experiment with core mechanics more rapidly than they could with code. For example, a puzzle game's board and pieces can likely be mocked up with paper and dice more quickly than it can be implemented in even a basic mobile app. When a developer makes a digital prototype, or one made with code, they will similarly typically start by refining game mechanics, keeping assets rough until they get closer to the end. Finally, developers enter the long process of tuning their game, tweaking various parameters about the game until it feels just right. + +We're going to use openFrameworks to play with the final step of this process. In the game we're making, we're not going to settle on one set of parameters that stay static from game to game. We're going to use openFrameworks' OSC library to allow us to communicate wirelessly from another device (e.g. a smartphone or table) so we can tune those parameters live, giving our players experiences tailored just for them. + +## So what is OSC, anyway? + +OSC, or Open Sound Control, came about as an advancement to MIDI, so let's talk about MIDI first. MIDI is a data protocol that sends and receives information between devices, typically electronic musical instruments. MIDI is what allowed things like keyboards and drum machines to fire in sync. If you've heard pop music, you've heard MIDI in action. + +MIDI has data channels, on which you can send or receive single messages, or events. Programmers could associate these MIDI events with actions that their electronic instruments could take. For example, you could set up your keyboard to send data on channel 1, and receive data on MIDI channel 2. More specifically, you could program a specific key (say, the 'a' key) to send out a MIDI event on channel 1. If your drum machine is set up to receive on channel 1, it will receive that message and perform the appropriate action (e.g. playing). A pretty cool system, but one that was limited by its pre-defined and discrete message types. + +As time advanced, so did computers and the speed of data transfers, leading us to OSC. OSC was designed to allow for more expressive performance data, with different, flexible kinds of messages sent over networks. OSC is a thin layer on top of the UDP protocol, and allows users to send information over networks just by specifying the network address and the incoming and outgoing ports. (UDP is used frequently in games, and it is possible to use both of these protocols at the same time in the same code base with no issues.) + +OSC messages consist of the following: + +* An address pattern. This is a hierarchical name space, and looks a bit like a Unix filesystem or URL (e.g. `/Address1`). These patterns can effectively be anything you want (e.g. `/EnemySpeed`)--think of them as names for what you send. +* A Type tag string. This simply represents the kind of data being sent (e.g. `int`, `string`). +* Arguments. The actual value that is being transmitted (e.g. `6`, `“Hello world”`, etc.). + +There are plenty of inexpensive apps for smartphones and tablets that provide customizable GUIs (complete with buttons, sliders, etc.) for sending different kinds of MIDI messages. Download one (we like TouchOSC) so we have something to send our messages with. +With this in mind, let's start making our game! + +## Our basic game--& making it not-so-basic + +OpenFrameworks handles OSC as an included addon, so our first step will be to run the project generator and create a project with the OSC addon. (If you haven't had a chance to read about addons, now would be a good time to jump over to [here] and do just that!) Launch the project generator, then, in the main menu, click the word “Addons.” A popup will appear. Select ofxOsc and then click back. Now, next to the word Addons, you should see ofxOsc. Press “generate”. When it completes the project creation process, close the generator and open up the project in either Visual Studio or Xcode. The project will be set up in your myApps folder. Open it now. + +Here's what our game will have: + +* A player, who has an on-screen position, a movement speed, and an image to represent it +* Some enemies, who have an on-screen position, a movement speed (with the horizontal value based on a sine wave), an image to represent them, and an interval to keep track of when they can shoot next +* A level controller, which has an interval to keep track of when an enemy should be spawned next +* Bullets (for the player and the enemies), which have an on-screen position, images to represent them, a way to keep track of where they come from (player or enemy), and a speed +* Bonus lives, which have an on-screen position, an image to represent them, and a speed + +With all that written out, let’s use OSC to affect the following: + +* The horizontal movement of our enemies--whether they move in a more exaggerated sin wave, or whether they move in more of a straight line +* The frequency with which our enemies shoot +* The frequency with which our level controller spawn enemies +* Whether a life bonus is on screen or not + +These three parameters will allow the developer to, second-by-second, tailor the difficulty of the game to the individual playing it. + +Let’s start with our testApp. There are a few things we definitely know we’ll want classes for, so make corresponding .h and .cpp files for Player, Bullet, Life, Enemy, and LevelController. Remember to `#include “ofMain.h”` in each of those classes, and to include the .h file of each of those classes in `testApp.h`. + +###Gamestates + +First let’s create the basic structure of our game. Games typically have at least three parts: a start screen, the game itself, and an end screen. We need to keep track of which section of the game we’re in, which we’ll do using a variable called a game state. In this example, our game state variable is a string, and the three parts of our game are `“start”`, `“game”`, and `“end”`. Let’s add a score and a player at this point as well.
 +``` +string game_state; +int score; +Player player_1; +``` + +We’ll then divide up `testApp`’s `update()` and `draw()` loops between those game states: + +``` +//-------------------------------------------------------------- +void testApp::update(){ +   if (game_state == "start") { +
 +   } else if (game_state == "game") { +   } else if (game_state == “end”) { +
 +   } +} +//-------------------------------------------------------------- +void testApp::draw(){ +   if (game_state == "start") { +   } else if (game_state == "game") { +   } else if (game_state == “end”) { +
 +   } +} +``` + +Let’s set the initial value of `game_state` to `“start”` right when the app begins. + +``` +//-------------------------------------------------------------- +void testApp::setup(){ +   game_state = "start"; +  score = 0; +} +``` + +Finally, let’s make sure that we can move forward from the start screen. In this example, when the player is on the start screen and releases the space key, they’ll be taken to the game. + +``` +//-------------------------------------------------------------- +void testApp::keyReleased(int key){ +    +   if (game_state == "start") { +       game_state = "game"; +   } else if (game_state == "game") { +      // blank for now +   } +} +``` + +###Player movement + +Great! Let’s move onto our player. Our player’s class looks like this: + +``` +class Player { +public: +   ofPoint pos; +   float width, height, speed; +   int lives; +    +   bool is_left_pressed, is_right_pressed, is_down_pressed, is_up_pressed; +    +   void setup(ofImage * _img); +   void update(); +   void draw(); +   void shoot(); +    +   void calculate_movement(); +    +   bool check_can_shoot(); +    +   ofImage * img; +    +}; +``` + +Taking this one step at a time: + +* Our player’s position will be stored in an `ofPoint` called `pos`. ofPoints are handy datatypes that contain `x` and `y` values, letting us access our player’s position through `pos.x` and `pos.y`. +* Our player will have `width`, `height`, and `speed` variables (which we’ll use for collision detection and movement, respectively). +* Our player will have an integer number of lives (since it wouldn’t make any sense for them to have 4.33333333333 lives). +* Our player will keep track of what movement keys are currently pressed in separate booleans. +* Our player will have `setup`, `update`, `draw`, `shoot`, and `calculate_movement` methods. +* Finally, our player will have a pointer to the image we’re using for the player. + +You may be wondering why we’re using all these booleans--why not just check and see which keys are pressed? + +The problem is that, in openFrameworks, `keyPressed()` does not return all the keys currently being pressed--just the last key that was pressed. That means that if the player presses up and left (intending to move diagonally), openFrameworks will only report one of the keys being pressed. You can try printing out the result of keyPressed to see this in action. +
What we’ll do to avoid this is instead base the player’s movement on the booleans we wrote earlier. If the player presses a certain key, that boolean will be true; if they release that key, that boolean will be false. That way, if the player presses up and left, we’ll report up and left as being true until those keys are released. + +Here’s what our new `keyPressed()` and `keyReleased()` functions look like: + +``` +//-------------------------------------------------------------- +void testApp::keyPressed(int key){ +   if (game_state == "game") { +       if (key == OF_KEY_LEFT) { +           player_1.is_left_pressed = true; +       } +        +       if (key == OF_KEY_RIGHT) { +           player_1.is_right_pressed = true; +       } +        +       if (key == OF_KEY_UP) { +           player_1.is_up_pressed = true; +       } +        +       if (key == OF_KEY_DOWN) { +           player_1.is_down_pressed = true; +       } +   } +
 +} +//-------------------------------------------------------------- +void testApp::keyReleased(int key){ +   if (game_state == "start") { +       game_state = "game"; +   } else if (game_state == "game") { +       if (key == OF_KEY_LEFT) { +           player_1.is_left_pressed = false; +       } +        +       if (key == OF_KEY_RIGHT) { +           player_1.is_right_pressed = false; +       } +        +       if (key == OF_KEY_UP) { +           player_1.is_up_pressed = false; +       } +        +       if (key == OF_KEY_DOWN) { +           player_1.is_down_pressed = false; +       } +   } +} +``` + + +Add `ofImage player_image` to `testApp.h`, then load the player’s image and instantiate the player in `testApp`’s `setup()`: + +``` +void testApp::setup(){ +   game_state = "start"; +   player_image.loadImage("player.png"); +    +   player_1.setup(&player_image); +} +``` + +Finally, update and draw your player in the appropriate part of `testApp::update()` and `testApp::draw()`: + +``` +//-------------------------------------------------------------- +void testApp::update(){ +   if (game_state == "start") { +       +   } else if (game_state == "game") { +       player_1.update(); +   } +} +
 +//-------------------------------------------------------------- +void testApp::draw(){ +   if (game_state == "start") { +
 +   } else if (game_state == "game") { +       player_1.draw(); +   } else if (game_state == "end") { +
 +   }   +} +``` + +You should have a player who moves around on-screen. Sweet!
 +###Player bullets + +Let’s make our bullets next. In order to have a variable number of bullets on screen at a time, we need to add a `vector bullets;` to testApp.h. Let’s also create a `void update_bullets();` function, which will update our vector of bullets (and, shortly, trigger the check for bullet collisions). We also want our player and enemy bullets to look different, so we’ll add `ofImage enemy_bullet_image;` and `ofImage player_bullet_image;` to our `testApp.h` file. + +Our bullet class will look a lot like the player class, having a position, speed, width, pointer to an image, and various functions. The big difference is that the bullets will keep track of who they came from (since that will affect who they can hurt and which direction they move). + +``` +class Bullet { +public: +   ofPoint pos; +   float speed; +   float width; +   bool from_player; +    +   void setup(bool f_p, ofPoint p, float s, ofImage * bullet_image); +   void update(); +   void draw(); +    +   ofImage * img; +}; +``` + +Our `Bullet.cpp` will look like this: + +``` +void Bullet::setup(bool f_p, ofPoint p, float s, ofImage * bullet_image) { +   from_player = f_p; +   pos = p; +   speed = s + 3; +   img = bullet_image; +   width = img->width; +    +} +void Bullet::update() { +   if (from_player) { +       pos.y -= speed; +   } else { +       pos.y += speed; +   } +} +void Bullet::draw() { +   img->draw(pos.x - width/2, pos.y - width/2); +    +} +``` + +Again, this is much like the code for the player. The two differences are: + +* We keep track of where the bullet comes from, and alter the code based on that variable (meaning we can keep all the bullets in the same vector) +* When instantiating a bullet, we check to see the position of the shooter, as well as the shooter’s current speed (so it will always move faster than the thing that shot it) + +Now that our bullet class is implemented, we can go back to `testApp::setup()` and add in `enemy_bullet_image.loadImage("enemy_bullet.png");` and `player_bullet_image.loadImage("player_bullet.png");` right underneath where we loaded in our `player_image`. +
 +For now, our `update_bullets()` function will call the `update()` function in each bullet, and will also get rid of bullets that have flown offscreen in either direction. + +``` +//-------------------------------------------------------------- +void testApp::update_bullets() { +   for (int i = 0; i < bullets.size(); i++) { +       bullets[i].update(); +       if (bullets[i].pos.y - bullets[i].width/2 < 0 || bullets[i].pos.y + bullets[i].width/2 > ofGetHeight()) { +           bullets.erase(bullets.begin()+i); +       } +   } +   // we’ll call a collision check function here shortly +} +``` + +Our `testApp::update()` and `testApp::draw()` will now look like this: + +``` +//-------------------------------------------------------------- +void testApp::update(){ +   if (game_state == "start") { +
 +   } else if (game_state == "game") { +       player_1.update(); +       update_bullets(); +   } +} +//-------------------------------------------------------------- +void testApp::draw(){ +   if (game_state == "start") { +
 +   } else if (game_state == "game") { +       ofBackground(0,0,0); +       player_1.draw(); +        +       for (int i = 0; i < bullets.size(); i++) { +           bullets[i].draw(); +       } +   } else if (game_state == "end") { +
 +   } +} +``` + +Finally, let’s add an if-statement to our `keyPressed()` so that when we press the spacebar during the game, we spawn a player bullet: + +``` +//-------------------------------------------------------------- +void testApp::keyPressed(int key){ +   if (game_state == "game") { +       if (key == OF_KEY_LEFT) { +           player_1.is_left_pressed = true; +       } +        +       if (key == OF_KEY_RIGHT) { +           player_1.is_right_pressed = true; +       } +        +       if (key == OF_KEY_UP) { +           player_1.is_up_pressed = true; +       } +        +       if (key == OF_KEY_DOWN) { +           player_1.is_down_pressed = true; +       } +        +       if (key == ' ') { +           Bullet b; +           b.setup(true, player_1.pos, player_1.speed, &player_bullet_image); +           bullets.push_back(b); +       }    +   } +} +``` + +Remember, the first parameter in the bullet’s setup is whether it comes from the player (which, in this case, is always true). Run your app and fly around shooting for a bit to see how it feels. + +###Adding adversaries + +Let’s move on to our enemy. This process should be familiar by now. Add an `ofImage enemy_image;` and a `vector enemies;` to `testApp.h`. Additionally, add `float max_enemy_amplitude;` and `float max_enemy_shoot_interval;` to `testApp.h`--these are two of the enemy parameters we’ll affect with OSC. +
Your enemy class will look like this: + +``` +class Enemy { +public: +   ofPoint pos; +   float speed; +   float amplitude; +   float width; +    +   float start_shoot; +   float shoot_interval; +    +   void setup(float max_enemy_amplitude, float max_enemy_shoot_interval, ofImage * enemy_image); +   void update(); +   void draw(); +   bool time_to_shoot(); +    +   ofImage * img; +}; +``` + +Our enemy’s horizontal movement will be shaped by the values fed to a sine wave (which we’ll see in a moment). We’ll keep track of our amplitude variable (so different enemies can have different amplitudes). We’ll also want to keep track of whether enough time has passed for this enemy to shoot again, necessitating the start_shoot and shoot_interval variables. Both of these variables will actually be set in our setup() function. Finally, we’ll have a boolean function that will tell us whether the enemy can shoot this frame or not. +
Our enemy class will look like this: + +``` +void Enemy::setup(float max_enemy_amplitude, float max_enemy_shoot_interval, ofImage * enemy_image) { +   pos.x = ofRandom(ofGetWidth()); +   pos.y = 0; +   img = enemy_image; +   width = img->width; +   speed = ofRandom(2, 7); +   amplitude = ofRandom(max_enemy_amplitude); +   shoot_interval = ofRandom(0.5, max_enemy_shoot_interval); +   start_shoot = ofGetElapsedTimef(); +} +void Enemy::update() { +   pos.y += speed; +   pos.x += amplitude * sin(ofGetElapsedTimef()); +} +void Enemy::draw() { +   img->draw(pos.x - width/2, pos.y - width/2); +} +bool Enemy::time_to_shoot() { +   if (ofGetElapsedTimef() - start_shoot > shoot_interval) { +       start_shoot = ofGetElapsedTimef(); +       return true; +   } +   return false; +} +``` + +In update, we’re using the current elapsed time in frames to give us a constantly increasing number to feed to the sine function, which in turn returns a value between -1 and 1. We multiply it by the amplitude of the wave, making this curve more or less exaggerated. + +In `time_to_shoot()`, we check to see whether the difference between the current time and the time this enemy last shot is greater than the enemy’s shooting interval. If it is, we set `start_shoot` to the current time, and return true. If not, we return false. +
Let’s integrate our enemies into the rest of our `testApp.cpp`: + +``` +//-------------------------------------------------------------- +void testApp::setup(){ +   game_state = "start"; +    +   max_enemy_amplitude = 3.0; +   max_enemy_shoot_interval = 1.5; +    +   enemy_image.loadImage("enemy0.png"); +   player_image.loadImage("player.png"); +   enemy_bullet_image.loadImage("enemy_bullet.png"); +   player_bullet_image.loadImage("player_bullet.png"); +    +   player_1.setup(&player_image); +} +//-------------------------------------------------------------- +void testApp::update(){ +   if (game_state == "start") { +        +   } else if (game_state == "game") { +       player_1.update(); +       update_bullets(); +        +       for (int i = 0; i < enemies.size(); i++) { +           enemies[i].update(); +           if (enemies[i].time_to_shoot()) { +               Bullet b; +               b.setup(false, enemies[i].pos, enemies[i].speed, &enemy_bullet_image); +               bullets.push_back(b); +           } +       } +   } else if (game_state =="draw") { +   } +} +//-------------------------------------------------------------- +void testApp::draw(){ +   if (game_state == "start") { +   } else if (game_state == "game") { +       ofBackground(0,0,0); +       player_1.draw(); +       for (int i = 0; i < enemies.size(); i++) { +           enemies[i].draw(); +       } +       for (int i = 0; i < bullets.size(); i++) { +           bullets[i].draw(); +       } +   } else if (game_state == "end") { +   } +} +``` + +###Collisions + +Let’s implement our bullet collision checks. Add a void `check_bullet_collisions();` to your `testApp.h`, then write the following function: + +``` +//-------------------------------------------------------------- +void testApp::check_bullet_collisions() { +   for (int i = 0; i < bullets.size(); i++) { +       if (bullets[i].from_player) { +           for (int e = enemies.size()-1; e >= 0; e--) { +               if (ofDist(bullets[i].pos.x, bullets[i].pos.y, enemies[e].pos.x, enemies[e].pos.y) < (enemies[e].width + bullets[i].width)/2) { +                   enemies.erase(enemies.begin()+e); +                   bullets.erase(bullets.begin()+i); +                   score+=10; +               } +           } +       } else { +           if (ofDist(bullets[i].pos.x, bullets[i].pos.y, player_1.pos.x, player_1.pos.y) < (bullets[i].width+player_1.width)/2) { +               bullets.erase(bullets.begin()+i); +               player_1.lives--; +                +               if (player_1.lives <= 0) { +                   game_state = "end"; +               } +           } +       } +   } +} +``` + +This code is a bit nested, but actually pretty simple. First, it goes through each bullet in the vector and checks to see whether it’s from the player. If it’s from the player, it starts a for-loop for all the enemies, so we can compare the player bullet position against all the enemy positions. We use `ofDist()` to see whether the distance between a given bullet and a given enemy is less than the sum of their radii--if it is, they’re overlapping. +
If a bullet is not from the player, the function does a distance calculation against the player, to see whether a given enemy bullet and the player are close enough to count it as a hit. If there is a hit, we subtract a player’s life and erase that bullet. If the player has less than or equal to 0 lives, we change the game state to the end. + +Don’t forget to call `check_bullet_collisions()` as part of `update_bullets()`: + +``` +//-------------------------------------------------------------- +void testApp::update_bullets() { +   for (int i = 0; i < bullets.size(); i++) { +       bullets[i].update(); +       if (bullets[i].pos.y - bullets[i].width/2 < 0 || bullets[i].pos.y + bullets[i].width/2 > ofGetHeight()) { +           bullets.erase(bullets.begin()+i); +       } +   } +   check_bullet_collisions(); +} +``` + +###Our game's brain + +Great! Except… we don’t have any enemies yet! Definitely an oversight. This is where our level controller comes in. Add `LevelController level_controller;` to your `testApp.h`. +
Our level controller class is super-simple: + +``` +class LevelController { +public: +   float start_time; +   float interval_time; +    +   void setup(float e); +   bool should_spawn(); +}; +``` + +As you might guess, all it’ll really do is keep track of whether it’s time to spawn another enemy yet. + +Inside our `LevelController.cpp`: + +``` +void LevelController::setup(float s) { +   start_time = s; +   interval_time = 500; +} +bool LevelController::should_spawn() { +   if (ofGetElapsedTimeMillis() - start_time > interval_time) { +       start_time = ofGetElapsedTimeMillis(); +       return true; +   } +   return false; +} +``` + +When we set up our level controller, we’ll give it a starting time. It’ll use this time as a baseline for the first enemy spawn. The should_spawn code should look familiar from the enemy bullet section. + +We’ll wait to set up our level controller until the game actually starts--namely, when the game state changes from `“start”` to `“game”`. + +``` +void testApp::keyReleased(int key){ +   if (game_state == "start") { +       game_state = "game"; +       level_controller.setup(ofGetElapsedTimeMillis()); +   } +
 +  ... +} +``` + +Next we’ll integrate it into our `testApp::update()`: + +``` +//-------------------------------------------------------------- +void testApp::update(){ +   if (game_state == "start") { +        +   } else if (game_state == "game") { +       player_1.update(); +       update_bullets(); +        +       for (int i = 0; i < enemies.size(); i++) { +           enemies[i].update(); +           if (enemies[i].time_to_shoot()) { +               Bullet b; +               b.setup(false, enemies[i].pos, enemies[i].speed, &enemy_bullet_image); +               bullets.push_back(b); +           } +       } +        +       if (level_controller.should_spawn() == true) { +           Enemy e; +           e.setup(max_enemy_amplitude, max_enemy_shoot_interval, &enemy_image); +           enemies.push_back(e); +       } +   } +} +``` + +Awesome! We’re close to done! + +###Bonus lives + +Before we finish, let’s add in our last OSC feature: the ability to throw in bonus lives on the fly. Add `vector bonuses;` and `ofImage life_image;` to your `testApp.h`. To keep our code modular, let’s also add `void update_bonuses();` in the same place. Don’t forget to `life_image.loadImage("life_image.png");` in `testApp::setup()`. + +`Life.h` should look like this: + +``` +class Life { +public: +   ofPoint pos; +   float speed; +   float width; +    +   ofImage * img; +    +   void setup(ofImage * _img); +   void update(); +   void draw(); +}; +``` + +And it’ll function like this--a lot like the bullet: + +``` +void Life::setup(ofImage * _img) { +   img = _img; +   width = img->width; +   speed = 5; +   pos.x = ofRandom(ofGetWidth()); +   pos.y = -img->width/2; +} +void Life::update() { +   pos.y += speed; +} +void Life::draw() { +   img->draw(pos.x - img->width/2, pos.y - img->width/2); +} +``` + +Our `update_bonuses()` function works a lot like the bullet collision function: + +``` +//-------------------------------------------------------------- +void testApp::update_bonuses() { +   for (int i = bonuses.size()-1; i > 0; i--) { +       bonuses[i].update(); +       if (ofDist(player_1.pos.x, player_1.pos.y, bonuses[i].pos.x, bonuses[i].pos.y) < (player_1.width + bonuses[i].width)/2) { +           player_1.lives++; +           bonuses.erase(bonuses.begin() + i); +       } +        +       if (bonuses[i].pos.y + bonuses[i].width/2 > ofGetHeight()) { +           bonuses.erase(bonuses.begin() + i); +       } +   } +} +``` + +All that’s left for our lives functionality is to alter `testApp::update()` and `testApp::draw()`. + +``` +//-------------------------------------------------------------- +void testApp::update(){ +   if (game_state == "start") { +        +   } else if (game_state == "game") { +       player_1.update(); +       update_bullets(); +       update_bonuses(); +        +       for (int i = 0; i < enemies.size(); i++) { +           enemies[i].update(); +           if (enemies[i].time_to_shoot()) { +               Bullet b; +               b.setup(false, enemies[i].pos, enemies[i].speed, &enemy_bullet_image); +               bullets.push_back(b); +           } +       } +        +       if (level_controller.should_spawn() == true) { +           Enemy e; +           e.setup(max_enemy_amplitude, max_enemy_shoot_interval, &enemy_image); +           enemies.push_back(e); +       } +   } +} +//-------------------------------------------------------------- +void testApp::draw(){ +   if (game_state == "start") { +       start_screen.draw(0,0); +   } else if (game_state == "game") { +       ofBackground(0,0,0); +       player_1.draw(); +       draw_lives(); +        +       for (int i = 0; i < enemies.size(); i++) { +           enemies[i].draw(); +       } +        +       for (int i = 0; i < bullets.size(); i++) { +           bullets[i].draw(); +       } +        +       for (int i = 0; i < bonuses.size(); i++) { +           bonuses[i].draw(); +       } +   } else if (game_state == "end") { +
 +   }     +} +``` + +###Let's get visual + + +Finally, we’ve been a bit stingy with visual feedback, so let’s add in a start screen, a score, a visual representation of the lives left, and an end screen. Add `ofImage start_screen;`, `ofImage end_screen;`, `void draw_lives();`, and `void draw_score();` to `testApp.h`. + +Change `testApp::setup()` to load in those assets: + +``` +//-------------------------------------------------------------- +void testApp::setup(){ + ... +   player_1.setup(&player_image); +   start_screen.loadImage("start_screen.png"); +   end_screen.loadImage("end_screen.png"); +   score_font.loadFont("Gota_Light.otf", 48); +} +``` + +Draw them in the appropriate game states using `start_screen.draw(0, 0);` and `end_screen.draw(0, 0);`. + +Add in the last two functions: + +``` +//-------------------------------------------------------------- +void testApp::draw_lives() { +   for (int i = 0; i < player_1.lives; i++) { +       player_image.draw(ofGetWidth() - (i * player_image.width) - 100, 30); +   } +    +} +//-------------------------------------------------------------- +void testApp::draw_score() { +   if (game_state == "game") { +       score_font.drawString(ofToString(score), 30, 72); +   } else if (game_state == "end") { +       float w = score_font.stringWidth(ofToString(score)); +       score_font.drawString(ofToString(score), ofGetWidth()/2 - w/2, ofGetHeight()/2 + 100); +   } +} +``` + +By using `stringWidth()`, we can calculate the width of a string and shift the text over--handy for centering it. + +All that’s left after that is to call `draw_score();` and `draw_lives();` during the `testApp::draw()`’s game state, and to call `draw_score();` during the end state. + +Congrats--you made a game! + +###Linking oF and OSC + +Now let’s add in the OSC functionality. We are going to set our application up to receive messages from our iPad and then make changes in real-time while our game is running to test some possible player scenarios. As mentioned before, this can trump going into your application and making manual changes because you skip the need to recompile your game and playtest live. + +To accomplish this we are going to create a new class that will contain our OSC functionality. Create a .cpp and .h file for this class now and name it LiveTesting. Open `LiveTesting.h` +And let’s add the line to import the OSC at the top of your file after your preprocessor directives and also a line for using iostream for testing purposes. As we add the code we will explain in inline in the code comments. + +Add the following: + +``` +#include +#include "ofxOsc.h" +``` + +Next let’s set up all of our variables we are going to use to receive OSC data and map it to in game values. Add the following code into your class. + +``` +class LiveTesting +{ +public: + LiveTesting(); + //a default c++ constructor + void setup(); //for setup + void update(); //for updating + + ofxOscSender sender; + //you can set up a sender! We are going to use this network connection to give us some visual feedback of our current game values. + + ofxOscReceiver receiver; + //this is the magic! This is the port on which your game gets incoming data. + + ofxOscMessage m; + //this is the osc message your application gets from your device. + + + //these are the values we will be tweaking during testing + float max_enemy_amplitude; + int interval_time; + float max_enemy_shoot_interval; + bool triggerBonus; + +}; +``` + +Now let’s jump over to the `LiveTesting.cpp` file. In this file we are going to set up our network address and the ports we are sending and receiving data on as the first order of business. However, to go any further we are going to need to do some housekeeping and install additional software. For OSC to work it will need a local wifi network to send the messages across. Note this tactic may not work for a network outside of your own because often a sysadmin will stop this kind of traffic from being transmitted on a very public network. We suggest brining an Airport Express or similar with you so you can quickly and wirelessly establish a local network for playtesting. + +For the purpose of this chapter and to allow us to create an experience that will work on both Android and iOS we are going to use a piece of software called TouchOSC from this URL: http://hexler.net/software/touchosc + +The desktop editor software is free however the matching software for your device will be $4.99. Get both now. As a mater of principle, we endorse building your own tools and you could easily build a second oF project to be your OSC sender and receiver on your mobile device. With that said, nothing beats TouchOSC for speed, ease of use and complete, platform independent flexibility. If you are someone who often moves between an iOS and Android device on both Windows and Mac, this tool will become indispensible to you. As a games designer it can open up possibilities like changing levels on the fly, updating game variables, adjusting for player feedback and adding new features into and taking them out of your game as it’s running. We highly endorse using it and support the continued advancement of the tool. You can also use it with music production tools like Ableton Live and it comes with great presets for things like DJing and mixing music live. Go to the app store of your device and purchase the mobile version now if you would like to continue down this route. + +After we get all of the tools downloaded and installed. Let’s start setting everything up. You are going to need two bits of information. You are going to need to know the IP address of your computer and the ip address of your laptop. If you are on a mac, just open up your System Preferences. Go to the Network setting and click on your wifi connection in the left sidebar. On the right side it will display your IP address. You can also get this setting by opening up Terminal and entering in the command ifconfig. Terminal will list of every network that’s a possible connection for your machine from the past, even if it’s not currently active. For example, if you have ever connected your phone, it will be in the list with some flag and listed as inactive. Look for the connection that’s currently active. It will look something like this: + +``` +en1: flags=8863 mtu 1500 + ether 60:33:4b:12:e5:3b + inet6 fe80::6233:4bff:fe12:e53b%en1 prefixlen 64 scopeid 0x5 + inet 192.168.0.5 netmask 0xffffff00 broadcast 192.168.0.255 + media: autoselect + status: active +``` + +The inet address is your current IP. +On windows, open the `charms` bar. In search type `cmd` and open the command prompt. Type in `ipconfig`. This information is much clearer than the data dump from terminal. The connected listed as your Wireless LAM adapter Wi-Fi will list your current IPV4 address. This is your IP address. Finally, obtain your mobile device’s IP address as well from your device settings. Make a note of your IPAddress for the next section. + +At this point, go ahead and launch TouchOSC on your device and the Touch OSC desktop editor on your computer. If you are on Windows, you will need to make sure you have java installed first. Once the software is open, click the open icon in the top tool bar. In the file containing the code for this chapter you will see a file called `ofBook.touchosc`. + +We are going to make this interface now and deploy it to our phone. We will make this interface to control these parameters in our game: + +``` +//these are the values we will be tweaking during testing +float max_enemy_amplitude; +int interval_time; +float max_enemy_shoot_interval; +bool triggerBonus; +``` +![](controls.png) + +To build the app, let’s start by adding our first knob. Right click in the black empty space to the right. Choose to make a `rotaryH`. Next make two `labelH` objects. The first one will be the name of our knob. The second one will be for displaying the value of the current variable in our game. Place one label above the knob and one below. It should look like the below image: + +![](label1_label2.png) + +Now look to the left side of the app. At this point, it’s time to set all of the values this knob will be sending and what the labels will display. Let’s start with `label1`. We will name our knob on screen to make things easier to read. The first value in our game we want to control, level controller interval time, should be what this label reads onscreen. Changing the name field in the app interface will do little. However, note under the name field you can change the color of the label. For this example, use yellow. Next, jump down to the next to last field on screen called `Text`. You will want to set this to level controller interval time. + +Moving on, select the knob. This one will require more set up because it will actually be sending values to our game. Color it yellow first. In the dark grey OSC box set all of the values we need to receive for the game. If auto is checked, uncheck it. Now customize the text in that box to `/game/interval_time`. In the `From` fields set the parameters to a range of values to try out in the game during a playtest. We will use from 0 to 300. These two elements, the tag and the parameters will get packed up into a message and sent over our OSC network to our game when values change. + +![](game_interval_time.png) + +The last thing to set up will be the bottom label to display what our interval variable is currently set to in our running game. Select it. We will change the settings and the address tag to reflect that it is not game data being sent to our game but rather data being sent out of our game. Select the label on screen to pull up the parameters for it on the right. In the darkened OSC box change the parameters to those below: + +![](updatedVals_interval.png) + +This is the pattern we are going to use for all of our knobs and labels. Essentially, the pattern is + +* Create 3 interface elements for each parameter + * A label for the name of the parameter you will be controlling + * An interface element like a knob to change it with + * An output label to display the current in game variable setting + +Do this now for the other two knobs. The settings are below for each one. + +**Label / Knob Set 2** + +* Label H + * Color: orange + * Text: Max Enemy Shoot Interval +* Rotary H + * Color: orange + * OSC: /game/max_enemy_shoot_interval + * Value Range: From: 0 To: 1 +* Label H + * Color: Orange + * OSC: /updatedVals/max_enemy_shoot_interval + +**Label / Knob Set 3** + +* Label H + * Color: Green + * Text: max enemy amplitude +* Rotary H + * Color: Green + * OSC: /game/max_enemy_amplitude + * Value Range: From: 0 To: 1 +* Label H + * Color: Green + * OSC: /updatedVals/max_enemy_amplitude + +**Set 4** + +We are going to add one more but this one will be a Push Button verses a RotaryH. Right click to create it just like the knob. Make that now and 2 labels. Here are the settings: + +* Label H + * Color: Pink + * Text: Trigger Bonus +* Push Button + * Color: Pink + * OSC: /game/triggerBonus + * From: 0 To: 1 +* Label H + * Color: Pink + * OSC: /updatedVals/triggerBouns + +Save your file to your hard drive desktop and name it `PlaytestInterface`. You are done building your interface for play testing. Now let’s deploy it. On your mobile device, launch Touch OSC. It will launch and open a settings screen. + +This is when we need the network address of your computer we retrieved earlier. Under Connections touch OSC: and set it to the IPAddress of your computer to link the two. This should be something like `192.165.0.3` + +The ports should also get set. Tap each one an set them up to these values: + +``` +Port (outgoing) 8001 +Port (incoming) 8000 +``` + +Next tap on TouchOSC in the upper left corner of the app to go back to the settings. + +Now click on `Layout`. Then tap `Add`. It will start to search for your computer. Switch back over to your computer now and into the TouchOSC Editor. Press the green `Sync` arrow. + +![](sync.png) + +Switch back to your device. You should see your computer listed under FOUND HOSTS. Select it. It will pop back to the settings screen. Scroll down and find PlaytestInterface in the list of interfaces. Select it and it will take you back to the main menu. Press Done in the upper left corner and your interface will now launch. If you want to get back to the settings screen at any point the white dot in the upper right hand corner will return the user interface to that screen. + +Finally, TouchOSC is set up. Let’s link it to our game and run our very first playtest. Go back to the programming IDE. Open up `LiveTesting.cpp`. In our default constructor, we will now set up our game to send and receive values over the network. To do this we will need to know which Ip address and port on our device we will send to as well as set up a port on our local computer’s network to receive incoming data. Your computer will have only one IP address but it can send and receive data on thousands of ports. While we aren’t going too deep into ports there, you can think of the IP address like a boat pier. Lots of boats can be docked at a single pier. This is no different. Your ports are your docks and your IP address is your pier. You can think of the data like the people departing and arriving. You’ll need a separate port for each activity in this scenario. If a port isn’t used by your operating system, you can send and receive data there. We are going to use `8000` and `8001`. The final thing to establish is the Address Pattern. It will look like a file path and it will allow us to specify the address pattern match our messages to their right values. Add this code: + +``` +#include "LiveTesting.h" + +LiveTesting::LiveTesting(){ + sender.setup("192.168.0.11", 8000); + //this is the ip address of your ipad/android and the port it should be + //set to receive on + + receiver.setup(8001); + /*this is the port you're game will receive data on. For us this is the important one! Set your mobile device to send on this port.&*/ + + m.setAddress("/game"); + /*this is OSC's URL like naming convention. You can use a root url address like structure and then everything under that address will be accessible by that message. It's very similar to a folder path on your hard drive. You can think of the game folder as your root directory and all the bits that are /game/someOtherName are inside of it. +*/ +} +``` + +In the above code we simply set up our network address, incoming and out going ports and created a default address pattern. From here we should be good to go to set up the messages we’d like to send and receive in our code. + +Let’s move on to the next major function we want to write. We need to run an update function in this class to update every frame so we can make sure that if we move a slider on our ipad that change becomes reflected within the game. Also, we might want to send that value back out once we receive it so we can get some visual feedback on our tablet to let us know what our current settings are. + +Each time we make a change on our device, it will send over the changes to our code via Touch OSC. We want to make sure we get all of the incoming messages that are being sent so we will create a simple while loop. Every incoming message will come in with its address tag and also the arguments we are setting. You can test for the address tag string to match up the incoming argument with the matching variables in your game. + +``` +void LiveTesting::update() +{ + //our simple while loop to make sure we get all of our messages + while (receiver.hasWaitingMessages()) { + + //get the message, which will hold all of our arguements inside of it. It's a collection of data! + ofxOscMessage m; + //pass a reference to that message to the reciever we set up above using the getNextMessage function in the OSC add on. + receiver.getNextMessage(&m); + + //this will be the message we send back from our game to our device letting it know what value we received + //from it and displaying that back to us so we know what our current game setting are at + ofxOscMessage sendBack; + + //remember or address tags are unique. we set up the /game tag as our root address and each / denotes a sub tag + //if theses strings are a match, we know the message that came in is our amplitude + if(m.getAddress() == "/game/max_enemy_amplitude") + { + + //this is critical. Each type must match if you want to be able to run your code. + //We know the first argument in our array of messages will be a float if the above if statement evaluates to true + max_enemy_amplitude = m.getArgAsFloat(0); + + //now we are going to pack up a collection of data to send back to our device. sendBack is also a collection of data we + //add arguments to. add the vaule we set our amplitude to the message and move on. + sendBack.addFloatArg(max_enemy_amplitude); + sendBack.setAddress("/updatedVals/max_enemy_amplitude"); + sender.sendMessage(sendBack); + + cout << max_enemy_amplitude << endl; + } + + else if (m.getAddress() == "/game/interval_time") + { + //this is exactly the same as above. We just simply are testing to see if the address tag is this value and if so doing the exact + //process of setting our ingame value to match the value of the incoming argument and sending back our interval_time to our device. + interval_time = m.getArgAsInt32(0); + + //send visual feedback + sendBack.addIntArg(interval_time); + sendBack.setAddress("/updatedVals/interval"); + sender.sendMessage(sendBack); + } + else if (m.getAddress() == "/game/max_enemy_shoot_interval") + { + //again the same process of testing the address tag + max_enemy_shoot_interval = m.getArgAsFloat(0); + + //send visual feedback + sendBack.addFloatArg(max_enemy_shoot_interval); + sendBack.setAddress("/updatedVals/max_enemy_shoot_interval"); + sender.sendMessage(sendBack); + + } + else if (m.getAddress() == "/game/triggerBonus") + { + //and finally we rap it up this is last test. + triggerBonus = m.getArgAsInt32(0); + cout << triggerBonus << endl; + //send visual feedback + sendBack.addIntArg(triggerBonus); + sendBack.setAddress("/updatedVals/triggerBouns"); + sender.sendMessage(sendBack); + + + } + } +``` + + + + //Left to do – explain touch OSC and the last function + diff --git a/09_game_design/controls.png b/09_game_design/controls.png new file mode 100644 index 0000000000000000000000000000000000000000..4328202a192fe673b05f311ca7887ff98d3402c9 GIT binary patch literal 41205 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 sH}Ith9uEML|NTqr|AsazpGTlEqzVPx# literal 0 HcmV?d00001 diff --git a/09_game_design/game_interval_time.png b/09_game_design/game_interval_time.png new file mode 100644 index 0000000000000000000000000000000000000000..456b2add20e1bbfe62180190a53968de00d08bbd GIT binary patch literal 21328 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 literal 0 HcmV?d00001 diff --git a/09_game_design/sync.png b/09_game_design/sync.png new file mode 100644 index 0000000000000000000000000000000000000000..08f61c9d994b7f941c6b54902bfa998cd77448e4 GIT binary patch literal 8069 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 YRh?2QI%><%e|APiIThJ5X_Mgp0gRiZxc~qF literal 0 HcmV?d00001 diff --git a/09_game_design/updatedvals_interval.png b/09_game_design/updatedvals_interval.png new file mode 100644 index 0000000000000000000000000000000000000000..c6f8bb0e264cdeb789db9d4bdf02d846415a881e GIT binary patch literal 17811 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