Open navigation menu
Close suggestions
Search
Search
en
Change Language
Upload
Sign in
Sign in
Download free for days
0 ratings
0% found this document useful (0 votes)
212 views
Java Games Space Invaders
game java
Uploaded by
ThiệnNg
Copyright
© © All Rights Reserved
Available Formats
Download as PDF or read online on Scribd
Download now
Download
Save Java Games Space Invaders For Later
Download
Save
Save Java Games Space Invaders For Later
0%
0% found this document useful, undefined
0%
, undefined
Embed
Share
Print
Report
0 ratings
0% found this document useful (0 votes)
212 views
Java Games Space Invaders
game java
Uploaded by
ThiệnNg
Copyright
© © All Rights Reserved
Available Formats
Download as PDF or read online on Scribd
Download now
Download
Save Java Games Space Invaders For Later
Carousel Previous
Carousel Next
Save
Save Java Games Space Invaders For Later
0%
0% found this document useful, undefined
0%
, undefined
Embed
Share
Print
Report
Download now
Download
You are on page 1
/ 17
Search
Fullscreen
sinro1s slavagames Space Invaders Home Contents Previous Ney Space Invaders In this part of the Java 2D games tutorial we will create a © Phong van tiéng Anh: Ligu ban cé bj Toai ngay “véng gitr xe” Test ngay v6i bai trdc nghiém ng&n [) Aude Sree tgtce simple Space Invaders game clone. Space Invaders is an arcade video game designed by Tomohiro Nishikado. It was first released in 1978. The player controls a cannon, He is about to save the Earth from invasion of evil space invade Development In our Java clone we have 24 invaders. These aliens heavily shell the ground. When the player shoot a missile, he can shoot another one only wher shoots with the Alt key. Aliens launch randomly their bombs. Each alien shoots a bomb only after th it hits an alien or the top of the Board. The player previous one hits the bottom. Spacelnvaders java package spaceinvaders; import Javax.swing.JFrame; public class Spacelnvaders extends JFrame implenents Commons ( public SpaceInvaders() { add(new Board()); setTitle("Space Invaders"); setDefaultCloseoperation(EXIT_ON_CLOSE); nip detcode comftera'sjavagamestralspaceinvaders/ wrsinro1s slavagames Space Invaders setSize(BOARD_WIDTH, BOARD_HEIGTH); setLocationRelativeTo(nul1) setVisible(true) ; setResizable(false) ; public static void main(String[] args) ¢ new SpaceInvaders(); ‘This is the main class. Commons java package spaceinvaders; public interface Commons { public static final int BOARD_WIDTH = 358; public static final int BOARD_HEIGTH = 350; public static final int GROUND = 290; public static final int BONB_HEIGHT = 5: public static final int ALIEN HEIGHT = 12; public static final int ALIEN WIDTH = 125 public static final int BORDER_RIGHT = 30; public static final int BORDER_LEFT = 5: public static final int GO_DOWN = 15; public static final int NUNBER_OF_ALIENS TO_DESTROY = 24; public static final int CHANCE = 5; public static final int DELAY = 17; public static final int PLAYER WIDTH = 15; public static final int PLAYER HEIGHT = 10; The connons. java file has some common constants. They are self-explanatory. Alien java package spaceinvaders; import Javax. swing. InageIcon; public class Alien extends Sprite { private Bonb bomb; private final String shot /spacepix/alien.png" ; public Alien(int x, int y) ( this.x = x5 this.y = y5 nip detcode comftera'sjavagamestralspaceinvaders/ a7sinro1s slavagames Space Invaders bomb = new Bomb(x, y); ImageIcon ii = new ImageIcon(this.getClass().getResource(shot) ); setInage(ii.getimage()); y public void act(int direction) { this.x += direction; y public Bonb getonb() { return bomb; } public class Bomb extends Sprite { private final String bomb private boolean destroyed; /spacepix/bonb png" ; public Bonb(int x, int y) { setDestroyed(true) ; this.x = 3x this.y = yj Inagelcon ii = new InageIcon(this.getClass().getResource(bonb)); setInage(ii.getImage()); public void setDestroyed(boolean destroyed) { this.destroyed = destroyed; } public boolean isDestroyed() { return destroyed; sprite. Each alien has an inner Bonb cl public void act(int direction) { this.x += direction; The act () method is called from the Board class. It is used to position an alien in horizontal direction public Bonb getBonb() { return bonb; 3 The getéonb() method is called, when the alien is about to drop a bomb. tip dzetcodecomtera'sjavagamestralspaceinvaders/ ansinro1s slavagames Space Invaders Player java package spaceinvaders; import java.awt.event.Keyévent; import Javax. swing. InageTcon; public class Player extends Sprite implements Conmons{ private final int START_Y private final int START_X 280; 2703 private final String player = "../spacepix/player. png"; private int width; public Player() { ImageTcon ii = new ImageTcon(this.getClass().getResource(player)) 5 width = ii.getTmage().getWidth(nul1) ; setImage(ii.getImage()); setx(START_X)5 sety(START_Y)5 } public void act() { x += dx; if (x <= 2) x= 25 if (x BOARD_WIDTH - 2*width) BOARD_WIDTH - 2*width; public void keyPressed(KeyEvent e) { int key = e.getkeyCode(); if (key KeyEvent.VK_LEFT) KeyEvent.VK_RIGHT) public void keyReleased(KeyEvent e) { int key = e.getkeyCode(); if (key == KeyEvent.VK_LEFT) nip detcode comftera'sjavagamestralspaceinvaders/ airsinro1s slavagames Space Invaders t dx = 0; if (key == KeyEvent.Vk_RIGHT) { This is the Player sprite. We control the cannon with the cursor keys. private final int START_Y private final int START_X 280; 278; These are the initial coordinates of the player sprite. if (key { KeyEvent..VK_LEFT) If we press the left cursor key, the dx variable is set to -2. Next time the act() method is called, the player moves to the left. if (key KeyEvent..VK_LEFT) t } keyEvent.VK_RIGHT) If we release the left or the right cursor, the dx variable is set to zero. The player sprite stops moving, Shot java package spaceinvaders; import Javax. swing. InageTcon; public class Shot extends Sprite { private String shot = "../spacepix/shot.png"; private final int H_SPACE = 6; nip detcode comftera'sjavagamestralspaceinvaders/ si7sinro1s slavagames Space Invaders private final int V_SPACE public Shot() ( } public Shot(int x, int y) ImageTcon ii = new ImageIcon(this.getClass().getResource(shot)); setInage(ii.getimage()); setx(x + H_SPACE) ; setV(y - V_SPACE); This is the shot sprite. The shot is triggered with the ALT key. The #_space and the v_space constants are used to position the missile appropriately. Sprite. java package spaceinvaders; import Java.awt. Inages public class Sprite { private boolean visible; private Inage image; protected int x; protected int y; protected boolean dyings protected int dx; public Sprite() { visible = trues public void die() { visible = false; public boolean isVisible() { return visible; protected void setVisible(boolean visible) { this.visible = visible; public void setimage(Inage image) { this.image = image; } nip detcode comftera'sjavagamestralspaceinvaders/ ansinro1s sJavagames Space Invaders public Image getImage() { return image; public void setx(int x) ( this.x = x5 public void sety(int y) ( this.y = ys public int getv() { return y5 public int getx() { return x3 public void setbying(boolean dying) { this.dying = dying; public boolean isbying() { return this.dyings Other sprites inherit from it Board.java package spaceinvaders; import import import import import import import import import import import import import public Java.awt Color} Java.awt .Dimension; Java.awt.Font Java.awt.FontMetrics5 Java.awt Graphics} Java.awt Toolkits Java.awt .event .KeyAdapters Java.awt .event.KeyEvent Java.util ArrayList; Java.util. Iterator; Java.util.Randon; Javax. swing. ImageIcon; Javax. swing. JPanel ome common functionality. class Board extends 2Panel implements Runnable, Commons { nip detcode comftera'sjavagamestralspaceinvaders/ m7sinro1s lava games Space Invaders private Dimension dj private ArrayList aliens; private Player player; private Shot shot; private int alienx = 150; private int alienY = 5; private int direction private int deaths = 0; private boolean ingame = true; private final String expl //spacepix/explosion.png"; private final String alienpix = "../spacepix/alien. png"; private String message = "Game Over"; private Thread animator; public Board() { addkeyListener(new Tadapter()); setFocusable(true); 4 = new Dimension(BOARD_WIOTH, BOARD_HETGTH); setBackground(Color.black); gamernit(); setDoubleBuffered(true) ; public void addNotify() { super.addNotify(); ganernit(); > public void ganeInit() { aliens = new ArrayList(); Imagelcon ii = new InageTcon(this. getClass().getResource(alienpix)) for (int 1-0; i < 45 itt) { for (int j-0; 3 < 65 J++) { Alien alien = new Alien(alienx + 18*j, alieny + 181); alien. setImage(ii.getInage()); aliens.add(alien) ; } player = new Player(); shot = new Shot(); if (animator == null || !ingame) animator = new Thread(this); animator. start(); nip detcode comftera'sjavagamestralspaceinvaders/ anysinro1s slavagames Space Invaders x public void drawAliens(Graphics g) { Iterator it = aliens. iterator(); while (it.hasNext()) Alien alien = (Alien) it.next(); if (alien.isVisible()) { g.drawImage(alien.getImage(), alien.getX(), alien.get¥(), this); ? if (alien.isbying()) alien.die(); ? } } public void drawPlayer(Graphics g) { if (player.isvisible()) { g-drawinage(player.getImage(), player.getx(), player.getY(), this); if (player isbying()) { player.die(); ingame = false; public void drawShot (Graphics g) { if (shot isvisible()) g.dranInage(shot.getInage(), shot.getx(), shot.getY(), this); } public void drawBonbing(Graphics g) { Iterator i3 = aliens. iterator(); while (43.hasNext()) { Alien a = (Alien) i3.next(); Alien.Bonb b = a.getBomb(); if (Ib.isDestroyed()) { g-drawInage(b.getInage(), b.getX(), b-getv(), this); y + public void paint(Graphics g) { nip detcode comftera'sjavagamestralspaceinvaders/ a7sinro1s supel g.se efi Bese if ( 8. drs drs des des Tool eedi public { sJavagames Space Invaders r.paint(g); *tColor (Color .black) ; L1Rect(@, @, d.width, d.height); *tColor (Color.green) ; ingame) { drawLine(@, GROUND, BOARD_WIDTH, GROUND); ‘awAliens(g)5 ‘awPlayer(g); ‘awshot (g)5 ‘awBombing(g) 5 kit. getDefaultToolkit().syne(); spose(); void gameover() Graphics g = this.getGraphics(); e. e. e. 8. -setColor(Color.black); -fillRect(@, @, BOARD_WIDTH, BOARD_HEIGTH); setColor(new Color(®, 32, 48)); FillRect(5®, BOARD_WIDTH/2 - 3, BOARD_WIDTH-100, 50); setColor(Color.white) ; drawRect(5®, BOARD_WIDTH/2 - 30, BOARD WIDTH-100, 50); Font small = new Font("Helvetica*, Font.B0LD, 14); FontMetrics mete 8. 8. g-drawString(message, (BOARD_WIDTH - metr.stringwidth(nessage) )/2, public if (deaths } ‘this. getFontMetrics(small) ; setColor(Color.white); setFont (small) ; BOARD_WIDTH/2) ; void animationcycle() { NUMBER_OF_ALTENS_TO_DESTROY) { false; jame won! ingame message J player player.act()5 JI shot if (shot.isVisible()) { nip detcode comftera'sjavagamestralspaceinvaders/ sorsinro1s slavagames Space Invaders Iterator it = aliens. iterator(); nt shotx = shot.getx(); int shotY = shot.get¥(); while (it-hasNext()) { Alien alien = (Alien) it.next(); int alienx = alien.getx(); int alienY = alien.getY(); if (alien.isVisible() && shot.isVisible()) { if (shotX >= (alienX) && shotX <= (alienX + ALIEN_WIDTH) && shotY >= (alienY) && shotY <= (alienV+ALTEN HEIGHT) ) { ImageIcon ii = new InageTcon(getClass().getResource(expl)); alien. setImage(ii.getInage()); alien. setbying(true) ; deaths++; shot .die(); ? int y = shot.getv(); y 243 if (y < 0) shot .die(); else shot.set¥(y); Wf aliens Iterator iti = aliens. iterator(); while (iti.hasNext()) { Alien a1 = (Alien) iti.next(); int x = al.getx(); if (x >= BOARD_WIDTH - BORDER_RIGHT && direction direction = -1; Iterator i1 = aliens.iterator(); while (i1-hasNext()) { Alien a2 = (Alien) i1.next(); a2.set¥(a2.get¥() + GO_DOWN) ; 3 if (x <= BORDER LEFT && direction != 1) { direction = 1; Iterator i2 = aliens.iterator(); while (i2.hasNext()) { Alien a = (Alien)i2.next(); tp etcode comforialshavagaestoralspaceivades! wwsinro1s slavagames Space Invaders a.setY(a.getY() + GO_DOWN); Iterator it = aliens. iterator(); while (it.hasNext()) { Alien alien = (Alien) it.next(); if (alien.isVisible()) { int y = alien.getY(); if (y > GROUND - ALIEN_HETGHT) { ingame = false; message = } alien.act (direction); U1 bombs Iterator i3 = aliens. iterator(); Random generator = new Random(); while (i3.hasNext()) { int shot = generator.nextint (15); Alien a = (Alien) 13.next(); Alien.Bonb b = a.getBonb(); if (shot == CHANCE && a,isVisible() && b.isDestroyed()) { b.setDestroyed(false); b.setx(a.getx())5 b.set¥(a.get¥()); + int bombx = b.getx(); int bombY = b.get¥(); int playerx = player.getx(); int playerY = player.getY(); if (player.isVisible() && !b.isDestroyed()) ( if ( bonbx >= (playerx) 8& bonbX <= (playerX+PLAYER WIDTH) && bonby >= (playerY) && bomby <= (playerY+PLAYER HEIGHT) ) { ImageIcon new ImageIcon(this.getClass().getResource(expl)); player. setImage(ii.getInage()); player. setbying(true) ; b.setDestroyed(true) ;5 nip detcode comftera'sjavagamestralspaceinvaders/ varsinro1s slavagames Space Invaders ? if (Ib.isDestroyed()) { b.setv(b.getv() + 1); if (b.get¥() >= GROUND - BOMB_HEIGHT) { b.setDestroyed(true) ; } } public void run() { long beforeTime, timeDiff, sleep; beforeTime = System.currentTimeMillis(); while (ingame) { repaint(); animationcycle(); timeDiff = System.currentTimeMillis() - beforeTime; sleep = DELAY - timeDiff; if (sleep < 0) sleep = 23 try ¢ Thread. sleep(sleep); } catch (Interruptedexception e) { system.out.printIn("interrupted"); } beforeTime = System. currentTimeMillis(); } gameOver(); } private class TAdapter extends KeyAdapter ( public void keyReleased(Keyévent e) { player.keyReleased(e) ; + public void keyPressed(KeyEvent e) { player.keyPressed(e) ; int x int y player.getx(); player.get¥(); if (ingame) { if (e.isAltDown()) { if (Ishot.isVisible()) nip detcode comftera'sjavagamestralspaceinvaders/ 107sinro1s slavagames Space Invaders shot = new Shot(x, y)5 ‘The main logic of the game is located in the Board class. for (int iO; i < 4; ist) { for (int j=0; j < 65 j++) { Alien alien = new Alien(alienX + 18*j, alienY + 18*i); alien. setImage(ii.getImage()); aliens.add(alien) ; 3 player = new Player(); shot = new Shot(); In the ganernit() method we set up 24 aliens. The alien image size is 12x12px. We put 6px space among the aliens, We also ereate the player and the shot objects. public void drawBombing(Graphics g) { Iterator i3 = aliens.iterator(); bile (43.hasNext()) { Alien a = (Alien) i3.next(); Alien.Bonb b = a.getBonb(); Af (Ib.isbestroyed()) { g.drawimage(b.getImage(), b-getX(), b.get¥(), this); } The drawBonbing() method draws bombs launched by the aliens. if (ingame) { g.drawline(@, GROUND, BOARD_WIDTH, GROUND) ; drawAliens(g); draPlayer(e); drawShot(g); drawBombing(g) ; Inside the paint() method, we draw the ground, the aliens, the player, the shot, and the bombs. tip dzetcodecomtera'sjavagamestralspaceinvaders/ wirsinro1s slavagames Space Invaders Next we will examine the aninationcycle() method. Af (deaths == NUNBER_OF_ALIENS_TO_DESTROY) { ingane = false; message = "Gane won!"; } If we destroy all aliens, we win the game. (24 in this game) if (alien.isVisible() && shot-isVisible()) { Af (shotx >= (alienx) 8& shotX <= (alienX + ALTEN WIDTH) && shotY >= (alienY) && shotY <= (alienY+ALTEN HEIGHT) ) { TmageTcon new ImageTcon(getClass() .getResource(expl)); alien. setImage(ii.getImage()); alien. setbying(true) ; deaths++; shot.die(); If the shot triggered by the player collides with an alien, the alien ship is destroyed, More precisely, the dying flag is set. We use it to display an explosion. The deaths variable increases and the shot sprite is destroyed. if (x >= BOARD_WIOTH - BORDER_RIGHT && direction a; Iterator i1 = aliens.iterator(); while (i2-hasNext()) { Alien a2 = (Alien) i1.next(); a2.set¥(a2.get¥() + GO_DOWN); =-¢ direction Ifthe aliens reach the right end of the aoard, they move down and change their direction to the left. Iterator it = aliens. iterator(); while (it-hasNext()) { Alien alien = (Alien) it.next(); if (alien.isVisible()) { int y = alien.get¥(); Sf (y > GROUND - ALTEN HEIGHT) { ingame = false; message = "Invasion!"; tip dzetcodecomtera'sjavagamestralspaceinvaders/ 1817sinro1s slavagames Space Invaders y alien.act (direction) ; This code moves aliens. If they reach the bottom, the invasion begins. int shot = generator.nextInt(15); Alien a = (Alien) 13.next(); Alien.Bomb b = a.getBomb(); if (shot == CHANCE && a.isVisible() && b.isDestroyed()) { b. setDestroyed( false); b. setx(a.getx())5 b.setv(a.get¥()); ‘This is the code that determines whether the alien will drop a bomb. The alien must not be destroye: Eg. it must be visible. The bomb's destroyed flag must be set. In other words, it is alien's first bomb \dy hit the ground. If these two conditions are fulfilled, the dropping or previous dropped bomb alres bombing is left to the chance. if (Ib. sbestroyed()) ( b.setv(b.getY() + 1); if (b.get¥() >= GROUND - BOMB_HETGHT) b.setDestroyed(true) ; + If the bomb is not destroyed, it goes 1px to the ground. If t hits the bottom, the destroyed flag is set. The alien is now ready to drop another bomb. public void keyReleased(KeyEvent ©) player. keyReleased(e); > The actual processing of this particular keyevent is delegated to the player sprite. tip dzetcodecomtera'sjavagamestralspaceinvaders/ 187sinno1s slavagames Space Invaders Eeaipatans Figure: Space Invaders This was the Space Invaders game. Home Contents Top of Page ‘Ze\Code last modified September 28,2008 © 2007 - 2015 Jan Bodnar pete. comer sjavagamestoralispaceinvaders/ war
You might also like
Aimlock Precision V3
PDF
50% (2)
Aimlock Precision V3
2 pages
Setedit Code Gpu
PDF
No ratings yet
Setedit Code Gpu
1 page
33 Milliseconds - Public With Notes
PDF
100% (1)
33 Milliseconds - Public With Notes
38 pages
Space Invaders Flowchart - Drawio
PDF
No ratings yet
Space Invaders Flowchart - Drawio
4 pages
PPSSPP Ini
PDF
No ratings yet
PPSSPP Ini
5 pages
Untitled
PDF
No ratings yet
Untitled
509 pages
Legitsilentaim
PDF
No ratings yet
Legitsilentaim
11 pages
Aimmy Ai - Afk Arsenal Ai Bot Script
PDF
No ratings yet
Aimmy Ai - Afk Arsenal Ai Bot Script
6 pages
PacMan Tutorial
PDF
No ratings yet
PacMan Tutorial
17 pages
VTMB ModDevGuide
PDF
No ratings yet
VTMB ModDevGuide
440 pages
Code For A Java Pong Game GitHub
PDF
No ratings yet
Code For A Java Pong Game GitHub
7 pages
Admin Gui
PDF
No ratings yet
Admin Gui
73 pages
Pacman Project
PDF
No ratings yet
Pacman Project
13 pages
Assassin Kill All
PDF
No ratings yet
Assassin Kill All
4 pages
Exe
PDF
No ratings yet
Exe
3 pages
(FE) HyperTotal Gui
PDF
No ratings yet
(FE) HyperTotal Gui
53 pages
GL Extetion No Config, With GL Tool
PDF
No ratings yet
GL Extetion No Config, With GL Tool
2 pages
Binder 1
PDF
No ratings yet
Binder 1
36 pages
Instructions CPS2 Multi Boot v2
PDF
No ratings yet
Instructions CPS2 Multi Boot v2
11 pages
Video Game Development
PDF
No ratings yet
Video Game Development
7 pages
Options.4.cod23 (Esport)
PDF
100% (1)
Options.4.cod23 (Esport)
9 pages
Better Performance
PDF
No ratings yet
Better Performance
3 pages
User Settings
PDF
No ratings yet
User Settings
2 pages
Quickdev16 & Super Nintendo: David Voswinkel Matthias Nagler
[email protected]
PDF
No ratings yet
Quickdev16 & Super Nintendo: David Voswinkel Matthias Nagler
[email protected]
181 pages
Default Engine
PDF
No ratings yet
Default Engine
8 pages
0004000000126100
PDF
No ratings yet
0004000000126100
3 pages
GDD Annotated
PDF
No ratings yet
GDD Annotated
46 pages
? ? Comandos Set Edit Sensibilidad ??
PDF
No ratings yet
? ? Comandos Set Edit Sensibilidad ??
2 pages
Last Stand - GDD
PDF
No ratings yet
Last Stand - GDD
58 pages
Autoexec CFG
PDF
No ratings yet
Autoexec CFG
13 pages
Gamebryo Console Commands
PDF
100% (1)
Gamebryo Console Commands
117 pages
Fps Monitor
PDF
No ratings yet
Fps Monitor
6 pages
adb sensi
PDF
No ratings yet
adb sensi
1 page
Setprop Debug Gaming ?
PDF
50% (2)
Setprop Debug Gaming ?
2 pages
Prince of Persia
PDF
No ratings yet
Prince of Persia
11 pages
Use Module
PDF
No ratings yet
Use Module
1 page
Messaging in C For Gam 150 Club: Randy Gaul
PDF
No ratings yet
Messaging in C For Gam 150 Club: Randy Gaul
36 pages
Unnamed Asset 52 CapsuleCollider
PDF
100% (1)
Unnamed Asset 52 CapsuleCollider
1 page
GOD SCRIPT HOLY 1.gpc
PDF
No ratings yet
GOD SCRIPT HOLY 1.gpc
9 pages
Dev - Mag - 22
PDF
No ratings yet
Dev - Mag - 22
21 pages
Emulated X68000 Development Workstation Setup
PDF
No ratings yet
Emulated X68000 Development Workstation Setup
12 pages
Settings
PDF
100% (1)
Settings
2 pages
Fov Aimbot
PDF
100% (1)
Fov Aimbot
2 pages
Combo String Gaming Full
PDF
No ratings yet
Combo String Gaming Full
1 page
Super Ultra Potato Config
PDF
0% (1)
Super Ultra Potato Config
3 pages
NPJH50465
PDF
No ratings yet
NPJH50465
3 pages
Gps Conf
PDF
No ratings yet
Gps Conf
2 pages
Aim FFH4G
PDF
No ratings yet
Aim FFH4G
1 page
Arsenal Script Silent Aim, Aimbot, Esp
PDF
No ratings yet
Arsenal Script Silent Aim, Aimbot, Esp
2 pages
TX Joycon Tutorial
PDF
No ratings yet
TX Joycon Tutorial
23 pages
Setprop GAMING Vip (SFILE
PDF
No ratings yet
Setprop GAMING Vip (SFILE
1 page
d502 Console Architecture
PDF
No ratings yet
d502 Console Architecture
22 pages
Setprop Se November 2023 (None)
PDF
No ratings yet
Setprop Se November 2023 (None)
1 page
Anti Void
PDF
No ratings yet
Anti Void
1 page
Infinite (Optical)
PDF
No ratings yet
Infinite (Optical)
6 pages
Otimização Ram
PDF
No ratings yet
Otimização Ram
1 page
Cpu & Gpu Speed Boost
PDF
No ratings yet
Cpu & Gpu Speed Boost
1 page
MH3U CHEAT
PDF
No ratings yet
MH3U CHEAT
10 pages
Systems
PDF
No ratings yet
Systems
10 pages
Space Invaders Shooter Tutorial
PDF
No ratings yet
Space Invaders Shooter Tutorial
3 pages