자바 스레드를 이용한 간단한 게임

2021년 7월 작성글
키보드와 스페이스바로 이동 가능
상대방이 먼저 끝에 닿으면 실패
장애물도 넣어서 멀티 스레드로 구현하기는 했는데
그건 나 혼자 한게 아니라서 따로 올리진 않겠다!
내가 간단하게 만든것만 올려야지
<코드>
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class Run extends JFrame implements KeyListener, Runnable
{
Other a;
int f_width = 1000;
int f_height = 600;
int x = -100;
int y = 300;
boolean keyjump = false;
boolean keyleft = false;
boolean keyright = false;
public JPanel lane = new JPanel();
Thread t;
Toolkit tk = Toolkit.getDefaultToolkit();
Image officer = Toolkit.getDefaultToolkit().createImage("runner.png");
Image other = Toolkit.getDefaultToolkit().createImage("other.png");
public Run()
{
start();
setTitle("달려라 직장인");
setSize(f_width,f_height);
Dimension screen = tk.getScreenSize();
lane.setLayout(null);
add(lane);
int f_xpos = (int)(screen.getWidth()/2 - f_width/2);
int f_ypos = (int)(screen.getHeight()/2 - f_height/2);
a= new Other(this, 30,300);
a.start();
setLocation(f_xpos, f_ypos);
setVisible(true);
}
public void start(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addKeyListener(this);
t = new Thread(this);
t.start();
}
public void run(){
try{
for(int i=0; i<1000; i++){
KeyProcess();
repaint();
Thread.sleep(20);
if(x>370 && x<480 && y==300 || a.goal==true){
(lane.getGraphics()).drawString("게임오버",800,30);
a.nogo();
break;
}
if(x==800){
(lane.getGraphics()).drawString("승리",800,30);
a.nogo();
break;
}
}
}catch(Exception e){}
}
public void paint(Graphics g){
ImageIcon back = new ImageIcon("배경.jpg");
ImageIcon dol1 = new ImageIcon("dol.png");
g.drawImage(back.getImage(),0,30,null);
g.drawImage(officer,x,y,this);
g.drawImage(other, a.x, a.y, this);
g.drawImage(dol1.getImage(),600,500,null);
}
@Override
public void keyPressed(KeyEvent e){
switch(e.getKeyCode()){
case KeyEvent.VK_SPACE:
keyjump = true;
break;
case KeyEvent.VK_LEFT:
keyleft = true;
break;
case KeyEvent.VK_RIGHT:
keyright = true;
break;
}
}
@Override
public void keyReleased(KeyEvent e){
switch(e.getKeyCode()){
case KeyEvent.VK_LEFT:
keyleft = false;
break;
case KeyEvent.VK_SPACE:
keyjump = false;
break;
case KeyEvent.VK_RIGHT:
keyright = false;
break;
}
}
@Override
public void keyTyped(KeyEvent e){}
public void KeyProcess(){
if(keyleft == true) x-=5;
if(keyright==true) x+=5;
if(keyjump==false) y=300;
if(keyjump==true) y=200;
}
}
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.*;
class Other extends Thread
{
int x, y;
int speed;
boolean go=true;
boolean goal = false;
JFrame app;
public Other(JFrame _app, int w, int h)
{
app = _app;
x=w;
y=h;
}
public void run()
{
while(x<900 && go==true)
{
speed = (int) (Math.random() * 50);
x+= speed;
app.repaint();
try{
sleep(speed * 15);
}catch(Exception ex){}
}
if(x>900){
goal = true;}
}
public void nogo(){
go=false;
}
}