Рефераты. Java-гра "Тетріс"

}

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);

}

for (int i=0; i<s.length; i++) for (int j=0; j<s[0].length; j++) {

if (s[i][j]*pat[i][j]>0) {

return false;

}

}

return true;

}

public boolean canRight(Glass stakan) {

if (x==stakan.getWidth()-pat[0].length) 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);

}

for (int i=0; i<s.length; i++) for (int j=0; j<s[0].length; j++) {

if (s[i][j]*pat[i][j]>0) {

return false;

}

}

return true;

}

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];

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);

}

for (int i=0; i<s.length; i++) for (int j=0; j<s[0].length; j++) {

if (s[i][j]*tPat[i][j]>0) {

return false;

}

}

return true;

}

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++) {

for (int j = 0; j<cells[i].length; j++) {

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];

for (int j=0; j<10; j++) {

cells[0][j]=0;

}

}

return linesCount;

}

}

Файл PlaySound.java

package Tetr;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.sound.midi.*;

import java.io.*;

/**

*

* @author irdis_13

*/

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

package Tetr;

import Tetr.TetrisGamePanel;

import java.awt.event.ActionEvent;

import java.awt.event.KeyEvent;

/**

*

* @author irdis_13

*/

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



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.