Need better way to handle movement in 2D plane

Currently I’m trying to work on movement AI for enemy Spaceships. Simple stuff, just left, right, up, down movement. I’ve implemented player movement by doing the simple move() function like this:


public void move(Direction dir) {
		switch(dir){
			case NORTH:
				if((coordinate.getY() - y_speed) >= 0){
					// Set the sprite to the appropriate frame
					sprite = SpriteStore.getStore().getSprite(SHIP_PLAYER_UP);
					// Move the ship
					coordinate.moveY(-y_speed);
				}
				break;
			case SOUTH:
				if((coordinate.getY() + y_speed + sprite.getHeight()) <= BACKGROUND_HEIGHT){
					// Set the sprite to the appropriate frame
					sprite = SpriteStore.getStore().getSprite(SHIP_PLAYER);
					// Move the ship
					coordinate.moveY(y_speed);
				}
				break;
			case EAST:
				if((coordinate.getX() + x_speed + sprite.getWidth()) <= BACKGROUND_WIDTH)
					coordinate.moveX(x_speed);
				break;
			case WEST:
				if((coordinate.getX() - x_speed) >= 0)
					coordinate.moveX(-x_speed);
				break;
		}
	}


Sure, it might be a bad way to do something like this, and I’m quickly coming to this realization (I knew sooner or later I’d need something more versatile). coordinate is just a Point(x, y).

My problem is that I’m having trouble using this method of movement to allow the AI to move the ship. I’ve thought of dealing with vertical and horizontal motion separately using simple methods like this one, but I’d rather take the time to implement a whole new movement system that I know will allow for versatility down the road.

I’m aware of basic kinematics, and I’m currently browsing through an AI book that uses “correct” physics to simulate movement. By this I mean using variables such as mass, acceleration, velocity, force applied, etc. I’m also interested in implementing in 2D Vectors to handle magnitude and direction. I imagine this wouldn’t be too difficult since I’m already using Coordinates (Points).

Currently, my Ships only have an x_speed and a y_speed which is added (either as a positive or negative value) to their position to control their movement.

So my questions are:

  • If I were to use physics (F=ma, v, t, etc.), what variables would I need to store in my Ships? How would the movements methods use these variables?
  • Would this allow for easier control by the AI?
  • If I didn’t care about applying different forces, or about acceleration (if I just wanted the Ships to move at a constant velocity), would it be possible to just declare these variables constant somewhere and not worry about them?

To clarify my last question: currently I just move the Ships by a constant value , which for my purposes is fine. But, if add in natural kinematics, would I still be able to easily move the Ships without caring about all the details, or am I going to have a little messier time since there will be several new variables added into the equation?

As of right now, I don’t need to use the detailed movement that physics would allow. But, I could very well imagine in the future that I would want to add Ship upgrades or power-ups that do utilize the details of kinematics to vary the movement of Ships.

Hm…hope things are clear enough. Also, keep in mind that I’ve ran into this problem while creating AI, so anything that AI might want to use when dealing with movement is worth mentioning. Thanks for any help!