Принципы программирования
Технология программирования как совокупность методов и средств разработки программ и порядок применения этих методов и средств, ее основные этапы, содержание объектно-ориентированного подхода. Классификация и типы Java-программ, их структура, функционал.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 04.04.2014 |
Размер файла | 33,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Введение
программа java объектный
Данная работа посвящена одному из самых перспективных на сегодняшний день языков программирования - языку Java. Технологию по имени Java можно без преувеличения назвать революционной в индустрии разработки программного обеспечения. В чём же перспективность и революционность этой технологии?
Сегодня создание программного обеспечения представляет собой чрезвычайно тяжелое занятие. Трудности связаны с разнообразием архитектур машин, операционных систем, графических оболочек и т.д. Стремительный рост технологий, связанных с сетью Internet, дополнительно усложняет эту задачу. К сети Internet подключены компьютеры самых разных типов - IBM PC, Macintosh, рабочие станции Sun и другие. Даже в рамках IBM-совместимых компьютеров, существует несколько платформ, например, MS Windows 9x/Me/XP/NT/2000, OS/2, Solaris, различные разновидности операционной системы UNIX с графической оболочкой XWindows и т.д. Все эти системы образуют единую сеть, которая должна работать как одно целое, обеспечивая при этом высокий уровень безопасности информации. Под влиянием указанных факторов резко возрастает уровень требований, предъявляемый к программному обеспечению.
Современные приложения должны быть безопасны, высокопроизводительны, работать в распределенной среде, быть нейтральны к архитектуре. Созданная компанией Sun Microsystems система разработки Java удовлетворяет всем этим требованиям. Язык Java удобный и надёжный в эксплуатации благодаря таким своим достоинствам, как многозадачность, поддержка протоколов Internet и многоплатформенность.
Язык программирования Java является объектно-ориентированным и поставляется с достаточно объемной библиотекой классов. Библиотеки классов Java значительно упрощают разработку приложений, предоставляя в распоряжение программиста мощные средства решения распространенных задач. Поэтому программист может больше внимания уделить решению прикладных задач, а не таких, как, например, организация динамических массивов, взаимодействие с операционной системой или реализация элементов пользовательского интерфейса.
Цель моей курсовой работы: разработать Java-приложение, реализующее игру «Арканоид».
В данной курсовой работе я ставлю перед собой следующие задачи:
1. В программе должно присутствовать меню, в котором можно начинать игру сначала и выходить из нее.
2. Должно быть несколько уровней сложности (чем больше сложность, тем больше скорость шарика).
1. Объектно-ориентированное программирование
1.1 Технология программирования
Технология программирования - это совокупность методов и средств разработки (написания) программ и порядок применения этих методов и средств.
На ранних этапах развития программирования, когда программы писались в виде последовательностей машинных команд, какая-либо технология программирования отсутствовала. Первые шаги в разработке технологии состояли в представлении программы в виде последовательности операторов. Написанию последовательности машинных команд предшествовало составление операторной схемы, отражающей последовательность операторов и переходы между ними. Операторный подход позволил разработать первые программы для автоматизации составления программ - так называемые составляющие программы.
С увеличением размеров программ стали выделять их обособленные части и оформлять их как подпрограммы. Часть таких подпрограмм объединялась в библиотеки, из которых подпрограммы можно было включать в рабочие программы и затем вызывать из рабочих программ. Это положило начало процедурному программированию - большая программа представлялась совокупностью процедур-подпрограмм. Одна из подпрограмм являлась главной и с нее начиналось выполнение программы.
Процедурный подход потребовал структурирования будущей программы, разделения ее на отдельные процедуры. При разработке отдельной процедуры о других процедурах требовалось знать только их назначение и способ вызова. Появилась возможность перерабатывать отдельные процедуры, не затрагивая остальной части программы, сокращая при этом затраты труда и машинного времени на разработку и модернизацию программ.
Следующим шагом в углублении структурирования программ стало так называемое структурное программирование, при котором программа в целом и отдельные процедуры рассматривались как последовательности канонических структур: линейных участков, циклов и разветвлений. Появилась возможность читать и проверять программу как последовательный текст, что повысило производительность труда программистов при разработке и отладке программ. С целью повышения структурности программы были выдвинуты требования к большей независимости подпрограмм, подпрограммы должны связываться с вызывающими их программами только путем передачи им аргументов, использование в подпрограммах переменных, принадлежащих другим процедурам или главной программе, стало считаться нежелательным.
Процедурное и структурное программирование затронули прежде всего процесс описания алгоритма как последовательности шагов, ведущих от варьируемых исходных данных к искомому результату. Для решения специальных задач стали разрабатываться языки программирования, ориентированные на конкретный класс задач: на системы управления базами данных, имитационное моделирование и т.д. При разработке трансляторов все больше внимания стало уделяться обнаружению ошибок в исходных текстах программ, обеспечивая этим сокращение затрат времени на отладку программ.
Применение программ в самых разных областях человеческой деятельности привело к необходимости повышения надежности всего программного обеспечения. Одним из направлений совершенствования языков программирования стало повышения уровня типизации данных. Теория типов данных исходит из того, что каждое используемое в программе данное принадлежит одному и только одному типу данных. Тип данного определяет множество возможных значений данного и набор операций, допустимых над этим данным. Данное конкретного типа в ряде случаев может быть преобразовано в данное другого типа, но такое преобразование должно быть явно представлено в программе. В зависимости от степени выполнения перечисленных требований можно говорить об уровне типизации того или иного языка программирования. Применение строго типизированного языка при написании программы позволяет еще при трансляции исходного текста выявить многие ошибки использования данных и этим повысить надежность программы. Вместе с тем строгая типизация сковывала свободу программиста, затрудняла применение некоторых приемов преобразования данных, часто используемых в системном программировании.
Все универсальные языки программирования, несмотря на различия в синтаксисе и используемых ключевых словах, реализуют одни и те же канонические структуры: операторы присваивания, циклы и разветвления. Во всех современных языках присутствуют предопределенные (базовые) типы данных (целые и вещественные арифметические типы, символьный и, возможно, строковый тип), имеется возможность использования агрегатов данных, в том числе массивов и структур (записей). Для арифметических данных разрешены обычные арифметические операции, для агрегатов данных обычно предусмотрена только операция присваивания и возможность обращения к элементам агрегата. Вместе с тем при разработке программы для решения конкретной прикладной задачи желательна возможно большая концептуальная близость текста программы к описанию задачи. Например, если решение задачи требует выполнения операций над комплексными числами или квадратными матрицами, желательно, чтобы в программе явно присутствовали операторы сложения, вычитания, умножения и деления данных типа комплексного числа, сложения, вычитания, умножения и обращения данных типа квадратной матрицы. Решение этой проблемы возможно несколькими путями:
1. Построением языка программирования, содержащего как можно больше типов данных, и выбором для каждого класса задач некоторого подмножества этого языка. Такой язык иногда называют языком-оболочкой.
2. Построением расширяемого языка, содержащего небольшое ядро и допускающего расширение, дополняющее язык типами данных и операторами, отражающими концептуальную сущность конкретного класса задач. Такой язык называют языком-ядром.
Дальнейшим развитием пути явился объектно-ориентированный подход к программированию.
1.2 Объектно-ориентированный подход к программированию
Основные идеи объектно-ориентированного подхода опираются на следующие аспекты:
1. Все является объектом. Программа содержит описания объектов(классы), но это только описания принципа функционирования объектов, описание их принципиальных свойств. Для того чтобы программа начала работать, необходимо создать в памяти машины экземпляры этих объектов, которые существуют и изменяются в ходе работы программы и уничтожаются при завершении ее выполнения.
2. У каждого объекта есть свойства - другие объекты или элементарные данные (числа, символы и т.п.). Таким образом, экземпляр объекта фактически есть область памяти, хранящая конкретные значения свойств данного объекта.
3. Программа есть совокупность объектов, взаимодействующих друг с другом. Каждый объект т обладает рядом характерных для него функций, называемых методами. Доступ к свойствам объекта (изменение, присвоение новых значений и т.д.) осуществляется посредством вызова методов данного объекта. Взаимодействие между объектами реализуется посредством вызова их методов друг у друга.
4. Все объекты строго типизированы. То есть на момент создания экземпляра объекта строго известно, какого типа (класса) этот объект, какими принципиальными свойствами и методами он обладает.
5. Возможно наследование объектов, которое позволяет описывать новые классы на базе существующих, добавляя в них новые возможности или переопределяя существующие.
Существует 3 понятия из объектно - ориентированного подхода:
ь Инкапсуляция - объединение в рамках объекта присущих ему свойств и методов, манипулирующих этими свойствами. Таким образом, объект защищен от неправильного использования его свойств извне.
ь Наследование - объект может наследовать свойства и методы другого объекта и добавлять к ним черты, характерные только для него.
ь Полиморфизм - обозначение одинаковыми именами сходных по смыслу методов и свойств, что совсем не обозначает одинаковость их устройства. То есть унифицированный интерфейс обращения к различным объектам и их методам.
Одной из характерных черт подхода является программирование, управляемое событиями.
2. Процесс создания работающей java - программы
2.1 Типы Java программ
программа java объектный
Программы, разработанные на языке программирования Java, можно разделить по своему назначению и функциональности на две большие группы:
1. Приложения Java, работающие независимо на локальном компьютере.
2. Апплеты (applets), работающие в Internet.
В настоящее время работа Java поддерживается всеми основными компьютерными платформами. Java - приложение, предназначенное для автономной работы, компилируется и выполняется на локальной машине под управлением системы времени выполнения Java. Java вполне подходит для написания приложений, которые с тем же успехом могли быть написаны на С, С++, Basic, Delphi или любом другом языке программирования.
Апплеты, которые и обеспечивают этому языку его популярность представляют собой разновидность приложений Java, которые интерпретируются Виртуальной Машиной Java, встроенной практически во все современные браузеры.
Каждый апплет - это небольшая программа, динамически загружаемая по сети с Web сервера при открытии в браузере HTML страницы, в которой имеется ссылка на апплет - точно так же, как картинка, звуковой файл или элемент мультипликации. Главная особенность апплетов заключается в том, что они являются настоящими программами, а не очередным форматом файлов для хранения мультфильмов или какой-либо другой информации. Апплет не просто проигрывает один и тот же сценарий, а реагирует на действия пользователя и может динамически менять свое поведение. С помощью апплетов вы можете сделать страницы сервера Web динамичными и интерактивными. Апплеты позволяют выполнять сложную локальную обработку данных, полученных от сервера Web или введенных пользователем с клавиатуры. Для повышения производительности апплетов в браузерах используется компиляция «на лету» - Just-In-Time compilation (JIT). При первой загрузке апплета его код транслируется в обычную исполнимую программу, которая сохраняется на диске и запускается. В результате общая скорость выполнения апплета Java увеличивается в несколько раз. Из соображений безопасности апплеты (в отличие от обычных приложений Java) не имеют никакого доступа к файловой системе локального компьютера. Все данные для обработки они могут получить только от сервера Web.
2.2 Этапы подготовки исполняемой программы. Безопасность
Исходный файл на языке Java - это текстовый файл, содержащий в себе одно или несколько описаний классов. Транслятор Java предполагает, что исходные тексты программ хранятся в файлах с расширениями java. Получаемый в процессе трансляции байт-код для каждого класса записывается в отдельном выходном файле, с именем совпадающем с именем класса, и расширением class. Именно сlass-файлы, содержащие байт-код, интерпретируются системой времени выполнения Java в машинный код конкретной системы. Прежде всего байт-код Java загружается в систему времени выполнения загрузчиком классов. Загрузчик классов отвечает за то, чтобы были загружены все классы, необходимые для выполнения приложения. Затем байт-код проверяется верификатором байт-кода на отсутствие операций, которые могли бы нарушить безопасность системы или вызвать в ней аварийную ситуацию. Важно отметить, что загрузчик классов и верификатор байт-кодов не делают никаких предположений относительно происхождения кодов - получены они с локальной файловой системы или с другого континента. Верификатор гарантирует, что любой код, прошедший проверку, может быть использован интерпретатором без риска повредить его (интерпретатор), а именно:
ь не может произойти переполнение или «исчерпание» стека;
ь параметры для инструкций байт-машины имеют нужный тип;
ь доступ к полям и методам объектов не нарушает объявленных в классе правил (public, private, protected).
После такой проверки на безопасность байт-код интерпретируется в машинный код и запускается на выполнение интерпретатором. Причём классы, полученные локально (заслуживающие безусловного доверия), и классы, присланные по сети из остального мира (и потенциально враждебные), находятся в разных пространствах имён. При разрешении ссылки на какой-либо класс он ищется прежде всего в локальном пространстве. Это не позволяет «внешним» кодам подменить один из базовых классов в системе. Также в процессе интерпретации происходит подключение необходимых библиотек (файлы с расширением jar).
3. Описание классов приложения
В приложение всего описано 10 классов и 1 интерфейс. Кратко рассмотрим каждый из них.
В классе Arcanoid находится точка входа в программу main. В данном классе строится основной фрейм и создается меню.
В интерфейсе Paint реализован абстрактный метод paint (Graphics2D g), который вызывается в момент прорисовки окна системой.
В классах Fon, Pause и GameOver осуществляется загрузка необходимых изображений, при помощи метода getImage(), и вывод этих изображений на экран.
Класс Kirpiz содержит следующие методы:
· paint (Graphics2D g) - рисует изображение;
· run() - действия при ударе мяча о кирпич;
· isVert() - определяет вертикальное или горизонтальное отклонение мяча.
Аналогично построен класс Koretka и Ball (только в классе Ball нет метода isVert()).
Следующий класс InfoPanel осуществляет действия с количеством жизней и начислением очков.
В классе GraphicsElement реализовано описание пересечения областей картинок, а класс GamePanel реализует действия в результате этих пересечений. Также в классе GamePanel описаны основные действия игры, таких как прорисовка окна, управление кареткой, реализация новой игры, установка скорости мяча и т.д.
4. Принцип работы программы
В данной игре шарик может быть отбит от стенки, каретки или кирпича. Кратко рассмотрим каждый из случаев.
Стенка. Пусть xb, yb - текущие координаты шарика, dx, dy - направление движения шарика по оси Oх и Оу соответственно, wb, hb - ширина и высота шарика, wp, hp - ширина и высота игровой панели. Начало координат находится в верхнем левом углу.
Если значение xb+dx меньше 0, либо wb +xb+dx больше либо равно wp, то необходимо поменять направление движения шарика dx на противоположное. Если же значение yb+dy меньше нуля, то меняем направление dy по оси Оу на противоположное. При условии уb +hb+dy>= hp будем считать что шарик упал и вычтем одну жизнь.
Каретка. Для того, чтобы узнать пересечение шарика с кареткой необходимо вызвать метод isBeal (GraphicsElement e) класса GraphicsElement, которая возвратит true при пересечении, либо false если столкновения не было. При пересечении будем вызывать метод srMap (GraphicsElement e), который вернет точку столкновения шарика и каретки. Далее с помощью метода isVert (Point p) определим горизонтальное или вертикальное отклонение шарика.
Кирпичи. Принцип удара шарика о кирпич аналогичен с принципом каретки, только за удар по кирпичу игроку начисляется 50 очков.
Более подробно с конструкторами и методами классов GraphicsElement, GamePanel можно познакомиться в приложении 1.
5. Руководство пользователя
Игра начинается с нажатия левой кнопки мыши. Игрок контролирует небольшую платформу-ракетку, которую можно передвигать горизонтально от одной стенки до другой, подставляя её под шарик, предотвращая его падение вниз. Для выбора уровня сложности необходимо нажать кнопку «настройки» в меню.
Удар шарика по зеленому кирпичу приводит к разрушению кирпича, а чтобы разрушить сиреневый необходимо 2 удара.
За каждый удар по кирпичу начисляются очки, которые отображены в левом нижнем углу панели.
При нажатии на правую кнопку мыши игра переходит в режим паузы. Для продолжения игры необходимо нажать еще раз на правую кнопку мыши.
Если шарик упадет 3 раза, то игра заканчивается.
Для начала новой игры необходимо нажать «Игра / Новая». Для выхода из программы необходимо нажать «Игра / Выход» или кнопкой главного меню «Закрыть».
Заключение
В данной курсовой работе было создано Java-приложение, реализующее игру «Арканоид».
В ходе выполнения курсовой работы были изучены основы программирования на языке Java. Написание программы способствовало закреплению теоретического материала на практике.
Список использованных источников
1. Вязовик, Н.А. Программирование на Java - Режим доступа http://www.intuit.ru/department/pl/javapl/1/5.html
2. Монахов, В.В. Язык программирования Java и среда NetBeans - Режим доступа: http://www.intuit.ru/department/pl/javanetbeans/1/2.html
3. Сёмочкин, А.Н. Язык программирования Java: учебное пособие для вузов / А.Н. Сёмочкин. - Издание 2 - е, перераб. и доп. - Благовещенск: Изд-во БГПУ, 2009 -89 с.
Приложение
В программе всего описано 10 классов и 1 интерфейс. В данном приложении покажем 2 класса - GamePanel и GraphicsElement.
GamePanel.java
package arcanoid;
import java.awt. Color; // пакет java.awt - содержит все классы для создания пользовательского интерфейса
import java.awt. Dimension;
import java.awt. Graphics;
import java.awt. Graphics2D;
import java.awt. Point;
import java.awt.event. ActionEvent; // пакет java.awt.event - содержит интерфейсы и классы для работы с различного рода событиями, происходящими с объектами из пакета java.awt
import java.awt.event. ActionListener;
import java.awt.event. MouseAdapter;
import java.awt.event. MouseEvent;
import java.awt.image. BufferedImage;
import java.util. ArrayList; // пакет java.util - содержит набор классов коллекций, модели событий, классов работы календарем и временем, средства интернационализации программ
import javax.swing.JPanel;
import javax.swing. Timer; // пакет java.swing содержит набор «легковесных» компонентов, которые в максимально возможной мере работают одинаково на всех платформах
public class GamePanel extends JPanel implements Runnable, ActionListener // Класс GamePanel наследует все поля и методы класса JPanel, и реализует интерфейсы Runnable, ActionListener.
{
int width = 640; // ширина и высота панели
int height = 400;
ArrayList<GraphicsElement> kirp = new ArrayList<GraphicsElement>(); // список кирпичиков
ArrayList<GraphicsElement> paintElement = new ArrayList<GraphicsElement>(); // список отображаемых элементов
InfoPanel infoPanel; // информационная панель
GameOver gameOverImage; // картинка gameOver и Pause
Pause pauseImage;
Koretka kor = new Koretka (width/2, height-50); // коретка и ее начальное положение
Ball ball = new Ball (kor.getX()+kor.getWidth()/2-7, kor.getY() - 15); // мячик и его начальное положение
Fon fon;
BufferedImage firstImage;
BufferedImage twoImage;
int time = 10; // время задержки срабатываний таймера
int ballSpeed = 1; // задержка шарика (чем больше тем он медленнее)
int ballCountTakt = 0; // переменная для управления задержкой
Timer timer = new Timer (time, this); // таймер
int dx = -4; // смещение шарика по Ох
int dy = -4; // смещение шарика по Оу
int cW = 15; // определяется количество кубиков на экране
int cH = 7;
int tip = 0;
boolean run = false;
boolean gameover = false;
boolean pause = false;
public GamePanel() {
setPreferredSize (new Dimension (width, height)); // Добавление разделяемой панели к окну формы
setBackground (Color.WHITE);
firstImage = new BufferedImage (width, height, BufferedImage.TYPE_INT_RGB);
twoImage = new BufferedImage (width, height, BufferedImage.TYPE_INT_RGB);
fon = new Fon(); // создаем фон
infoPanel = new InfoPanel (width-600, height-20); // панель с информацией
paintElement.add(infoPanel); // добавляем эту панель в список отображаемых объектов;
createKirpPole(); // помещаются кирпичики на экран
createImage();
addMouseListener (new MouseAdapter() // обработка события нажатия на кнопку мыши
{
@Override // переопределение метода mousePressed
public void mousePressed (MouseEvent e) {
if (e.getButton() == 3) // нажатие на правую кнопку мыши
{
pause =! pause;
if(pause) {
if (pauseImage == null) {
pauseImage = new Pause (220, 100); // добавляем паузу в список отображаемых объектов
}
else {
pauseImage.setGivoi(true); // метод setGivoi возвращает true
}
paintElement.add(pauseImage);
}
else {
pauseImage.setGivoi(false); // метод setGivoi возвращает false
}}
else {
if (! gameover &&! run)
run = true;
}}});
addMouseMotionListener (new MouseAdapter() // перемещение курсора мыши
{
@Override // переопределение метода mouseMoved
public void mouseMoved (MouseEvent e) {
if (gameover || pause) return; // если gameover или pause то коретка не двигается
int x = e.getPoint().x-kor.getWidth()/2;
if (x < 0)
{
x = 0;
}
if (x + kor.getWidth() >= width)
{
x = width - kor.getWidth() - 1;
}
kor.setCoord (x, height-50);
if(! run)
{
ball.setCoord (kor.getX()+kor.getWidth()/2-7, kor.getY() - 15);
}
createImage();
repaint();
}});
Thread t = new Thread(this);
t.setPriority (Thread.MAX_PRIORITY);
t.start(); // стартуем поток
}
@Override
public void paint (Graphics g) {
super.paint(g);
if (twoImage!= null)
g.drawImage (twoImage, 0, 0, this);
}
protected void createKirpPole() // отрисовываем поле кирпичей
{
for (int i=0; i<cH; i++) {
for (int j=0; j<cW; j++) {
kirp.add (new Kirpiz (18+j*40, 5+i*20, tip)); // добавляем кирпич в список отображаемых объектов
if (tip == 0)
tip = 1;
else
tip = 0;
}}}
public void createImage()
{
Graphics2D g = firstImage.createGraphics(); // рисуем первое изображение, сначала фон, потом мяч, далее коретку и в конце поле кирпичей
fon.paint(g);
ball.paint(g);
kor.paint(g);
for (int i=0; i<kirp.size(); i++)
kirp.get(i).paint(g);
for (int i=0; i<paintElement.size(); i++)
paintElement.get(i).paint(g);
twoImage.createGraphics().drawImage (firstImage, 0, 0, this); // передаем полностью отрисованное первое изображение второму
}
public void run() {
timer.start();
}
public void actionPerformed (ActionEvent e) {
if (run &&! pause) {
ballCountTakt++;
if (ballCountTakt > ballSpeed) {
ballCountTakt = 0;
int x = ball.getX();
int y = ball.getY();
if (y+dy+ball.height >= height) { // вылет мяча
run = false;
gameover = infoPanel.minusLife();
ball.setCoord (kor.getX()+kor.getWidth()/2-7, kor.getY() - 15);
// если конец игры…
if(gameover) {
gameOverImage = new GameOver (220, 200);
paintElement.add(gameOverImage);
}
}
else {
if (x+dx < 0 || ball.width+x+dx >= width) // пересечение мяча со стенкой
{
dx = - dx;
}
if (y+dy < 0) {
dy = - dy;
}
int nx = x + dx;
int ny = y + dy;
ball.setCoord (nx, ny); // устанавливаем положение мяча
if (ball.isBeal(kor)) // пересечение с кореткой
{
Point p;
if((p = ball.srMap(kor))!= null)
if (kor.isVert(p))
dx = - dx; // по вертикали
else
dy = - dy; // по горизонтали
}
for (int i=0; i<kirp.size(); i++) // пересечение мяча с кубиками
if (ball.isBeal (kirp.get(i))) {
Point p;
if((p = ball.srMap (kirp.get(i)))!= null) {
if(((Kirpiz) kirp.get(i)).isVert (p, ball.getPoint()))
dx = - dx; // удар в бок
else
dy = - dy; // удар вверх или вниз
((Kirpiz) kirp.get(i)).run();
infoPanel.addMoney(); // добавление очков
newLine();
break;
}}
x += dx;
y += dy;
ball.setCoord (x, y);
}}}
else {
}
ArrayList<GraphicsElement> delel = new ArrayList<GraphicsElement>(); // список удаленых объектов
for (int i=0; i<kirp.size(); i++)
if (! kirp.get(i).isGivoi()) // если не живой
delel.add (kirp.get(i)); // удалить
kirp.removeAll(delel); // удалить все
for (int i=0; i<paintElement.size(); i++)
if (! paintElement.get(i).isGivoi())
delel.add (paintElement.get(i));
paintElement.removeAll(delel);
createImage();
repaint(); // перерисовка
}
public void newLine() // спуск поля кирпичей вниз при удалении первой полосы
{
boolean flag = true;
for (int i=0; i<kirp.size(); i++)
{
if (kirp.get(i).getY() == 125)
flag = false;
}
if(flag) {
for (int i=0; i<kirp.size(); i++)
{
kirp.get(i).setY (kirp.get(i).getY()+20);
}
for (int j=0; j<cW; j++)
{
kirp.add (new Kirpiz (18+j*40, 5, tip));
if (tip == 0)
tip = 1;
else
tip = 0;
}
newLine();
}}
public void setBallSpeed (int ballSpeed) // установка уровня сложности
{
this.ballSpeed = ballSpeed;
}
public void newGame() // новая игра
{
run = false;
gameover = false;
if (gameOverImage!= null)
gameOverImage.setGivoi(false);
ball.setCoord (kor.getX()+kor.getWidth()/2-7, kor.getY() - 15); // устанавливаем начальное положение мяча
infoPanel.setLife(3); // 3 жизни
infoPanel.setMoney(0); // обнуляем очки
kirp.removeAll(kirp); // удаляем все кирпичи
createKirpPole(); // строим новое поле кирпичей
}}
*************************************************************
GamePanel.class
package arcanoid;
import java.awt. Color;
import java.awt. Point; // java.awt - содержит все классы для создания пользовательского интерфейса
public abstract class GraphicsElement implements Paint {
Point p = new Point();
int width;
int height;
Color color = Color.BLACK;
boolean[][] map;
boolean givoi = true;
public boolean isBeal (GraphicsElement e) { // пересечение обл - возвращает true при пересечении либо false если не было
return (e.getX() >= p.x || e.getX()+e.getWidth() >= p.x) &&
(e.getX() <= p.x+width || e.getX()+e.getWidth() <= p.x+width)&&
(e.getY() >= p.y || e.getY()+e.getHeight() >= p.y) &&
(e.getY() <= p.y+height || e.getY()+e.getHeight() <= p.y+height);
}
public Point srMap (GraphicsElement e) // сравнение карт, их пересечение
{boolean[][] em = e.map;
int di = p.y - e.p.y;
int dj = p.x - e.p.x;
for (int i=0; i<map.length; i++) {
for (int j=0; j < map[i].length; j++) {
if (map[i] [j]) {
int ni = i+di;
int nj = j+dj;
if (ni >= 0 && ni < em.length && nj >= 0 && nj < em[0].length && em[ni] [nj])
{
return new Point (p.x+j, p.y+i); // возвращаем точку столкновения
}}}} return null;}
public void setCoord (int x, int y) {
p.setLocation (x, y); // устанавливаем положение компонента}
public int getX() {return p.x;}
public int getY() {return p.y;}
public int getWidth() {return width;}
public int getHeight() {return height;}
public void setY (int y) {p.y = y;}
public Point getPoint() {return p;}
public boolean isGivoi() {return givoi;}
public void setGivoi (boolean givoi) {this.givoi = givoi;}
}
Размещено на Allbest.ru
Подобные документы
История создания языка Java. Основные принципы объектно-ориентированного программирования. Структура, особенности синтаксиса и примеры прикладных возможностей использования языка Java, его преимущества. Перспективы работы программистом на языке Java.
курсовая работа [795,9 K], добавлен 14.12.2012Анализ объектно-ориентированного программирования, имитирующего способы выполнения предметов. Основные принципы объектно-ориентированного программирования: инкапсуляция, наследование, полиморфизм. Понятие классов, полей, методов, сообщений, событий.
контрольная работа [51,7 K], добавлен 22.01.2013Приемы и правила объектно-ориентированного программирования с использованием языка С++. Общие принципы разработки объектно-ориентированных программ. Основные конструкции языка С++. Разработка различных программ для Windows с использованием WIN32 API.
учебное пособие [1,6 M], добавлен 28.12.2013Анализ методов объектно-ориентированного программирования на примере численных. Детальная характеристика модулей и связь их в одну общую программу. Принципы интегрирования по общей формуле трапеции и решение дифференциального уравнения методом Эйлера.
курсовая работа [511,6 K], добавлен 25.03.2015Изучение объектно-ориентированного языка программирования Java, его функциональные возможности. Создание программного кода. Описание классов и методов, использованных в программе. Руководство пользователя, запуск сервера и клиентского приложения.
курсовая работа [1,8 M], добавлен 16.09.2015Принципы разработки алгоритмов и программ на основе процедурного подхода и на основе объектно-ориентированного подхода. Реализация программы Borland Pascal 7.0, ее интерфейс. Разработка простой программы в среде визуального программирования Delphi.
отчет по практике [934,7 K], добавлен 25.03.2012Понятие объектно-ориентированного программирования, характеристика используемых языков. Практическая разработка средств объектно-ориентированного программирования в задачах защиты информации: программная реализация на языке С++, а также Turbo Pascal.
курсовая работа [275,9 K], добавлен 22.12.2011Международный стандарт на язык программирования Паскаль. Приемы объектно-ориентированного программирования в Турбо Паскале. Символы языка, его алфавит. Этапы разработки программы. Понятие алгоритмов и алгоритмизации. Структура программ на Паскале.
курсовая работа [29,8 K], добавлен 28.02.2010Применение объектно-ориентированного программирования для написания нескольких модулей программы. Вычисление алгебраического уравнения методом половинного деления. Применение метода Эйлера в теории численных методов общих дифференциальных уравнений.
курсовая работа [398,1 K], добавлен 26.02.2015Порядок описание процесса разработки модели для разрешения задачи программирования с помощью средств языка программирования. Структуры данных и основные принципы их построения. Этапы компьютерного моделирования. Этапы и значение написания программы.
курсовая работа [19,5 K], добавлен 19.05.2011