Slides here - Game with US!

advertisement
Game with US Beginner Tutorial
Welcome!!
 Who I am
 What is Processing?
 Basic Coding
 Input
 Methods
 Images
 Classes
 Arrays
Who I am
 Mike Sheinin
 mike.sheinin@usask.ca
 Interactive Systems Design
 Computer Science
 Jelly Polo: https://www.youtube.com/watch?v=U-tEU-
lVArE
What is Processing?
 Text-based drawing program
 Similar to Java
 http://www.processing.org
 http://www.openprocessing.org
Basic Coding
 Processing basics
 Commands
 Variables
 Conditionals
 Iteration
Processing basics
 void setup()
 Runs once
 void draw()
 Runs until the program ends
 size(x, y)
 background(r, g, b)
 (0, 0) is top left
 size(200, 200) means the bottom right is (200, 200)
Processing basics
 The semi-colon ;
 UPPER and lower case
 Whitespace
 Variable types
 Object-oriented programming language
 = is assignment
 == is comparison
Processing basics
 && is and
 || is or
 // and /*...*/ are comments
 ! Means not
 != means not equal to
 {} curly brackets for code blocks
Commands
 line(x, y, x2, y2);
 ellipse(x, y, r, r);
 rect(x, y, w, h);
 point(x, y);
 fill(r, g, b);
 noStroke();
 println();
Commands
 Parameters
 line(x, y, x2, y2);
 ellipse(x, y, r, r);
Variables
 Type
 Name
 Value (not always)
int
Type
x
=
Name
5;
Value
Variables
 Types
 int
 float
 boolean
 long
 double
 color
 byte
 Any classes you make
Variables
 Casting
 Can change types to make them the same
 int x = int(random(1, 5));
 random() gives a float value
 x needs an int value
 int(…) changes the float to an int
Variables
 Declare (above setup)
 int x;
 Initialize (in setup)
 x = 5;
 Use (in draw)
 x = x + 1;
 x += 1;
 x++
Variables
 Some variables are managed for you
 int mouseX

Current X position of the mouse
 int mouseY

Current Y position of the mouse
 boolean mousePressed

Whether the mouse button is currently pressed
 char key

Which key was typed
Variables
 Global variables
 Everything can see it
 Local
 Only local can see it
Conditionals
 If
 If, else
 Else if
Conditionals
 if(<the thing I put in here is true>)
{
//do this
}
Conditionals
 if(x = 5)
{
ellipse(50, 50, 20, 20);
}
What do the numbers in the ellipse command mean?
Is this allowed?
Conditionals
 if(x == 5)
{
ellipse(50, 50, 20, 20);
}
Correct way
The previous slide uses assignment, not comparison
Conditionals
 if(x == 5)
{
//do this
}
else
{
//do this
}
Conditionals
 if(x == 5)
{
//do this
}
else if(x == 4)
{
//do this
}
Conditionals
 if(x == 5)
{
//do this
}
else if(x == 4)
{
//do this
}
else
{
//do this
}
Iteration (Loops)
 There are two kinds of loops
 For loops
 While loops
Iteration (Loops)
 For loop
 Assignment
 Stopping condition
 Increment
 Body
for(<assignment>; <stopping condition>; <increment>)
{
//body
}
Iteration (Loops)
 For loop
int i;
for(i = 0; i < 10; i++)
{
println(i);
}
Iteration (Loops)
 For loop
for(int i = 0; i < 10; i++)
{
println(i);
}
Iteration (Loops)
 While loop
while(<this is true>)
{
//do something
}
Iteration (Loops)
 While loop
while(x < 10)
{
println(x);
x++;
}
Iteration (Loops)
 Nested loops
int i;
int j;
for(i=0; i<10; i=i+1)
{
for(j=0;j<10; j=j+1)
{
print(i);
}
}
Example
 Bouncing Ball
Input
 Mouse
