- Курс-практикум «Педагогический драйв: от выгорания к горению»
- «Труд (технология): специфика предмета в условиях реализации ФГОС НОО»
- «ФАООП УО, ФАОП НОО и ФАОП ООО для обучающихся с ОВЗ: специфика организации образовательного процесса по ФГОС»
- «Специфика работы с детьми-мигрантами дошкольного возраста»
- «Учебный курс «Вероятность и статистика»: содержание и специфика преподавания в условиях реализации ФГОС ООО и ФГОС СОО»
- «Центр «Точка роста»: создание современного образовательного пространства в общеобразовательной организации»
Свидетельство о регистрации
СМИ: ЭЛ № ФС 77-58841
от 28.07.2014
- Бесплатное свидетельство – подтверждайте авторство без лишних затрат.
- Доверие профессионалов – нас выбирают тысячи педагогов и экспертов.
- Подходит для аттестации – дополнительные баллы и документальное подтверждение вашей работы.
в СМИ
профессиональную
деятельность
Игра в 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
БЕСПЛАТНО!
Для скачивания материалов с сайта необходимо авторизоваться на сайте (войти под своим логином и паролем)
Если Вы не регистрировались ранее, Вы можете зарегистрироваться.
После авторизации/регистрации на сайте Вы сможете скачивать необходимый в работе материал.
- «Организация работы с обучающимися с ОВЗ в практике учителя математики»
- «Специфика преподавания обществознания в условиях реализации ФГОС ООО от 2021 года»
- «Олигофренопедагогика: теория и технологии работы с обучающимися с ОВЗ»
- «Игровые технологии в работе с детьми дошкольного возраста»
- «Особенности деятельности методиста в системе среднего профессионального образования»
- «Индивидуальная работа педагога с родителями учеников»
- Изобразительное искусство и педагогическая деятельность в образовательных организациях
- Организация досуговых мероприятий и развитие социального партнёрства в дополнительном образовании детей
- Психологическое консультирование: оказание психологической помощи населению и трудовым коллективам
- Обучение детей с ограниченными возможностями здоровья в общеобразовательной организации
- Физическая культура и специфика организации адаптивной физической культуры для обучающихся с ОВЗ
- Организационно-педагогическое обеспечение воспитательного процесса в образовательной организации

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