Erin S      , Ben B    , Brian McN, Michael Z, Danielle Z, Minh T      , 
Griffin T   , Mahamat A, Taylor S , Connor H , Joe G Topp, Nick Palumbo, 
Kohki Kitano, Shikun D , Grant M  , Shane B  , Haleigh E , Nick Palmer ,
Phoebe H    , Chen T   , 

What's the essence of Stage Two (code)? 

Stage Two is Stage one with some code: 

import java.awt.*; 
import java.awt.event.*; 

interface World {
  public void draw(Graphics g);
  public void update(); 
  public boolean hasEnded();
  public void keyPressed(KeyEvent e); 
}

import java.awt.event.*; 
import java.awt.*; 

class BigBang extends JComponent implements KeyListener, ActionListener {
  Timer timer; 
  World world; 
  BigBang(int delay, World world) {
    timer = new Timer(delay, this); 
    this.world = world;
  } 
  public void start() {
    timer.start();  
  }
  BigBang(World world) {
    this(1000, world);  
  }
  public void paintComponent(Graphics g) {
    world.draw(g);  
  }
  public void actionPerformed(ActionEvent e) {
    world.update(); 
    if (world.hasEnded())
      timer.stop(); 
    this.repaint(); 
  }
  public void keyPressed(KeyEvent e) { 
    world.keyPressed(e); 
  } 
  public void keyTyped(KeyEvent e) { } 
  public void keyReleased(KeyEvent e) { } 
}

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

class Tetris implements World {
  public void draw(Graphics g) { System.out.println("World being drawn."); } 
  public void update() { System.out.println("World getting older."); }
  public boolean hasEnded() { return false; } 
  public void keyPressed(KeyEvent e) { System.out.println("Ouch."); } 
  public static void main(String[] args) {
    BigBang game = new BigBang(200, new Tetris()); 
    JFrame frame = new JFrame("Tetris"); 
    frame.getContentPane().add( game ); 
    frame.addKeyListener( game ); 
    frame.setVisible(true); 
    frame.setSize(400, 400); 
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); 
    game.start(); 
  }
}

The new code is: 

http://zetcode.com/img/gfx/javagames/tetrominoes.png

class Point {
  int x, y;
  Point(int x, int y) {
    this.x = x;
    this.y = y;
  }
}

import java.awt.*; 

class Block {
  final static int SIZE = 20; // pixels 
  int x, y;
  Color color; 
  Block(int x, int y, Color c) {
    this.x = x;
    this.y = y;
    this.color = c; 
  }
  void draw(Graphics g) {
    int xp = this.x * SIZE + SIZE/2, yp = this.y * SIZE + SIZE / 2;
    g.setColor(this.color);     
    g.fillRect(xp, yp, SIZE, SIZE); 
    g.setColor(Color.BLACK); 
    g.drawRect(xp, yp, SIZE, SIZE); 
  }
}

import java.awt.*; 
import java.util.*; 

class SetOfBlocks extends ArrayList<Block> {
  void draw(Graphics g) {
    for (Block b : this) 
      b.draw(g); 
  }
}

import java.awt.*; 

class Tetromino {
  Point center;
  SetOfBlocks blocks;
  Tetromino(Point center, SetOfBlocks blocks) {
    this.center = center; 
    this.blocks = blocks; 
  }
  void draw(Graphics g) {
    this.blocks.draw(g); 
  }
}

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

class Tetris implements World {
  public void draw(Graphics g) { // world->image
    System.out.println("World being drawn."); 
    /*********************************************************
    Block b = new Block((int)(Math.random() * 10), 
                        (int)(Math.random() * 20), 
                        new Color((int)(Math.random() * 255), 
                                  (int)(Math.random() * 255), 
                                  (int)(Math.random() * 255))); 
    b.draw(g); 
    **********************************************************/
    Tetromino t = new Tetromino(new Point(250, 250), Utilities.makeSquare()); 
    t.draw(g); 
  } 
  public void update() { System.out.println("World getting older."); }
  public boolean hasEnded() { return false; } 
  public void keyPressed(KeyEvent e) { // world-key-move
    System.out.println("Ouch."); 
  } 
  public static void main(String[] args) {
    BigBang game = new BigBang(200, new Tetris()); 
    JFrame frame = new JFrame("Tetris"); 
    frame.getContentPane().add( game ); 
    frame.addKeyListener( game ); 
    frame.setVisible(true); 
    frame.setSize(400, 400); 
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); 
    game.start(); 
  }
}

import java.awt.*; 

class Utilities {
  static SetOfBlocks makeSquare() {
    SetOfBlocks a = new SetOfBlocks(); 
    a.add(new Block( 0,  0, Color.GREEN)); 
    a.add(new Block( 0,  1, Color.GREEN)); 
    a.add(new Block( 1,  0, Color.GREEN)); 
    a.add(new Block( 1,  1, Color.GREEN)); 
    return a;
  }
}

import java.awt.*; 
import java.awt.event.*; 

interface World {
  public void draw(Graphics g);
  public void update(); 
  public boolean hasEnded();
  public void keyPressed(KeyEvent e); 
}

import javax.swing.*;
import java.awt.event.*; 
import java.awt.*; 

class BigBang extends JComponent implements KeyListener, ActionListener {
  Timer timer; 
  World world; 
  BigBang(int delay, World world) {
    timer = new Timer(delay, this); 
    this.world = world;
  } 
  public void start() {
    timer.start();  
  }
  BigBang(World world) {
    this(1000, world);  
  }
  public void paintComponent(Graphics g) {
    world.draw(g);  
  }
  public void actionPerformed(ActionEvent e) {
    world.update(); 
    if (world.hasEnded())
      timer.stop(); 
    this.repaint(); 
  }
  public void keyPressed(KeyEvent e) { 
    world.keyPressed(e); 
  } 
  public void keyTyped(KeyEvent e) { } 
  public void keyReleased(KeyEvent e) { } 
}