결국 무엇이든 해내는 사람

Day 15 - frame응용, 방향키로 공 움직이기 본문

두서없는 공부 노트/JAVA

Day 15 - frame응용, 방향키로 공 움직이기

kkm8257 2020. 9. 3. 19:57
반응형
package frame_Random_ball_ArrowMove;

import java.awt.Color;

public class Ball {

	
	
	private int posX ;
	private int posY ;
	private int speedX ;
	private int speedY ;
	
	private int size;
	private Color color;
	
	
	
	public Ball(int posX, int posY, int speedX, int speedY, int size, Color color) {
		super();
		this.posX = posX;
		this.posY = posY;
		this.speedX = speedX;
		this.speedY = speedY;
		this.size = size;
		this.color = color;
	}



	
	public void setPosX(int posX) {
		this.posX = posX;
	}




	public void setPosY(int posY) {
		this.posY = posY;
	}




	public int getPosX() {
		return posX;
	}




	public void setSpeedX(int speedX) {
		this.speedX = speedX;
	}




	public void setSpeedY(int speedY) {
		this.speedY = speedY;
	}




	public int getPosY() {
		return posY;
	}




	public int getSpeedX() {
		return speedX;
	}




	public int getSpeedY() {
		return speedY;
	}




	public int getSize() {
		return size;
	}




	public Color getColor() {
		return color;
	}




	public void move() {
		
		//객체지향에서 움직임은 메소드로 만들고
		//필드는 생성자로
		
		posX+=speedX;
		posY+=speedY;
		
		
		
	}
	
	
	
	
}
​
package frame_Random_ball_ArrowMove;

public class Main {

	
	public static void main(String[] args) {
		
		//원이 왓다리갔다리 쓰레드 활용
		Control ct= new Control();
		
		
		
	}
	
}
​
package frame_Random_ball_ArrowMove;

import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class Control {

	
	public Control() {
		
		Frame fr=new Frame();
		
		setLayout(fr);
		
		MyCanvas cv = new MyCanvas(100,100);
		
		cv.setSize(600,600);
		cv.setLocation(0,0);
		
		cv.addKeyListener(new KeyListener() {
			
			@Override
			public void keyTyped(KeyEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void keyReleased(KeyEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void keyPressed(KeyEvent e) {
				// TODO Auto-generated method stub
				System.out.println(e.getKeyCode());
				
				
				//좌 37 상 38 우 39 하 40
				switch (e.getKeyCode()) {
				
				case 37 : 
					System.out.println("좌");
					cv.ball.setPosX(cv.ball.getPosX()-10);
					break;
				case 38 : 
					System.out.println("상");
					cv.ball.setPosY(cv.ball.getPosY()-10);
					break;
				case 39 : 
					System.out.println("우");
					cv.ball.setPosX(cv.ball.getPosX()+10);
					break;
				case 40 : 
					System.out.println("하");
					cv.ball.setPosY(cv.ball.getPosY()+10);
					break;
				
				}
				
			}
		});
		
		
		
		fr.add(cv);

		fr.setVisible(true);
		
		
	}
	
	public void setLayout(Frame frame) {
		//중앙에 위치
		Dimension res = Toolkit.getDefaultToolkit().getScreenSize();
		System.out.println("해상도 : " + res.width + " x " + res.height);

		int frame_width = 600;
		int frame_height = 600;

		frame.setSize(frame_width, frame_height);

		frame.setLocation(res.width / 2 - frame_width / 2, res.height / 2 - frame_height / 2);

		frame.setLayout(null);
		
		//
		
		frame.addWindowListener(new WindowListener() {
			
			@Override
			public void windowOpened(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowIconified(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowDeiconified(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowDeactivated(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowClosing(WindowEvent e) {
				// TODO Auto-generated method stub
				System.exit(0);
			}
			
			@Override
			public void windowClosed(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowActivated(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
		});
		
		
		
		
		
	}
	
	
	
	
}
package frame_Random_ball_ArrowMove;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;

public class MyCanvas extends Canvas {
	Image bufferImage;
	Graphics buffg;

	
	//객체 지향적으로 재설계

	MoveLeftRight th1;
	Ball ball;
	
	
	public MyCanvas(int posX,int posY) {


		ball=new Ball(100,100,5,8,50,Color.BLACK);
		
		th1=new MoveLeftRight();
		th1.start();
		
	
		
		
	}

	@Override
	public void paint(Graphics g) {
		if (buffg == null) {
			bufferImage = createImage(getWidth(), getHeight());

			if (bufferImage == null)
				System.out.println("생성 실패");
			else
				buffg = bufferImage.getGraphics();
		}

	}

	@Override
	public void update(Graphics g) {
		buffg.drawImage(bufferImage, 0, 0, this);// 버퍼세팅
		//
		buffg.setColor(new Color(41, 128, 185));
		buffg.fillRect(0, 0, getWidth(), getHeight());
//
		
		
		buffg.setColor(Color.red);
		buffg.fillOval(ball.getPosX(), ball.getPosY(), ball.getSize(), ball.getSize());

		g.drawImage(bufferImage, 0, 0, this); // 버퍼에있는거 그려주기
	} // 43번쨰 줄부터 52번쨰줄은 껌뻑거림을 없애기위한 코드 , 이해할 필요는 없고 buffg 변수 뒤에 세팅값은
	// 기존의 canvas 그리듯 사용하면 됨. 실제로 깜빡거림 방지는 요즘 기술에는 구현되어있어서 굳이 깊게 안봐도댐

	class MoveLeftRight extends Thread {

		// 좌우 왓다리 갔다리 , 숫자는 프레임창의 크기 값 - 동그라미크기(50) 을 뺴준값
		@Override
		public void run() {

			while (true) {

				
				
				
			

				repaint();

				try {
					Thread.sleep(5);
				} catch (Exception e) {
					System.out.println(e);
				}

			}

		}

	}

}
반응형
Comments