Главная страница

ваав. Создание игрового приложения Тетрис на языке программирования Ja. Курсовая работа Создание игрового приложения на языке программирования Java


Скачать 1.98 Mb.
НазваниеКурсовая работа Создание игрового приложения на языке программирования Java
Дата20.03.2022
Размер1.98 Mb.
Формат файлаrtf
Имя файлаСоздание игрового приложения Тетрис на языке программирования Ja.rtf
ТипКурсовая
#405726
страница3 из 3
1   2   3


Заключение
В данной курсовой работе был разработан программный продукт - логическая игра Тетрис.

Была обоснована необходимость создания программы, проведены все необходимые работы по проектированию архитектуры игры, проанализированы требования к ней, приводится описание реализации, кодирование, тестирование программы.

При написании программы был использован объектно-ориентированный язык Java.

В результате выполнения курсовой работы была написана игра «Тетрис».

В первой части работы рассмотрены основные моменты, связанные с языком Java: история возникновения и развития, основные возможности языка, преимущества и недостатки.

Вторая часть включает в себя историю и интересные факты об игре Тетрис.

Третья часть курсовой включает в себя практическую часть, в которой был разработан исходный код для программы «Тетрис», также было выполнено тестирование данной программы.

Для разработки приложения использовалась среда интегрированной разработки Eclipse.

Список использованных источников
1. Н.А. Вязовик. Программирование на Java. Курс лекций, Интернет-университет информационных технологий, 2003 г., 592 стр.

2. Герберт Шилдт, Джеймс Холмс, Искусство программирования на Java, 2005 г., 336 стр.

3. http://ru.wikipedia.org/wiki/Тетрис

. Хабибуллин И.Ш. Самоучитель Java 2. СПб.: БХВ-Петербург, 2007. - 720 с.: Ил.

5. Эккель Б. Философия Java. Библиотека программиста. СПб.: Питер, 2001.

. Беркунський Е.Ю. Объектно-ориентированное программ-мирование на языке Java: Методические указания для студентов направления "Компьютерные науки". - М.: НУК, 2006. - 52 с.

Приложение
код программы

package Tetr;

import java.awt.event.;GamePanel extends ActionListener{static int PLAY = 1;static int STOP = 2;static int PAUSE =3;void startNewGame();void pauseGame();void resumeGame();void stopGame();int getScore();int getState();void figureMoveRight();void figureMoveLeft();void figureMoveDown();void figureRotate();void gamePauseResume();

}

Файл Tetris.javaTetr;class Tetris {static void main(String[] args) throws InterruptedException {.setDefaultLookAndFeelDecorated(true);frame = new TetrisFrame();.setVisible(true);s = "D:\\FirstProb2\\src\\Tetr\\tetris.mid";(args.length>0)= args[0];PlaySound(s);

}

}

Файл ButtonPanel.javaTetr;class ButtonPanel extends javax.swing.JPanel {TetrisFrame frame;ButtonPanel(TetrisFrame frame) {.frame = frame;();

}

// //GEN-BEGIN:initComponentsvoid initComponents() {= new javax.swing.JButton();= new javax.swing.JButton();(false);.setText("Resume");.setFocusable(false);.addActionListener(new java.awt.event.ActionListener() {void actionPerformed(java.awt.event.ActionEvent evt) {ActionPerformed(evt);

}

});(jButton1);.setText("Pause");.setFocusable(false);.addActionListener(new java.awt.event.ActionListener() {void actionPerformed(java.awt.event.ActionEvent evt) {ActionPerformed(evt);

}

});(jButton2);

}//
//GEN-END:initComponentsvoid jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed.continueButtonPressed(evt);

}//GEN-LAST:event_jButton1ActionPerformedvoid jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed.pauseButtonPressed(evt);

}//GEN-LAST:event_jButton2ActionPerformed

// Variables declaration - do not modify//GEN-BEGIN:variablesjavax.swing.JButton jButton1;javax.swing.JButton jButton2;

// End of variables declaration//GEN-END:variables

}

