Lecture 3 Announcements.

Slides:



Advertisements
Similar presentations
Chapter 4: Trees Part II - AVL Tree
Advertisements

Intersection Testing Chapter 13 Tomas Akenine-Möller Department of Computer Engineering Chalmers University of Technology.
Chapter 4.2 Collision Detection and Resolution. 2 Collision Detection Complicated for two reasons 1. Geometry is typically very complex, potentially requiring.
Chapter 10 Introduction to Arrays
CSE 380 – Computer Game Programming Pathfinding AI
Week 14 - Monday.  What did we talk about last time?  Bounding volume/bounding volume intersections.
Chapter 4.2 Collision Detection and Resolution. 2 Collision Detection Complicated for two reasons 1. Geometry is typically very complex, potentially requiring.
CS 177 Recitation Week 8 – Methods. Questions? Announcements  Project 3 milestone due next Thursday 10/22 9pm  Turn in with: turnin –c cs177=xxxx –p.
1 Geometry A line in 3D space is represented by  S is a point on the line, and V is the direction along which the line runs  Any point P on the line.
Introduction to 3D Graphics John E. Laird. Basic Issues u Given a internal model of a 3D world, with textures and light sources how do you project it.
L ECTURE 5 Announcements. Tou II Feedback handins look varied and fun! write a Range or Interval class – makes math code easier to write read modify –
Problem of the Day  Why are manhole covers round?
Testing and Debugging Version 1.0. All kinds of things can go wrong when you are developing a program. The compiler discovers syntax errors in your code.
Programming for Beginners Martin Nelson Elizabeth FitzGerald Lecture 5: Software Design & Testing; Revision Session.
Problem of the Day  Why are manhole covers round?
11 Adding Tomato Targets Session Session Overview  We now have a game which lets a player bounce a piece of cheese on a bread bat  Now we have.
L ECTURE 6 Announcements. Next week will be great! Three major things are happening next week: – Zynga guest lecture – Your game pitches (more details.
YGGDRASIL WORLD GENERATION A modular approach to procedural world generation.
Bridges To Computing General Information: This document was created for use in the "Bridges to Computing" project of Brooklyn College. You are invited.
Week 10 - Friday.  What did we talk about last time?  Graph representations  Adjacency matrix  Adjacency lists  Depth first search.
Week 15 – Wednesday.  What did we talk about last time?  Review up to Exam 1.
Introduction to Game Programming & Design III Lecture III.
The Stingray Example Program CMT3311. Stingray - an example 2D game May be useful as a simple case study Most 2D games need to solve generic problems.
Game Maker Tutorials Introduction Clickball IntroductionClickball Where is it? Shooting Where is it?Shooting.
Instructor: Lilian de Greef Quarter: Summer 2017
Graphical Output Basic Images.
MOM! Phineas and Ferb are … Aims:
B/B+ Trees 4.7.
Data Structures: Disjoint Sets, Segment Trees, Fenwick Trees
Background Shapes & Collision Resolution (Top-down and Side-scrolling)
Testing and Debugging.
CS 1321.
CPSC 221: Algorithms and Data Structures Lecture #6 Balancing Act
Distance Computation “Efficient Distance Computation Between Non-Convex Objects” Sean Quinlan Stanford, 1994 Presentation by Julie Letchner.
Lecture 3 Announcements.
Trees Lecture 12 CS2110 – Fall 2017.
Disjoint Sets Chapter 8.
Week 11 - Friday CS221.
C ODEBREAKER Class discussion.
Creating and Modifying Text part 2
Intro to PHP & Variables
CSE373: Data Structures & Algorithms Lecture 7: AVL Trees
Cracking the Coding Interview
Aaron Camm, Jeff Huggins, Steve Moskal, Patrick Cardwell
Data Structures: Segment Trees, Fenwick Trees
Lesson 2: Building Blocks of Programming
Platformer Java Guide by Mr. Monroe.
Chapter 4.2 Collision Detection and Resolution
OOP Paradigms There are four main aspects of Object-Orientated Programming Inheritance Polymorphism Abstraction Encapsulation We’ve seen Encapsulation.
CPSC 221: Algorithms and Data Structures Lecture #6 Balancing Act
Chapter 10 Algorithms.
Coding Concepts (Sub- Programs)
Lecture 2 Announcements.
Chapter 10 Algorithms.
Go to =>
Sub-Quadratic Sorting Algorithms
Week 6: Time and triggers!
Quicksort.
CS679 - Fall Copyright Univ. of Wisconsin
Collision Detection.
Artificial Intelligence 12. Two Layer ANNs
Lecture 9 Announcements.
Tonga Institute of Higher Education IT 141: Information Systems
Tonga Institute of Higher Education IT 141: Information Systems
Chapter 10 Algorithms.
CO Games Concepts Week 12 Collision Detection
Richard Anderson Spring 2016
Game Programming Algorithms and Techniques
Software Development Techniques
Quicksort.
Presentation transcript:

Lecture 3 Announcements

Support Code Updates We updated the support code last week! Please redownload it!!

Next Week No class next Monday! No project due Sunday either Wiz I design checks this week Wiz I & Alc II standard retries due 10/14

Alchemy 2 Feedback Email your grader when you want your retries graded! We won’t look at any retry handins until you email us Even if you’re not done, hand in something! Knowing exactly what you’re missing makes getting the standard retry correct a lot easier

Alchemy 2 Feedback Resources (image files, .mp3s) should be at the same level as src and bin alc/ src/ bin/ resource/ wood.png

Alchemy 2 Feedback Files Don’t use absolute paths “/gpfs/main/home/<login>/course/cs1971/ta c/resources/spritesheet.png” is bad “resources/spritesheet.png” is good Absolute filepaths won’t work when we/your classmates try to test your game

Alchemy 2 Feedback In your handin, you MUST include: a copy of the rubric how to verify each requirement how many hours it takes to complete Next week, you will get playtesting points taken off for this

David’s Hours They were Sunday, 9pm to 11pm They are now Sunday, 10:00pm to 12:00am

Announcements QUESTIONS?

This week: Wiz 1! Real gameplay features! Level Loading or Level Generation! Actually fun!

Lecture 3 Graphics III

Graphics III ANIMATING SPRITES

Why Sprite Sheets? In Alc, we could have a separate sprite sheet for each element What about for animation? Index different sprites for different movements- but from the same sheet

AnimationBehavior Like the SpriteBehavior, but also responds to TickMessages Can inherit from SpriteBehavior Animate by drawing frames like a flipbook: one after another, then reset Store a list of positions for frames Calculate which frame to use based on elapsed time Update frame state on tick, draw correct frame on draw Draw is read-only Use modulo (%) operator to start over

Graphics III QUESTIONS?

Lecture 3 Physics I

Physics I COLLISION RESPONSE

Collision response You know how to detect whether 2 objects collide How do we make objects respond in a physically believable way? General strategy: Move objects out of collision (also other stuff later)

MINIMUM TRANSLATION VECTOR Physics I MINIMUM TRANSLATION VECTOR

Moving out of collision Many ways to move the ball out of the wall We want the minimum “Minimum translation vector” (MTV)

MTV in one dimension In 1D, convex shapes are line segments (intervals) These have a 1D MTV Similar to overlap But it has a sign Different for each shape To correct their positions, move by half the MTV

Computing circles’ MTV Circle vs Circle Sum of radii – dist(center1, center2) MTV is parallel to line connecting centers

Computing circles’ MTV (ctd) Circle vs Box If Box contains circle center Find p = closest point on AAB edge from circle center Length of MTV is Radius + dist(center, p); MTV is parallel to the X or Y axis Otherwise Clamp circle center to Box Lengh of MTV is Radius - dist(center, clampedPoint) MTV is parallel to line connecting

Computing boxes’ MTV Only four possibilities Return the shortest Move up (this.maxY – that.minY) Move down (this.minY – that.maxY) Move left (this.maxX – that.minX) Move right (this.minX – that.maxX) Return the shortest

Static Objects Some objects shouldn’t move, even when collided When a static object collides, it doesn’t move When an object collides with a static object, it moves by the full MTV

Collision callbacks Pass in other GameObject class PhysicsBehavior { void onCollide(GameObject); }

Collision callbacks Separate Collision info object (really a struct) Pass in the MTV Pass in which Shape collided Enemies with weak points class PhysicsBehavior { void onCollide(Collision); } class Collision { final GameObject other; final Vec2f mtv; final Shape thisShape; final Shape otherShape;

How MTV’s Affect Our Engine Collision methods should return MTVs, not booleans Be careful with signs and argument order Especially when reversing args for double dispatch Be careful when calculating the MTV between concentric circles, you might end up dividing by 0

Physics I QUESTIONS? Questions about how to use this stuff in their current collision system

Lecture 3 Map Generation

Map Generation MOTIVATION

Hand Crafted vs Procedural Straightforward Predictable Time intensive Will be covered later Procedural: Far more variety Can lead to janky edge cases Will be used this week

Procedural Generation Algorithmically generate your own maps Game side - experiment! Typically uses seeded random numbers Ex. Random r = new Random(seed); Calling r.nextXXX(); some number of times will return the same sequence of numbers The seed can be used to share or save the generated map Used to generate seemingly-hand designed content Somewhat different than randomly generated

Constraint-based Generation Not just any random map will work Generated maps need to follow game-specific constraints Dungeon crawlers require a path from entrance to exit An RTS might require every area of the map accessible What looks good, what’s fun, etc Constraints are baked into the algorithm

Simple Generation Algorithms Value noise/Perlin noise Space partitioning Exploring paths (random/drunken walk) Lots of resources online Make map generation as generic as possible

Map Generation Space Partitioning

Space Partitioning Basic idea – keep splitting the map up into smaller subsections to create rooms Used to simulate the insides of structures

Space Partitioning Start with an empty rectangular grid.

Space Partitioning Pick a random index on which to divide the space along the x axis.

Space Partitioning Dungeon A B

Space Partitioning Pick another index on which to divide, this time dividing along the other axis (in this case y). Use a different index for each split

Space Partitioning Dungeon A A1 A2 B B1 B2

Space Partitioning Keep dividing, switching between x and y until you hit some depth (3 here).

Space Partitioning Fill spaces with random sized boxes. Make sure boxes fill up more than half of the width and height of the space they occupy.

Space Partitioning Connect sister leaf nodes of the tree. If rooms don’t take up more than half their space’s width and height, you might get z-shaped hallways.

Space Partitioning Connect parent nodes.

Space Partitioning Keep on connecting up the tree.

Space Partitioning If the halls are too narrow, Increase width of hallways to create more open space.

Space Partitioning Now you have your series of connected rooms! But there’s more…

Space Partitioning Instead of always checking depth, have some branches of the tree stop early so you end up with more variation in room size.

Constraints Add a minimum width/height Prevents rooms from being too small and weirdly shaped

Space Partitioning Say you wanted to keep spawn and exit rooms far apart During the first split, assign one side of the tree to Spawn and the other to Exit

Space Partitioning At the bottom of the Spawn subtree, assign one room to spawn. Symmetrically for Exit subtree.

Space Partitioning QUESTIONS?

Lecture 3 Level Loading

Important Map Information Size of map Locations of terrain (grass, desert, trees, etc.) Starting location of units, unit types, unit orientation (friendly or enemy) Location of sprites, on sprite sheet, for unique objects

File Parsing Good news: Mostly game-side Bad news: So many things can go wrong! Map file can’t be opened Map file is empty Map file is a directory Map file is a JPEG Is a map file, but has inconsistent data We’ll show you how to handle this

Parse Safely Read in a line, then parse it, repeat At least you can report the line count where an error happened Recommended classes: BufferedReader (for reading lines) Scanner+StringReader (for parsing each line) Catch exceptions Throw your own LevelParseException Report useful debugging information We require that your parser never crash!

Level Loading QUESTIONS?

Lecture 3 Tips for Wiz 1

VIEWPORT – CENTER ON PLAYER Tips for Wiz I VIEWPORT – CENTER ON PLAYER

Bad Way Give the viewport a reference to the player On tick, update the viewport center to be the player’s transform Too much game logic handled by the viewport

Better Way Give the player a CenterBehavior Give the CenterBehavior a reference to the viewport Each tick, the CenterBehavior sets the center of the viewport to its object’s transform

Tips for Wiz I MINIMAP

Viewports as Minimaps Minimap can be just another viewport Viewports should be able to draw the world normally They can also be generic enough to draw the world as a minimap draw(GraphicsContext g); drawMinimap(GraphicsContext g); Could instead have a MinimapSystem that draws the bounding boxes of GameObjects

Tips for Wiz I JAVA TIP OF THE WEEK

Speeding Up Your Code Component-based engines are more expensive Eclipse has a java profiler! jvmmonitor.org marketplace.eclipse.org/content/jvm- monitor

Asserts Asserts: assert thisFunctionReturnsTrue(); // no error assert thisFunctionReturnsFalse(); // error Can be useful for debugging Particularly MTVs

Throwing Exceptions public void parse() throws LevelParseException { throw new LevelParseException(“Uh-oh!”); }

Catching Exceptions try { map.parse() } catch (LevelParseException e) { //… } catch (IOException e2) { } finally { }

Alchemy 2 Playtesting Let’s do it!