chapter 2 the game loop - variables, types, classes and objects in xna xna game studio 4.0

42
CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Upload: baldwin-cannon

Post on 17-Jan-2018

251 views

Category:

Documents


0 download

DESCRIPTION

Program Project: A Mood Light Your first project is going to be a program that turns a display (the bigger the better) into a mood light.

TRANSCRIPT

Page 1: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

CHAPTER 2The Game Loop - Variables, Types, Classes and Objects in XNA

XNA Game Studio 4.0

Page 2: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Objectives• Explore how games actually work.• See how data is stored in a program.• Discover how colors are managed on computers.• Find out about classes and methods.• Write some code that controls color.• Write some code that makes decisions.• Create a funky color-changing mood light.

Page 3: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Program Project: A Mood Light• Your first project is going to be a program that turns a

display (the bigger the better) into a mood light.

Page 4: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

What Does a Game Program Do?• Computer programs in general read data, do something

with it, and then send it out.

Page 5: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Making a Game Program• The file that contains the game behavior is called Game1.cs. • The name Game1 was generated automatically when the

project was created; the .cs part is the file extension for C# programs.• Game1 is the default.

• The program code that XNA Game Studio created when you made an empty game contains the following method:protected override void Draw(GameTime gameTime){ GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime);}

Page 6: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Making a Game Program• A method is a named part of a program.

• In this case, the method has the name Draw (you can ignore the protected override void part for now).

Page 7: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Statements in the Draw Method• The Draw method contains a block of statements.

• C# programs are expressed as a series of statements that are separated by a semicolon (;).

• Each statement describes a single action that your program needs to do.

• There are a number of different kinds of statements; you discover new ones as you learn more about programming.

Page 8: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Statements in the Draw Method• The statements are organized into a single block.

• A block is a way to lump statements together.

• The start of a block is marked with an open curly bracket character ({) and the end of the block is marked with a closing curly bracket (}).

• These curly kinds of brackets are sometimes called braces.

Page 9: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Statements in the Draw Method• Comments are ignored by the compiler; they let you put

text into your program to describe the program or to remind you to do things.

• In the preceding code, the comment is a “TODO,” which tells programmers that they need to do something.

// TODO: Add your drawing code here

• The compiler can tell that the text is a comment because it starts with the character sequence //.

Page 10: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Statements in the Draw Method• From the point of view of changing the color of your screen, the

statement that is most interesting is this one:GraphicsDevice.Clear(Color.CornflowerBlue);

• Clear is a method that is part of XNA. • You will see precisely how it fits into the framework later; for now, all you need

to know is that the Clear method is given something that describes a color, and the method clears the screen to that color.

• At the moment, you are sending the Clear method the color CornflowerBlue, and it is clearing the screen to be that color.

• If you want a different color, you just have to send a different value into Clear.GraphicsDevice.Clear(Color.Red);

Page 11: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

WORKING WITH COLORS

Page 12: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Storing Color Values• You can use preset colors; however you can also make

your own colors.

• A particular color is represented by a structure that holds the red, green, and blue intensity values.

• A structure is used to hold a number of related data items in the same way.• Use a structure to store the color values you create.

Page 13: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Storing Color Values• Declaring a variable

• Storing the values you create.

• Made up of• Data Type

• The type determines what you can put in your variable

• Identifier• The identifier is the name of the variable.• An identifier is made up of numbers and letters and must start with a

letter. • The identifier should describe what you are going to use the thing for

Page 14: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Setting a Color Value• Write a statement that causes the game program to put a

value into this variable.

• You start by creating a new Color value that contains a particular amount of red, blue, and green.

Page 15: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Setting a Color Value• “gozzinta” operator

• The value on the right of the equals sign “goes into” the variable on the left.

• To use our new variable. GraphicsDevice.Clear(backgroundColor);

• New Code:protected override void Draw(GameTime gameTime){ Color backgroundColor; backgroundColor = new Color(0,0,0); GraphicsDevice.Clear(backgroundColor); base.Draw(gameTime);}

Page 16: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Games and Classes• The game program is actually a class called Game1.

• A class is a collection of abilities (methods) and data (variables) that forms part of a program.

• You can put as much stuff as you like inside a single class.

• A class is usually constructed to look after one particular part of a system.