Файл Figure.javaTetr;java.util.Random;java.awt.;class Figure {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,.CYAN,.GREEN,.MAGENTA,.RED,.PINK,.YELLOW

};int type;int[][] pat;int x,y,rotation;static Random r = new Random();static int nextType = 0;static int nextRot = -1;Figure() {(nextType==0) {= r.nextInt(PATTERN.length-1)+1;= r.nextInt(4);

} else {= nextType;= nextRot;

}= r.nextInt(PATTERN.length-1)+1;= 0; x = 4;= r.nextInt(4);= new int[PATTERN[type].length]

[PATTERN[type][0].length];(int i=0; i


}(int i=0; i
}int getX() {x;

}int getY() {y;

}int getHeight() {pat.length;

}int getWidth() {pat[0].length;

}int getCell(int i, int j) {(i<0 || i>=pat.length || j<0 || j>=pat[0].length) return 0;pat[i][j];

}void draw(Graphics g) {(int i=0; i


}

}(g,350,50);

}void drawNext(Graphics g, int px, int py) {[][] p = new int[PATTERN[nextType].length][PATTERN[nextType][0].length];(int i=0; i


}

}(int kr=0; kr

}

}= new int[p2.length][p2[0].length];(int i=0; i


}

}(int i=0; i<4; i++) for (int j=0; j<4; j++) {.setColor(COLORS[0]);.fillRect(j*30+px, i*30+py, 28,28);

}(int i=0; i


}

}void rotate() {[][] newPat = new int[pat[0].length][pat.length];(int i=0; i


}= new int[newPat.length][newPat[0].length];(int i=0; i


}

}boolean canDown(Glass stakan) {[][] a = new int[21][10];(int i = 0; i
}

}(int i=0; i
0 && a[yy][xx]>0) {false;

}

}

}true;

}void moveDown() {++;

}boolean canLeft(Glass stakan) {(x==0) return false;[][] s = new int[pat.length][pat[0].length];(int i=0; i
}(int i=0; i0) {false;

}

}true;

}boolean canRight(Glass stakan) {(x==stakan.getWidth()-pat[0].length) return false;[][] s = new int[pat.length][pat[0].length];(int i=0; i
}(int i=0; i0) {false;

}

}true;

}boolean canRotate(Glass stakan) {(x+pat.length>stakan.getWidth()) return false;[][] tmpPat = new int[pat[0].length][pat.length];(int i=0; i


}[][] tPat = new int[tmpPat.length][tmpPat[0].length];(int i=0; i
}[][] s = new int[tPat.length][tPat[0].length];(int i=0; i
}(int i=0; i0) {false;

}

}true;

}void moveLeft() {(x>0) {-;

}

}void moveRight() {(x<10-pat[0].length) {++;

}

}

}

Файл Glass.javaTetr;java.awt.;class Glass {int[] x = {0, 10, 10, 310, 310, 320, 320, 0};int[] y = {0, 0, 600, 600, 0, 0, 610, 610};int[][] cells = new int[21][10];Glass() {();

}void clearGlass() {(int i = 0; i
}

}

}int getHeight() {cells.length;

}int getWidth() {cells[0].length;

}int getCell(int i, int j) {cells[i][j];

}void draw(Graphics g) {.setColor(Color.GRAY);.fillRect(10,0,300,600);.setColor(Color.BLUE);.fillPolygon(x,y,x.length);(int i = 0; i
}

}

}void drawCell(Graphics g, int i, int j) {.setColor(Figure.COLORS[cells[i][j]]);.fillRect(j*30+11,i*30+1,28,28);

}int acceptFigure(Figure f){(int i=0; i
if (f.getCell(i,j)!=0) { // клетка не пуста

cells[yy][xx] = f.getCell(i,j);

} }

}lines = clearFullLines();(lines>0) return lines;(f.getY()==0) return -1;0;

}int clearFullLines() {linesCount = 0;: for (int i=1; i<20; i++){(int j=0; j<10; j++) {(cells[i][j]==0) {lineLoop;

}

}++;(int j=i; j>=1; j--) {[j]=cells[j-1];

}[0] = new int[10];(int j=0; j<10; j++) {[0][j]=0;

}

}linesCount;

}

}

