Java Tetris game with source code


Java Tetris game




Java source code yX Media - Monetize your website traffic with us


package com.javatmz.javaapp.tetris;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.AbstractAction;
import javax.swing.ActionMap;
import javax.swing.InputMap;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.Timer;
public class Tetris extends JFrame {
private static final int D_W = 800;
private static final int D_H = 650;
DrawPanel drawPanel = new DrawPanel();
int unit = 10;
Point[] a = new Point[4];
Point[] b = new Point[4];
int dx = 0;
boolean rotate = false;
int colorNum = 1;
int n = 3;
int M = 40;
int N = 20;
int[][] field = new int[M][N];
int[][] figures = { { 1, 3, 5, 7, }, { 2, 4, 5, 7, }, { 3, 5, 4, 6, }, { 3, 5, 4, 7, }, { 2, 3, 5, 7, },
{ 3, 5, 7, 6, }, { 2, 3, 4, 5, }, };
public Tetris() {
add(drawPanel);
pack();
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
for (int i = 0; i < 4; i++) {
a[i] = new Point();
a[i].x = figures[n][i] % 2;
a[i].y = figures[n][i] / 2;
}
}
private class DrawPanel extends JPanel {
public DrawPanel() {
InputMap inputMap = getInputMap(WHEN_IN_FOCUSED_WINDOW);
ActionMap actionMap = getActionMap();
String VK_LEFT = "VK_LEFT";
KeyStroke W = KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0);
inputMap.put(W, VK_LEFT);
actionMap.put(VK_LEFT, new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
dx = -1;
move();
}
});
String VK_RIGHT = "VK_RIGHT";
KeyStroke WVK_RIGHT = KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0);
inputMap.put(WVK_RIGHT, VK_RIGHT);
actionMap.put(VK_RIGHT, new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
dx = 1;
move();
}
});
String VK_UP = "VK_UP";
KeyStroke WVK_UP = KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0);
inputMap.put(WVK_UP, VK_UP);
actionMap.put(VK_UP, new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
rotate = true;
rotate();
drawPanel.repaint();
}
});
String VK_DOWN = "VK_DOWN";
KeyStroke WVK_DOWN = KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0);
inputMap.put(WVK_DOWN, VK_DOWN);
actionMap.put(VK_DOWN, new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
// pos -= 200;
// drawPanel.repaint();
}
});
ActionListener listener = new AbstractAction() {
public void actionPerformed(ActionEvent e) {

for (int i = 0; i < 4; i++) {
if(a[i].y<M){
b[i] = a[i];

a[i].y += 1;
}
}
if (!check()) {
for (int i = 0; i < 4; i++) {
field[b[i].y-1][b[i].x] = colorNum;
}
Random randon = new Random();
colorNum = (randon.nextInt(70) + 1) % 7;
n = (randon.nextInt(70)) % 7;
for (int i = 0; i < 4; i++) {
a[i].x = figures[n][i] % 2;
a[i].y = figures[n][i] / 2;
}
}

drawPanel.repaint();

}
};
Timer timer = new Timer(100, listener);
timer.start();
}

void move() {
// Move
for (int i = 0; i < 4; i++) {
b[i] = a[i];
if(a[i].x<N-1){
a[i].x += dx;
}

}
if (!check()) {
for (int i = 0; i < 4; i++) {
a[i] = b[i];
}
}

dx = 0;
}

void rotate(){
// Rotate
if (rotate) {
Point p = a[1];// rotation center
for (int i = 0; i < 4; i++) {
int x = a[i].y - p.y;
int y = a[i].x - p.x;
a[i].x = p.x - x;
a[i].y = p.y - y;
}
if (!check()) {
for (int i = 0; i < 4; i++) {
a[i] = b[i];
}
}
}
rotate = false;
}
boolean check() {
for (int i = 0; i < 4; i++) {
if (a[i].x < 0 || a[i].x >= N|| a[i].y >= M)
return false;
else if (field[a[i].y][a[i].x] != 0)
return false;
}
return true;
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
drawValues(g);
drawValuesSteps(g);
}
private void drawValuesSteps(Graphics myG) {
Graphics g=(Graphics)myG;
// g.setColor(Color.green);
for (int i = 0; i < 4; i++) {
if(n==1) g.setColor(new Color(0, 255, 0) );
else if(n==2) g.setColor(new Color(0, 255, 64));
else if(n==3) g.setColor(new Color(0, 128, 255));
else if(n==4) g.setColor(new Color(0, 191, 255));
else if(n==5) g.setColor(new Color(191, 0, 255));
else if(n==6) g.setColor(new Color(255, 0, 0));
else if(n==7) g.setColor(new Color(0, 0, 255));
g.fill3DRect(a[i].x * unit, a[i].y * unit, unit, unit,true);
}

}
private void drawValues(Graphics myG) {
//g.setColor(Color.black);
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++){
Graphics gg=(Graphics)myG;
if ( field[i][j] != 0) {
if(n==1) gg.setColor(Color.green);
// else if(n==2) gg.setColor(Color.red);
// else if(n==3) gg.setColor(Color.yellow);
// else if(n==4) gg.setColor(Color.black);
// else if(n==5) gg.setColor(Color.blue);
// else if(n==6) gg.setColor(Color.gray);
// else if(n==7) gg.setColor(Color.orange);
gg.fill3DRect(j * unit, i * unit, unit, unit,true);
}
}
}
Graphics gg=(Graphics)myG;
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++){
gg.setColor(Color.blue);
//gg.drawRect(j * unit, i * unit, unit, unit);

}
}
}
public Dimension getPreferredSize() {
return new Dimension(D_W, D_H);
}
}
class Point {
int x, y;
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Tetris();
}
});
}
}

Comments