본문 바로가기
자바

자바 소스코드: 버블 게임(비눗방울 같은)

by 드린 2016. 11. 23.

목차

    반응형
    package javaapplication31;
    
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    
    class Ex6 extends JFrame{
        GamePanel panel;
        ImageIcon icon = new ImageIcon("airplane.jpg");
        
        Ex6(){
            this.setTitle("버블 게임");
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            
            panel = new GamePanel();
            this.add(panel);
            
            this.setLocationRelativeTo(null);
            this.setSize(300,300);
            this.setVisible(true);
            panel.requestFocus();//게임 패널에 포커스를 맞춤
        }
        
        class GamePanel extends JPanel{
            GamePanel(){
                this.setLayout(null);
                this.addMouseListener(new MouseListener(){
                    @Override
                    public void mouseClicked(MouseEvent me) {
                    }
    
                    @Override
                    public void mousePressed(MouseEvent me) {
                        //클릭한 곳의 위치를 알아내고, 그 위치에 대한 스레드 객체를 생성하고 실행
                        int x=me.getX();
                        int y=me.getY();
                        BalloonThread bt= new BalloonThread(x,y);
                        bt.start();
                    }
    
                    @Override
                    public void mouseReleased(MouseEvent me) {
                    }
    
                    @Override
                    public void mouseEntered(MouseEvent me) {
                    }
    
                    @Override
                    public void mouseExited(MouseEvent me) {
                    }
                });
            }
        }
        class BalloonThread extends Thread{
            int x,y;
            //마우스 리스너를 통해 입력된 좌표를 받는다.
            BalloonThread(int x, int y){
                this.x=x;
                this.y=y;
            }
            
            public void run(){
                //좌표에 대한 이미지를 생성한다.
                    JLabel la= new JLabel(icon);
                    la.setSize(30,30);
                    la.setLocation(x, y);
                    la.setOpaque(true);
                    panel.add(la);
                    
                while(true){
                    int x=la.getX();
                    int y=la.getY()-5;//5픽셀씩 위로 올라간다.
                    
                    //레이블이 프레임 밖으로 나가면 스레드를 종료
                    if(la.getHeight()+30<=0)
                        return;
                    //아니면 계속 올라간다.
                    else
                        la.setLocation(x, y);
                    try{
                        sleep(20);//0.02초에 5픽셀이동
                    }
                    catch(Exception e){
                        return;
                    }
                }
            }
        }
    }
    
    public class JavaApplication31 {
        public static void main(String[] args) {
            new Ex6();
        }
    }
    
    

    <결과>

    2016/11/23 - [자바] - 자바 소스코드: 움직이는 물체를 맞추는 사격 게임

    2016/11/14 - [자바] - 자바 소스코드: 아무거나 빨리 눌러 바 채우기

    2016/11/14 - [자바] - 자바 소스코드: 스레드 충돌 예제

    #자바 #자바 소스코드 #명품자바 프로그래밍 13장 6번 #실습문제 #스레드 #버블게임 #마우스 리스너 #이게 왜 게임이지?

    반응형