Christian H Kayl W Levi R Seth E Jiebo W Vanessa A Jared P Alex S
  Joe B Arthi P Yinan X Keqin Q Rajeev M Arif D He H Mike C Jerry S
  Sunghyun L Alex Q Zhiwei L Xing W Siddartha C Rerajitha M 
  Kevin S David L Brandon P Andrew R Jiahao C Haoyang H Xinyu Z Chenrui H 

1. I need a BigBang. 

public class BigBang {

}

2. I need a World. 

interface World {
  void update(); 
  boolean hasEnded(); 
  void draw(Graphics g); 
}

Thoughts: 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Big bang

(big-bang world0 ; an initial world
   (on-tick next-world (/ 1.0 5)) ; world responds to ActionEvents 
          ; this doesn't mean that the world is an action listener 
          ; there must be a timer somewhere but it doesn't have to send
          ; action events DIRECTLY to the world 
   (stop-when (lambda (w) (blocks-overflow? (world-blocks w))))
          ; world needs to know if it has ended 
   (on-draw world->image) ; world needs to know how to draw itself 
   (on-key world-key-move)) ; world needs to react to key events
          ; a KeyListener must exist but it does not need to be the world
          ; although it could be. The more important question is who 
          ; generates the key events  

3. I combine all I have so far:

import java.awt.Graphics;

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

-----------------------------------------------------(World.java)---------

import java.awt.Graphics;

public class Tetris implements World {
  public void update() { }
  public boolean hasEnded() { return false; }
  public void draw(Graphics g) { } 
  public static void main(String[] args) {
    
  }
}

-----------------------------------------------------(Tetris.java)--------

3.1 Now I also need to add the BigBang into this picture: 

import java.awt.Graphics;

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

-----------------------------------------------------(World.java)---------

This is completely unchanged. Next we have: 

import javax.swing.Timer; 

public class BigBang {
  Timer t; 
  public BigBang(Tetris world) {
    this.t = new Timer(1000, world); 
    
    t.start(); 
  }
}

-----------------------------------------------------(BigBang.java)-------

This is new, we didn't have this last time. Finally: 

import java.awt.Graphics;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent; 

public class Tetris implements World, ActionListener {
  int count = 0;
  public void update() { }
  public boolean hasEnded() { return false; }
  public void draw(Graphics g) { } 
  public static void main(String[] args) {
    BigBang b = new BigBang(new Tetris()); 
    
    System.out.println( b ); 
  }
  public void actionPerformed(ActionEvent e) {
    this.count += 1; 
    System.out.println("Boy, how time passes...!? " + this.count);  
  }
}

-------------------------------------------------------(World.java)-------

This too is updated and you can see how. 

Next step is: we need a JFrame or something plus the ability to detect key events. 

See you tomorrow. 

...