Реферат по предмету "Информатика"


Гра Змійка - опис програми

--PAGE_BREAK--1.3.Постановка задачі
Розробити проект гри, з допомогою який можна програмно реалізувати, провівши кодування на об’єктно-орієнтованій мові програмування, скласти специфікацію.

2.          Проект програми 2.1.  Ієрархія об’єктів
На основі того, що необхідно розробити гру змійка, можна виділити головний об’єкт ієрархії – «Гра Змійка». Вона складається з «ігрового поля» та «меню».

Об’єкти-пункти меню: «Гра» з вкладеними підпунктами «нова гра» — розпочинає нову гру, «пауза»  — тимчасово припиняє гру, «зупинити гру» — зупиняє поточну гру, «вихід» — дозволяє вийти з програми. Підменю  «швидкість гри» з меню «Настроювання» дозволяє змінити швидкість руху змійки.

Об’єкт «ігрове поле» складається з об’єктів «ціль», «змійка», «перепона», «межі», «поле інформації» та «повідомлення». «Ціль» це клітка на ігровому полі, у яку має влучити змійка. «Змійка» складається з «частин» і згідно описаних вище правил рухається по ігровому полі. «Перепони» — це клітки на ігровому полі, які змійка має оминати. «Межі» ігрового поля встановлюють границі, за які змійка не може вийти. Влучання змійки в перепони чи вихід за ігрове поле зменшують її кількість гравців.

«Поле інформації» інформуватиме гравця про стан гри: «Повідомлення» -  якій будуть видаватися різноманітні текстові повідомлення про події в грі та вказівки гравцю (наприклад, повідомлення про те, що гру закінчено, про перехід в наступний тур або виграш у грі). «Індикатор життів» — об’єкт, який показуватиме про кількість життів змійки. «Індикатор рівня» буде показувати номер рівня, на якому знаходиться гра. «Індикатор довжини» відображатиме довжину змійки, щоб гравець орієнтувався, скільки цілей поцілено – згідно вказаних правил для переходу на наступний рівень, потрібно поцілити в певну кількість цілей.


Рисунок 1 – ієрархія об’єктів гри Змійка

2.2.       Ієрархія наслідування


Рисунок 2 – Ієрархія класів

2.3.       Діаграма станів гри


Рисунок 3  — Діаграма станів гри

2.4.       Специфікація
Клас public class Game – головний клас проекту необхідний для запуску гри

     Метод public static void main(String[] args) – з нього починається виконання програми
Клас public class GameFrame     реалізує вікно для відображення ігрового поля та даних гри

Метод public GameFrame() – конструктор вікна гри в якому встановлюються його параметри.

     Метод public void newGame() — метод запускає новий сеанс гри

     Метод public void pauseGame() — метод створює паузу

     Метод public void stopGame() — метод зупиняє гру
Клас public class GameField – ігрове поле

   Змінні:

    Snake snake — змійк

    GameFrame frame – змінна для доступу до вікна гри

    InformPanel informPanel – інформаційна панель

    protected boolean   isGameRun = істина, якщо йде гра


    protected boolean    isGamePause – істина під час паузи


    int gameSpeed – швидкість гри

    protected int colObstacles — Кількість перепон

    protected int delay  — Затримка при русі змійки

    final int w = 35,     h = 25 – розміри ігрового поля

    protected GameSquare square[][] – ігрові клітки


    boolean keyBlocked – істина, коли заблокована клавіатура

Методи

    public GameField(GameFrame owner) — конструктор

    public void setDefault()– встановлення в початковий стан

    public void clearSquares()-відмічення всіх кліток вільними

    protected void createSnake() – створення змійки

    protected void createBorders()– Створює межі поля

    protected void createObstacles(int col) – створює col перепон на ігровому полі

    protected void createTarget() — створення мішені для змійки

    public void paintComponent(Graphics g) – малювання компонентів поля


    public void run () – обробка подій гри

    public void cheeckWin() – перевірка перемоги в грі

    public void processCrash() – перевірка влучання в перепону


    public void newGame()– Запуск нової гри

    public void pauseGame() – пауза в грі

    public void stopGame( )– зупинка гри

    public void setGameSpeed(int s) – задання швидкості гри


Клас public class InformPanel

  Змінні:   

    protected int lives, len, speed, obstacles – кількість життів, довжина змійки, швидкість змійки, кількість перепон;

  Методи

    public InformPanel(final GameField field) — Конструктор

    public void updateInfo(int lives, int len, int speed, int obstacles) Зміна поточних даних новими

    public void paintComponent(Graphics g) – малювання панелі