Файл PlaySound.javaTetr;java.awt.event.ActionEvent;java.awt.event.ActionListener;javax.sound.midi.;java.io.;class PlaySound implements ActionListener{PlaySound(String s){(s);

}void play(String file) {{f = new File(file);sequencer = MidiSystem.getSequencer();(sequencer == null) {.err.println("Sequenser not supported");

}.open();seq = MidiSystem.getSequence(f);.setSequence(seq);.start();.setLoopCount(1000);

}catch(Exception e){.err.println(e);

}

}void actionPerformed(ActionEvent e) {new UnsupportedOperationException("Not supported yet.");

}

}

Файл TetrisFrame.javaTetr;Tetr.TetrisGamePanel;java.awt.event.ActionEvent;java.awt.event.KeyEvent;class TetrisFrame extends javax.swing.JFrame {

/ Creates new form TetrisFrame /TetrisFrame() {();.grabFocus();

}

// //GEN-BEGIN:initComponentsvoid initComponents() {= buttonPanel1 = new ButtonPanel(this);= new javax.swing.JMenuBar();= new javax.swing.JMenu();= new javax.swing.JMenuItem();= new javax.swing.JMenuItem();= new javax.swing.JSeparator();= new javax.swing.JMenuItem();= new Tetr.TetrisGamePanel();= new javax.swing.JMenuBar();= new javax.swing.JMenu();= new javax.swing.JMenuItem();= new javax.swing.JMenuItem();= new javax.swing.JSeparator();= new javax.swing.JMenuItem();(javax.swing.WindowConstants.EXIT_ON_CLOSE);(false);.setText("File");.setText("Item");.add(menuNewGame);.setText("Item");.add(menuPauseGame);.add(jSeparator1);.setText("Item");.add(menuFileExit);.add(jMenu1);.addKeyListener(new java.awt.event.KeyAdapter() {void keyPressed(java.awt.event.KeyEvent evt) {KeyPressed(evt);

}

});.setFocusable(false);.setText("File");.setFocusable(false);.setText("Start New Game");.addActionListener(new java.awt.event.ActionListener() {void actionPerformed(java.awt.event.ActionEvent evt) {ActionPerformed(evt);

}

});.add(menuNewGame1);.setText("Stop Game");.addActionListener(new java.awt.event.ActionListener() {void actionPerformed(java.awt.event.ActionEvent evt) {ActionPerformed(evt);

}

});.add(menuPauseGame1);.add(jSeparator2);.setText("Exit");.addActionListener(new java.awt.event.ActionListener() {void actionPerformed(java.awt.event.ActionEvent evt) {ActionPerformed(evt);

}

});.add(menuFileExit1);.add(jMenu2);(menuBar1);.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());().setLayout(layout);.setHorizontalGroup(.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGap(153, 153, 153)

.addComponent(buttonPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))

.addGroup(layout.createSequentialGroup()

.addContainerGap()

.addComponent(tetrisGamePanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 485, javax.swing.GroupLayout.PREFERRED_SIZE)))

.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))

);.setVerticalGroup(.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addContainerGap()

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

.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))

);();

}//
//GEN-END:initComponentsvoid tetrisGamePanel1KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tetrisGamePanel1KeyPressedp = (TetrisGamePanel)tetrisGamePanel1;(evt.getKeyCode()) {KeyEvent.VK_LEFT:.figureMoveLeft();;KeyEvent.VK_RIGHT:.figureMoveRight();;KeyEvent.VK_UP:.figureRotate();;KeyEvent.VK_DOWN:.figureMoveDown();;KeyEvent.VK_F2:.startNewGame();;KeyEvent.VK_F3:.gamePauseResume();;: return;

}();

}//GEN-LAST:event_tetrisGamePanel1KeyPressedvoid menuNewGame1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuNewGame1ActionPerformedp = (TetrisGamePanel)tetrisGamePanel1;.startNewGame();

}//GEN-LAST:event_menuNewGame1ActionPerformedvoid menuPauseGame1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuPauseGame1ActionPerformedp = (TetrisGamePanel)tetrisGamePanel1;.stopGame();

}//GEN-LAST:event_menuPauseGame1ActionPerformedvoid menuFileExit1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuFileExit1ActionPerformed.exit(0);

}//GEN-LAST:event_menuFileExit1ActionPerformedvoid continueButtonPressed(ActionEvent evt) {p = (TetrisGamePanel)tetrisGamePanel1;.resumeGame();

}void pauseButtonPressed(ActionEvent evt) {p = (TetrisGamePanel)tetrisGamePanel1;.pauseGame();

}

