import java.awt.*; import java.applet.*; import java.awt.event.*; public class Tetris extends Applet implements Runnable { int ax , bx , cx ,dx ,ay, by, cy , dy, x , y; boolean on = true; Thread t; int state = 1; boolean[][] coords = new boolean[11][21]; boolean hit; int rate = 500; int shape = 0; int color = 1; int[][] colors = new int[11][21]; public void init() { setBackground(Color.black); setLayout( new BorderLayout() ); Button start = new Button("Start"); add("North", start); for (int i = 0; i < 10; i++) coords[i][20] = true; } public void start() { t = new Thread(this); if (t != null) { t.start(); } } public void paint (Graphics g) { for (int i = 1; i < 5; i++) { if (i == 1) { x = ax; y = ay; } else if (i==2) { x = bx; y = by; } else if (i==3) { x = cx; y = cy; } else if (i==4) { x = dx; y = dy; } g.setColor(Color.black); g.drawRect((20 * x),(20 * y), 20,20); switch(color) { case (1) : g.setColor(Color.red); break; case (2) : g.setColor(Color.blue); break; case (3) : g.setColor(Color.green); break; } g.fillRect((20 * x + 1),(20 * y + 1), 19,19); } for (int i = 0; i < 10; i++) { for (int j = 0; j < 20; j++) { if (coords[i][j] == true) { g.setColor(Color.black); g.drawRect((20 * i),(20 * j), 20,20); switch(colors[i][j]) { case (1) : g.setColor(Color.red); break; case (2) : g.setColor(Color.blue); break; case (3) : g.setColor(Color.green); break; } g.fillRect((20 * i + 1),(20 * j + 1), 19,19); } } } } public void run() { newpiece(); while(on == true) { repaint(); move(); check(); if (hit == true) { hit = false; rate = 400; newpiece(); checkline(); } try { t.sleep(rate); } catch (InterruptedException e ) {} } } public void move() { ay += 1; by += 1; cy += 1; dy += 1; } public void stop() { if (t != null) { t.stop(); t = null; } } public boolean keyDown(Event e , int key) { switch (key) { case Event.UP : rotate(); break; case Event.RIGHT : moveright(); break; case Event.LEFT : moveleft(); break; case Event.DOWN : rate = 20; default : break; case Event.F1 : on = true; } return true; } public void rotate() { if (shape == 1) { if (state == 1) { bx += 1; dx -= 1; ay -= 1; cy += 1; dy += 2; } else if (state == 2) { ax -= 1; cx += 1; dx += 2; by -= 1; dy += 1; } state++; if (state == 3) state = 1; } } public void check() { if ((coords[ax][ay + 1] == true) || (coords[bx][by + 1] == true) || (coords[cx][cy + 1] == true) || (coords[dx][dy+1] == true)) { coords[ax][ay] = true; colors[ax][ay] = color; coords[bx][by] = true; colors[bx][by] = color; coords[cx][cy] = true; colors[cx][cy] = color; coords[dx][dy] = true; colors[dx][dy] = color; hit = true; } } public void newpiece() { state = 1; shape++; if (shape == 4) shape = 1; switch(shape) { case ( 1) : ax = 3; ay = 3; bx = 2; by = 3; cx = 2; cy = 2; dx = 2; dy = 1; color = 1; break; case (2) : ax = 4; ay = 0; bx = 5; by = 0; cx = 4; cy = 1; dx = 5; dy = 1; color = 3; break; case (3) : ax = 3; bx = 4; cx = 5; dx = 6; ay = 0; by = 0; cy = 0; dy = 0; color = 2; break; default : break; } System.out.println(shape); } public void checkline() { for (int y = 19; y > 0; y--) { boolean line = true; for (int x = 0; x < 10; x++) { if (coords[x][y] == false) line = false; } if (line == true) eraseline(); } } public void eraseline() { for ( int x = 0; x < 10; x++) for (int y = 19; y > 0; y--) { if (coords[x][y] == false) coords[x][y + 1] = false; } } public void moveright() { if (!((ax == 9) || (bx ==9) || (cx == 9) || (dx == 9))) { ax += 1; bx += 1; cx += 1; dx += 1; } } public void moveleft() { if (!((ax == 0) || (bx ==0) || (cx == 0) || (dx == 0))) { ax--; bx--; cx--; dx--; } } }