}
public boolean canDown(Glass stakan) {
int[][] a = new int[21][10];
for (int i = 0; i<stakan.getHeight(); i++) {
for (int j = 0; j<stakan.getWidth(); j++) {
a[i][j] = stakan.getCell(i,j);
for (int i=0; i<pat.length; i++) {
for (int j=0; j<pat[i].length; j++) {
int xx = x+j, yy = y+i+1;
if (pat[i][j]>0 && a[yy][xx]>0) {
return false;
return true;
public void moveDown() {
y++;
public boolean canLeft(Glass stakan) {
if (x==0) return false;
int [][] s = new int[pat.length][pat[0].length];
for (int i=0; i<s.length; i++) for (int j=0; j<s[0].length; j++) {
s[i][j] = stakan.getCell(y+i,j+x-1);
if (s[i][j]*pat[i][j]>0) {
public boolean canRight(Glass stakan) {
if (x==stakan.getWidth()-pat[0].length) return false;
s[i][j] = stakan.getCell(y+i,j+x+1);
public boolean canRotate(Glass stakan) {
if (x+pat.length>stakan.getWidth()) return false;
int[][] tmpPat = new int[pat[0].length][pat.length];
for (int i=0; i<pat.length; i++) for (int j=0; j<pat[0].length; j++) {
tmpPat[j][i] = pat[i][j];
int[][] tPat = new int[tmpPat.length][tmpPat[0].length];
for (int i=0; i<tPat.length; i++) for (int j=0; j<tPat[0].length; j++) {
tPat[i][j] = tmpPat[tPat.length-i-1][j];
int [][] s = new int[tPat.length][tPat[0].length];
s[i][j] = stakan.getCell(y+i,j+x);
if (s[i][j]*tPat[i][j]>0) {
public void moveLeft() {
if (x>0) {
x--;
public void moveRight() {
if (x<10-pat[0].length) {
x++;
Файл Glass.java
package Tetr;
import java.awt.*;
/**
*
* @author irdis_13
*/
public class Glass {
private int[] x = {0, 10, 10, 310, 310, 320, 320, 0};
private int[] y = {0, 0, 600, 600, 0, 0, 610, 610};
private int[][] cells = new int[21][10];
public Glass() {
clearGlass();
public void clearGlass() {
for (int i = 0; i<cells.length; i++) {
for (int j = 0; j<cells[i].length; j++) {
cells[i][j] = (i==cells.length-1) ? 10 : 0;
public int getHeight() {
return cells.length;
public int getWidth() {
return cells[0].length;
public int getCell(int i, int j) {
return cells[i][j];
public void draw(Graphics g) {
g.setColor(Color.GRAY);
g.fillRect(10,0,300,600);
g.setColor(Color.BLUE);
g.fillPolygon(x,y,x.length);
for (int i = 0; i<cells.length-1; i++) {
drawCell(g,i,j);
public void drawCell(Graphics g, int i, int j) {
g.setColor(Figure.COLORS[cells[i][j]]);
g.fillRect(j*30+11,i*30+1,28,28);
public int acceptFigure(Figure f){
for (int i=0; i<f.getHeight(); i++) {
for (int j=0; j<f.getWidth(); j++) {
int xx = f.getX()+j, yy = f.getY()+i;
if (f.getCell(i,j)!=0) { // клетка не пуста
cells[yy][xx] = f.getCell(i,j);
} }
int lines = clearFullLines();
if (lines>0) return lines;
if (f.getY()==0) return -1;
return 0;
private int clearFullLines() {
int linesCount = 0;
lineLoop: for (int i=1; i<20; i++){
for (int j=0; j<10; j++) {
if (cells[i][j]==0) {
continue lineLoop;
linesCount++;
for (int j=i; j>=1; j--) {
cells[j]=cells[j-1];
cells[0] = new int[10];
cells[0][j]=0;
return linesCount;
Файл PlaySound.java
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.sound.midi.*;
import java.io.*;
public class PlaySound implements ActionListener{
public PlaySound(String s){
play(s);
protected void play(String file) {
try{
File f = new File(file);
Sequencer sequencer = MidiSystem.getSequencer();
if (sequencer == null) {
System.err.println("Sequenser not supported");
sequencer.open();
Sequence seq = MidiSystem.getSequence(f);
sequencer.setSequence(seq);
sequencer.start();
sequencer.setLoopCount(1000);
}catch(Exception e){
System.err.println(e);
public void actionPerformed(ActionEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
Файл TetrisFrame.java
import Tetr.TetrisGamePanel;
import java.awt.event.KeyEvent;
public class TetrisFrame extends javax.swing.JFrame {
/** Creates new form TetrisFrame */
public TetrisFrame() {
initComponents();
tetrisGamePanel1.grabFocus();
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
buttonPanel1 = buttonPanel1 = new ButtonPanel(this);
menuBar = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
menuNewGame = new javax.swing.JMenuItem();
menuPauseGame = new javax.swing.JMenuItem();
jSeparator1 = new javax.swing.JSeparator();
menuFileExit = new javax.swing.JMenuItem();
tetrisGamePanel1 = new Tetr.TetrisGamePanel();
menuBar1 = new javax.swing.JMenuBar();
jMenu2 = new javax.swing.JMenu();
menuNewGame1 = new javax.swing.JMenuItem();
menuPauseGame1 = new javax.swing.JMenuItem();
jSeparator2 = new javax.swing.JSeparator();
menuFileExit1 = new javax.swing.JMenuItem();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setFocusable(false);
jMenu1.setText("File");
menuNewGame.setText("Item");
jMenu1.add(menuNewGame);
menuPauseGame.setText("Item");
jMenu1.add(menuPauseGame);
jMenu1.add(jSeparator1);
menuFileExit.setText("Item");
jMenu1.add(menuFileExit);
menuBar.add(jMenu1);
tetrisGamePanel1.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
tetrisGamePanel1KeyPressed(evt);
});
menuBar1.setFocusable(false);
jMenu2.setText("File");
Страницы: 1, 2, 3, 4, 5