// Tetsris3D.java, V1.0 // Sunday, Oct. 29, 2000, by Yamin Li, yamin@ieee.org // Free to use, modify, and distribute. import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Tetris3D extends Panel implements KeyListener, Runnable { private Play3D play; private List message; private String overMsg = "Game over. Press 'S' to start again"; private String startMsg = "Click here to receive keyboard action"; private Thread mytetris = null; private boolean selectMsg = true; public static void main(String[] args) { Frame f = new Frame(); f.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { System.exit(0); }; }); Tetris3D t3d = new Tetris3D(); t3d.setSize(551, 507); // size f.add(t3d); f.pack(); t3d.init(); // init f.setSize(561, 537); f.setVisible(true); f.addKeyListener(t3d); // addKeyListener t3d.start(); // start t3d.run(); // run } public void init(){ play = new Play3D(); message = new List(1); message.setBackground(Color.lightGray); message.setForeground(Color.blue); message.setFont(new Font("Sansserif", Font.BOLD, 14)); message.add(startMsg); message.addKeyListener(this); setLayout(new BorderLayout()); add(play, BorderLayout.NORTH); add(message, BorderLayout.SOUTH); play.init(); message.select(0); message.requestFocus(); } public void paint(Graphics g){ //message.requestFocus(); } public void start(){ mytetris = new Thread(this); mytetris.start(); } public void stop(){ mytetris = null; } public void run(){ Thread me = Thread.currentThread(); while(mytetris == me){ try { Thread.currentThread().sleep(play.getSleepTime()); } catch(InterruptedException e){ //System.err.println(e.toString()); } if (play.getOver()){ message.replaceItem(overMsg, 0); if (selectMsg) message.deselect(0); else message.select(0); selectMsg = !selectMsg; } else { play.game(82); // R } } } public void keyPressed(KeyEvent e){ int c = e.getKeyCode(); if (c == 83){ // S message.replaceItem(startMsg, 0); } play.game(c); } public void keyReleased(KeyEvent e){} public void keyTyped(KeyEvent e){} }