**Tetris resources** The basic falling item, with a Key Listener: import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.Timer; public class Tetris extends JPanel implements KeyListener, ActionListener { public static int WIDTH=800; public static int HEIGHT=600; private Font titleFont, regularFont; private int x,y; private Timer timer1, timer2; public Tetris() { //initialize variables here... titleFont = new Font("Roman", Font.BOLD, 18); regularFont = new Font("Helvetica", Font.PLAIN, 12); y=0; x=200; timer1 = new Timer(50, this); //1000=1 seconds timer2 = new Timer(2000, this); //1000=1 seconds timer1.start(); } public static void main(String[] args) { Tetris app= new Tetris(); JFrame window = new JFrame("Timer Example"); window.setSize(WIDTH, HEIGHT); window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); window.getContentPane().add(app); window.addKeyListener(app); //window.pack(); window.setVisible(true); } public void paintComponent(Graphics g){ super.paintComponent(g); g.setColor(Color.WHITE); g.fillRect(0, 0, getWidth(),getHeight()); g.setColor(Color.BLUE); g.setFont(titleFont); g.drawString("Tetris Example", 20, 20); g.setColor(Color.BLACK); g.setFont(regularFont); g.drawString("y = "+y, 20, 40); g.fillRect(x, y, 10, 10); } // These 3 methods need to be declares to implement the KeyListener Interface @Override public void keyTyped(KeyEvent e) {} @Override public void keyPressed(KeyEvent e) { int code=e.getKeyCode(); if (code ==39) // right x=(x+1)%HEIGHT; else if (code == 37 && x>0) //left x--; repaint(); } @Override public void keyReleased(KeyEvent e) {} @Override public void actionPerformed(ActionEvent e) { if (e.getSource()==timer1){ y=(y+1)%WIDTH; } repaint(); } } You may wish to make a Shape class which has an ArrayList which will have a draw method, an. import java.awt.Color; import java.awt.Graphics; import java.awt.Rectangle; import java.util.ArrayList; public class Shape { private int x,y, size; private ArrayList boxes; private Color color; Shape(int x, int y, int[] xPoints, int[] yPoints) { this.x=x; this.y=y; int n = xPoints.length; color = Color.RED; boxes = new ArrayList(); } public void draw(Graphics g) { for (Rectangle r:boxes) { g.setColor(color); g.fillRect(r.x, r.y, r.width, r.height); g.setColor(Color.BLACK); g.drawRect(r.x, r.y, r.width, r.height); } } }