diff --git a/Game-1/.classpath b/Game-1/.classpath new file mode 100644 index 0000000..fb50116 --- /dev/null +++ b/Game-1/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/Game-1/.project b/Game-1/.project new file mode 100644 index 0000000..b540d4f --- /dev/null +++ b/Game-1/.project @@ -0,0 +1,17 @@ + + + Game-1 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/Game-1/bin/resources/spaceship.png b/Game-1/bin/resources/spaceship.png new file mode 100644 index 0000000..2e387ae Binary files /dev/null and b/Game-1/bin/resources/spaceship.png differ diff --git a/Game-1/src/Game/Board.java b/Game-1/src/Game/Board.java new file mode 100644 index 0000000..40dce1d --- /dev/null +++ b/Game-1/src/Game/Board.java @@ -0,0 +1,82 @@ +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 javax.swing.Timer; +import javax.swing.JPanel; + + +public class Board extends JPanel implements ActionListener { + + private Timer timer; + private SpaceShip spaceShip; + private final int DELAY = 10; + + public Board() { + + initBoard(); + } + + private void initBoard() { + + addKeyListener(new TAdapter()); + setBackground(Color.black); + setFocusable(true); + + spaceShip = new SpaceShip(); + + 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); + } + + @Override + public void actionPerformed(ActionEvent e) { + + step(); + } + + private void step() { + + spaceShip.move(); + + repaint(spaceShip.getX()-1, spaceShip.getY()-1, + spaceShip.getWidth()+2, spaceShip.getHeight()+2); + } + + 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-1/src/Game/SpaceShip.java b/Game-1/src/Game/SpaceShip.java new file mode 100644 index 0000000..8e39906 --- /dev/null +++ b/Game-1/src/Game/SpaceShip.java @@ -0,0 +1,104 @@ +package Game; + +import java.awt.Image; +import java.awt.event.KeyEvent; + +import javax.swing.ImageIcon; + +public class SpaceShip { + + private int dx; + private int dy; + private int x = 40; + private int y = 60; + private int w; + private int h; + private Image image; + + public SpaceShip() { + + loadImage(); + } + + private void loadImage() { + + ImageIcon ii = new ImageIcon("src/resources/spaceship.png"); + image = ii.getImage(); + + w = image.getWidth(null); + h = image.getHeight(null); + } + + public void move() { + + x += dx; + y += dy; + } + + public int getX() { + + return x; + } + + public int getY() { + + return y; + } + + public int getWidth() { + + return w; + } + + public int getHeight() { + + return h; + } + + public Image getImage() { + + return image; + } + + public void keyPressed(KeyEvent e) { + + int key = e.getKeyCode(); + + if (key == KeyEvent.VK_LEFT) { + dx = -2; + } + + if (key == KeyEvent.VK_RIGHT) { + dx = 2; + } + + if (key == KeyEvent.VK_UP) { + dy = -2; + } + + if (key == KeyEvent.VK_DOWN) { + dy = 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; + } + } +} diff --git a/Game-1/src/Game/TheGame.java b/Game-1/src/Game/TheGame.java new file mode 100644 index 0000000..e888d4f --- /dev/null +++ b/Game-1/src/Game/TheGame.java @@ -0,0 +1,33 @@ +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-1/src/resources/spaceship.png b/Game-1/src/resources/spaceship.png new file mode 100644 index 0000000..2e387ae Binary files /dev/null and b/Game-1/src/resources/spaceship.png differ diff --git a/Game-2/.classpath b/Game-2/.classpath new file mode 100644 index 0000000..fb50116 --- /dev/null +++ b/Game-2/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/Game-2/.project b/Game-2/.project new file mode 100644 index 0000000..cff63b0 --- /dev/null +++ b/Game-2/.project @@ -0,0 +1,17 @@ + + + Game-2 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/Game-2/bin/resources/spaceship.png b/Game-2/bin/resources/spaceship.png new file mode 100644 index 0000000..2e387ae Binary files /dev/null and b/Game-2/bin/resources/spaceship.png differ diff --git a/Game-2/src/Game/Board.java b/Game-2/src/Game/Board.java new file mode 100644 index 0000000..0b98272 --- /dev/null +++ b/Game-2/src/Game/Board.java @@ -0,0 +1,112 @@ +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.isVisible()) { + + missile.move(); + } else { + + 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-2/src/Game/Missile.java b/Game-2/src/Game/Missile.java new file mode 100644 index 0000000..864d700 --- /dev/null +++ b/Game-2/src/Game/Missile.java @@ -0,0 +1,28 @@ +package Game; + +public class Missile extends Sprite { + + private final int BOARD_WIDTH = 390; + private final int MISSILE_SPEED = 2; + + public Missile(int x, int y) { + super(x, y); + + initMissile(); + } + + 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-2/src/Game/SpaceShip.java b/Game-2/src/Game/SpaceShip.java new file mode 100644 index 0000000..33188d4 --- /dev/null +++ b/Game-2/src/Game/SpaceShip.java @@ -0,0 +1,85 @@ +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-2/src/Game/Sprite.java b/Game-2/src/Game/Sprite.java new file mode 100644 index 0000000..819792b --- /dev/null +++ b/Game-2/src/Game/Sprite.java @@ -0,0 +1,54 @@ +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 visible; + protected Image image; + + public Sprite(int x, int y) { + + this.x = x; + this.y = y; + visible = 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 isVisible() { + return visible; + } + + public void setVisible(Boolean visible) { + this.visible = visible; + } +} + diff --git a/Game-2/src/Game/TheGame.java b/Game-2/src/Game/TheGame.java new file mode 100644 index 0000000..e888d4f --- /dev/null +++ b/Game-2/src/Game/TheGame.java @@ -0,0 +1,33 @@ +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-2/src/resources/missile.png b/Game-2/src/resources/missile.png new file mode 100644 index 0000000..0a6428a Binary files /dev/null and b/Game-2/src/resources/missile.png differ diff --git a/Game-2/src/resources/spaceship.png b/Game-2/src/resources/spaceship.png new file mode 100644 index 0000000..2e387ae Binary files /dev/null and b/Game-2/src/resources/spaceship.png differ