Skip to content

Instantly share code, notes, and snippets.

@yongjun823
Created July 28, 2019 11:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yongjun823/15eafd88b7d1e3f48acf325641b9aacd to your computer and use it in GitHub Desktop.
Save yongjun823/15eafd88b7d1e3f48acf325641b9aacd to your computer and use it in GitHub Desktop.
공 나와서 부딪히면 끝나는 게임 공 여러개 소환 가능 + 시간 지나면 공 추가
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();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment