Session: Scheduling. just a treat: a small sprite game
This commit is contained in:
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