int mouseX;
int mouseY;
int pmouseX
int pmouseY
Input
rect(mouseX, mouseY, 50, 20);
Input
 Example
void draw()
{
point(mouseX, mouseY);
}
Input
 Example
void draw()
{
line(mouseX, mouseY, 200, 200);
}
Input
 Example
void draw()
{
line(mouseX, mouseY, mouseX, mouseY);
}
What is this going to do?
Input
 Introducing pmouseX and pmouseY
 pmouseX is the previous mouseX position
 pmouseY is the previous mouseY position
 Previous means the position from the last draw loop
iteration
Input
 Example
void draw()
{
line(mouseX, mouseY, pmouseX, pmouseY);
}
Input
 Other mouse inputs
 mousePressed
 mousePressed()
 mouseReleased()
 mouseClicked()
 Others...
Input
 Example
if(mousePressed == true)
{
//do something
}
Input
 Keyboard
 key
 keyCode
 keyPressed
 keyPressed()
 keyReleased()
 keyTyped()
Input
 Example
void draw()
{
if(keyPressed)
{
if (key == 'b' || key == 'B')
{
fill(0);
}
}
else
{
fill(255);
}
rect(25, 25, 50, 50);
}
Gravity
 dx and dy are useful!
 We can use these variables to make bouncing look
more realistic
Gravity
 Before we had
 dx*= -1;
 dy*= -1;
 This just changed the direction of the ball
 How would we change the acceleration of the ball?
Gravity
 Add small increments to dx and dy to add acceleration
 Lets do an example!
Methods()
 Methods are blocks of code
 They should be outside of the setup and draw loops
 They can be called (used) anywhere in your program
 setup, draw, other methods..
Methods()
 We are already using methods
 void setup()
 void draw()
 We can also create any method we want
 The method can have any name we want
 The method can have any parameters we want
 The method can do anything we want
Methods()
 Methods can be used to clean up code or to reuse code
 Processing has its own methods as well
 setup()
 draw()
 mousePressed()
 keyPressed()
 ..others
Methods()
 Example
int value = 0;
void draw()
{
fill(value);
rect(25, 25, 50, 50);
}
void mousePressed()
{
if(value == 0)
{
value = 255;
}
else
{
value = 0;
}
}
Methods()
 Creating our own method:
 Create a method called bounce()
 Put the code for the ball bouncing into the method
 Call the method in the draw loop like this:
 bounce();
Images
 To include images or sprites put the file into your
sketch folder
 Can put any image you want
 Background
 Sprites
Images
 To put an image in your program:
PImage b;
b = loadImage(“picture.png”);
Image(b, 0, 0);
 Declare
 Initialize
 Use
Images
 Image(name, x, y);
The x and y of the image is like the x and y of a rectangle
(0,0) is top left corner of the image
Images
 Sprites
 I highly suggest you download Paint.Net
 http://www.getpaint.net/download.html
 Save files as .png so you can add an alpha channel
Images
 Alpha channel is just a see-through background
 If you only want your sprite, and not a rectangular
background around it, use an alpha channel
 But (x,y) of image is still top left of the rectangle
Classes
 Classes are a way to separate your code even further
 Organizes programs into separate files
 Classes are used to make objects
Classes
 A simple class:
class Particle
{
//variables for the class declared here
//methods for the class written here
}
Classes
 A simple class:
class Particle
{
int x, y, r;
Particle(int positionX, int positionY, int radius)
{
x = positionX;
y = positionY;
r = radius;
}
}
Classes
 The class is the template
 The object is the actual thing you use
 Once you have a class, you must create an object
Classes
 Creating an object:
Particle p;
p = new Particle(100, 100, 30);
 Using an object:
p.doSomething();
Classes
 Variables
class Particle
{
int x;
int y;
int dx;
int dy;
//methods
}
Classes
 Variables
 The variables in your classes can be used in other parts of your program:
