Охрана труда:
нормативно-правовые основы и особенности организации
Обучение по оказанию первой помощи пострадавшим
Аккредитация Минтруда (№ 10348)
Подготовьтесь к внеочередной проверке знаний по охране труда и оказанию первой помощи.
Допуск сотрудника к работе без обучения или нарушение порядка его проведения
грозит организации штрафом до 130 000 ₽ (ч. 3 статьи 5.27.1 КоАП РФ).

Свидетельство о регистрации
СМИ: ЭЛ № ФС 77-58841
от 28.07.2014

Почему стоит размещать разработки у нас?
  • Бесплатное свидетельство – подтверждайте авторство без лишних затрат.
  • Доверие профессионалов – нас выбирают тысячи педагогов и экспертов.
  • Подходит для аттестации – дополнительные баллы и документальное подтверждение вашей работы.
Свидетельство о публикации
в СМИ
свидетельство о публикации в СМИ
Дождитесь публикации материала и скачайте свидетельство о публикации в СМИ бесплатно.
Диплом за инновационную
профессиональную
деятельность
Диплом за инновационную профессиональную деятельность
Опубликует не менее 15 материалов в методической библиотеке портала и скачайте документ бесплатно.
15.06.2025

Игра в Greenfoot «Лабиринт»

Барабанщикова Анастасия Евгеньевна
Педагог дополнительного образования
Данный код создает игру с переходами в трех уровнях. На каждом уровне есть условие, выполнив которое можно перейти на следующий уровень.
Лабиринты создаются при помощи двумерных массивов. Переход на другой уровень осуществляется с помощью switch-case.

Содержимое разработки

Г.Северобайкальск МАОУ ДО «ДДТ «Эврика»

Педагог дополнительного образования

программирование на языке Java

Барабанщикова Анастасия Евгеньевна

Лабиринт с тремя уровнями, врагами и монетами

Данный код создает игру с переходами в трех уровнях. На каждом уровне есть условие, выполнив которое можно перейти на следующий уровень.

Лабиринты создаются при помощи двумерных массивов. Переход на другой уровень осуществляется с помощью switch-case.

1. Класс MazeWorld (главный мир игры)

import greenfoot.*; // Импортосновныхклассов Greenfoot

