Вы находитесь на странице: 1из 33

Лабораторная работа №1

Знакомство со средой Greenfoot

Цель работы:

 Ознакомиться с интерфейсом Greenfoot.


 Научиться программировать графические компьютерные программы,
такие как симуляторы и игры, используя язык программирования Java и
среду Greenfoot.

Введение

 Greenfoot - это программа по разработке игр, симуляторов и других


графических программ для начинающих на стандартном языке Java,
который является одним из основыных языков в академических и
промышленных кругах.
- Сценарий - это игра или симуляция, реализованная в Greenfoot, где
создаются “актеры”, которые живут в “мирах”.
- Actor - класс объектов, которые существуют в мире (Greenfoot).
Каждый представитель класса имеет координаты в мире и
изображение.
- World - это мир, в котором живут представители классов-наследников
класса Actor. По своей природе является двумерной матрицей.

Порядок создания

 Откройте Greenfoot;
 Выберите новый сценарий на Java и дайте название, как показано на
рис.1.;
2

 Познакомьтесь с интерфейсом программы, который состоит из трех


основных областей:

1. (World) Самая большая область, покрывающая большую часть экрана,


называется миром. Именно здесь будет работать программа;

2. (Class diagram) Область справа с классами “Мир” и “Актер” - это


диаграмма классов;
3. (Execution controls) Элементы управления – область с кнопками “Акт”,
“Выполнить” и “Сброс”.

1 3

Рис.1. Интерфейс Greenfoot

 Назовите свой мир , используя open editor (открыть редактор) рис.2.. На


экране откроется окно редактора, где вы можете дать название вашему
миру. Переименуйте название мира в двух строках, начинающихся со слов
public (изначально в окне уже есть имя мира). Пример показан на рис.2. с
названием BikiniBottom.
3

Рис.2.Окно редактора

 Поставьте задний фон, используя set image, рис.3.

Рис.3. Установить рисунок

 Создайте новые субклассы актеров (new subclass), дайте названия им и


поместите объекты в мир, пример покзан на рис.4. Для того чтобы
поместить объекты в мир щелкните правой кнопкой мыши fishes,
выберите опцию «Новый «Актер»» и перетащите объект в сценарий с
помощью курсора рис. 5.
4

Рис.4. Создание нового субкласса

Рис.5. Объекты в мире

Наследование
* Объекты Greenfoot унаследуют методы и свойства своего подкласса и
суперкласса.
* Например, экземпляр fishes унаследует методы суперкласса Actor и
подкласса fishes.
Наследование означает, что каждый подкласс наследует свои методы от
своего суперкласса.
Просмотр унаследованных методов в меню объектов
* Меню объекта отображает все методы, которые экземпляр унаследует от
своего подкласса и суперкласса.
- Щелкните правой кнопкой мыши на экземпляре, чтобы открыть меню.
5

- “inherited from Actor” отображает список методов, которые подкласс


унаследует от суперкласса Actor.

Шаги для просмотра унаследованных методов в редакторе кода

1. Щелкните правой кнопкой мыши на классе.

2. Нажмите Кнопку Открыть Редактор.

3. В редакторе кода выберите пункт документация из раскрывающегося


меню.

4. Прокрутите вниз до краткого описания метода.

Сводка Метода
6

Использование методов, переменных и параметров. В сводке методов


отображаются унаследованные методы класса.

Компоненты Метода

Метод имеет несколько компонентов, описывающие выполняемые ими


операции или задачи:

- Тип возврата: указывает данные, которые возвращает метод.

- Имя метода: описывает, что делает метод.

- Список параметров: информация, которая входит в вызов метода.

Примеры методов:

void move()

void turnLeft()

Вызов метода дает команду экземпляру выполнить операцию или задачу в


Greenfoot. Прочитайте метод, чтобы понять, какая операция или задача
должна быть выполнена.

Сигнатура метода

* Сигнатура метода описывает намерения метода.

* Она включает в себя следующие компоненты:


7

- тип возврата (Return type)

- имя метода (Method name)

- список параметров (Parameter List ())

Тип возврата

* тип возврата – это слово в начале метода, которое указывает, какой тип
информации будет возвращен вызовом метода.

* Существует два типа возвращаемых типов:

– Void: выдает команду объекту.

– Non-void : задает объекту вопрос.

Методы с возвращаемыми типами Void

· Методы с типами возврата void выдают команду, которая выполняет


действие.

- Включает в себя слово "void".

- Не возвращает информацию об объекте.

- Используется для того, чтобы заставить объект что-то сделать.