Page 17: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Classes and Behaviors• A behavior is something that a class can be asked to do.

• A particular method performs a particular behavior.

• You have already used the Clear behavior of the GraphicsDevice class.

• When you use Clear, this causes the code in the Clear method to be obeyed to clear the screen.

Page 18: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Drawing and Updating in Games• The Game1 class provides Update and Draw behaviors

(among others) so that XNA can ask Game1 to update the state of the game and draw it on the display.

• Draw and Update are methods that you provide for use by XNA.

• The Draw method should do nothing other than draw the display, and the game should be updated by using the Update method.

Page 19: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Drawing and Updating in Games• It is very important that the game world is updated at

constant speed. • If Update is called less frequently than it should be,

players would find that time in the game goes into “slow motion,” which would be very frustrating for them because the game would not respond properly to their inputs to the gamepad.

• However, a game can usually get away with calling the Draw method less often - all that happens is that the display becomes more jerky as it is redrawn less frequently.

Page 20: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Sharing Game World Data Between Draw and Update

• When you create a game, you must create the variables that hold the state of the game itself.

• In a driving game, this state would include the speed of the car the player is driving, the car position on the track, and the position and speed of the other cars. This could be called the game world data.

• The game world data that you are going to use in the mood light is the amount of red, green, and blue that defines the color of the light.

• The present version of Draw is entirely self-contained.

• It has a local variable that is set with the color that is to be drawn.

• Local variables are used when you just want to manipulate some data for a very short time.

Page 21: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Sharing Game World Data Between Draw and Update

Page 22: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Sharing Game World Data Between Draw and Update

• The job of the Update method is to update the game world data in the game (that is, adjust the intensity values).

• The job of the Draw method is to use the game world data to draw the display (that is, create a color from these values and clear the screen with it).

Page 23: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Game World Data• The Game World data must be held as part of the class

so that the Draw and Update methods can make use of it.

• The preceding code declares three variables inside the Game1 class.

• These are part of the class; they are often called members of the class and can be used by any methods that are also members of the class.

• They have the identifiers redIntensity, greenIntensity, and blueIntensity.

Page 24: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Game World Data• There are two kinds of members: methods (which do

something) and data (which hold information).

• The Game1 class you are working on has both kinds of members; it has the Draw method and the Update method, as well as the three data members, which are going to be used to hold the color values for the changing background.

• The intensity data members are of type byte.

Page 25: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Storing Data in Computer Memory• The data for each color intensity is being held in a variable of type byte.

• A Byte uses 8 bits of computer memory

• The memory is addressed by number, and the compiler generates a program that uses a particular memory location when it accesses a particular variable.

• Each data type uses a particular amount of computer memory; a byte uses a single memory location.

• The Color type uses at least 4 bytes of memory; other types can use a lot more.

• The same memory locations that store data can also be used to hold program instructions.

Page 26: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Drawing by Using Our Color Intensity Variables

