Java로 키보드로 사각형 입력

15171 단어 Java
개시하다
이 글은 SLP KBIT AdventCalendar2021 17일째 되는 글이다.
자바를 사용하여 키보드 입력으로 화면에 표시된 도형을 이동하는 처리를 시도했다.
나는 자바로 2D 게임을 해보고 싶다. 어쨌든 키보드로 캐릭터를 이동해 보자.
카탈로그
프로그램 제작
• 코드
총결산
프로그램 만들기
컨디션
Java 16
Eclipse 4.19.0
기능
키보드의 [W][A][S][D]를 사용하여 화면에 표시되는 사각형을 이동합니다.
코드
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;

public class GameMain extends JFrame implements KeyListener{
    int x= 200,y= 100;
    int speed=5;
    boolean flag_W=false,flag_A=false,flag_S=false,flag_D=false;

    // Main
    public static void main(String args[]){
        GameMain g = new GameMain();
        while(true) {
            g.repaint();
        }
    }

    // Constructor
    GameMain(){
        super("Move");
        addKeyListener(this);
        setBackground(Color.GRAY);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(400, 340);
        setLocationRelativeTo(null);
        setResizable(false);
        setVisible(true);
    }

    //paint
    public void paint(Graphics g){
        move();
        g.setColor(Color.GRAY);
        g.fillRect(0, 0, 400, 340);
        g.setColor(Color.blue);
        g.fillRect(x,y,20,20);
        try{
            Thread.sleep(10);
        } catch(InterruptedException e) {

        }
    }

    // KeyEvent Listener
    public void keyPressed(KeyEvent e){
        switch(e.getKeyCode()){
        case KeyEvent.VK_W: flag_W=true; break;
        case KeyEvent.VK_D: flag_D=true; break;
        case KeyEvent.VK_S: flag_S=true; break;
        case KeyEvent.VK_A: flag_A=true; break;
    }
    }
    public void keyReleased(KeyEvent e) {
        switch(e.getKeyCode()) {
            case KeyEvent.VK_W: flag_W=false; break;
            case KeyEvent.VK_D: flag_D=false; break;
            case KeyEvent.VK_S: flag_S=false; break;
            case KeyEvent.VK_A: flag_A=false; break;
        }
    }
    public void keyTyped(KeyEvent e) {

    }
    //flagを受け取ってそれに合わせて図形を動かす
    public void move() {
        if(y>=30) {
            if(flag_W) {
                y-=speed;
            }
        }
        if(x+20<400) {
            if(flag_D) {
                x+=speed;
            }
        }
        if(x>=0) {
            if(flag_A) {
                x-=speed;
            }
        }
        if(y+20<340) {
            if(flag_S) {
                y+=speed;
            }
        }
    }
}
실행 결과

↓ [A]와 [S]로 좌하향 이동

코드 해설
main 함수를 무한히 반복해서 사용한 실례일 뿐입니다.
리플릿 시 이전에 그린 그림이 계속 유지되기 때문에 매번 배경과 같은 색으로 채웁니다.
keyPresed 함수에서는 아래와 같이 대략적으로 이동하지만 카카오가 이동하기 때문에 flag로 관리하는 것을 추천합니다.
// KeyEvent Listener
    public void keyPressed(KeyEvent e){
        switch(e.getKeyCode()){
        case KeyEvent.VK_W: y-=speed; break;
        case KeyEvent.VK_D: x+=speed; break;
        case KeyEvent.VK_S: x-=speed; break;
        case KeyEvent.VK_A: y+=speed; break;
    }
   }
총결산
이미지를 사용하면 그래픽뿐만 아니라 이미지도 이동할 수 있습니다.
나는 배경과 이번에 이동한 도형을 그림으로 만들면 게임처럼 될 것 같다.
향후
1개의 화면을 이동하는 프로그램을 완성했기 때문에 다음은 도형의 동작에 따라 화면 전체를 움직이는 처리를 만들고 싶다.
최후
올해는 아직 보름이 남았다.
올해는 매일 잠이 부족한 것 같아서...
나의 내년 목표는 잠을 잘 자는 것이다.
여러분도 건강에 주의하여 좋은 해를 보내세요.
참고 문헌
[Java] 키 입력 처리
Java를 사용하여 프로그램을 일시 중지합니다, Thread.sleep의 사용 방법과 구조를 설명하다
Java AWT 키 작업 이벤트

좋은 웹페이지 즐겨찾기