Tou II Feedback Handins look varied and fun! Write a Range or Interval class – Makes math code easier to: read write modify – Makes M I easier to build.

Slides:



Advertisements
Similar presentations
Extreme Programming Alexander Kanavin Lappeenranta University of Technology.
Advertisements

Coding and Debugging. Requirements and Specification Recall the four steps of problem solving: Orient, Plan, Execute, Test Before you start the implementation.
How do games work? Game Workshop July 4, Parts Sprites/pictures Map/background Music/sounds Player character Enemies Objects.
16-Jun-15 Exceptions. Errors and Exceptions An error is a bug in your program dividing by zero going outside the bounds of an array trying to use a null.
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.
SE320: Introduction to Computer Games Week 8: Game Programming Gazihan Alankus.
L ECTURE 6 Announcements. Tou II Feedback handins look varied and fun! Write a Range or Interval class – makes math code easier to read write modify –
Creative Commons Attribution 3.0 creativecommons.org/licenses/by/3.0 Key Abstractions in Game Maker Foundations of Interactive Game Design Prof. Jim Whitehead.
Mark Nelson What are game engines? Fall 2013
Moodle (Course Management Systems). Assignments 1 Assignments are a refreshingly simple method for collecting student work. They are a simple and flexible.
11 A First Game Program Session Session Overview  Begin the creation of an arcade game  Learn software design techniques that apply to any form.
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 –
Polymorphism, Inheritance Pt. 1 COMP 401, Fall 2014 Lecture 7 9/9/2014.
07 Coding Conventions. 2 Demonstrate Developing Local Variables Describe Separating Public and Private Members during Declaration Explore Using System.exit.
Problem of the Day  Why are manhole covers round?
Testing. 2 Overview Testing and debugging are important activities in software development. Techniques and tools are introduced. Material borrowed here.
Problem of the Day  Why are manhole covers round?
Sample Video Game & Sound. The Plan 1.Game Theme 2.Game Structure 3.Sprites 4.Trackers 5.Collisions 6.Score 7.Levels 8.Splash Screens 9.Design 10.Implementation.
L ECTURE 6 Announcements. Next week will be great! Three major things are happening next week: – Zynga guest lecture – Your game pitches (more details.
1 CSC/ECE 517 Fall 2010 Lec. 3 Overview of Eclipse Lectures Lecture 2 “Lecture 0” Lecture 3 1.Overview 2.Installing and Running 3.Building and Running.
Debugging Computer Networks Sep. 26, 2007 Seunghwan Hong.
Chapter 11: Advanced Inheritance Concepts. Objectives Create and use abstract classes Use dynamic method binding Create arrays of subclass objects Use.
11 Adding a Bread Bat Session Session Overview  We have created a cheese sprite that bounces around the display  We now need to create a bread.
Chapter 9: Continuing Classes By Matt Hirsch. Table Of Contents 1.Static Fields and Methods 2.Inheritance I. Recycle Code with Inheritance II. Overriding.
FILES AND EXCEPTIONS Topics Introduction to File Input and Output Using Loops to Process Files Processing Records Exceptions.
11 Making Decisions in a Program Session 2.3. Session Overview  Introduce the idea of an algorithm  Show how a program can make logical decisions based.
GAME TESTING REQUIREMENTS AND METHODS GAME DESIGN.
Introduction to CSCI 1311 Dr. Mark C. Lewis
CS 134 Design Documents.
ConcepTest 4.1a Newton’s First Law I
MORE Genre Specific Physics
Instructions for EDP PowerPoint Presentation
Topic: Classes and Objects
Module Road Map Refactoring Why Refactoring? Examples
Game Architecture Rabin is a good overview of everything to do with Games A lot of these slides come from the 1st edition CS 4455.
Background Shapes & Collision Resolution (Top-down and Side-scrolling)
C++ coding standard suggestion… Separate reasoning from action, in every block. Hi, this talk is to suggest a rule (or guideline) to simplify C++ code.
Chapter 11 Object-Oriented Design
Maths Space Gladys Nzita-Mak.
Eclipse Navigation & Usage.
Lecture 25 More Synchronized Data and Producer/Consumer Relationship
Lecture 3 Announcements.
CSE 5912 Student Presentations
Adding Assignments and Learning Units to Your TSS Course
PRG 420 NERD Lessons in Excellence -- prg420nerd.com.
© Paradigm Publishing, Inc.
Exceptions 10-Nov-18.
Completing the tasks for A452 with….
Chapter 9 Inheritance and Polymorphism
Finding work experience can be a tricky business
Topics Introduction to File Input and Output
OOP Paradigms There are four main aspects of Object-Orientated Programming Inheritance Polymorphism Abstraction Encapsulation We’ve seen Encapsulation.
Overview of Eclipse Lectures
UNITY TEAM PROJECT TOPICS: [1]. Unity Collaborate
Chapter 10 Algorithms.
Lecture 2 Announcements.
Lecture 3 Announcements.
Lecture 5 Announcements.
Games and Simulations O-O Programming in Java The Walker School
CSE 303 Concepts and Tools for Software Development
OS – Memory Deallocation
Fall 2018 CISC124 2/24/2019 CISC124 Quiz 1 marking is complete. Quiz average was about 40/60 or 67%. TAs are still grading assn 1. Assn 2 due this Friday,
Chapter 14 Abstract Classes and Interfaces
Java IDE Dwight Deugo Nesa Matic Portions of the notes for this lecture include excerpts from.
Applying Use Cases (Chapters 25,26)
Applying Use Cases (Chapters 25,26)
Polymorphism 2019/4/29.
Exceptions 10-May-19.
Topics Introduction to File Input and Output
GPAT – Chapter 7 Physics.
Presentation transcript:

Tou II Feedback Handins look varied and fun! Write a Range or Interval class – Makes math code easier to: read write modify – Makes M I easier to build on top of Tou

Mid-Semester Feedback We only have 1 responses so far  By doing the surveys you will: – Make the class more enjoyable for future students – Get to decide what advanced topics we cover first Please fill out both surveys!

M: Your last project (kinda) Platformer game – 3 weeks – Physics – More physics – Externalizing game logic

QUESTIONS? Announcements

INTEGRATION Physics I

Velocity

Acceleration

Which order to update? Position first (Euler) pos = pos + vel*time vel = vel + acc*time Velocity first (“Symplectic Euler”) vel = vel + acc*time pos = pos + vel*time

Which order to update? Position first (Euler) pos = pos + vel*time vel = vel + acc*time Velocity first (“Symplectic Euler”) vel = vel + acc*time pos = pos + vel*time stabler than Euler; use this

COLLISION RESPONSE Physics I

Collision response You know how to detect whether 2 objects collide How do we make objects respond in a physically believable way? General strategy: 1.Move objects out of collision 2.Change their velocities

Moving out of collision Many ways to move the ball out of the wall We want the minimum “Minimum translation vector” (MTV) Same as overlap For now, assume we can find MTV

Changing velocity for collision

2-moving-object collisions Reverse both velocities? Doesn’t always work Apply equal and opposite forces An instantaneous force is called an impulse

Units Without mass With mass

Implementing force and impulse applyForce(…) accumulates force applyImpulse(…) accumulates impulse onTick(…) applies force and impulse, clearing them for next frame applyForce(…) and applyImpulse(…) only take effect on next onTick(…) “Static” (immovable) objects can override applyForce (…) and applyImpulse (…) and make them no-ops class PhysicsEntity { float mass; Vec2f pos, vel; Vec2f impulse, force; void applyForce(Vec2f f) { force += f; } void applyImpulse(Vec2f p) { impulse += p; } void onTick(float t) { vel += t*force/mass + impulse/mass; pos += t*vel; force = impulse = 0; } }

Impulse collision response Translate objects out of collision – Each by MTV/2 – Or proportional to velocity in direction of MTV Apply some impulse proportional to MTV to each object – How much? – This week: guess/hack – Next week: more realistic

Collision callbacks Pass in other Entity Separate Collision info object (really a struct) Pass in the MTV Maybe pass in which shapes collided – Enemies with weak points Maybe allow callback to prevent solid collision response – One-way platforms Double dispatch is your friend! class PhysicsEntity { boolean onCollide(Collision); } class Collision { final PhysicsEntity other; final Vec2f mtv; final Shape thisShape; final Shape otherShape; } void onCollide(PhysicsEntity); void onCollide(Collision);

Can we do better? abstract class PhysicsEntity > { boolean onCollide(Collision collision); } abstract class PhysicsWorld > { List void onTick(float seconds) { for (T entity1, entity2: physEntities) { // check if entity1 collides entity2, construct a collision object, // and pass that object to both entities } } } class Collision > { final T other; final Vec2f mtv; final Shape thisShape; final Shape otherShape; } // MEntity extends PhysicsEntity, and MWorld extends PhysicsWorld - done, with all callbacks generated in the engine!

MINIMUM TRANSLATION VECTOR Physics I

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 Write a method that computes this Use it to find shapes’ MTV

Computing MTV 1.For each (normalized!) axis, find 1D MTV of shapes’ projections 2.Find the axis giving minimum 1D MTV 3.2D MTV is 1D MTV times that (normalized) axis

MTV interactive demo Same as last week Arrows are potential MTVs for box against triangle Purple arrows are the actual MTV SAT guarantees that MTV is on a separating axis

Computing intervals’ MTV Float intervalMTV(Interval a, Interval b) Float aRight = b.max - a.min Float aLeft = a.max - b.min if aLeft < 0 || aRight < 0 return null if aRight < aLeft return aRight else return -aLeft

Computing polygons’ MTV Vec shapeMTV(Shape a, Shape b) Float minMagnitude = +infinity Vec mtv = null for Vec axis in allAxes Float mtv1d = intervalMTV(a.proj(axis), b.proj(axis)) if mtv1d is null return null if abs(mtv1d) < minMagnitude minMagnitude = abs(mtv1d) mtv = axis.smult(mtv1d) return mtv

Computing circles’ MTV Circle vs Circle – Compare dist(center1, center2) and sum of radii – MTV is parallel to line connecting centers Circle vs Poly – Use the same set of axes you did last week: Poly’s edge normals Vector from circle center to closest vertex

Computing circles’ MTV (ctd) Circle vs Box – If Box contains circle center Use Box’s axes – Otherwise Clamp circle center to Box Compare dist(center, clampedPoint) and radius MTV is parallel to line connecting

Computing boxes’ MTV Easy but inefficient way: – Box converts itself to a Poly Efficient way: – Use (0, 1) and (1, 0) as the only 2 axes

MTV pitfalls Be careful with signs and argument order – Especially when reversing args for double dispatch Can use asserts: – MTV of shape A to move it out of shape B should point from B to A – assert dot(MTV, A.center – B.center) > 0

QUESTIONS? Physics I

Gravity On each tick, for each entity e, e.applyForce(g.smult(e.mass)) Static objects’ applyForce() does nothing – Consider how collision with a static object differs from collision with dynamic object

Player motion Set velocity while left or right is held? – Too sudden – Can interact badly with other physics Apply force while left or right is held? – Asteroids!

Goal velocity

QUESTIONS? Tips for M I

JAVA TIP OF THE WEEK Annotations

Pitfalls of inheritance Entity onTick(long) PhysicsEntity onTick(long) Player onTick(long) Enemy onTick(long) Bullet onTick(long) What if you Change name? Change arg types? Might forget to change a subclass (if not using Eclipse’s refactor tools) Subclass’ method no longer overrides anything! How can we avoid this? onTick(float)

annotation Whenever you override a method, mark If superclass changes, you get a compile error Eclipse can insert these for you public class Entity { public void onTick(float t) { //... } public class Bullet extends PhysicsEntity public void onTick(long t) { //... } Bullet.java:2: method does not override or implement a method from a supertype

Other standard annotations Annotations can mark: – classes – methods – fields – variables – parameters Can create your own… – See Oracle’s tutorial if you’re – Alternative to removing a method entirely – Compile warning when marked method is – Tells the compiler not to catch you when you fall – Avoid if at all possible – Typically an indication of a larger problem

QUESTIONS? Annotations

Overview Can be any 2D game You should work in groups! Each person is responsible for 10 “points” worth of new engine features – More members in a group means more engine features – More details in the final project handout

Timeline 4 main parts: – Week 1: Idea – Week 2: Form groups and get approved – Week 3: Design – Weeks 4-8: Code, playtest, polish, present

Week 1: Idea (this week!) A ½ to 1 page document Describe basic gameplay idea – How is your game fun? – Why should someone want to help make it? Describe engine feature(s) you plan on implementing Give a 60-second “elevator pitch” of your game in class Everyone must give a pitch, even if you already know your group and which project you’re working on

Week 2: Groups Form a group (or decide to work alone) Finalize game and engine features Each group must meet with the TA’s to present the following: – A more polished idea of the game – Breakdown of member responsibilities for engine

Week 3: Design Research new engine features Design the engine and game Exact breakdown of member responsibilities Choose someone’s engine to use or integrate engines Explain how you will use version control

Weeks 4-8 Week 4: – Engine should be mostly done – Game exists Week 5: – Engine should be done – Game is playable – 5 playtests per member from people not in CS195n

Weeks 4-8 Week 6: – Game should be mostly done – 5 more playtests per member from outsiders Week 7: – Game should be done – 5 playtests per member – Powerpoint slideshow for postmortem presentation

Weeks 4-8 Week 8: – Polish up your game, bug fixes, etc – Create an executable and put it in /contrib – Make a video demo of your game from gameplay footage It is now December 17 th And then you’re done!

QUESTIONS? Final Project Overview

Brief Summary Focuses on past video games developed by students in: – CS32 – CS195n What went right? What went wrong? Discuss final project ideas

Sunlab Games Fun for the first five minutes… …Then you remember you have other work to do

Common Themes Overstretching – More than what can be created in a 4 week time period No polish – Focused too much on content development NOTE: These are post-mortem summaries; your post-mortems should be more in-depth

Reject Wars (2012) Networked platforming shooter Java sockets and Threads Similar to Super Smash Bros.

Reject Wars – What went right? Networking – Understood Java Sockets and Threads a lot better Basic gameplay – done! Character sprites – Zach Davis! Lump Space Princess! Magikarp!

Reject Wars –What went wrong? Networking – Serialized the game world… – Scaling issues Environmental sprites Stage-based strategy didn’t work out

Bash Bros (2015) CS032 Final Project Multiplayer fighting game Customizable Characters

Bash Bros– What went right? 4-man team – excellent division of labor – Level editor, gameplay, UI, file system Good expectations Great planning through gameplay and what they wanted the player to do

Bash Bros–What went wrong? Too much of a focus on making custom sprites instead of developing more game modes Inconsistent theme Only three classes, only one map Not much else…

S**tablo (2015) Dungeon crawler inspired by Diablo Networked! Crawl the dungeon with a friend Adaptive difficulty

S**tablo – What went right? Polished looking game through extensive sprite sheets found online Good division of labor Lots of cool features in the engine and lots of potential

S**tablo – What went wrong? Some engine and game features are underutilized – Cutscenes, Procedural generation, adaptive difficulty, items Scheduling issues made our work very back- loaded Didn’t establish Interfaces/Abstract classes ahead of time

Demos! Bash Bros S**tablo Constant Chaos

QUESTIONS CS195n: Past Projects

TIPS FOR FINAL Game Design 5

Coming up with a good idea All games start with an idea Ideas are finicky – they come on their own terms, when they feel like it Be prepared to write them down whenever they come to you!

Developing an idea Once you have your initial idea, start defining crucial details: – Genre? – Singleplayer or multiplayer? – Ideal team size? – Biggest risks? Come up with a simple prototype you can build quickly – Minecraft example: only placing/removing blocks with just a few distinct block types – These will help you immediately find out if your idea is fun

What we don’t see… Simulation (Roller Coaster Tycoon) Strategy (Starcraft, Civilization) Rhythm (Dance Dance Revolution) Racing (Mario Kart) Fighting (Street Fighter) Horror (Clocktower) Multiplayer co-op (Battletoads)

What we get A LOT of Platformers RPGs Platformers

Avoiding problems… Organize; know your abilities Be reliable to your teammates Settle on a coding convention – Follow it! Take initiative – There’s always that one person who says: “Doesn’t matter to me, I’ll do anything” FIX BUGS!!! – Don’t put it off till later!

Making it better… Add juice! – Screen shake, tweening, mouse effects Playtest, playtest, playtest Steal ideas from awesome games – Even AAA Companies do this

Single Player vs. Multiplayer Single player Easier to balance No networking Harder to keep the player engaged Multiplayer Other players essentially become your content Increased bang for your buck content-wise Networking can be tricky to debug