Skip to content

Instantly share code, notes, and snippets.

@yongjun823
Created July 28, 2019 11:49
Show Gist options
  • Save yongjun823/15eafd88b7d1e3f48acf325641b9aacd to your computer and use it in GitHub Desktop.
Save yongjun823/15eafd88b7d1e3f48acf325641b9aacd to your computer and use it in GitHub Desktop.

Revisions

  1. yongjun823 created this gist Jul 28, 2019.
    181 changes: 181 additions & 0 deletions ballGame.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,181 @@
    package com.company;

    import java.awt.*;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import java.awt.event.WindowEvent;
    import java.awt.event.WindowListener;
    import java.util.ArrayList;

    public class Report2 extends Frame implements WindowListener, KeyListener, Runnable {

    class Enemy {
    int x = 200;
    int y = 200;
    int dx;
    int dy;

    public Enemy() {
    this.dx = (int) (Math.random() * 20 - 10);
    this.dy = (int) (Math.random() * 20 - 10);
    }
    }

    private ArrayList<Enemy> enemys = new ArrayList<>();
    Thread th;

    int jx = 200, jy = 350;
    boolean keyL = false, keyR = false, keyU = false, keyD = false;
    boolean isFinish = false;
    Graphics vg;
    Image vi;
    int timeCnt = 0;

    public Report2() {
    super("Report2");
    addWindowListener(this);
    addKeyListener(this);
    setSize(400, 400);
    setResizable(false);
    setVisible(true);

    for (int i = 0; i < 2; i++) {
    enemys.add(new Enemy());
    }

    th = new Thread(this);
    }

    public void update(Graphics g) {
    if (vi == null) {
    vi = createImage(400, 400);
    vg = vi.getGraphics();
    }
    paint(vg);
    g.drawImage(vi, 0, 0, this);
    }

    public void paint(Graphics g) {
    g.setColor(Color.black);
    g.fillRect(0, 0, 400, 400);
    g.setColor(Color.red);
    g.fillRect(jx, jy, 10, 10);
    g.setColor(Color.blue);

    for (Enemy enemy : enemys) {
    g.fillOval(enemy.x, enemy.y, 10, 10);
    }
    }

    @Override
    public void run() {
    while (!isFinish) {
    try {
    Thread.sleep(30);
    timeCnt += 1;
    System.out.println("cnt: " + timeCnt + " enemy len: " + enemys.size());
    } catch (Exception e) {
    }

    if (keyL) jx -= 5;
    if (keyR) jx += 5;
    if (keyU) jy -= 5;
    if (keyD) jy += 5;
    if (jx < 0) jx = 0;
    if (jx >= 400) jx = 400 - 20;
    if (jy < 0) jy = 0;
    if (jy >= 400) jy = 400 - 20;

    for (Enemy enemy : enemys) {
    enemy.x += enemy.dx;
    enemy.y += enemy.dy;

    if (enemy.x < 0 || enemy.x > 400) enemy.dx *= -1;
    if (enemy.y < 0 || enemy.y > 400) enemy.dy *= -1;
    if (Math.abs(enemy.x - jx) < 10 && Math.abs(enemy.y - jy) < 10) isFinish = true;
    }

    if (timeCnt % 100 == 0) {
    enemys.add(new Enemy());
    }

    repaint();
    }
    }


    @Override
    public void windowOpened(WindowEvent e) {
    }

    @Override
    public void windowDeactivated(WindowEvent e) {
    }

    @Override
    public void windowActivated(WindowEvent e) {
    }

    @Override
    public void windowDeiconified(WindowEvent e) {
    }

    @Override
    public void windowIconified(WindowEvent e) {
    }

    @Override
    public void windowClosed(WindowEvent e) {
    }

    @Override
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }

    @Override
    public void keyTyped(KeyEvent e) {
    }

    public void keyPressed(KeyEvent e) {
    switch (e.getKeyCode()) {
    case KeyEvent.VK_SPACE: {
    th.start();
    }
    break;
    case KeyEvent.VK_LEFT:
    keyL = true;
    break;
    case KeyEvent.VK_RIGHT:
    keyR = true;
    break;
    case KeyEvent.VK_UP:
    keyU = true;
    break;
    case KeyEvent.VK_DOWN:
    keyD = true;
    break;
    }
    }

    public void keyReleased(KeyEvent e) {
    switch (e.getKeyCode()) {
    case KeyEvent.VK_LEFT:
    keyL = false;
    break;
    case KeyEvent.VK_RIGHT:
    keyR = false;
    break;
    case KeyEvent.VK_UP:
    keyU = false;
    break;
    case KeyEvent.VK_DOWN:
    keyD = false;
    break;
    }
    }

    public static void main(String[] args) {
    Report2 rp = new Report2();
    }
    }