class Game1 {// The Game World - our color values byte redIntensity ; byte greenIntensity ; byte blueIntensity ;protected override void Draw(GameTime gameTime){ Color backgroundColor; backgroundColor =new Color(redIntensity, greenIntensity, blueIntensity); graphics.GraphicsDevice.Clear(backgroundColor); base.Draw(gameTime);}// TODO: Update method goes here}

uses member variablesto define the color

Page 27: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Updating Our Colors• When the program starts, the values of byte data members are

automatically set to 0 and the background color is set to black.

• When an empty project is created, XNA Game Studio creates a bare-bones Update method that contains a TODO reminding the programmer to add the required code.

protected override void Update(GameTime gameTime){ // Allows the game to exit if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.Exit(); // TODO: Add your update logic here base.Update(gameTime);}

Pressing the Back button stops the game.

Page 28: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Update Method• Who calls Update and how often?

• The answers at the moment are “the XNA engine” and “60 times a second.”

• In a full-blown game, this involves reading the gamepad, moving all the objects in the game world, checking to see if any have collided, and so on.

Page 29: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Updating Moodlight• In the mood light, the Update method just changes the color values

that Draw uses to draw the display.• Make a mood light that gets steadily brighter over time

protected override void Update(GameTime gameTime){ // Allows the game to exit if (GamePad.GetState(PlayerIndex.One).Buttons.Back==ButtonState.Pressed) this.Exit(); // Make each color brighter redIntensity++; greenIntensity++; blueIntensity++; base.Update(gameTime);}

Page 30: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Updating Moodlight• The Update method works by using the ++ operator.

• An operator is something in the program that tells the compiler that you want to perform an operation on a particular item.

• In this case, you are using the operator ++ on each of the intensity variables.

• The item that an operator works on is called an operand.

• Sometimes operators work by combining operands, and sometimes they work on a single operand. The ++ operator works only on a single operand.

Page 31: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Memory Overflow and Data Values• Note - If you run the program with this Update method, you see that

the display does get steadily brighter for about four seconds. Then it goes black again.

• Why?

• A bit is the smallest unit of data that you can have. A bit is either on or off; in other words, it can store just two different values.

• The two values are often referred to as true or false.

• If you do the math with eight coins, you find that they can occupy 256 different states. So 8 data bits can hold 256 different values. • One of these values is 0 (all false or all tails), which means that the largest

possible integer value that a byte can hold is 255 (all true or all heads).

Page 32: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Memory Overflow and Data Values• When the ++ operator tries to increase the value of 255, it will

produce the value of 256, which cannot be represented by 8 bits. The addition process would like to set the value of a ninth data bit to 1, so that it can represent the value of 256, but there is no ninth bit to set.

• So what happens is that the other 8 bits are cleared to zero. This causes the value to wrap around, which means that the value in the byte goes back to 0 again. The result of this is that the screen goes from maximum brightness to minimum brightness in a single step. The technical name for this is overflow.

• Hence, the Moodlight returns to black.

Page 33: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Making a Proper Mood Light1. If we are counting up, increase the value of redIntensity.2. If we are counting down, decrease the value of

redIntensity.3. If redIntensity is 255, change to counting down.4. If redIntensity is 0, change to counting up.

• This is an algorithm.

• It provides a sequence of operations that is used to solve a problem.

• In this case, we wanted to make the value of redIntensity move up to 255 and down again in steps of 1.

Page 34: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Making Decisions in Your Program• Creating Conditional Statements

• Conditional constructions start with the word if. • This is followed by a condition in brackets. • The condition produces a Boolean result, which can be either true

or false. • You can use a variable of bool type directly here.

Page 35: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Compiler Errors• If not already displayed, you can open the Error List

window by selecting the View menu and clicking Error List in that menu.

Page 36: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Errors• When the compiler has finished trying to convert your C#

source code into a program that can be run on the computer, it tells you how many mistakes that it thinks it has found.

• There are two kinds of mistakes.

• An error is a mistake that prevents what you have written from being made into a program.

• Errors are really bad things like spelling identifiers wrong, using the wrong kind of brackets, and the like.

Page 37: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Errors• The other kind of mistake is called a warning.

• This is where the compiler thinks you might have done something wrong, but it does not prevent your program from running.

Page 38: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Adding an Else Part• The condition you have created is only half correct.

• If the program is not counting up, it must make the value of redIntensity smaller. You can use the -- operator to do this, but we need to add extra code to the condition.

• The two statements are separated by a new key word, else.

Page 39: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Testing Values• The program must also manage the value in

redCountingUp so that when it reaches the Upper limit, it starts to count down, and when it reaches the lower limit, it starts to count up again.

• To do this, you need another kind of condition, one that performs a comparison.

Page 40: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

The == Operator• The sequence == is the comparison operator.

• When the program evaluates this condition, the values on the left and right of the == operator are compared.

• If they are the same, the result of the comparison is true, and the statement that follows the condition is performed.

• If they are different, the result of the comparison is false, and the statement that follows the comparison is ignored.

• == is not the same as =

Page 41: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

A Proper Funky Mood Light• What you want is different combinations and the color

intensities going up and down at different times.

• You can do this by changing the starting values of our intensity values and update directions.

byte redIntensity = 0;bool redCountingUp = true;byte greenIntensity = 80;bool greenCountingUp = false;byte blueIntensity = 160;bool blueCountingUp = true;

Page 42: CHAPTER 2 The Game Loop - Variables, Types, Classes and Objects in XNA XNA Game Studio 4.0

Finding Program Bugs