8

Вызов методов с типами возврата Void

 Вы будете вызывать методы с типами возврата void:

- для точного позиционирования объектов в исходном сценарии (начальная


точка игры).

- Командовать объектами для выполнения действий в вашей игре.

Задавайте Вопросы Объектам

- Как программист, вы будете задавать объекту вопросы, вызывая методы с


типами возврата non-void, чтобы узнать, что объект может делать или делал в
прошлом.- Например, в школе учителя задают ученикам вопросы, чтобы
узнать, понимают ли они материал, который они изучили в классе в тот день.
Студенты отвечают ответами, чтобы учителя знали, как много они узнали.

Методы с non-void возвращаемыми типами

Методы с типами возврата, не имеющими значения void, задают объекту


вопрос.

- Подпись метода не содержит слова "void".

- Метод возвращает информацию об объекте, но не изменяет и не


перемещает его.
9

Примеры типов возврата Non-Void

 Integer (отображается как int)

-относится к целым числам

-спрашивает объект: сколько?

 Boolean

- возвращает значение true или false.

- Типы вопросов, которые он может задать объекту:

· Mожете ли вы двигаться?

· Находитесь ли вы на краю света?

Параметры метода

 Параметры предоставляют методам дополнительные данные, чтобы


заставить объект выполнять задачу, когда требуется информация для
вызова метода.
 Параметры определяются двумя компонентами:

· тип параметра

· имя параметра
10

Параметры используются для командования объектами для перемещения


или для указания объектам, какой тип ответа ожидается, когда мы задаем
объекту вопрос.

Примеры параметров метода

 Integer (int): ввод или отображение числовых значений.


 Boolean: отображение истинных или ложных значений.

Списки Параметров Метода

 Списки параметров метода указывают, требуется ли для вызова метода


дополнительная информация и какого типа информация.

- Списки параметров отображаются в виде данных в круглых скобках.

- Они обычно имеют два состояния:

· пусто: нет данных, ожидаемых для вызова метода (getRotation () метод).

· Непустой: иметь данные и ожидать, что один или несколько параметров


вызовут метод (turn () method).

Свойство объекта

 Свойства объекта описывают внешний вид и возможности экземпляра,


такие как:

– размер

– цвет

– диапазон движений
11

 Свойства можно просматривать и изменять в исходном коде класса.

Просмотр свойств объекта

Просмотр существующих свойств объекта в документации по классу.

Переменная

Переменная или поле позволяет экземпляру хранить информацию для


использования немедленно или позже.

Например, свойства объекта-это переменные, хранящие информацию об


экземпляре, например его положение в мире.

Переменные экземпляра - это память, принадлежащая экземпляру класса. Эта


память может быть сохранена и доступна позже, пока экземпляр существует.

Просмотр Переменных Экземпляра

Щелкните правой кнопкой мыши на экземпляре, затем щелкните проверить,


чтобы просмотреть переменные экземпляра в инспекторе объектов.
12

Синтаксис Программирования

- Исходный код определяет все свойства и характеристики класса и его


объектов.

- Написать исходный код (также известный как синтаксис) в редакторе кода


класса, чтобы управлять объектами в сценарии, чтобы действовать.

Исходный Код Класса Отображения

Из мира щелкните правой кнопкой мыши на классе и выберите открыть


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

Способ Действия

Всякий раз, когда в среде нажимаются элементы управления Act или Run
execution, объект выполняет то, что запрограммировано в методе act.

Тело метода Act

Фигурные скобки и содержимое внутри них - это тело метода. Здесь можно
написать код для указания экземплярам класса действовать при нажатии
кнопок Act или Run
13

Вызов методов в способ действовать

Чтобы вызвать методы в методе Act, запишите их в следующей


последовательности:

- имя метода в строчных символах.


- Скобки, при необходимости со списком параметров.
- Точка с запятой, чтобы закончить утверждение.

 Заставьте объекты действовать

У Greenfoot есть встроенный текстовый редактор для написания кода


программы. Чтобы его вызвать необходимо нажать правой кнопкой на класс
в схеме классов, который вы хотите редактировать, затем нажать на Open
editor “Открыть редактор”, после чего откроется окно как на рис.6.
14

Рис.6. Окно редактора

Команды:

o move() - команда для перемещения;


