자바

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

고양이오즈 2021. 12. 14. 13:40

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;

}

}