Клас class Snake — змійка

  Змінні:   

    int colElements – кількість елементів

    final int maxLen – максимально можлива довжина

    SnakeElement elem[] – масив частин змійки

   

    int xNextSpeed, yNextSpeed– напрям руху на наступному кроці

    final int startLives– початкова кількість життів

    private static int lives – зберігає кількість життів змійки

  Методи

    public Snake(int c, int xPos, int yPos) – створення змійки довжини с з заданими координатами

    public void increment(SnakeElement lastElem) додавання до змійки нового елемента

    public boolean isMaxLong()— перевірка досягнення змійкою максимальної довжини

    public boolean isKilled()– перевірка, чи «жива» змійка

    public void    decrementLive()– забирає життя в змійки
Клас class SnakeElement – елемент змійки

  Змінні:    

    int xSpeed– швидкість елемента змійки по горизонталі

    int ySpeed — швидкість елемента змійки по вертикалі

    int xPos — позиція елемента змійки по горизонталі

    int yPos— позиція елемента змійки по вертикалі

    public SnakeElement(int xPos, int yPos)  — конструктор задає координати елемента

    public void move() – рухає елемент

    public void setSpeed(int x, int y) – встановлення швидкості елемента
Клас class GameSquare – клітка ігрового поля

  Змінні:   

    int w, h — розміри

    boolean used — використання

    boolean isBorder — перепона

   

  Методи

    public void setSize(int w, int h) — встановлює розміри

    public void setBorder(boolean b) – робить клітинку перепоною

    public void setUsed(boolean b) – робить клітинкою зайнятою/незайнятою

    public void paintComponent(Graphics g)  — малювання клітинки

Клас public class MenuString – строка меню

  Змінні:    — пункти меню і підменю

    JMenu Game;     JMenuItem     mi_NewGame,     mi_PauseGame,

                                mi_StopGame,    mi_ExitGame;

    JMenu Options, Speed;    JMenuItem     mi_S1,     mi_S2,     mi_S3;

    JMenu Help;     JMenuItem mi_About;


    продолжение
--PAGE_BREAK--2.5.            Кодування
Кодування проведено згідно викладеного проекту на об’єктно орієнтованій мові Java.

Мова Java є об’єктно-орієнтовнованою  дозволяє реалізувати запроектовані класи, їх взаємодію та сприяє написанню надійних програм і спрощує їх реалізацію. Існує багато інших мов підтримуючих ООП технологію програмування. Це такі мови програмування, як  С++, Object Pascal, Python та ін. Мова  Java завдяки широким можливостям та бібліотекам класів має велику гнучкість і забезпечує можливість реалізації дуже великих проектів за мінімальний час,

Тому для даної роботи було обрано мову Java, як найбільш ефективну та багато платформну.


2.6.            Висновок
Враховуючи аналіз предметної області і проект програми, можливо зробити висновок, що розроблена гра „Змійка” розрахована на широке коло користувачів завдяки своїй простоті. Модель програми дозволяє легко та зручно її модернізувати: додати нові команди; зробити сприйнятливий для користувача інтерфейс.



3.              Додаток 3.1.      Тексти файлів проекту 3.1.1.Файл GameSnake.java


public class GameSnake {

   

    public static void main(String[] args) {

        GameFrame window = new GameFrame();

    }

}

3.1.2.  Файл GameFrame.java
import javax.swing.*;

import java.awt.*;

import java.awt.event.*;
public class GameFrame extends JFrame{

   

    GameField field;

    MenuString menu;

    boolean running = false;

       

    public GameFrame() {

        setDefaultLookAndFeelDecorated(true);

        setSize(400, 300);

        setTitle(«Гра Змійка»);

       

        menu  = new MenuString(this);

        field = new GameField(this);
        getContentPane().add(field);

        setJMenuBar(menu);
        addWindowListener(new WindowAdapter() {

            public void windowClosing(WindowEvent e) {

                dispose();

                System.exit(0);

            }

        });

        addKeyListener(field);

        setVisible(true);

    }

   

    public void newGame(){

        field.newGame();

    }     
    public void pauseGame(){

        field.pauseGame();

    }

   

    public void stopGame(){

        field.stopGame();

    }

}

3.1.3.  Файл GameField.java
import java.awt.*;

import javax.swing.*;

import java.util.*;

