Метод | Опис методу |
public PlaySound(String s) | Конструктор класу PlaySound |
protected void play(String file) | Програвання музики |
public class Figure – клас фігури
Поле | Опис поля |
final static byte[][][] PATTERN | Шаблони фігур |
final static Color[] COLORS | Шаблони кольорів фігур |
private int type | Тип фігури |
private int[][] pat | Шаблон фігури |
private int x | Координата х |
private int y | Координата у |
private int rotation | Вугол |
private static int nextType | Наступний тип фігури |
private static int nextRot | Наступний вугол |
Метод | Опис методу |
public Figure() | Конструктор класу Figure |
public int getX() | Одержати х |
public int getY() | Одержати у |
public int getHeight() | Одержати висоту |
public int getWidth() | Одержати ширина |
public int getCell(int i, int j) | Одержати вміст фігури |
public void draw(Graphics g) | Малювати фігуру |
public void drawNext(Graphics g, int px, int py) | Малювати наступну фігуру |
public void rotate() | Повернути фігуру |
public boolean canDown | Чи можна рухати фігуру вниз? |
public void moveDown() | Рухати фігуру вниз |
public boolean canLeft(Glass stakan) | Чи можна рухати фігуру вліво? |
public boolean canRight(Glass stakan) | Чи можна рухати фігуру управо? |
public boolean canRotate(Glass stakan) | Чи можна повертати фігуру? |
public void moveLeft() | Рухати фігуру вліво |
public void moveRight() | Рухати фігуру управо |
public class Glass – клас стакан
Поле | Опис поля |
private int[] x | Координата х стакана |
private int[] y | Координата у стакана |
private int[][] cells | Вміст стакана |
Метод | Опис методу |
public Glass() | Конструктор класу Glass |
public void clearGlass() | Очищення стакана |
public int getHeight() | Одержати висоту стакана |
public int getWidth() | Одержати ширину стакана |
public int getCell(int i, int j) | Одержати вміст стакана |
public void draw(Graphics g) | Малювання стакана |
public void drawCell(Graphics g, int i, int j) | Малювання осередку стакана |
public int acceptFigure(Figure f) | Прийняття стаканом фігури, що впала |
private int clearFullLines() | Очищення повністю заповнених ліній |
public class ButtonPanel – панель кнопок
Метод | Опис методу |
public ButtonPanel(TetrisFrame frame) | Конструктор класу ButtonPanel |
private void jButton1ActionPerformed (java.awt.event.ActionEvent evt) | Обробка натискання кнопки «Resume» |
private void jButton2ActionPerformed (java.awt.event.ActionEvent evt) | Обробка натискання кнопки «Pause» |
public class TetrisGamePanel – ігрова панель
Поле | Опис поля |
private Glass stakan | Стакан тетріса |
private Figure fig | Поточна фігура |
private int score | Рахунок гри |
private int gameState | Стан гри |
private int[] DELAY | Паузи для падіння фігури по рівнях |
private int level | Рівень гри |
Метод | Опис методу |
public TetrisGamePanel() | Конструктор класу TetrisGamePanel |
public void paintComponent(Graphics g) | Малювання стакана, фігури, рахунка і рівня гри |
public int getScore() | Поточний рахунок гри |
public void startNewGame() | Почати нову гру |
public void pauseGame() | Призупинення гри |
public void resumeGame() | Продовження гри після паузи |
public void stopGame() | Зупинити гру |
public int getState() | Отримати стан гри |
public void figureMoveRight() | Рухати фігуру вправо |
public void figureMoveLeft() | Рухати фігуру вліво |
public void figureMoveDown() | Рухати фігуру вниз |
public void figureRotate() | Обертати фігуру |
public void gamePauseResume() | Змінити стан гри PAUSE на PLAY і навпаки |
public void actionPerformed(ActionEvent e) | Обробка дій, подій таймера |
Додаток Б Опис інтерфейса програми
Запустивши гру фігури починають спускатися. Для управління фігурою треба користуватись клавішами навігації. Для того, щоб призупинити гру треба натиснути кнопку «Pause» або клавішу F3. Для продовження гри треба натиснути кнопку «Resume» або клавішу F3. Для початку нової гри треба вибрати пункт меню «Start New Game» або натиснути клавішу F2, а для того, щоб зупинити гру зовсім – вибрати пункт меню «Stop Game». Для виходу з гри треба вибрати пункт меню «Exit» або просто закрити програму.
Додаток В Інструкція з встановлення
1.На комп’ютері повинна бути встановлена JRE 6.3(віртуальна машина Java)
2.Монітор повинен підтримувати режим 1024х768х24bit
3.45kb на жорсткому диску
4.Щоб виконати проект з командного рядка, перейдіть до каталогу, де знаходиться файл і наберіть наступне: Java -jar "TetrisGame.jar", або запустіть програму подвійним клацанням миші.
Додаток Г Лістинг програми
Файл GamePanel.java
package Tetr;
import java.awt.event.*;
/**
*
* @author irdis_13
*/
interface GamePanel extends ActionListener{
final static int PLAY = 1;
final static int STOP = 2;
final static int PAUSE =3;
public void startNewGame();
public void pauseGame();
public void resumeGame();
public void stopGame();
public int getScore();
public int getState();
public void figureMoveRight();
public void figureMoveLeft();
public void figureMoveDown();
public void figureRotate();
public void gamePauseResume();
}
Файл Tetris.java
package Tetr;
/**
*
* @author irdis_13
*/
public class Tetris {
public static void main(String[] args) throws InterruptedException {
TetrisFrame.setDefaultLookAndFeelDecorated(true);
TetrisFrame frame = new TetrisFrame();
frame.setVisible(true);
String s = "D:\FirstProb2\src\Tetr\tetris.mid";
if (args.length>0)
s = args[0];
new PlaySound(s);
}
}
Файл ButtonPanel.java
package Tetr;
/**
*
* @author irdis_13
*/
public class ButtonPanel extends javax.swing.JPanel {
private TetrisFrame frame;
public ButtonPanel(TetrisFrame frame) {
this.frame = frame;
initComponents();
}
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
setFocusable(false);
jButton1.setText("Resume");
jButton1.setFocusable(false);
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
add(jButton1);
jButton2.setText("Pause");
jButton2.setFocusable(false);
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
add(jButton2);
}// </editor-fold>//GEN-END:initComponents
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
frame.continueButtonPressed(evt);
}//GEN-LAST:event_jButton1ActionPerformed
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
frame.pauseButtonPressed(evt);
}//GEN-LAST:event_jButton2ActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
// End of variables declaration//GEN-END:variables
}
Файл Figure.java
package Tetr;
import java.util.Random;
import java.awt.*;
/**
*
* @author irdis_13
*/
public class Figure {
final static byte[][][] PATTERN = {
{{0,0,0,0}, // "пустой" шаблон - просто для удобства
{0,0,0,0},
{0,0,0,0},
{0,0,0,0}
},
{
{1}, //
{1},
{1},
{1}
},
{{2,0},
{2,0},
{2,2}
},
{{0,3},
{0,3},
{3,3}
},
{{4,0},
{4,4},
{4,0}
},
{{5,0},
{5,5},
{0,5}
},
{{0,6},
{6,6},
{6,0}
},
{{7,7},
{7,7}
}
};
final static Color[] COLORS = {
Color.GRAY,
Color.BLUE,
Color.CYAN,
Color.GREEN,
Color.MAGENTA,
Color.RED,
Color.PINK,
Color.YELLOW
};
private int type;
private int[][] pat;
private int x,y,rotation;
private static Random r = new Random();
private static int nextType = 0;
private static int nextRot = -1;
public Figure() {
if (nextType==0) {
type = r.nextInt(PATTERN.length-1)+1;
rotation = r.nextInt(4);
} else {
type = nextType;
rotation = nextRot;
}
nextType = r.nextInt(PATTERN.length-1)+1;
y = 0; x = 4;
nextRot = r.nextInt(4);
pat = new int[PATTERN[type].length]
[PATTERN[type][0].length];
for (int i=0; i<pat.length; i++)
for (int j=0; j<pat[i].length; j++) {
pat[i][j] = PATTERN[type][i][j];
}
for (int i=0; i<rotation; i++) rotate();
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public int getHeight() {
return pat.length;
}
public int getWidth() {
return pat[0].length;
}
public int getCell(int i, int j) {
if (i<0 || i>=pat.length || j<0 || j>=pat[0].length) return 0;
return pat[i][j];
}
public void draw(Graphics g) {
for (int i=0; i<pat.length; i++) {
for (int j=0; j<pat[i].length; j++)
if (pat[i][j]!=0){
g.setColor(COLORS[pat[i][j]]);
g.fillRect((x+j)*30+11,(i+y)*30+1,28,28);
}
}
drawNext(g,350,50);
}
public void drawNext(Graphics g, int px, int py) {
int[][] p = new int[PATTERN[nextType].length][PATTERN[nextType][0].length];
for (int i=0; i<p.length; i++) {
for (int j=0; j<p[0].length; j++) {
p[i][j] = PATTERN[nextType][i][j];
}
}
for (int kr=0; kr<nextRot; kr++){
int[][] p2 = new int[p[0].length][p.length];
for (int i=0; i<p.length; i++) {
for (int j=0; j<p[0].length; j++) {
p2[j][i] = p[i][j];
}
}
p = new int[p2.length][p2[0].length];
for (int i=0; i<p.length; i++) for (int j=0; j<p[0].length; j++) {
p[i][j] = p2[p.length-i-1][j];
}
}
for (int i=0; i<4; i++) for (int j=0; j<4; j++) {
g.setColor(COLORS[0]);
g.fillRect(j*30+px, i*30+py, 28,28);
}
for (int i=0; i<p.length; i++) for(int j=0; j<p[0].length; j++) {
g.setColor(COLORS[p[i][j]]);
g.fillRect(j*30+px, i*30+py, 28,28);
}
}
public void rotate() {
int[][] newPat = new int[pat[0].length][pat.length];
for (int i=0; i<pat.length; i++) for (int j=0; j<pat[0].length; j++) {
newPat[j][i] = pat[i][j];
}
pat = new int[newPat.length][newPat[0].length];
for (int i=0; i<pat.length; i++) for (int j=0; j<pat[0].length; j++) {
pat[i][j] = newPat[pat.length-i-1][j];
}
}
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++) {