How to make a game like space invaders
This presentation is the property of its rightful owner.
Sponsored Links
1 / 41

How to Make a Game Like Space Invaders PowerPoint PPT Presentation


  • 122 Views
  • Uploaded on
  • Presentation posted in: General

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

Download Presentation

How to Make a Game Like Space Invaders

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


How to make a game like space invaders

How to Make a Game LikeSpace Invaders


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)


How to make a game like space invaders

Concepts


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


How to make a game like space invaders

Programming


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();

}


How to make a game like space invaders

Basic Math


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 Offsets2

  • 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 Offsets3

  • 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.


How to make a game like space invaders

Designing Your Game


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


  • Login