// Variables declaration - do not modify//GEN-BEGIN:variablesTetr.ButtonPanel buttonPanel1;javax.swing.JMenu jMenu1;javax.swing.JMenu jMenu2;javax.swing.JSeparator jSeparator1;javax.swing.JSeparator jSeparator2;javax.swing.JMenuBar menuBar;javax.swing.JMenuBar menuBar1;javax.swing.JMenuItem menuFileExit;javax.swing.JMenuItem menuFileExit1;javax.swing.JMenuItem menuNewGame;javax.swing.JMenuItem menuNewGame1;javax.swing.JMenuItem menuPauseGame;javax.swing.JMenuItem menuPauseGame1;Tetr.TetrisGamePanel tetrisGamePanel1;

}

Файл TetrisGamePanel.javaTetr;java.awt.*;java.awt.event.*;javax.swing.*;class TetrisGamePanel extends javax.swing.JPanel implements GamePanel,ActionListener {Glass stakan;Figure fig = null;int score = 0;int gameState;int[] DELAY = {500, 450, 400, 350, 300, 250, 200, 150, 100, 50};int level = 1;t = new javax.swing.Timer(DELAY[level], this);TetrisGamePanel() {= new Glass();();.start();

}

@Overridevoid paintComponent(Graphics g) {.paintComponent(g);.draw(g);.draw(g);.setFont(new Font("Times New Roman", Font.BOLD, 24));.setColor(Color.BLACK);.drawString("Счет: " + score, 350, 250);.drawString("Уровень: " + level, 350, 300);

}int getScore() {score;

}void startNewGame() {= 0;= 1;= new Figure();= new Glass();= PLAY;

}void pauseGame() {(gameState == PLAY) {= PAUSE;

}

}void resumeGame() {(gameState == PAUSE) {= PLAY;

}

}void stopGame() {= STOP;

}int getState() {gameState;

}void figureMoveRight(){(fig.canRight(stakan)& gameState==PLAY).moveRight();

}void figureMoveLeft(){(fig.canLeft(stakan)& gameState==PLAY).moveLeft();

}void figureMoveDown(){.setDelay(DELAY[level]/20);

}void figureRotate(){(fig.canRotate(stakan)& gameState==PLAY).rotate();

}void gamePauseResume(){(gameState==PLAY) {= PAUSE;

}(gameState==PAUSE) {= PLAY;

}

}void actionPerformed(ActionEvent e) {(gameState != PLAY) {;

}bonus;(fig.canDown(stakan)) {.moveDown();

} else {((bonus = stakan.acceptFigure(fig)) < 0) {();

}(bonus > 0) {(bonus) {4:+= 20;3:+= 15;2:+= 10;1:+= 5;

}newLevel = score / 100 + 1;(newLevel > level && level < 9) {++;

}

}(gameState == PLAY) {= new Figure();.setDelay(DELAY[level]);

}

}();

}

// //GEN-BEGIN:initComponentsvoid initComponents() {.swing.GroupLayout layout = new javax.swing.GroupLayout(this);.setLayout(layout);.setHorizontalGroup(.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGap(0, 400, Short.MAX_VALUE)

);.setVerticalGroup(.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGap(0, 300, Short.MAX_VALUE)

);

}//
//GEN-END:initComponents

}
1   2   3


написать администратору сайта