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, height, width, max;
private Color color;
private Font font;
public Letter(int height, int width){
//A=65 a=97
letter = (char)rand(65,97+25);
this.height = height;
this.width = width;
this.max = 50;
this.x = rand(10, width - max);
this.y = rand(10, height - 100);//margin at top for messages
drop = rand(1,3);
color = new Color(rand(0,255),rand(0,255),rand(0,255) );
font = new Font("Helvtica", Font.BOLD, rand(max/2, max));
}
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 < height;
}
public char getChar() {
return letter;
}
}
LetterTest.java
import javax.swing.*;
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 JPanel implements ActionListener
{
private ArrayList<Letter> list;
private Timer fallTimer, spawnTimer;
private static final int WIDTH = 800, HEIGHT = 600;
private Font f=new Font("Helvetica", Font.BOLD|Font.ITALIC,20);
public LetterTest(){
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(HEIGHT, WIDTH));
}
fallTimer.start();
spawnTimer.start();
}
public void paintComponent(Graphics g){
g.setColor(Color.WHITE);
g.fillRect(0, 0, WIDTH, HEIGHT);
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 static void main(String[] args) {
LetterTest app= new LetterTest();
JFrame window = new JFrame("My Generic Application");
window.setSize(WIDTH, HEIGHT);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.getContentPane().add(app);
window.setVisible(true);
}
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(HEIGHT, WIDTH));
}
}
}
