Как сделать шашки на скретч
Добавил пользователь Morpheus Обновлено: 06.09.2024
Ко мне на занятие приходит новый мальчик лет 10 лет, Максим. Перед началом он презрительно осматривает группу ребят 7-9 лет, все младше него. И говорит: Антон, ну а Скретч же уже нигде не используют, сейчас же на более сложных языках детей учат программировать?
Я: есть и другие языки, а ты на Скретче умеешь работать?
Он: Ну да, делал программы.
Я: отлично, садись, посмотрим что ты умеешь.
Программа такая: наверху экрана плавают 5 воздушных шариков, внизу — ракета, которой мы управляем клавишами влево-вправо. По нажатию на пробел ракета должна вылетать наверх и лопать шарики. Когда все шарики лопнули, показать экран победы.
Ребята бросаются в бой — кто-то начинает с расстановки шариков, кто-то с ракеты и ее управления. Через несколько минут показывают свои программы — шарики висят, ракета ездит влево-вправо.
Замечаю, что новенький Максим сидит, в ступоре глядя, как Сережа рядом быстро делает игру.
— Не пойму, с чего начать?
Я подсказываю — выбери шарики, задай им положение на сцене.
— А как это сделать?
Показываю…
— А как стрельбу сделать?
Рассказываю — делаешь отдельный объект-пулю, она невидимо перемещается за ракетой и следит за нажатием пробела — когда нажимаем, она летит наверх.
— Ничего не понял — как невидимо перемещается, как летит?
В итоге намучался я с этим опытным мальчиком. Как делать плавное движение — не знал, с координатами не разобрался, клонирование не понял. Оказалось, что в такой простой штуке, как Скретч, есть вещи, которых парень не знал. И это базовые вещи — движение, управление объектами…
Зато в конце занятия он начал мне рассказывать, что создает сервер для Майнкрафта.
Такую точку зрения среди ребят я встречаю не первый раз. Что визуальное программирование, где нужно блоки перетаскивать — это просто стыд и позор, ясельная группа:
А вот сервера создавать — для GTA или Майнкрафта — это настоящее крутое программирование.
Действительно ли Скретч — бесполезная трата времени и нужно ли переключать детей на более сложные вещи? Давайте смотреть.
Мнимая крутизна
Что означает, что ребенок создает игровые сервера? Говоря простыми словами, он берет готовую игру, копирует ее и меняет настройки. Что меняет:
— Притяжение (гравитацию)
— длительность дня
— силу удара персонажей
— количество жизней у героя
И задача программирования в том, что ребенок в четко оговоренном месте меняет несколько чисел.
/time set day — и в Майнкрафте наступил день.
/summon horse — и уже бежит квадратная лошадь
Вроде бы в этом нет ничего серьезного? Да, серьезного в выполнении простых команд ничего нет. Умственных усилий при таком программировании почти не прикладывается. Но у ребенка перед глазами совсем другая игра, к которой он приложил руку. И ему кажется, что он сам создал весь этот новый мир. Это открывает ребенку новые возможности:
— Можно говорить друзьям “я вчера новый сервер Майнкрафта сделал”
— Можно считать себя настоящим программистом, который пишет код
— Помечтать о том, что в его версию майнкрафта будут играть тысячи человек и на этом можно заработать
Это мнимая крутизна , давайте помнить что ребенок просто написал три команды по инструкции.
Пар из ушей
Теперь подсмотрим за ребенком, который делает игру в Скретче. Игра такая — мы играем за башню, на которую нападают монстры. Монстры лезут с разных сторон, а мы должны стрелять по ним.
С чего начну? Наверное, с башни, которая стоит посередине и просто стреляет. Потом сделаю монстров, чтобы просто бежали. Потом уже все остальное.
Готовой башни нет, надо поискать в интернете. Вот эта подходит. Добавляю в программу, делаю первые скрипты: чтобы была посередине, чуть поменьше размером.
Так, теперь стрельба. Делаю пулю, пусть следит за направлением мышки. Делаю обработчик клавиши пробел — теперь пуля вылетает в сторону курсора мыши. Отлично!
Непорядок, у нас получается только одна пуля, которая все время вылетает при выстреле. Получается, нельзя выстрелить, пока пуля не улетела за край экрана? Придется заморочиться с созданием клонов — пусть летят клоны, настоящая пуля будет скрыта.
А лучше сделать перерыв, чайку попить…
Оставим ребенка, пусть отдохнет. Вы тоже заметили, что у него шестеренки в голове работали на полную мощность?
Это и есть настоящее программирование — когда приходится решать массу задач, не теряя из виду главные — какую игру я делаю, на каком этапе я сейчас нахожусь. Идти на компромиссы, подсматривать в видео-обучалки, задавать вопросы на форуме, искать в интернете.
Пар из ушей во время программирования — это нормально, так и должно быть. Когда дети пишут программы на Scratch, то пар идет.
Бесполезное развлечение?
Теперь о том, полезны ли занятия Скретчем с детьми или это баловство?
Давайте начнем с плохого, с минусов Скретча:
? Из-за блоков программы получаются громоздкими. Блоки с движениями героя и сменой его внешности сразу занимают много места. Если же мы начинаем добавлять разные штуки вроде переходов по уровням или стрельбы, программа быстро вырастает.
Дети могут потеряться в программе, их нужно специально учить организовывать свой код. Иначе получится свалка из разных блоков.
? Перетаскивание блоков утомляет. Чтобы собрать простое движение героя, нужно сбегать за разными блоками — движение, проверки на нажатие клавиши, циклы. Первые программы получаются медленно. Должно пройти время прежде чем ребенок начнет быстро ориентироваться в готовых кирпичиках команд.
? Сложно сделать что-то сложное. В Скретче нет готовых игровых блоков — физики игры, управления персонажами, собиранием предметов и так далее — все нужно делать своими руками. Поэтому выйти на новый уровень, создать сложные и интересные игры не так-то просто. Подавляющее большинство детских проектов однообразны и примитивны — догонялки, стрелялки, кликеры. Создавать что-то сложнее детям самим непросто, их нужно этому специально учить.
Теперь поговорим о хороших сторонах Скретча.
? Главная польза в том, что во время занятий ребенок активно думает. Ему приходится. Ничего не делается само собой. Чтобы герой плавно двигался, прыгал с одной стороны карты на другую, выпускал по несколько пуль сразу — все это нужно делать своими руками. Использовать клоны или нет? Как перебрасывать героя по координатам? Масса задач и проблем, которые приходится решать здесь и сейчас. Отличная тренировка для мозгов.
? Дети осваивают простые инструменты компьютерного языка — циклы, условия, алгоритмы. Да, это происходит в визуальном виде, вместо настоящего
Здравствуйте. Почему у меня шашки появляются сверху, а не снизу? Ответьте пожалуйстаааа ??!
Tashmamet Orozaliev
Grigor Mkrtchyan
а куда то в небеса
Grigor Mkrtchyan
не получается у меня я пишу (х -180)и (у -150) он не идет туда
ZAKATAKA
Ааа вообще-то шашки не так ходят
банка помидоров
слелай с ботом плиз
Gamer 2.0
Сделайте игру гонки с ботами
Karlen
Ярослав Василенко
Чтобы сделать квадрат в скретч 2.0 то надо сначала удержать клавишу Shift там где стрелка вверх и нарисовать
Дэхольский маппер
То чувство когда ты слушаешь в наушниках.
DEVAR VA MINECRAFT
LegaBrawler
Круто! Очень жду 2 часть.
ITGENIO Молодцы.
ЖДУ 2 ЧАСТЬ, ВЫ ЛУЧШИЕ В СРЕТЧЕ.
КСТАТИ ТЕПЕРЬ ЭТО СКРЕТЧ 3.
Иллка Иллкович
Сделайте симулятор курьера (яндекс еды) чтобы сделать карту, сделайте отдельный спрайт, где один костюм это маленькая точка а другой это карта.
Когда флаг нажат
Установить X 0 Y 0
Изменить костюм на точка
Установить размер 900
Изменить костюм на карта.
Я ищу, чтобы изучить некоторые основы по картезианской геометрии или координированным игровым программам. Платформа не имеет значения, хотя я больше всего разбираюсь в JavaScript, C, Objective-C. В конечном итоге быть в состоянии создать что-то вроде точек или шашек было бы идеально. Идея заключается в том, чтобы узнать, как спрайты работают и как программа работает программно. Мой вопрос к вам, люди, где лучшее место для изучения основ? Что-то, что не является математическим тяжелым, потому что, чтобы быть откровенным, что-то еще более продвинутое, чем исчисление для меня в этот момент, является серой линией и требует обновления моей памяти.
Если есть конкретная книга, сайт или проект с открытым исходным кодом - это, вероятно, поможет мне больше всего.
Спасибо за любые идеи.
ОТВЕТЫ
Ответ 1
Я думаю, что есть еще несколько шагов для достижения вашей цели, которая понимает основы игрового программирования. Вы упомянули понимание спрайтов и путей, которые необходимы для игрового программирования, но я думаю, что изначально вы должны потратить немного времени на понимание программирования и методологии общего графического взаимодействия с пользователем.
Вот список руководств и руководств, которые, я думаю, будут очень полезны для вас, как и для меня и других:
- Это чрезвычайно подробное руководство для Java Game Framework, которое включает полный исходный код и полную прогулку (с исходным кодом) написания печально известной игры "Змея" на Java, в комплекте с панелью управления, счетной доской и звуковыми эффектами!
- Книга "Начало программирования Java 5 Game" Джонатана С. Харбора представит вам такие понятия, как 2D-векторная графика и растровое изображение, включая sprite animation. Кроме того, вы можете использовать его на Amazon Marketplace за 12 долларов США.
- Здесь - невероятное учебное пособие по Sprite Animation, которое содержит более 5 частей! Плюс это написал Ричард Болдуин, профессор CompSci и чрезвычайно надежный и знающий источник. Для получения дополнительных уроков от него это его сайт.
Между этими источниками вы будете обладать методологией частей, которые входят в игру, которые применимы на любом языке, а также знание того, как эти части могут быть реализованы.
Ответ 2
У O'Reilly есть отличный учебник по простой разработке игр с использованием Objective-C и Cocoa на Mac. Линии действий.
Ответ 3
othello, и книга, конечно же, известная PAIP by Питер Норвиг
Ответ 4
На сайте перейдите на страницу Статьи и ссылки, в которой содержатся статьи, написанные разработчиками по различным темам игры.
Вы не узнаете об автомобильном двигателе, прочитав руководство Chilton; вам нужно вытащить капюшон и замарать руки!
Надеюсь, что это поможет.
Ответ 5
В настоящее время я работаю над программой шашек, используя pygame. Это просто за гранью воображения, чтобы заставить графику работать, а математика, необходимая для движения жидкости, - это просто векторы и векторная анимация.
Каждый прямоугольник или квадрат на доске имеет центральную и центральную координаты. Следующая квадратная диагональ слева - centerx - 82, а centery + 82 или следующая диагональ справа - centerx + 82 и centery + 82. Скачок - всего две диагонали. Сделайте функции отдельными для модуляции вашего кода и без большой математики вы получите простую программу шашек. Легко.
Ответ 6
Ну, для Java существует API под названием GridWorld (его использовали в качестве примера для экзамена AP Computer Science, поэтому я знаком с ним). Он использует систему координат, поэтому вы можете чему-то научиться, глядя на нее.
Ответ 7
Вы, вероятно, захотите понять minimax и Alpha Бета-обрезка.
Ответ 8
Анимация Sprite будет существенно отличаться в зависимости от того, на какой платформе вы решите включить свою программу, и любая общая ссылка для анимации на этой платформе поможет вам в этом. Если вы хотите снимать для Java, ссылки Yoely выглядят неплохо.
Для игры AI я рекомендую вам проверить Искусственный интеллект: современный подход от Рассела и Норвига. Это выглядит пугающе, и понимание большей части книги будет иметь практическое знание концепций математики высокого уровня. Тем не менее, он привлекателен и хорошо написан, и вы, вероятно, можете пройти его через первые десятки глав или около того, не попав ни в какие математические наземные мины. Алгоритмы и концепции в этой книге будут более чем достаточно, чтобы помочь вам программировать AI для простой игры и даже помочь вам решить одну из них.
Ответ 9
Мое предложение состояло в том, чтобы использовать среду языка/разработки, которая упрощает работу с спрайтами.
Веб-сайт Scratch содержит тысячи проектов, которые вы можете загружать и редактировать прямо в среде разработки.
Кроме того, есть хороший онлайн-форум, заполненный полезными людьми, если вы застряли!
Как только вы сделаете игру с помощью Scratch, вы можете загрузить/поделиться ею прямо из среды разработки или опубликовать ее на своем собственном веб-сайте (хотя это требует некоторых действий).
Надеюсь, что это поможет.
Ответ 10
Это, вероятно, один из самых известных сайтов для игр/графики в сети. Его форумы подчиняются вычислительной геометрии, алгоритмам и всем уровням концепций программирования графического процессора.
Вы могли бы получить здесь большую помощь. На этом сайте есть много статей по теме игрового программирования, из которых вы можете увидеть примеры и понять мыслительные процессы, связанные с объединением этих систем.
Ответ 11
Python отлично подходит для начала работы, а также доступные примеры и учебные пособия.
- Перемещение вправо-влево (отдельно этот код описан в проекте — Едущая машинка (scratch для детей 6-7 лет))
- Движение с изменением направления персонажа
- Прыжок вверх (отдельное описание кода смотрите в статье — Как сделать прыжок в Scratch)
- Появление и исчезновение спрайтов
- Взаимодействие нескольких спрайтов (удар мечом, запуск молнии в противника)
- Запрыгивание на другой объект
- Преобразование спрайта в другой объект
Теперь поговорим о каждом из приведенных выше алгоритмах scratch по отдельности. Перед прочтением материала по возможности ознакомьтесь со статьями начального уровня — их я помечаю тегом: для детей 6-7 лет в основной рубрике по детскому программированию. Перед прочтением скачайте графическую часть будущей игры (ZIP-архив)
Программируем движение с изменением направления персонажа
Загружаем начальную графику для игры. Для начала загружаем спрайт и подгружаем первые три костюма для объекта. Если вы не знаете как загрузить спрайт и костюмы, то посмотрите начальные уроки по Скрейт на этом сайте. Дело не в том, что мне лень это написать здесь, а в том, что безопытные пользователи не смогу разобраться в следующем коде. Подробного описания не будет, так как материал расчитан на детей уже знакомых со Скрейтч. И так загружаем графику из скаченного архива:
Последовательность костюмов для идущего ниндзя
Ниндзя бьет по противникам в Скрейтч
Сразу загрузим костюм для Бомбермена (одного из врагов ниндзя)
Загружаем костюмы для первого врага
Переходим к написанию кода для движения нашего героя с разворотом в направлении выбранном нами на контроллере управления (пульт, джойстик, клавиатура или виртуальные кнопки). Для движения вправо готовый код выглядит следующим образом (движение вправо пишите самостоятельно):
- Блок Показать — добавлен сюда из-за использования параметра Спрятаться в другом месте игры (пока можете написать код без него);
- Блок Если касается края, оттолкнуться — позволяет персонажу не уходить за края игровой области (попробуйте вначале написать этот код и не добавлять блок Установить способ вращения и посмотрите, что получится);
- Установить способ вращения вправо-влево — добавление кода позволяет убрать у персонажа эффект переворачивания с ног на голову при отталкивания от края;
- Повернуть в направлении -90 — этот код является основным в алгоритме движения спрайта с разворотом в нужном направлении и отвечает непосредственно за поворот в нудном направлении;
- Идти 10 шагов — отвечает за скорость перемещения персонажа. Отвечает за движение спрайта в том направлении, куда он повернут. Те.е герой не всегда будет идти слева на право ! (поиграйтесь с значением данного блока, а так же попробуйте использовать его без блока Повернуть в направлении -90 градусов)
- Ждать 0,05 секунд — код добавлен для плавной смены костюмов и визуальной видимости тго, что спрайт идет.
- Следующий костюм — после каждого нажатия на кнопку персонаж будет менять костюм (попробуйте понажимать на кнопку медленно,а затем просто зажмите ее и посмотрите, что из этого выйдет)
В этой части вы самостоятельно пишите код для движения вправо, а так же позиционирование персонажа при нажатии на запуск игры (Зеленый флажок). Не переживайте, в конце игры будет архив с фотографиями всего программного кода.
Алгоритм прыжка вверх в Scratch
Подробное описание смотрите в статье — Как сделать прыжок в Scratch). Код для ниндзя будет иметь следующий вид:
Описание запрограммированных блоков:
- Показать — показывает персонажа, если до этого по какой-то причине он имел параметр Скрыть (в нашем случае именно так);
- Задать скорость прыжка значение 0 — Заводим переменную с названием: Скорость прыжка и устанавливаем значение: 0
- Повторять всегда — блок, который позволяет постоянно выполнять указанный внутри код. Простейший цикл.
- Если … то — простейший алгоритм условия. Выполняется в зависимости от действий на контроллере управления (клавиатуре)
- Клавиша W нажата — непосредственное указание, пояснение думаю не требуется ?
- Задать Скорость прыжка значение 20 — устанавливаем значение переменной равное 20 (поиграйтесь с этим параметром и посмотрите, что изменится при его корректировки)
- Повторить 41 раз — цикл с определенным количеством повторений (Как ты думаешь изменив это значение, что изменится в действиях спрайта?)
- Изменить y на скорость прыжка — меняем визуальное расположение спрайта в зависимости от значений в переменной. Данный алгоритм кода позволяет видеть плавный прыжок спрайта с постоянным изменением высоты прыжка)
- Изменить скорость прыжка на -1 — блок отвечает за плавное опускание спрайта по y на изначальное место.
Появление и исчезновение спрайта — удар персонажа в игре
Чтобы проше написать алгоритм кода для удара ниндзя мечом создаем новый спрайт и загружаем 3 костюма удара мечом по противнику. Так как этот спрайт будет невидим во время старты игры и движения вправ и влево, а так же прыжка вверх, то добавляем следующий код:
Описание блоков:
- Когда Зеленый флаг нажат — спрятать спрайт
- Когда клавиша а нажата — спрятать спрайт (Обратите внимание на блоки синего цвета. Попробуйте вначале написать код без них и посмотрите,что изменится после их добавления!)
- Когда клавиша d нажата — все так же прячем объект (Вопрос: Как ты думаешь почему для клавиш A и D описаны дополнительные синие блоки, а для прыжка вверх и запуска игры нет?)
- Когда клавиша w нажата — прячем героя во время прыжка
Зачем написан алгоритм синего цвета:
Этот небольшой код позволяет разворачивать персонаж (а мы помним, что бьющий ниндзя — это другой спрайт) в ту сторону откуда идет противник. Без этого блока алгоритмов враг заходил бы слева от персонажа, а меч махал бы справа.
Читайте также: