Kevin S Jerry Shen Brandon Perkins Andrew Ray Haoyang Hu Zhiwei L Chenrui H
Siddartha C Rerajitha M Alex Q Andrew T Xing W Joe B Arthi P Max Yinan Keqin 
Rajeev Vanessa Arif He He Christian Superman Hutslar Levi R Jiebo Alex S

Jared P Seth E Matt Xinyu Z Sunghyun Kayl Jiahao 

1. Design the World in most general terms

import java.awt.Graphics; 

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

Laziness: The quality that makes you go to great effort to reduce 
          overall energy expenditure. 

Impatience: The anger you feel when the computer is being lazy. 

Hubris: The quality that makes you write (and maintain) programs 
        that other people won't want to say bad things about.

2. Implement the World in more specific terms 

import java.awt.Graphics;

public class Tetris implements World {
  int count = 0; 
  public void update() {
    this.count += 1; 
    System.out.println("I am getting older... " + count); 
  }
  public boolean hasEnded() {
    return false;   
  }
  public void draw(Graphics g) {
    g.drawString("asldfkvg sgje", 50, 50); 
  }
  public void keyPressed(String what) {
    
  }
  public static void main(String[] args) {
     BigBang a = new BigBang(new Tetris()); 
     a.start(); 
  }
}

3. Finish your proposal with a BigBang 

import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import javax.swing.Timer; 

public class BigBang implements ActionListener {
  Timer timer; 
  World world; 
  public BigBang(World world) {
    this.world = world;
    this.timer = new Timer(1000, this); 
  }
  public void start() {
    this.timer.start();  
  }
  public void actionPerformed(ActionEvent e) {
    this.world.update();  
  }
}

Now run it. 

After more thinking and planning we end up with: 

import java.awt.Graphics; 

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

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

import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import javax.swing.Timer; 
import javax.swing.JComponent; 
import java.awt.Graphics;
import java.awt.event.KeyListener; 
import java.awt.event.KeyEvent; 

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

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

import java.awt.Graphics;
import javax.swing.JFrame; 

public class Tetris implements World {
  int count = 0; 
  public void update() {
    this.count += 1; 
    System.out.println("I am getting older... " + count); 
  }
  public boolean hasEnded() {
    return false;   
  }
  public void draw(Graphics g) {
    g.drawString("Welcome to Tetris!", 50, 50); 
    g.drawString("Count is: " + this.count, 50, 100); 
  }
  public void keyPressed(String what) {
    this.count -= 10; 
  }
  public static void main(String[] args) {
    JFrame jay = new JFrame();
    jay.setVisible(true);
    jay.setSize(200, 500); 

    BigBang a = new BigBang(new Tetris()); 
    a.start(); 

    jay.addKeyListener(a);

    (jay.getContentPane()).add(a);
  
  }
}

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

This, for me, is Stage One. 

--