Game AI & Unity/Java Steering game

[Game AI][Steering Behavior] Task_Wall Avoidance (engine.Car)

bay07 2024. 3. 21. 12:44
    public double getMaxSpeed() {
    	return m_max_velocity;
    }
    
    public BufferedImage getImg() {
    	return m_img;
    }

 

나머지 요소들은 다 같은데, 이 2가지만 더 추가해주었다.

이게 없으면 코드가 작동하지 않음 

 

- 전체 코드 

더보기
package engine;

import controllers.Controller;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;


public class Car extends GameObject {
    Controller m_controller;
    BufferedImage m_img;
    
    // physics:
    double m_alpha;     // rotation
    double m_speed;
    double m_max_velocity = 250;
    double m_min_velocity = -100;
    RotatedRectangle m_collision_box;
        
    public Car(String graphicsFileName, double x, double y, double alpha, Controller c) throws Exception {
        m_img = ImageIO.read(new File(graphicsFileName));
        m_x = x;
        m_y = y;
        m_alpha = alpha;
        m_controller = c;
        m_collision_box = new RotatedRectangle(m_x, m_y, m_img.getWidth()/2, m_img.getHeight()/2, m_alpha);
    }
    
    public double getAngle() {
        return m_alpha;
    }
    
    public double getSpeed() {
        return m_speed;
    }
    
    public double getMaxSpeed() {
    	return m_max_velocity;
    }
    
    public void update(Game game, double delta_t) {
        double controlVariables[] = {0,0,0};
        m_controller.update(this, game, delta_t, controlVariables);
        
        // remember the old posision, in case there is a collision:
        double old_x = m_x;
        double old_y = m_y;
        double old_angle = m_alpha;
        
        // update velocity, position and angle:
        double brake_strength = (m_speed>0 ? 250:100);
        double acceleration = controlVariables[Controller.VARIABLE_THROTTLE]*100 - 
                              controlVariables[Controller.VARIABLE_BRAKE]*brake_strength;
        m_speed*=0.99;   // drag
        m_speed += acceleration * delta_t;
        if (m_speed>m_max_velocity) m_speed = m_max_velocity;
        if (m_speed<m_min_velocity) m_speed = m_min_velocity;        
        m_x += Math.cos(m_alpha)*m_speed * delta_t;
        m_y += Math.sin(m_alpha)*m_speed * delta_t;
        double turning_rate = controlVariables[Controller.VARIABLE_STEERING]*m_speed;
        m_alpha+=turning_rate*delta_t/50;
        
        // update the collision box:
        m_collision_box.C.x = m_x;
        m_collision_box.C.y = m_y;
        m_collision_box.ang = m_alpha;
        
        // check for collisions:
        if (game.collision(this) != null) {
            m_x = old_x;
            m_y = old_y;
            m_alpha = old_angle;
            m_speed = 0;

            m_collision_box.C.x = m_x;
            m_collision_box.C.y = m_y;
            m_collision_box.ang = m_alpha;
        }
    }

    public void draw(Graphics2D g) {
        Graphics2D gg = (Graphics2D) g.create();
        gg.translate(m_x, m_y);
        gg.rotate(m_alpha);
        gg.translate(-m_img.getWidth()/2,-m_img.getHeight()/2);
        gg.drawImage(m_img, 0, 0, null);
        gg.dispose();        
    }
    
    public BufferedImage getImg() {
    	return m_img;
    }
    
    public RotatedRectangle getCollisionBox() {
        return m_collision_box;
    }
    
}