title: What's wrong with the architecture of a game object drawing and updating itself?
body: <p>What are the reasons for and against a game object drawing and updating itself? For example, if you have a game where the player has a position on screen, why not have an all-encompassing class:</p>
  
  <pre><code>public class Player {
      private int x, y, xVelocity, yVelocity;
      private Sprite s;
      //...
  
      public Player() {
          // load the sprite here, somehow?
      }
  
      public void draw(CustomGraphicsClass g) {
          g.draw(s, x, y);
      }
  
      public void update(long timeElapsed) {
          x += (xVelocity * timeElapsed);
          y += (yVelocity * timeElapsed);
      }
  }
  </code></pre>
  
  <p>What is wrong with this design? What are the downfalls or concerns? How would you better write something like this, or better architect this type of thing in a game?</p>
  
  <p>Also, somewhat connected, how would you implement loading that Sprite image?</p>
  
  <p>And furthermore, how would you then implement collision between two <code>Player</code>s?</p>
  
  <p>(I should probably separate these extra two questions into new questions, huh?)</p>