Dropping Letters

<< Ant Hill | OtherProjectsTrailIndex | ChessRating >>

See a working version of the game here

Letter.java

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;


public class Letter {
	private char letter;
	private int x,y,drop;
	private Color color;
	private Font font;
	public Letter(){
		//A=65 a=97
		letter = (char)rand(65,97+25);
	    x = rand(10, 580);
	    y = rand(10, 300);
	    drop = rand(1,3);
	    color = new Color(rand(0,255),rand(0,255),rand(0,255) );
	    font = new Font("Helvtica", Font.BOLD, rand(12,20));
	}
	public int rand(int min, int max){
		return min+(int)((max-min+1)*Math.random());
	}
	public boolean draw(Graphics g){
		g.setColor(color);
		g.setFont(font);
		g.drawString(letter+"", x, y);
		y+=drop;//drop
		return y<400;
	}
	public char getChar() {

		return letter;
	}
}

LetterTest.java

import java.applet.Applet;
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 java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import javax.swing.Timer;


public class LetterTest extends Applet implements ActionListener
{
    private ArrayList<Letter> list;
    private Timer fallTimer, spawnTimer;

    Font f=new Font("Helvetica", Font.BOLD|Font.ITALIC,20);
	public void init(){
    	     list =  new ArrayList<Letter>();
    	     fallTimer = new Timer(30, this);
    	     spawnTimer = new Timer(45,this);
    	     for (int i = 0; i<30; i++){
    	    	      list.add(new Letter());
    	     }
    	     fallTimer.start();
    	     spawnTimer.start();

    }
	public void paint(Graphics g){
		g.setColor(Color.WHITE);
		g.fillRect(0, 0, 600, 400);
		int i=0;
		while (i<list.size()){
			Letter x=list.get(i);
			if (x.draw(g)){
				i++;//go to next letter
			}else{
				list.remove(i);
				//miss++;
			}
		}
		g.setFont(f);
		g.setColor(Color.BLACK);
		g.drawString(list.size()+" letters are falling ", 20 , 20);	
	}
	public void update(Graphics g)
    {
        paint(g); //get rid of flicker with this method
    }

	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource()==fallTimer){

			repaint();
		} else {//must have been the spawnTimer generating the event
			list.add(new Letter());
		}

	}

}