o turn() – команда для поворота;
o if (Greenfoot. isKeyDown("left"))
{
move(-3);
}
if (Greenfoot. isKeyDown("right"))
{
move(3);
} - команда для перемещения объекта с помощью клавиш со
стрелками «влево» или «вправо»;
o setRotation(180) – команда для разворота объекта на 180 градусов;
o setLocation(x, y) – команда «установить местоположение»;
o Food = getOneObjectAtOffset (x, y, Food.class)
15

{
World world;
world = getWorld();
world.removeObject(Food);
} – команда для удаления одного из объектов, где food – название
удаляемого объекта, тескстовый редактор показан на рис.7.

Рис.7. Окно редактора актера fishes

Контроль исполнения

* Элементы управления выполнением для запуска сценария включают:

 - Act: запускает все действия в сценарии один раз.

 - Run / pause: запускает все действия в сценарии повторно, пока не будет


нажата пауза.

 - Reset: приостановка сценария или возврат сценария в исходное


положение.

 -Speed: выполняет действия быстрее или медленнее. Рис.8.


16

Лабораторная работа №2

Сохранить мир

К настоящему времени вы, вероятно, устали от необходимости добавлять


новые объекты в мир каждый раз, когда мы компилируем код. Можно
добавить код для автоматического создания объектов – более того, можно
заставить Greenfoot написать этот код для вас! Нажмите Сброс, а затем
добавьте в мир желаемые вами объекты. Прежде чем нажать «Выполнить»,
щелкните правой кнопкой мыши мир и выберите параметр «Сохранить мир».
рис.1(2).

Рис.1(2). Сохранение мира


17

Лабораторная работа №3

Создание и воспроизведение звука

Можно добавить немного звука в наш сценарий. Мы можем воспроизводить


этот звук каждый раз, когда рыбка ест еду, добавив одну строку в наш мир
рыб, который вызывает Greenfoot.playSound после удаления еды из мира.
 Выберите Show Sound recorder в окне Tool. Рис.1(3).
 На экране появляется звукозаписывающее устройство(Sound
Recorder).Рис.2(3).
 Нажмите кнопку записи и запишите какой-либо звук, затем нажмите
«Стоп».Вы должны увидеть зеленую волну, и когда вы нажмете кнопку
воспроизведения , вы услышите, как воспроизводится ваш шум.
 Сохраните звук, введя что-либо в поле имени файла и нажав
«Сохранить».
 Закройте диктофон и откройте окно редактора
 Введите в окне редактора команду Greenfoot.playSound("eat.wav"), где
eat.wav – название файла.Рис.3(3).
 Попробуйте. Не забудьте включить динамики( или подключить
наушники).
18

Рис.1(3). Show Sound recorder

Рис.2(3). Звукозаписывающее устройство

Рис.3(3). Окно редактора fishes


19

Лабораторная работа 4.

Добавление случайно перемещающегося врага

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


можем контролировать, которая плавает вокруг и кушает еду. Нам нужен
враг, который ест рыб: акула!

 Для начала добавим акулу, которая движется по прямой и ест рыб. Мы

можем сделать это, исползуя код, который мы уже использовали. Сначал мы


добавляем класс Акул – щелкая правой кнопкой мыши на классе Actor и
выбирая новый подкласс. Вы найдете фотографии в списке изображений
слева или вы можете самостоятелно загрузить фотографию из интернета.

 Как только вы сделали свой класс Shark(акула), вы можете заполнить

его, заставив двигаться по прямой линии и есть рыбу, если первая ее найдет.
Вы уже видели как делать каждую из этих каманд в предыдущих
работах.Рис.1(4).
20

Рис.1(4). Окно редактора с командами для рыбы

Вы можете проверить, что акула работает, поместив одну слева от рыбы,


затем щелкнув по кнопке «Выполнить», и пусть оба актера бегут в правую
часть мира, где рыба будет съедена.( Если хотите, создайте свой собственный
звук, когда акула будет есть рыбу). Это здорово, но от нашей акулы довольно
легко уйти, двигаясь вбок, и когда она достигает правого края света, она
остается там навсегда.

 Давайте сделаем нашу акулу более трудной, чтобы избежать, вводя

некоторую случайность. Greenfoot предоставляет функцию


Greenfoot.getRandomNumber , которая выдаст вам случайное число. Вот
первая попытка, где мы поворачиваем случайную сумму в каждом
кадреРис.2(4). :
21

Рис.2(4). Команда Greenfoot.getRandomNumber

Этот код означает, что мы будем поворачивать случайную величину в


каждом кадре, от 0 градусов (включительо) до 90 градусов (исключая).
Попробуйте и посмотрите как это работает. Вы увидите, что это не создает
очень угрожающего врага: акула, кажется, в основном вращается на месте
(слишком часто поворачиваясь) и всегда поворачивается напрво. Давайте
исправим эти проблемы одну за другой , начиная с вращения на месте.

