diff --git a/Game-3/.classpath b/Game-3/.classpath
new file mode 100644
index 0000000..fb50116
--- /dev/null
+++ b/Game-3/.classpath
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/Game-3/.project b/Game-3/.project
new file mode 100644
index 0000000..9ad1bcc
--- /dev/null
+++ b/Game-3/.project
@@ -0,0 +1,17 @@
+
+
+ Game-3
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/Game-3/bin/resources/missile.png b/Game-3/bin/resources/missile.png
new file mode 100644
index 0000000..ab620f8
Binary files /dev/null and b/Game-3/bin/resources/missile.png differ
diff --git a/Game-3/bin/resources/spaceship.png b/Game-3/bin/resources/spaceship.png
new file mode 100644
index 0000000..b412667
Binary files /dev/null and b/Game-3/bin/resources/spaceship.png differ
diff --git a/Game-3/src/Game/Board.java b/Game-3/src/Game/Board.java
new file mode 100644
index 0000000..4a1d88b
--- /dev/null
+++ b/Game-3/src/Game/Board.java
@@ -0,0 +1,109 @@
+package Game;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.util.List;
+
+import javax.swing.Timer;
+import javax.swing.JPanel;
+
+
+public class Board extends JPanel implements ActionListener {
+
+ private final int ICRAFT_X = 40;
+ private final int ICRAFT_Y = 60;
+ private final int DELAY = 10;
+ private Timer timer;
+ private SpaceShip spaceShip;
+
+ public Board() {
+
+ initBoard();
+ }
+
+ private void initBoard() {
+
+ addKeyListener(new TAdapter());
+ setBackground(Color.BLACK);
+ setFocusable(true);
+
+ spaceShip = new SpaceShip(ICRAFT_X, ICRAFT_Y);
+
+ timer = new Timer(DELAY, this);
+ timer.start();
+ }
+
+ @Override
+ public void paintComponent(Graphics g) {
+ super.paintComponent(g);
+
+ doDrawing(g);
+
+ Toolkit.getDefaultToolkit().sync();
+ }
+
+ private void doDrawing(Graphics g) {
+
+ Graphics2D g2d = (Graphics2D) g;
+
+ g2d.drawImage(spaceShip.getImage(), spaceShip.getX(),
+ spaceShip.getY(), this);
+
+ List missiles = spaceShip.getMissiles();
+
+ for (Missile missile : missiles) {
+
+ g2d.drawImage(missile.getImage(), missile.getX(),
+ missile.getY(), this);
+ }
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+
+ updateMissiles();
+ updateSpaceShip();
+
+ repaint();
+ }
+
+ private void updateMissiles() {
+
+ List missiles = spaceShip.getMissiles();
+
+ for (int i = 0; i < missiles.size(); i++) {
+
+ Missile missile = missiles.get(i);
+
+ if (!missile.active) {
+
+ missiles.remove(i);
+ }
+ }
+ }
+
+ private void updateSpaceShip() {
+
+ spaceShip.move();
+ }
+
+ private class TAdapter extends KeyAdapter {
+
+ @Override
+ public void keyReleased(KeyEvent e) {
+ spaceShip.keyReleased(e);
+ }
+
+ @Override
+ public void keyPressed(KeyEvent e) {
+ spaceShip.keyPressed(e);
+ }
+ }
+}
+
diff --git a/Game-3/src/Game/Missile.java b/Game-3/src/Game/Missile.java
new file mode 100644
index 0000000..2ac79a0
--- /dev/null
+++ b/Game-3/src/Game/Missile.java
@@ -0,0 +1,32 @@
+// Origin: https://zetcode.com/javagames/movingsprites/
+
+package Game;
+
+public class Missile extends Sprite {
+
+ private final int BOARD_WIDTH = 800;
+ private final int MISSILE_SPEED = 2;
+
+ public Missile(int x, int y) {
+ super(x, y);
+
+ initMissile();
+ MissileThread myMissile = new MissileThread( this, 1, 0, 800, 800 );
+ myMissile.start();
+ }
+
+ private void initMissile() {
+
+ loadImage("src/resources/missile.png");
+ getImageDimensions();
+ }
+
+// public void move() {
+//
+// x += MISSILE_SPEED;
+//
+// if (x > BOARD_WIDTH) {
+// visible = false;
+// }
+// }
+}
\ No newline at end of file
diff --git a/Game-3/src/Game/MissileThread.java b/Game-3/src/Game/MissileThread.java
new file mode 100644
index 0000000..ce3a168
--- /dev/null
+++ b/Game-3/src/Game/MissileThread.java
@@ -0,0 +1,35 @@
+package Game;
+
+public class MissileThread extends Thread {
+
+ private Missile myMissile;
+ private int Xspeed, Yspeed, MaxX, MaxY;
+
+ public MissileThread(Missile theMissile, int theXspeed, int theYspeed, int maxX, int maxY) {
+ myMissile = theMissile;
+ Xspeed = theXspeed;
+ Yspeed = theYspeed;
+ MaxX = maxX;
+ MaxY = maxY;
+ }
+
+ public void run() {
+ System.out.println("Missile started");
+ try {
+ while (true) {
+ Thread.sleep(10);
+ myMissile.x += Xspeed;
+ myMissile.y += Yspeed;
+ if ((myMissile.x > MaxX) || (myMissile.y > MaxY)) {
+ myMissile.active = false;
+ // Die die die
+ System.out.println("Missile died");
+ break;
+ }
+ }
+ } catch (InterruptedException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/Game-3/src/Game/SpaceShip.java b/Game-3/src/Game/SpaceShip.java
new file mode 100644
index 0000000..dbf7e6d
--- /dev/null
+++ b/Game-3/src/Game/SpaceShip.java
@@ -0,0 +1,87 @@
+// Origin: https://zetcode.com/javagames/movingsprites/
+
+package Game;
+
+import java.awt.event.KeyEvent;
+import java.util.ArrayList;
+import java.util.List;
+
+public class SpaceShip extends Sprite {
+
+ private int dx;
+ private int dy;
+ private List missiles;
+
+ public SpaceShip(int x, int y) {
+ super(x, y);
+
+ initSpaceShip();
+ }
+
+ private void initSpaceShip() {
+
+ missiles = new ArrayList<>();
+
+ loadImage("src/resources/spaceship.png");
+ getImageDimensions();
+ }
+
+ public void move() {
+ x += dx;
+ y += dy;
+ }
+
+ public List getMissiles() {
+ return missiles;
+ }
+
+ public void keyPressed(KeyEvent e) {
+
+ int key = e.getKeyCode();
+
+ if (key == KeyEvent.VK_SPACE) {
+ fire();
+ }
+
+ if (key == KeyEvent.VK_LEFT) {
+ dx = -1;
+ }
+
+ if (key == KeyEvent.VK_RIGHT) {
+ dx = 1;
+ }
+
+ if (key == KeyEvent.VK_UP) {
+ dy = -1;
+ }
+
+ if (key == KeyEvent.VK_DOWN) {
+ dy = 1;
+ }
+ }
+
+ public void fire() {
+ missiles.add(new Missile(x + width, y + height / 2));
+ }
+
+ public void keyReleased(KeyEvent e) {
+
+ int key = e.getKeyCode();
+
+ if (key == KeyEvent.VK_LEFT) {
+ dx = 0;
+ }
+
+ if (key == KeyEvent.VK_RIGHT) {
+ dx = 0;
+ }
+
+ if (key == KeyEvent.VK_UP) {
+ dy = 0;
+ }
+
+ if (key == KeyEvent.VK_DOWN) {
+ dy = 0;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Game-3/src/Game/Sprite.java b/Game-3/src/Game/Sprite.java
new file mode 100644
index 0000000..b266a5c
--- /dev/null
+++ b/Game-3/src/Game/Sprite.java
@@ -0,0 +1,56 @@
+// Origin: https://zetcode.com/javagames/movingsprites/
+
+package Game;
+
+import java.awt.Image;
+import javax.swing.ImageIcon;
+
+public class Sprite {
+
+ protected int x;
+ protected int y;
+ protected int width;
+ protected int height;
+ protected boolean active;
+ protected Image image;
+
+ public Sprite(int x, int y) {
+
+ this.x = x;
+ this.y = y;
+ active = true;
+ }
+
+ protected void loadImage(String imageName) {
+
+ ImageIcon ii = new ImageIcon(imageName);
+ image = ii.getImage();
+ }
+
+ protected void getImageDimensions() {
+
+ width = image.getWidth(null);
+ height = image.getHeight(null);
+ }
+
+ public Image getImage() {
+ return image;
+ }
+
+ public int getX() {
+ return x;
+ }
+
+ public int getY() {
+ return y;
+ }
+
+ public boolean isActive() {
+ return active;
+ }
+
+ public void setActive(Boolean active) {
+ this.active = active;
+ }
+}
+
diff --git a/Game-3/src/Game/TheGame.java b/Game-3/src/Game/TheGame.java
new file mode 100644
index 0000000..58b7474
--- /dev/null
+++ b/Game-3/src/Game/TheGame.java
@@ -0,0 +1,35 @@
+// Origin: https://zetcode.com/javagames/movingsprites/
+
+package Game;
+
+import java.awt.EventQueue;
+import javax.swing.JFrame;
+
+public class TheGame extends JFrame {
+
+ public TheGame() {
+
+ initUI();
+ }
+
+ private void initUI() {
+
+ add(new Board());
+
+ setTitle("Moving sprite");
+ setSize(800, 800);
+
+ setLocationRelativeTo(null);
+ setResizable(false);
+ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ }
+
+ public static void main(String[] args) {
+
+ EventQueue.invokeLater(() -> {
+ TheGame ex = new TheGame();
+ ex.setVisible(true);
+ });
+ }
+
+}
diff --git a/Game-3/src/resources/missile.png b/Game-3/src/resources/missile.png
new file mode 100644
index 0000000..ab620f8
Binary files /dev/null and b/Game-3/src/resources/missile.png differ
diff --git a/Game-3/src/resources/spaceship.png b/Game-3/src/resources/spaceship.png
new file mode 100644
index 0000000..b412667
Binary files /dev/null and b/Game-3/src/resources/spaceship.png differ