Particle p;
void setup()
{
p = new Particle(100, 100, 30);
p.x = 200;
p.y = 200;
p.dx = 5;
p.dy = 4;
}
void draw()
{
//do something
}
Classes
 Constructor
 Runs once when you create the object
 Must have the same name as the class
 Usually initialize variables here (kind of like setup)
 Can have parameters in the constructor
p = new Particle(100, 100, 30);
Classes
 A simple class:
class Particle
{
int x, y, r;
Particle(int positionX, int positionY, int radius)
{
x = positionX;
y = positionY;
r = radius;
}
}
Classes
 Methods
 Can put methods in your class just like in your main
program
 Need void in front of methods (just like setup and draw)

Unless you are returning something...
 Use the methods just like you use variables

p.drawParticle();
Classes
class Particle
{
int x, y, r;
Particle(int positionX, int positionY, int radius)
{
x = positionX;
y = positionY;
r = radius;
}
//methods go here
}
Classes
class Particle
{
int x, y, r;
Particle(int positionX, int positionY, int radius)
{
x = positionX;
y = positionY;
r = radius;
}
void drawParticle()
{
ellipse(x, y, r, r);
}
void moveParticle()
{
x += dx;
y += dy;
}
}
Classes
Particle p;
void setup()
{
size(400, 400);
p = new Particle(100, 100, 30);
}
void draw()
{
background(0);
p.drawParticle();
p.moveParticle();
}
Arrays
 If we want multiple particles how are we going to make
them?
Particle p1;
Particle p2;
Particle p3;
Particle p4
...
Arrays
 We would need variables for every particle
 Declare
 Initialize
 Use
 What if we wanted 1000 particles?
Arrays
 Arrays are a collection of primitive types or objects
 Primitive types: int, float, boolean...
 Objects made from classes
Arrays
 An array can only hold one type
 You can hold many different types into arrays
 But you can only hold one certain type in any one array
 You can have an array of ints
 You can have an array of Particles
 You cannot have an array of ints and Particles
Arrays
 Declaring arrays:
int[] intArray;
The data type is int
The name of the array is intArray
Arrays
 Declaring arrays:
Particle[] p;
The data type is Particle
The name of the array is p
Arrays
 Initializing arrays:
intArray = new int[5];
Must initialize the array with a size
Here we can have 5 items in the array
Arrays
 Initializing arrays:
p = new Particle[1000];
Must initialize the array with a size
Here we can have 1000 items in the array
Arrays
 Arrays are kept in a list with an index from 0 to the size
of the array minus 1
 An array of size 5 has an index from 0 to 4
Arrays
 How to put things in the array:
intArray[0] = 5;
intArray[1] = 6;
intArray[2] = 7;
intArray[3] = 8;
intArray[4] = 9;
Arrays
 How to put things in the array:
p[0] = new Particle(100, 100, 30);
p[1] = new Particle(200, 200, 30);
p[2] = new Particle(300, 300, 30);
p[3] = new Particle(400, 400, 30);
p[4] = new Particle(500, 500, 30);
Arrays
 Can use loops to put things in the array
int[] intArray = new int[5];
for(int i = 0; i < 5; i++)
{
intArray[i] = int(random(0,100));
println(intArray[i]);
}
Arrays
 Can use loops to put things in the array
Particle[] p = new Particle[1000];
for(int i = 0; i < p.length; i++)
{
p[i] = new Particle(1*i, 1*i, 30);
}
Arrays
 Use arrays just like their data types
intArray[2] = 4;
intArray[3] = 6;
intArray[4] = intArray[2] + intArray[3];
println(intArray[4]);
Arrays
 Use arrays just like their data types
p[0].drawParticle();
p[0].moveParticle();
p[1].drawParticle();
p[1].moveParticle();
Arrays
 Use arrays just like their data types
for(int i = 0; i < p.length; i++)
{
p[i].drawParticle();
p[i].moveParticle();
}
Download