Created
July 28, 2019 11:49
-
-
Save yongjun823/15eafd88b7d1e3f48acf325641b9aacd to your computer and use it in GitHub Desktop.
공 나와서 부딪히면 끝나는 게임 공 여러개 소환 가능 + 시간 지나면 공 추가
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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