На данный момент наша акула поворачивается каждый кадр, что заставляет


её вращаться, а не плавать. Есть несколько разных способов , которыми мы
могли бы делать это реже. Можно было бы иметь переменную-счетчик,
которая отслеживает, сколько времени прошло с момента нашего последнего
поворота, и поворачивает, допустим, каждые 10 кадров. Другой способ –
использовать генератор случайных чисел для случайного поворота с
определенным средним значением ( например каждые 10 кадров). Возьмем
второй способ, так как это делает менее предсказуемым акулу.

 Допустим, у акулы есть 10% шанс поворота каждого кадра. Мы можем

кодировать это, сравнивая Greenfoot.getRandomNumber(100) c заданным


процентом, Рис.3(4):

Рис.3(4). Команда Greenfoot.getRandomNumber


22

Если вам интересно, подумайте, как это работает – почему мы и используем


<, а не <=. Могли бы мы кодировать это по-другому , например, используя
Greenfoot.getRandomNumber(50) Greenfoot.getRandomNumber(10)? Как насчет
Greenfoot.getRandomNumber(5)?

Это заставит нашу акулу поворачиваться ( в среднем) каждые 10 кадров.


Скомпилируйте и запустите её и посмотрите, что получится. Акула должна в
основном плавать по прямой линии, иногда поворачивая вправо на разную
величину. Это зорово , и это возврщает нас к дургой проблеме: акула всегда
поворачивает направо.

Из предыдущих занятий мы знаем , что способ повернуть налево –


использовать отрицательное число для круга. Если бы мы могли перейти от
поворота акулы в диапазоне от 0 до +90 к повороту в диапазоне от -45 до
+45, это решило бы нашу проблему. Есть несколько различных способов
добиться этого, но вот самый простой : обратите внимание, что если мы
вычтем 45 из нашего числа, мы получим число в нужном диапазоне. Итак ,
давайте изменим наш код соответсвенно (рис.4(4)):

Рис.4(4) Команда getRandomNumber

 Скомпилируйте и запустите это, и у нас должен быть несколько

эффективый хищник , который может повернуться к вам в любой момент.

 Добавьте в мир рыбу, несколько акул и много еды (затем спасите мир).
23

И пострайтесь съесть всю еду , прежде чем акула поймает рыбу. Однако вы
можете заметить, что есть ещее один недостаток: акулы могут на некоторе
время застрять на краю света. Потому что как только они достигнут края
света , они отойдут от него только после нескольких случайных поворотов.

 Мы можем ускорить процесс снятия акул со стен , повернув их на 180

градусов, как только они достигнут края света. Мы должны проверить, что
мы находимся на краю света, посмотрев , близка ли их координата Х к нулю
или к ширине мира, - аналогично логика для координата Y(и высоты мира).
Код ниже на рисунке 5(5). или на рис.7.(лаб.раб.№1)

Рис.5(5). Окно редактора Акулы


24

Лабораорная работа №5

Создание игры

Создайте новый сценарий, который будет состоять из

1. подкласса World под названием OceanWorld;


2. пяти подкласс Actor: Лодка(Boat), Пират (череп)(Pirate), Якорь(Anchor),
Бомба (Bomb) и Счётчик(Counter) (без объекта).рис. 1(5).

Рис.1(5). Диаграмма классов сценария


25

Актеры игры будут выполнять следующие функции:


Лодка-это актер, которым вы управляете с помощью клавиш со стрелками
влево и вправо. Лодка развернется, когда достигнет края. При нажатии
клавиши “f” будет создана бомба.

Бомба может появиться только по команде лодки. Как только появляется


бомба, она сразу же начинает двигаться в том направлении, куда указывает
лодка. Если Бомба пересекается с Пиратом, и бомба, и Пират исчезнут.
Кроме того, при пересечении Бомбы с Пиратом, счетчик табло увеличится.
Если Бомба достигнет края мира до того, как пересечётся с Пиратом, то
Бомба исчезнет. Она не имеет никакого эффекта на Лодку или Якорь, при
пересечении с любым из них.

Якорь является безопасной гаванью для лодки, он исчезает и появляется


снова, когда Лодка пересекается с ним. Якорь развернется, когда достигнет
края света, и не окажет никакого влияния ни на Пирата, ни на бомбу.

Пират движется случайным образом и может потопить лодку. В нашей игре