public class MazeWorld extends World {

// Переменные уровня

private int currentLevel; // Текущийуровеньигры

private int coinsCollected = 0; // Счетчиксобранныхмонет

private int requiredCoins = 0; // Необходимое количество монет для завершения уровня

//Конструктормира

public MazeWorld(int level) {

super(10, 9, 50); // Создаеммир 10x9 клеток,размерклетки 50px

this.currentLevel = level; // Устанавливаем текущий уровень

removeObjects(getObjects(null)); // Очищаем мир от всех объектов

//Выборуровнячерез switch-case

switch(currentLevel) {

case 1:

createLevel1(); // Создаем 1 уровень

break;

case 2:

createLevel2(); // Создаем 2 уровень

break;

case 3:

createLevel3(); // Создаем 3 уровень

break;

default:

showVictoryScreen(); // Показываем экран победы если уровни закончились

return; }

// Добавляем игрока в начальную позицию(1,1)

addObject(new Player(currentLevel), 1, 1);

//Отображаемномертекущегоуровня

showText("Уровень: " + currentLevel, 5, 0); }

// Метод создания 1 уровня

private void createLevel1() {

//Массив,где 1 - стены, 0 - проходы

int[][] maze = {

{1,1,1,1,1,1,1,1,1,1},

{1,0,0,0,0,0,0,0,0,1},

{1,0,1,1,1,1,1,1,0,1},

{1,0,1,0,0,0,0,1,0,1},

{1,0,1,0,1,1,0,1,0,1},

{1,0,0,0,0,0,0,1,0,1},

{1,1,1,1,1,1,0,1,0,1},

{1,0,0,0,0,0,0,0,0,1},

{1,1,1,1,1,1,1,1,1,1}

};

buildMazeFromArray(maze); // Строим лабиринт из массива

addObject(new Exit(), 8, 7); // Добавляем выход }

// Метод создания 2 уровня (с монетами)

private void createLevel2() {

int[][] maze = {

{1,1,1,1,1,1,1,1,1,1},

{1,0,1,0,0,0,1,0,0,1},

{1,0,1,0,1,0,1,0,1,1},

{1,0,0,0,1,0,0,0,0,1},

{1,1,1,1,1,1,1,1,0,1},

{1,0,0,0,0,0,0,0,0,1},

{1,0,1,1,1,1,1,1,1,1},

{1,0,0,0,0,0,0,0,0,1},

{1,1,1,1,1,1,1,1,1,1}

};

buildMazeFromArray(maze);

//Добавляем 3 монетынауровень

addObject(new Coin(), 2, 1);

addObject(new Coin(), 5, 3);

addObject(new Coin(), 7, 5);

requiredCoins = 3; // Устанавливаем необходимое количество монет

addObject(new Exit(), 8, 7);

// Показываем счетчик монет внизу экрана

showText("Соберитевсемонеты: " + coinsCollected + "/" + requiredCoins, 5, 8); }

// Метод создания 3 уровня (с врагами и таймером)

private void createLevel3() {

int[][] maze = {

{1,1,1,1,1,1,1,1,1,1},

{1,0,0,0,1,0,0,0,0,1},

{1,1,1,0,1,0,1,1,0,1},

{1,0,0,0,1,0,0,1,0,1},

{1,0,1,1,1,1,0,1,0,1},

{1,0,0,0,0,0,0,1,0,1},

{1,1,1,1,1,1,0,1,0,1},

{1,0,0,0,0,0,0,0,0,1},

{1,1,1,1,1,1,1,1,1,1}

};

buildMazeFromArray(maze);

//Добавляемдвухврагов

addObject(new Enemy(), 4, 2);

addObject(new Enemy(), 6, 6);

//Добавляемтаймер (30 секунд)

addObject(new Timer(30), 5, 0);

addObject(new Exit(), 8, 7); }

// Метод для построения лабиринта из массива

private void buildMazeFromArray(int[][] maze) {

// Двойной цикл по всем элементам массива

for (int y = 0; y < maze.length; y++) {

for (int x = 0; x < maze[y].length; x++) {

if (maze[y][x] == 1) {

// Добавляем стену в позицию (x,y)

addObject(new Wall(), x, y);

} } } }

//Методвызываетсяприсборемонеты

public void coinCollected() {

coinsCollected++; // Увеличиваем счетчик

// Обновляем текст с количеством монет

showText("Соберитевсемонеты: " + coinsCollected + "/" + requiredCoins, 5, 8);

// Если собрали все монеты - активируем выход

if (coinsCollected >= requiredCoins) {

Exit exit = (Exit)getObjects(Exit.class).get(0);

exit.setActive(true); } }

// Метод для показа экрана победы

private void showVictoryScreen() {

showText("Выпрошливсеуровни!", 5, 4);

Greenfoot.playSound("victory.wav");

Greenfoot.stop(); // Останавливаемигру }}

2.Класс Player (игрок)

import greenfoot.*;

public class Player extends Actor {

private int moveDelay = 0; // Задержка между движениями

private int currentLevel; // Текущийуровеньигрока

// Конструктор с параметром уровня

public Player(int level) {

this.currentLevel = level; }

// Главный метод, вызывается каждый кадр

public void act() {

if (moveDelay > 0) {

moveDelay--; // Уменьшаемзадержку

} else {

movePlayer(); // Двигаемигрока

checkLevelSpecificActions(); // Проверяемспец.условияуровня

checkLevelComplete(); // Проверяемзавершениеуровня } }

//Методдвиженияигрока

private void movePlayer() {

int dx = 0, dy = 0; // Изменение координат

// Проверка нажатых клавиш

if (Greenfoot.isKeyDown("w")) dy = -1; // Вверх

if (Greenfoot.isKeyDown("s")) dy = 1; // Вниз

if (Greenfoot.isKeyDown("a")) dx = -1; // Влево

if (Greenfoot.isKeyDown("d")) dx = 1; // Вправо

// Если нет стены в направлении движения

if (!checkWall(dx, dy)) {

setLocation(getX() + dx, getY() + dy); // Меняемпозицию

moveDelay = 10; // Устанавливаем задержку } }

// Проверка наличия стены в направлении движения

private boolean checkWall(int dx, int dy) {

Actor wall = getOneObjectAtOffset(dx, dy, Wall.class);

return wall != null; // Возвращаем true если стена есть }

// Проверка специфических условий для каждого уровня

private void checkLevelSpecificActions() {

MazeWorld world = (MazeWorld)getWorld();

switch(currentLevel) {

case 2:

//Для 2 уровня:сбормонет

if (isTouching(Coin.class)) {

world.coinCollected(); // Уведомляеммиросборемонеты

removeTouching(Coin.class); // Удаляеммонету

Greenfoot.playSound("coin.wav"); // Звуксбора }

break;

case 3:

// Для 3 уровня: столкновение с врагами

if (isTouching(Enemy.class)) {

Greenfoot.playSound("hurt.wav"); // Звукповреждения

setLocation(1, 1); // Возвращаем в начало уровня

}

break; } }

// Проверка завершения уровня (достижение выхода)

private void checkLevelComplete() {

if (isTouching(Exit.class)) {

Exit exit = (Exit)getOneIntersectingObject(Exit.class);

// Проверяем активен ли выход (для уровней с монетами)

if (exit == null || exit.isActive()) {

Greenfoot.playSound("level_complete.wav");

//Переходимнаследующийуровень

Greenfoot.setWorld(new MazeWorld(currentLevel + 1)); } } }}

3.Класс Exit (выход)

import greenfoot.*;

public class Exit extends Actor {

private boolean active = false; // Активенливыход

public Exit() {

setImage("exit_inactive.png"); // Начальноеизображениенеактивноговыхода }

//Методдляактивации/деактивациивыхода

public void setActive(boolean active) {

this.active = active;

// Меняем изображение в зависимости от состояния

setImage(active ? "exit_active.png" : "exit_inactive.png"); }

// Проверка активности выхода

public boolean isActive() {

return active; }}

4.Класс Wall (стена)

import greenfoot.*;

public class Wall extends Actor {

public Wall() {

// Создаем изображение стены 50x50 пикселей

GreenfootImage image = new GreenfootImage(50, 50);

image.setColor(Color.BLUE); // Синийцвет

image.fill(); // Заполняем прямоугольник

setImage(image); // Устанавливаем изображение }}

5.Класс Coin (монета)

import greenfoot.*;

public class Coin extends Actor {

public Coin() {

setImage("coin.png"); // Устанавливаемизображениемонеты }}

6.Класс Enemy (враг)

import greenfoot.*;

public class Enemy extends Actor {

private int speed = 1; // Скоростьдвижения

private int direction = 1; // Направление (1 - вправо, -1 - влево)

public Enemy() {

setImage("enemy.png"); // Устанавливаем изображение врага }

public void act() {

move(speed * direction); // Двигаемсявтекущемнаправлении

// Если достигли края или стены - разворачиваемся

if (isAtEdge() || isTouching(Wall.class)) {

direction *= -1;

} }}

7.Класс Timer (таймер)

import greenfoot.*;

public class Timer extends Actor {

private int timeLeft; // Оставшеесявремя

private int actCount = 0; // Счетчиккадров

public Timer(int seconds) {

this.timeLeft = seconds;

updateImage(); // Обновляемизображениетаймера }

public void act() {

actCount++;

// Каждые 60 кадров (примерно 1 секунда)

if (actCount % 60 == 0) {

timeLeft--; // Уменьшаем время

updateImage(); // Обновляем отображение

// Если время вышло

if (timeLeft <= 0) {

// Вызываем завершение игры в мире

((MazeWorld)getWorld()).gameOver("Время вышло!"); } } }

// Обновление изображения таймера

private void updateImage() {

// Создаем текстовое изображение с оставшимся временем

GreenfootImage text = new GreenfootImage("Время: " + timeLeft, 24, Color.WHITE, Color.BLACK);

setImage(text); }}

8.Класс GameStarter (запускигры)

import greenfoot.*;

public class GameStarter extends World {

public GameStarter() {

super(1, 1, 1); // Минимальныймир (1x1)

//Запускаемигрус 1 уровня

Greenfoot.setWorld(new MazeWorld(1)); }}

Это полная прокомментированная реализация многоуровневой игры "Лабиринт" с:

  • Тремя уникальными уровнями

  • Системой сбора монет

  • Движущимися врагами

  • Таймером уровня

  • Активными/неактивными выходами

  • Переходами между уровнями

Адрес публикации: https://www.prodlenka.org/metodicheskie-razrabotki/612910-igra-v-greenfoot-labirint

Свидетельство участника экспертной комиссии
Рецензия на методическую разработку
Опубликуйте материал и закажите рецензию на методическую разработку.
Также вас может заинтересовать
Свидетельство участника экспертной комиссии
Свидетельство участника экспертной комиссии
Оставляйте комментарии к работам коллег и получите документ
БЕСПЛАТНО!
У вас недостаточно прав для добавления комментариев.

Чтобы оставлять комментарии, вам необходимо авторизоваться на сайте. Если у вас еще нет учетной записи на нашем сайте, предлагаем зарегистрироваться. Это займет не более 5 минут.

 

Для скачивания материалов с сайта необходимо авторизоваться на сайте (войти под своим логином и паролем)

Если Вы не регистрировались ранее, Вы можете зарегистрироваться.
После авторизации/регистрации на сайте Вы сможете скачивать необходимый в работе материал.

Рекомендуем Вам курсы повышения квалификации и переподготовки