import java.awt.event.*;
public class GameField  extends JPanel

                        implements Runnable, KeyListener{

    Snake snake;

    GameFrame frame;

    SnakeElement targetElem;

    InformPanel informPanel;

    protected boolean   isGameRun;

    protected boolean    isGamePause = false;

    int gameSpeed = 2;

    protected int colObstacles = 12;//Кількість перепон

    protected int delay;//Затримка при русі змійки

    final int w = 35,     h = 25;

    protected Thread th;

    protected GameSquare square[][];

    boolean keyBlocked = false;

    boolean crash = false;

    boolean target = false;

   

    public GameField(GameFrame owner) {

        super();

        frame = owner;

        this.setLayout(null);

        Random rnd = new Random();

        square = new GameSquare[w][h];

        for(int x = 0; x

            for(int y = 0; y

                square[x][y] = new GameSquare();

                add(square[x][y]);

            }

        }

        informPanel = new InformPanel(this);

        frame.getContentPane().add(informPanel, BorderLayout.EAST);

        clearSquares();

        createSnake();

        createBorders();

        start();

    }

    public void setDefault(){

        clearSquares();

        createSnake();

        createBorders();

      

        createObstacles(colObstacles);

        createTarget();

        informPanel.updateInfo(snake.getLives(), snake.colElements,

                                gameSpeed, colObstacles);

    }

   

    public void clearSquares(){

        for(int x = 0; x

            for(int y = 0; y

                square[x][y].setBorder(false);

                square[x][y].setUsed(false);

            }

        }

    }

   

    protected void createSnake(){

        snake = new Snake(5, w/2, h-2);

        for (int i = 0; i

            square[snake.elem[i].xPos][snake.elem[i].yPos].setUsed(true);

            square[snake.elem[i].xPos][snake.elem[i].yPos].setBorder(true);

            square[snake.elem[i].xPos][snake.elem[i].yPos].n = i;

        }

    }

   

    protected void createBorders(){

        for (int i = 0; i

            square[i][0].setBorder(true);

            square[i][h-1].setBorder(true);

        }

        for (int i = 0; i

            square[0]  [i].setBorder(true);

            square[w-1][i].setBorder(true);

        }

    }

   

    protected void createObstacles(int col){//створює n ререпон на ігровому полі

        Random rnd = new Random();

        int x, y;

        for (int i = 0; i

            do{

                x = Math.abs(rnd.nextInt(w));

                y = Math.abs(rnd.nextInt(h));

            }    while (square[x][y].isBorder);

            square[x][y].setBorder(true);

        }

    }

   

    protected void createTarget(){//Мішень для змійки

        Random rnd = new Random();

        int x, y;

       

targetElem = new SnakeElement(0, 0);

        do{

            x = Math.abs(rnd.nextInt(w));

            y = Math.abs(rnd.nextInt(h));

        }    while (square[x][y].isBorder);

        targetElem.setSpeed(0, 0);

        targetElem.xPos = x;    targetElem.yPos = y;

        square[x][y].setUsed(true);

    }

   

    public void paintComponent(Graphics g){

        super.paintComponent(g);

        int squareW = (getWidth())/w;

        int squareH = (getHeight())/h;

        for(int x = 0; x

            for(int y = 0; y

                square[x][y].setSize(squareW, squareH);

                square[x][y].setLocation(x*squareW, y*squareH);

            }

        }

        g.setColor(Color.BLUE);

        g.setFont( new Font(«1», Font.BOLD, 20) );

        if ( !isGameRun ){

            g.drawString(«Розпочніть нову гру», 40, 100);

        } else {

            if (isGamePause){

                g.drawString(«ПАУЗА», 100, 100);

            }

        }

    }

   

    public void run (){

        while (true){

            if (isGameRun && !isGamePause){

                keyBlocked = true;

                int n = snake.colElements-1;

                SnakeElement lastElem = new SnakeElement(snake.elem[n].xPos, snake.elem[n].yPos);

                lastElem.setSpeed(snake.elem[n].xSpeed, snake.elem[n].ySpeed);

                square[lastElem.xPos][lastElem.yPos].setUsed(false);

                square[lastElem.xPos][lastElem.yPos].setBorder(false);

                snake.move();

                crash = square[snake.elem[0].xPos][snake.elem[0].yPos].isBorder;

                target = !crash &&

                        square[snake.elem[0].xPos][snake.elem[0].yPos].used;

                if (target){

                    snake.increment(lastElem);   

                    createTarget();

                

                cheeckWin();

                }

                keyBlocked = false;

                for (int i = 0; i

                    square[snake.elem[i].xPos][snake.elem[i].yPos].setUsed(true);

                    square[snake.elem[i].xPos][snake.elem[i].yPos].setBorder(true);

                    square[snake.elem[i].xPos][snake.elem[i].yPos].n = i;

                }

                if (crash) {    processCrash();        }

                repaint();            

                informPanel.updateInfo(snake.getLives(), snake.colElements,

                                            gameSpeed, colObstacles);           

                informPanel.repaint();

                try    {    Thread.sleep (delay);        }

                catch (    InterruptedException ex){    }

            }   

        }

    }

   

    public void cheeckWin(){

        if (snake.isMaxLong())    {

            JOptionPane.showMessageDialog(frame,

                    «Ви перемогли!\nНа швидкості „+gameSpeed, “Ігрова інформація»,

                    JOptionPane.INFORMATION_MESSAGE);

            stopGame();

            try    {    Thread.sleep (delay*2);        }

            catch (    InterruptedException ex){    }

            setDefault();

        }

    }
    public void processCrash(){

        snake.decrementLive();

        if (snake.isKilled())    {

            JOptionPane.showMessageDialog(frame,

                    «Гру завершено!»,    "Ігрова інформація",

                    JOptionPane.INFORMATION_MESSAGE);

            stopGame();

        }

        try    {    Thread.sleep (delay*2);        }

        catch (    InterruptedException ex){    }

        setDefault();       

    }

   

    public void newGame(){

        if (isGameRun) stopGame();

        setDefault();
        snake.resetLives();

        isGameRun = true;

        isGamePause = false; 

    }

   

    public void pauseGame(){

        isGamePause = !isGamePause;

        if (isGamePause){

            keyBlocked = true;

            repaint();

        }    else{

            keyBlocked = false;

        }

    }

   

    public void stopGame( ){

        isGameRun = false;

        repaint();

    }
    public void setGameSpeed(int s){

        gameSpeed = s;

           switch (gameSpeed){

            case 1:    delay = 400;    break;

            case 2:    delay = 200;    break;

            case 3:    delay = 100;    break;

        }

        informPanel.updateInfo(snake.getLives(), snake.colElements,

                                gameSpeed, colObstacles);

    }
    public void start(){

        isGameRun = false;

        setGameSpeed(2);

        th = new Thread(this);

        th.start();

    }

   

    public void stop(){}

   

    public void keyPressed (KeyEvent e){

        switch (e.getKeyCode()) { // Яку клавішу натиснули.

               case KeyEvent.VK_LEFT       :

                   if (!snake.elem[0].isMovingRight() && !keyBlocked){

                    snake.setMoveLeft();

                    keyBlocked = true;

                }

                break;
                  case KeyEvent.VK_RIGHT      :

                   if (!snake.elem[0].isMovingLeft() && !keyBlocked){

                    snake.setMoveRight();

                    keyBlocked = true;

                }

                break;

               case KeyEvent.VK_UP         :

                   if (!snake.elem[0].isMovingDown() && !keyBlocked){

                    snake.setMoveUp();

                    keyBlocked = true;

                }

                break;

               case KeyEvent.VK_DOWN       :

                   if (!snake.elem[0].isMovingUp() && !keyBlocked){

                    snake.setMoveDown();

                    keyBlocked = true;

                }

                break;

            case KeyEvent.VK_SPACE      :

                newGame();

                break;

            case KeyEvent.VK_P              :

                pauseGame();

                break;

        }

    }
    public void keyTyped(KeyEvent e){}
    public void keyReleased(KeyEvent e){}   

}



    продолжение
--PAGE_BREAK--


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат Столыпин: жизнь и реформы
Реферат Мильон терзаний
Реферат Історія світової банківської системи
Реферат Организация производства столовой при вузе на 280 посадочных мест
Реферат Поняття про витрати поточні витрати на витрати наступних періодів
Реферат Анализ производственно-хозяйственной деятельности ОАО "институт ЮЖНИИГИПРОГАЗ" ЗА 1997 ГОД
Реферат Восприятие и воссоздание текста как этапы переводческой деятельности
Реферат Неионизирующие излучения Электромагнитное загрязнение биосферы опасность оценка технические средства
Реферат Le Moyen Age
Реферат Типы памяти
Реферат Організація планування і керування хімічнім підприємством
Реферат 1 Использование полезных ископаемых и охрана недр
Реферат Иностранные инвестиции в нефтяной промышленности Азербайджанской Республики
Реферат Фабрично-заводские комитеты
Реферат Товароведение молочных и рыбных товаров и крупы