лодка просто появляется в случайном месте, и игра продолжается.

Счетчик-это класс, который появляется и заметно ведет счет. Ни один


объект не присваивается классу Счетчик.

OceanWorld является фоном сценария.

Ниже приводится код для каждого класса:

OceanWorld
26

Мы собираемся поместить счетчик


в мир, используя код.
OceanWorld имеет ширину 600
пикселей и высоту 400 пикселей.
Движение происходит с шагом в 1
пиксель. Обратите внимание, что
OceanWorld несодержит метода
“действия”, потому что он не
является Актером.
Следующий код подготавливает
счетчик, чтобы быть вызванным
Бомбой и функционировать в
соответствии с указаниями в классе
Бомба.
Верхний левый угол табло
(счетчика) будет расположен на
координатах (100, 40) рядом с
верхней левой стороной
OceanWorld.

Рис.2(5). Код для Ocean World

Счётчик Мы создаем целочисленную


переменную под названием score.
Мы также устанавливаем
начальное значение score на “0".”
Это называется “инициализацией”
переменной.
Мы используем заранее
определенный актерский метод
“setImage” для создания образа
табло. Аргумент для установки
изображения GreenfootImage.
GreenfootImage, в свою очередь,
имеет пять аргументов: сначала он
будет отображать слово “Оценка”,
затем будет отображаться
числовое значение, содержащееся
в переменной оценка. Символы
будут иметь высоту 24 пикселя.
Наконец, текст будет зеленым, а
фон-черным. Помните, положение
табло было установлено в
OceanWorld.
27

Рис.3(5). Код для Counter

Бомба
28

Рис.4(5). Код для Bomb

Пират
29

Мы создаем четыре переменные,


все целые. e и f – координаты
случайного положения, в котором
появится лодка. m и n-координаты
обтекания Пирата. Мы используем
другие буквы, чем в других
методах, потому что они являются
общедоступными, и мы не хотим,
чтобы другой метод изменял
переменную. Код в методе act прост
и состоит только из вызовов кода,
который мы уже написали.
Единственный новый метод-это
boat Disappear Appear, который
является тем же методом,
примененным к пирату еще в
разделе Disappear and Appear.Мы
создаем вызов в act для метода под
названием random, который будет
определен ниже.
random может быть доступен из
любого другого класса (public)
ивыполняет действие (void).
Greenfoot содержит команду для
создания случайного числа.
GetRandomNumber(100) означает,
что числобудет находиться в
диапазоне от 0 до 99 включительно.
Если числоменьше 40, то пират
повернется на 30 градусовпо
часовой стрелке ...
или же, если случайное число
больше 60, то пират повернется на
30 градусов против часовой стрелки
...
в противном случае, если случайное
число находится между 40 и 60,
пират не повернется.
Независимо от того, какое из этих
трех событий произойдет, пират
переместит 5 единиц.

Рис.5(5). Код для Pirate


Лодка
30

Лодка будет нуждаться в четырех переменных. x и y предоставят координаты


для заворачивания лодки, а и в дают координаты для замены якоря в
случайном месте после того, как он пересекается с лодкой.
Класс Лодки создает Бомбу, поэтому переменная, называемая бомбой,
должна быть записана внутри класса Лодки. Эта формулировка заключается
в том, как один класс вызывается в другой класс.
Единственный метод в act-это вызов fire On Command (). fireOnCommand()
является общедоступным для программы и выполняет действие (void).
Аргументом (входом) для этого метода в данном случае является буква “f”.
OceanWorld добавляет объект Бомба в том же месте, что и лодка (0, 0
смещение). Как только мы зададим команду Бомбе появиться под лодкой, мы
используем getX() и getY (), чтобы определить текущее положение лодки.
Затем в этом месте устанавливается начальное положение бомбы.
getRotation (направление, на которое указывает лодка) используется в
качестве аргумента для установки направления(setRotation) бомбы. Таким
образом, Бомба будет он направлен в том же направлении, что и Лодка, и,
следовательно, будет двигаться в том направлении, куда указывает Лодка.
31

anchor Disappear Appear использует


метод disappearAppear и заставляет
якорь исчезать, когда лодка
пересекается с ним, а затем снова
появляться в случайном месте.

Рис.6(5). Код для Boat


32

Якорь

Рис.7(5). Код для Anchor

Теперь скомпилируйте, исправьте ошибки по мере необходимости,


поместите лодку, нескольких Пиратов и несколько Якорей в OceanWorld и
играйте!
33

Вам также может понравиться