Session: Scheduling. just a treat: a small sprite game
This commit is contained in:
6
Game-1/.classpath
Normal file
6
Game-1/.classpath
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<classpath>
|
||||||
|
<classpathentry kind="src" path="src"/>
|
||||||
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||||
|
<classpathentry kind="output" path="bin"/>
|
||||||
|
</classpath>
|
||||||
17
Game-1/.project
Normal file
17
Game-1/.project
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>Game-1</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
||||||
BIN
Game-1/bin/resources/spaceship.png
Normal file
BIN
Game-1/bin/resources/spaceship.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
82
Game-1/src/Game/Board.java
Normal file
82
Game-1/src/Game/Board.java
Normal file
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
104
Game-1/src/Game/SpaceShip.java
Normal file
104
Game-1/src/Game/SpaceShip.java
Normal file
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
33
Game-1/src/Game/TheGame.java
Normal file
33
Game-1/src/Game/TheGame.java
Normal file
@@ -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);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
BIN
Game-1/src/resources/spaceship.png
Normal file
BIN
Game-1/src/resources/spaceship.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
6
Game-2/.classpath
Normal file
6
Game-2/.classpath
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<classpath>
|
||||||
|
<classpathentry kind="src" path="src"/>
|
||||||
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||||
|
<classpathentry kind="output" path="bin"/>
|
||||||
|
</classpath>
|
||||||
17
Game-2/.project
Normal file
17
Game-2/.project
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>Game-2</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
||||||
BIN
Game-2/bin/resources/spaceship.png
Normal file
BIN
Game-2/bin/resources/spaceship.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
112
Game-2/src/Game/Board.java
Normal file
112
Game-2/src/Game/Board.java
Normal file
@@ -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<Missile> 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<Missile> 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
28
Game-2/src/Game/Missile.java
Normal file
28
Game-2/src/Game/Missile.java
Normal file
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
85
Game-2/src/Game/SpaceShip.java
Normal file
85
Game-2/src/Game/SpaceShip.java
Normal file
@@ -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<Missile> 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<Missile> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
54
Game-2/src/Game/Sprite.java
Normal file
54
Game-2/src/Game/Sprite.java
Normal file
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
33
Game-2/src/Game/TheGame.java
Normal file
33
Game-2/src/Game/TheGame.java
Normal file
@@ -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);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
BIN
Game-2/src/resources/missile.png
Normal file
BIN
Game-2/src/resources/missile.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.7 KiB |
BIN
Game-2/src/resources/spaceship.png
Normal file
BIN
Game-2/src/resources/spaceship.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
Reference in New Issue
Block a user