jMenu2.setFocusable(false);
menuNewGame1.setText("Start New Game");
menuNewGame1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
menuNewGame1ActionPerformed(evt);
}
});
jMenu2.add(menuNewGame1);
menuPauseGame1.setText("Stop Game");
menuPauseGame1.addActionListener(new java.awt.event.ActionListener() {
menuPauseGame1ActionPerformed(evt);
jMenu2.add(menuPauseGame1);
jMenu2.add(jSeparator2);
menuFileExit1.setText("Exit");
menuFileExit1.addActionListener(new java.awt.event.ActionListener() {
menuFileExit1ActionPerformed(evt);
jMenu2.add(menuFileExit1);
menuBar1.add(jMenu2);
setJMenuBar(menuBar1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(153, 153, 153)
.addComponent(buttonPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap()
.addComponent(tetrisGamePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 485, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
.addComponent(buttonPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(tetrisGamePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 612, javax.swing.GroupLayout.PREFERRED_SIZE)
pack();
}// </editor-fold>//GEN-END:initComponents
private void tetrisGamePanel1KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tetrisGamePanel1KeyPressed
TetrisGamePanel p = (TetrisGamePanel)tetrisGamePanel1;
switch (evt.getKeyCode()) {
case KeyEvent.VK_LEFT:
p.figureMoveLeft();
break;
case KeyEvent.VK_RIGHT:
p.figureMoveRight();
case KeyEvent.VK_UP:
p.figureRotate();
case KeyEvent.VK_DOWN:
p.figureMoveDown();
case KeyEvent.VK_F2:
p.startNewGame();
case KeyEvent.VK_F3:
p.gamePauseResume();
default: return;
repaint();
}//GEN-LAST:event_tetrisGamePanel1KeyPressed
private void menuNewGame1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuNewGame1ActionPerformed
}//GEN-LAST:event_menuNewGame1ActionPerformed
private void menuPauseGame1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuPauseGame1ActionPerformed
p.stopGame();
}//GEN-LAST:event_menuPauseGame1ActionPerformed
private void menuFileExit1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuFileExit1ActionPerformed
System.exit(0);
}//GEN-LAST:event_menuFileExit1ActionPerformed
/**
* @param args the command line arguments
*/
public void continueButtonPressed(ActionEvent evt) {
p.resumeGame();
public void pauseButtonPressed(ActionEvent evt) {
p.pauseGame();
// Variables declaration - do not modify//GEN-BEGIN:variables
private Tetr.ButtonPanel buttonPanel1;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenu jMenu2;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JSeparator jSeparator2;
private javax.swing.JMenuBar menuBar;
private javax.swing.JMenuBar menuBar1;
private javax.swing.JMenuItem menuFileExit;
private javax.swing.JMenuItem menuFileExit1;
private javax.swing.JMenuItem menuNewGame;
private javax.swing.JMenuItem menuNewGame1;
private javax.swing.JMenuItem menuPauseGame;
private javax.swing.JMenuItem menuPauseGame1;
private Tetr.TetrisGamePanel tetrisGamePanel1;
Файл TetrisGamePanel.java
package Tetr;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
*
* @author irdis_13
public class TetrisGamePanel extends javax.swing.JPanel implements GamePanel,ActionListener {
private Glass stakan;
private Figure fig = null;
private int score = 0;
private int gameState;
private int[] DELAY = {500, 450, 400, 350, 300, 250, 200, 150, 100, 50};
private int level = 1;
Timer t = new javax.swing.Timer(DELAY[level], this);
public TetrisGamePanel() {
stakan = new Glass();
startNewGame();
t.start();
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
stakan.draw(g);
fig.draw(g);
g.setFont(new Font("Times New Roman", Font.BOLD, 24));
g.setColor(Color.BLACK);
g.drawString("Счет: " + score, 350, 250);
g.drawString("Уровень: " + level, 350, 300);
public int getScore() {
return score;
public void startNewGame() {
score = 0;
level = 1;
fig = new Figure();
gameState = PLAY;
public void pauseGame() {
if (gameState == PLAY) {
gameState = PAUSE;
public void resumeGame() {
if (gameState == PAUSE) {
public void stopGame() {
gameState = STOP;
public int getState() {
return gameState;
public void figureMoveRight(){
if (fig.canRight(stakan)& gameState==PLAY)
fig.moveRight();
public void figureMoveLeft(){
if (fig.canLeft(stakan)& gameState==PLAY)
fig.moveLeft();
public void figureMoveDown(){
t.setDelay(DELAY[level]/20);
public void figureRotate(){
if (fig.canRotate(stakan)& gameState==PLAY)
fig.rotate();
public void gamePauseResume(){
if (gameState==PLAY) {
else
if (gameState==PAUSE) {
public void actionPerformed(ActionEvent e) {
if (gameState != PLAY) {
return;
int bonus;
if (fig.canDown(stakan)) {
fig.moveDown();
} else {
if ((bonus = stakan.acceptFigure(fig)) < 0) {
stopGame();
if (bonus > 0) {
switch (bonus) {
case 4:
score += 20;
case 3:
score += 15;
case 2:
score += 10;
case 1:
score += 5;
int newLevel = score / 100 + 1;
if (newLevel > level && level < 9) {
level++;
t.setDelay(DELAY[level]);
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
.addGap(0, 400, Short.MAX_VALUE)
.addGap(0, 300, Short.MAX_VALUE)
Додаток Д Результат роботи програми
Результат роботи програми зображено на рисунку 5
Рисунок 5 - Результат роботи програми
Страницы: 1, 2, 3, 4, 5