Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Function pointers

Name: Brunch 2012-08-09 9:20

Heya /prog/. I'm programming in java and there's something that really bothers me about my code. I'll write pseudocode so it's easier to see what I mean so don't get picky on syntax.


class entity {
   int action = IDLE;

   void idle() { void; };
   void moveRight() { ... };
   void jump() { ... };

   void onUpdate() {
      switch(action) {
           case IDLE: idle(); break;
           case JUMPING: jump(); break;
           case MOVINGRIGHT: moveRight(); break;
          
           ...
      }
  }
}


Now this really bothers me because you have this pile of ifs depending on status. It would, in my opinion, look much better if action was a pointer to a function.

class entity {
   function_pointer action = idle;

   void idle() { void; };
   void moveRight() { ... };
   void jump() { ... };

   void onUpdate() {
       function_pointer();
  }

But apparently java doesn't have this functionality. Or does it?
What do you think? Have any solutions to this?

Name: Anonymous 2012-08-09 10:37


interface IAction {
  void execute();
}

interface IEntity {
  void idle();
  void jump();
  void moveRight();
}

class ActionIdle implements IAction {
  private IEntity subject;

  ActionIdle(IEntity subject) {
    this.subject = subject;
  }

  public void execute() {
    subject.idle();
  }
}

class ActionJump implements IAction {
  private IEntity subject;

  ActionJump(IEntity subject) {
    this.subject = subject;
  }

  public void execute() {
    subject.jump();
  }
}

class ActionMoveRight implements IAction {
  private IEntity subject;

  ActionMoveRight(IEntity subject) {
    this.subject = subject;
  }

  public void execute() {
    subject.moveRight();
  }
}


abstract class SimpleEntity implements IEntity {
  IAction currentAction;

  SimpleEntity(IAction currentAction) {
    this.currentAction = currentAction;
  }

  public void onUpdate() {
    currentAction.execute();
  }
}

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List