How to make a game like space invaders
Download
1 / 41

How to Make a Game Like Space Invaders - PowerPoint PPT Presentation


  • 178 Views
  • Uploaded on

How to Make a Game Like Space Invaders. What IS Space Invaders?. a SHMUP (shoot-em-up) Player has one ship, enemy has many Player and enemies interact by shooting at each other Top-down 2D (usually). Concepts. Video Frames/Ticks. A film is made of 24 still pictures per second

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'How to Make a Game Like Space Invaders' - glen


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

What is space invaders
What IS Space Invaders?

  • a SHMUP (shoot-em-up)

  • Player has one ship, enemy has many

  • Player and enemies interact by shooting at each other

  • Top-down 2D (usually)



Video frames ticks
Video Frames/Ticks

  • A film is made of 24 still pictures per second

  • Motion is achieved by small changes to each picture, but 24 fps is still fast


Video frames ticks 2
Video Frames/Ticks 2

  • Video games are usually 30 or 60-80 fps

  • Video games achieve movement by moving each screen object a little bit every frame


Shmups are very object oriented
Shmups are very object-oriented

  • Ships are objects

  • Bullets are objects

  • The player is an object

  • Explosions are objects

  • Levels can be objects (certainly made of objects)


Question
Question

  • How many bullets can be on the screen at once?

  • Space Invaders = 1 for player, 2 for enemies

  • Modern = completely arbitrary


Lists
Lists

  • A great way to store and organize objects

  • Most beginners get hung up here

  • Conceptually harder than arrays

  • C and C++ use linked lists (with pointers)

  • BlitzBasic has list:TList


What is a ship
What is a ship?

  • Is-dead flag

  • Health value

  • X and Y positions

  • Path logic and data

  • Reference to the art

  • Animation state

  • Bullet/missile launch state

  • Bullets and Explosions are very similar to ships!


What is a player ship
What is a player ship?

  • Not as much, surprisingly

  • Path logic is in your fingers, not in code

  • So keyboard state checks (for avatar control) go here


What is a bullet missile
What is a bullet/missile?

  • Like a ship, but (usually) simpler movement

  • Erased when it goes off screen, not when it reaches the end of its path

  • State: Player shot or Enemy shot

  • Each Player-bullet collides against every enemy

  • Each Enemy-bullet collides against player


So to make space invaders
So, to make space invaders…

  • Make a player

  • Make a bunch of enemies

  • Move them every frame, have them create bullets

  • Move the bullets every frame

  • Check for enemy-bullet collision every frame

  • Keep going, even if all the enemies or the player is dead



Main loop in pseudocode
Main loop in Pseudocode

Main()

{

SetupEverything();

CreatePlayer();

CreateAllEnemies();

done = false;

while (done == false)

{

TickPlayer();

TickEnemyList();

TickBulletList();

DrawPlayer();

DrawEnemyList();

DrawBulletList();

if (EscapeKeyPressed() == TRUE)

done = TRUE;

WaitForNextFrame();

}

ShutDownEverything();

}


Timer callback version
Timer callback version

TimerFunction()

{

TickPlayer();

TickEnemyList();

TickBulletList();

// some systems, like Flash and Torque, do the drawing for you

DrawPlayer();

DrawEnemyList();

DrawBulletList();

if (EscapeKeyPressed() == TRUE)

done = TRUE;

}


Tickbulletlist
TickBulletList()

TickBulletList()

{

ForEach( bullet)

{

x = x + dx;

y = y + dy;

if (BulletOffScreen())

{

isDead = TRUE;

}

ForEach(enemy)

{

if (Collides(enemy, bullet))

{

isDead = TRUE;

DamageEnemy(enemy);

}

}

}

RemoveDeadBulletsFromList();

}



Vectors and offsets
Vectors and Offsets

  • Where is your Ship? X and Y


Vectors and offsets 2
Vectors and Offsets 2

  • Where is your bullet? Also X and Y

  • Where is your bullet in relation to your ship? bulletX – shipX and bulletY – shipY


Vectors and offsets 3
Vectors and Offsets 3

  • How far apart are they? Pythagorean theorem (sqr(a) + sqr(b) = sqr(c))

  • This requires a slow square root function


Vectors and offsets 21
Vectors and Offsets 2

  • What direction from the ship to the bullet? Arctangent

  • Atan2(bulletX – shipX, bulletY – shipY)


Arctangent
Arctangent

  • Usually gives a direction in radians, from 0-(2*PI)

  • PI is 3.1415927 (= 180 degrees)

  • Radian to degrees = dir / (PI*2) * 360


Vectors and offsets 31
Vectors and Offsets 3

  • So you can describe the relationship between two objects on the screen in two different ways


Offsets
Offsets

  • Offset = x and y coordinates (or differences)


Vectors
Vectors

  • Vector = direction and distance


Translate offsets to vectors
Translate Offsets to Vectors

  • Get distance with Pythagoras

  • Get direction with Atan2 (Arctangent)


Translate vectors to offsets
Translate Vectors to Offsets

  • X = sin(direction) * distance

  • Y = cos(direction) * distance


Vectors offsets important
Vectors & Offsets = important

  • Shooting bullet directly at the player

  • Homing missiles

  • Collision detection (is bullet close enough?)

  • Enemy follows path


What is turntowardspoint
What is TurnTowardsPoint()

  • If you want the homing missile to turn slowly towards the enemy (instead of instantly) what do you do?

  • The answer is the TurnTowardPoint() algorithm.



Bosses
Bosses

  • Traditional part of shmups

  • Each one is a love letter to the player

  • Multiple weapons

  • Multiple parts

  • Multiple Modes

  • It’s a boss, not just an extended enemy


Powerups
Powerups

  • Functionally just like Bullets

  • Give expanded powers to the player

  • Key to one of the basic metagames


The game modes
The Game Modes

  • Play mode

  • Start mode

  • Results mode (you are dead, how’d you do)

  • Pause mode

  • Credits mode

  • Options mode


Game modes 2
Game Modes 2

  • Recognize that game modes are just states

  • Completely different states than game states


Scrolling background
Scrolling Background

  • Space Invaders background was black

  • Galaga and others had winking, scrolling stars

  • Zaxxon and others started making the background complex and interactive

  • Treasure games are famous for complex, puzzle-like environments


What are shmup levels
What are Shmup levels?

  • Hand-crafted definitions of when each enemy shows up

  • The things that happen before a boss shows up

  • Divisions of art

  • Scoring opportunities


How are levels made
How are levels made?

  • Make the editors yourself, for yourself

  • Ship path editor (mirror-able)

  • Level editor

  • Place art tiles

  • Place ship spawn points

  • Place camera path

  • Boss editor


In conclusion
In Conclusion

  • Don’t be afraid, shmups are simple

  • Shmups are easier for small teams

  • Google and Youtube will teach you so much

  • Shmup dev concepts apply to other genres


How to make a game like space invaders
Q & A

  • Shmup History

  • Program Structure

  • Math

  • Game Modes

  • Game Levels

  • Bosses

  • Powerup Systems

  • Editors

  • Selling your Shmup