В этом видеоуроке мы научимся устанавливать дополнительные библиотеки и с их помощью строить 2D фигуры. Будет интересно! Поехали! Minecraft — компьютерная инди-игра в жанре песочницы. Python (Питон, Пайтон) — высокоуровневый язык программирования общего назначения. Короткие видео уроки будут интересны начинающим ученикам, которые хотят постепенно перейти от простого к сложному.
Понравилось видео – ставь лайк и подписывайся на канал: www.youtube.com/channel/UCenaLQKkLwAUmxmwzV8fJjg?sub_confirmation=1 Хочешь регулярно изучать новые уроки, жми на колокольчик и получай уведомления о новых видео! Нужен наставник? Онлайн уроки программирования в Клубе Пиксель Наш сайт: edu.clubpixel.ru/ Инстаграм: www.instagram.com/clubpixel.ru/ Вконтакте: vk.com/clubpixel_ru Подпишись на канал, напиши в комментариях о своих успехах и выиграй абонемент на 4 занятия с наставником! Удачи и до новых встреч!
СОЗДАЛ МАЙНКРАФТ НА PYTHON!
31.08.2020 15:00
Sound language:
RUS — Русский
Провайдер видео:
Ссылка на страницу ролика: Код ролика: Код для плейлиста: Размер видео: × Отменить Автозапуск воспроизведения Код для плейлиста Начинать с текущего видео
Источник: 12n.ru
Создание 2D платформера на Python
Для многих Python — это язык для написания веб проектов, машинного обучения или для анализа данных. На самом деле он более функционален и в этой статье мы вам это докажем.
Для реализации игр на Питон мы можем выбрать одну из нескольких библиотек. Можно работать с: Kivy, Tkinter, PyQt или же с любой другой библиотекой, что обеспечивает построение графического интерфейса через Python. Таких библиотек много, но мы возьмем библиотеку PyGame , которая даже своим названием говорит о её предназначении.
PyGame появился в 2000 году. С тех пор на его основе было сделано много интересных проектов . К сожалению, PyGame не универсален и разработка на нём ведется лишь под Андроид устройства.
Настройка проекта
Перед использованием PyGame его нужно установить через терминал. Прописываем команду:
pip install pygame
Для создания базового окна игры, необходимо лишь импортировать библиотеку, инициализировать главный объект, указать размеры, а также название окна и создать основной цикл, что должен вызываться постоянно и тем самым проект будет запущен и работать все время.
import pygame pygame.init() win = pygame.display.set_mode((500, 500)) # размеры X и Y pygame.display.set_caption(«Название игры») while(True): pass
Сюда же дописываем отслеживание действий пользователя. Если он закроет окно, то мы будем останавливать программу.
import pygame pygame.init() win = pygame.display.set_mode((500, 500)) # размеры X и Y pygame.display.set_caption(«Название игры») run = True while(run): for event in pygame.event.get(): if event.type == pygame.QUIT: run = False pygame.quit()
Создание платформера
Для создания платформера потребуется написать куда больше строк кода. Мы прикрепляем весь код проекта ниже. В коде есть комментарии для лучшего понимания:
import pygame # Переменные для установки ширины и высоты окна SCREEN_WIDTH = 800 SCREEN_HEIGHT = 600 # Подключение фото для заднего фона # Здесь лишь создание переменной, вывод заднего фона ниже в коде bg = pygame.image.load(‘bg.jpg’) # Класс, описывающий поведение главного игрока class Player(pygame.sprite.Sprite): # Изначально игрок смотрит вправо, поэтому эта переменная True right = True # Методы def __init__(self): # Стандартный конструктор класса # Нужно ещё вызывать конструктор родительского класса super().__init__() # Создаем изображение для игрока # Изображение находится в этой же папке проекта self.image = pygame.image.load(‘idle.png’) # Установите ссылку на изображение прямоугольника self.rect = self.image.get_rect() # Задаем вектор скорости игрока self.change_x = 0 self.change_y = 0 def update(self): # В этой функции мы передвигаем игрока # Сперва устанавливаем для него гравитацию self.calc_grav() # Передвигаем его на право/лево # change_x будет меняться позже при нажатии на стрелочки клавиатуры self.rect.x += self.change_x # Следим ударяем ли мы какой-то другой объект, платформы, например block_hit_list = pygame.sprite.spritecollide(self, self.level.platform_list, False) # Перебираем все возможные объекты, с которыми могли бы столкнуться for block in block_hit_list: # Если мы идем направо, # устанавливает нашу правую сторону на левой стороне предмета, которого мы ударили if self.change_x > 0: self.rect.right = block.rect.left elif self.change_x < 0: # В противном случае, если мы движемся влево, то делаем наоборот self.rect.left = block.rect.right # Передвигаемся вверх/вниз self.rect.y += self.change_y # То же самое, вот только уже для вверх/вниз block_hit_list = pygame.sprite.spritecollide(self, self.level.platform_list, False) for block in block_hit_list: # Устанавливаем нашу позицию на основе верхней / нижней части объекта, на который мы попали if self.change_y >0: self.rect.bottom = block.rect.top elif self.change_y < 0: self.rect.top = block.rect.bottom # Останавливаем вертикальное движение self.change_y = 0 def calc_grav(self): # Здесь мы вычисляем как быстро объект будет # падать на землю под действием гравитации if self.change_y == 0: self.change_y = 1 else: self.change_y += .95 # Если уже на земле, то ставим позицию Y как 0 if self.rect.y >= SCREEN_HEIGHT — self.rect.height and self.change_y >= 0: self.change_y = 0 self.rect.y = SCREEN_HEIGHT — self.rect.height def jump(self): # Обработка прыжка # Нам нужно проверять здесь, контактируем ли мы с чем-либо # или другими словами, не находимся ли мы в полете. # Для этого опускаемся на 10 единиц, проверем соприкосновение и далее поднимаемся обратно self.rect.y += 10 platform_hit_list = pygame.sprite.spritecollide(self, self.level.platform_list, False) self.rect.y -= 10 # Если все в порядке, прыгаем вверх if len(platform_hit_list) > 0 or self.rect.bottom >= SCREEN_HEIGHT: self.change_y = -16 # Передвижение игрока def go_left(self): # Сами функции будут вызваны позже из основного цикла self.change_x = -9 # Двигаем игрока по Х if(self.right): # Проверяем куда он смотрит и если что, то переворачиваем его self.flip() self.right = False def go_right(self): # то же самое, но вправо self.change_x = 9 if (not self.right): self.flip() self.right = True def stop(self): # вызываем этот метод, когда не нажимаем на клавиши self.change_x = 0 def flip(self): # переворот игрока (зеркальное отражение) self.image = pygame.transform.flip(self.image, True, False) # Класс для описания платформы class Platform(pygame.sprite.Sprite): def __init__(self, width, height): # Конструктор платформ super().__init__() # Также указываем фото платформы self.image = pygame.image.load(‘platform.png’) # Установите ссылку на изображение прямоугольника self.rect = self.image.get_rect() # Класс для расстановки платформ на сцене class Level(object): def __init__(self, player): # Создаем группу спрайтов (поместим платформы различные сюда) self.platform_list = pygame.sprite.Group() # Ссылка на основного игрока self.player = player # Чтобы все рисовалось, то нужно обновлять экран # При вызове этого метода обновление будет происходить def update(self): self.platform_list.update() # Метод для рисования объектов на сцене def draw(self, screen): # Рисуем задний фон screen.blit(bg, (0, 0)) # Рисуем все платформы из группы спрайтов self.platform_list.draw(screen) # Класс, что описывает где будут находится все платформы # на определенном уровне игры class Level_01(Level): def __init__(self, player): # Вызываем родительский конструктор Level.__init__(self, player) # Массив с данными про платформы. Данные в таком формате: # ширина, высота, x и y позиция level = [ [210, 32, 500, 500], [210, 32, 200, 400], [210, 32, 600, 300], ] # Перебираем массив и добавляем каждую платформу в группу спрайтов — platform_list for platform in level: block = Platform(platform[0], platform[1]) block.rect.x = platform[2] block.rect.y = platform[3] block.player = self.player self.platform_list.add(block) # Основная функция прогарммы def main(): # Инициализация pygame.init() # Установка высоты и ширины size = [SCREEN_WIDTH, SCREEN_HEIGHT] screen = pygame.display.set_mode(size) # Название игры pygame.display.set_caption(«Платформер») # Создаем игрока player = Player() # Создаем все уровни level_list = [] level_list.append(Level_01(player)) # Устанавливаем текущий уровень current_level_no = 0 current_level = level_list[current_level_no] active_sprite_list = pygame.sprite.Group() player.level = current_level player.rect.x = 340 player.rect.y = SCREEN_HEIGHT — player.rect.height active_sprite_list.add(player) # Цикл будет до тех пор, пока пользователь не нажмет кнопку закрытия done = False # Используется для управления скоростью обновления экрана clock = pygame.time.Clock() # Основной цикл программы while not done: # Отслеживание действий for event in pygame.event.get(): if event.type == pygame.QUIT: # Если закрыл программу, то останавливаем цикл done = True # Если нажали на стрелки клавиатуры, то двигаем объект if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: player.go_left() if event.key == pygame.K_RIGHT: player.go_right() if event.key == pygame.K_UP: player.jump() if event.type == pygame.KEYUP: if event.key == pygame.K_LEFT and player.change_x < 0: player.stop() if event.key == pygame.K_RIGHT and player.change_x > 0: player.stop() # Обновляем игрока active_sprite_list.update() # Обновляем объекты на сцене current_level.update() # Если игрок приблизится к правой стороне, то дальше его не двигаем if player.rect.right > SCREEN_WIDTH: player.rect.right = SCREEN_WIDTH # Если игрок приблизится к левой стороне, то дальше его не двигаем if player.rect.left < 0: player.rect.left = 0 # Рисуем объекты на окне current_level.draw(screen) active_sprite_list.draw(screen) # Устанавливаем количество фреймов clock.tick(30) # Обновляем экран после рисования объектов pygame.display.flip() # Корректное закртытие программы pygame.quit()
Также для игры вам потребуются картинки игрока и платформы. Вы можете их скачать ниже.
(фото на задний фон)
Источник: itproger.com
Python и Minecraft
Есть такая штука как «Minecraft Overviewer» — Штуковина, которая делает карту мира майна аля гугл-карта
Ну как-то так это выглядит
К этой карте прилагается инструкция и там есть раздел «Таблички и маркеры».
Итак, вопрос: Как делать свои маркеры на этой карте?
У меня разобраться не получилось, если тут найдется человек, у которого получится, то буду очень благодарна за инструкцию
-
15 января 2020, 23:40
В избранное
16 комментариев
Naked_Skull 15 января 2020, 23:41
О, на одном моём любимом серваке была такая карта)
Vibrissa 15 января 2020, 23:58
На серваках вроде другой плагин, а эта доя сингла то, что надо
Naked_Skull 16 января 2020, 00:04 ↑
Но то был DynMap
Dushess_az 27 января 2021, 17:07 ↑
ок, ща будет
TheOceanPony 16 января 2020, 04:34
Ну вот, пожалуйста, написал небольшой скрипт и мануал к этому ко всему.
С удовольствием помогу если возниктнут какие-либо проблемы.
Было довольно поздно, так что возможны ошибки… Заранее прошу за них прощения
Мануал 1 Установка 1) Идём сюда, и скачиваем подходящую вам версию.
2) Разархивруем архив в удобое для вас место.
3) Качаем этот фалик («myconfig.py») и ложим рядом с «overviewer.exe».
2 Настройка 1) Открываем «myconfig.py» (последний скачаный файл) любым текстовым редактором и редактируем первые две строки.
2) В первой указать путь к вашему миру. Например:
world_path = «C:/Users/Usr_name/AppData/Roaming/.minecraft/saves/MyWorld1»
3) Во второй — путь, куда будет сохранен рендер. Например:
output_path = «C:render»
3 В самой игре 1) В общем есть шесть типов маркеров:
home, marker, town, tower, mine, farm
(Они отличаются только значками, и есть двух цветов)
2) Для того чтобы маркер появился на карте нужно поставить табличку и написать в её 1-й строке одно из кодовых слов:
(После него на табличке можно описть всё что угодно, оно отобразится как описание маркера на карте)
Наглядно В игре:
На карте:
4 Запуск 1) Открывам консоль (Win + R и «cmd»)
2)
cd C:UsersusrnameDesktopoverviewer-0.15.2
overviewer.exe —config=myconfig.py
overviewer.exe —config=myconfig.py —genpoi
Если всё прошло успешно то в выходной папке (например «C:render») у вас должно было появиться много разных файлов.
5) Находите «index.html» и открываете его любым браузером
6) Вуаля, вы восхитительны!
TheOceanPony 16 января 2020, 06:41 ↑
Если всё прошло успешно то в выходной папке (например «C:render») у вас должно было появиться много разных файлов.
Файла нет, консоль пишет это, маркеры не появились 3:
Naked_Skull 16 января 2020, 08:38 ↑
Нет, вру, эти товарищи появились
Naked_Skull 16 января 2020, 09:02 ↑
Играл однажды на замечательных серваках, админы не школоло, ламповость игры присутствовала, торговля и простота сервера… Были времена, ща бы не отказался поиграть на ламповом серве.
Andrelyx 18 января 2020, 18:55
Могу подсказать одного стримера, у которого сервер для платных подписчиков довольно ламповый
Naked_Skull 18 января 2020, 18:56 ↑
Давай, гляну с удовольствием.
Andrelyx 18 января 2020, 19:07 ↑
Прошлая я, как ты в этом смогла разобраться 😀 диву даюсь)
Naked_Skull 21 мая 2022, 00:42
Оставлю тут новый «более рабочий» конфиг здесь, вместо облака:
myconfig.py
worlds = <> # Define the path to your world here. worlds[«MyWorld»] = r»C:UsersUserNameAppDataRoaming.minecraftsavesMySuperWorld» # Define where to put the output here. outputdir = r»C:UsersUserNameDesktopMap render» # Define the resourcepack (optional)(Remove ‘#’ before the line underneath). # texturepath = r»C:UsersUserNameDesktopresourcepack.zip» # Filters def marker_Filter(poi): if poi[‘id’] == «Sign» or poi[‘id’] == «minecraft:sign» or poi[‘id’] == «minecraft:oak_sign»: if poi[‘Text1’] == «»: # poi[‘icon’] = «markers/marker_location.png» return «n».join([poi[‘Text1’], poi[‘Text2’], poi[‘Text3’], poi[‘Text4’]]) def home_Filter(poi): if poi[‘id’] == «Sign» or poi[‘id’] == «minecraft:sign» or poi[‘id’] == «minecraft:oak_sign»: if poi[‘Text1’] == «»: # poi[‘icon’] = «markers/marker_home.png» return «n».join([poi[‘Text1’], poi[‘Text2’], poi[‘Text3’], poi[‘Text4’]]) def farm_Filter(poi): if poi[‘id’] == «Sign» or poi[‘id’] == «minecraft:sign» or poi[‘id’] == «minecraft:oak_sign»: if poi[‘Text1’] == «»: # poi[‘icon’] = «markers/marker_hoe_red.png» return «n».join([poi[‘Text1’], poi[‘Text2’], poi[‘Text3’], poi[‘Text4’]]) def town_Filter(poi): if poi[‘id’] == «Sign» or poi[‘id’] == «minecraft:sign» or poi[‘id’] == «minecraft:oak_sign»: if poi[‘Text1’] == «»: # poi[‘icon’] = «markers/marker_town.png» return «n».join([poi[‘Text1’], poi[‘Text2’], poi[‘Text3’], poi[‘Text4’]]) def playerIcons(poi): if poi[‘id’] == ‘Player’: poi[‘icon’] = «https://overviewer.org/avatar/%s» % poi[‘EntityId’] return «Last known location for %s» % poi[‘EntityId’] # Map layers renders[«MyWorld»] = < «world»: «MyWorld», «title»: «Overworld», «dimension»: «overworld», «rendermode»: «smooth-lighting», «markers»: [ dict(name=»marker», filterFunction=marker_Filter, icon=»markers/marker_location.png»), dict(name=»home», filterFunction=home_Filter, icon=»markers/marker_home.png»), dict(name=»farm», filterFunction=farm_Filter, icon=»markers/marker_hoe_red.png»), dict(name=»town», filterFunction=town_Filter, icon=»markers/marker_town.png») ], >renders[«MyWorld Cave»] = < «world»: «MyWorld», «title»: «Cave», «dimension»: «overworld», «rendermode»: «cave», «markers»: [ dict(name=»marker», filterFunction=marker_Filter, icon=»markers/marker_location.png»), dict(name=»home», filterFunction=home_Filter, icon=»markers/marker_home.png»), dict(name=»farm», filterFunction=farm_Filter, icon=»markers/marker_hoe_red.png»), dict(name=»town», filterFunction=town_Filter, icon=»markers/marker_town.png») ], >renders[«MyWorld Nether»] = < «world»: «MyWorld», «title»: «MyWorld Nether», «dimension»: «nether», «rendermode»: «nether», «markers»: [ dict(name=»marker», filterFunction=marker_Filter, icon=»markers/marker_location.png»), dict(name=»home», filterFunction=home_Filter, icon=»markers/marker_home.png»), dict(name=»farm», filterFunction=farm_Filter, icon=»markers/marker_hoe_red.png»), dict(name=»town», filterFunction=town_Filter, icon=»markers/marker_town.png») ], >renders[«MyWorld End»] = < «world»: «MyWorld», «title»: «MyWorld End», «dimension»: «end», «markers»: [ dict(name=»marker», filterFunction=marker_Filter, icon=»markers/marker_location.png»), dict(name=»home», filterFunction=home_Filter, icon=»markers/marker_home.png»), dict(name=»farm», filterFunction=farm_Filter, icon=»markers/marker_hoe_red.png»), dict(name=»town», filterFunction=town_Filter, icon=»markers/marker_town.png») ], >
TheOceanPony 23 мая 2022, 15:59
Хотел спросить, а потом оно как-то само решилось. Вернее как. Ностальгия, тщеславие и прокрастинация слились в единое желание развернуть интерактивную карту. Гамаю на 1.7.10 последняя версия что поддерживает Flan сея речь бибики Потому последняя версия Overview матюкается на отсутствие текстурок для новых блоков по типу адской древесины:
Накатал ресурс пак с текстурами 1.7.10 и патч для поддержки старой системы ID блоков. Без результатно.
Раскопал древнющую Overview v0.11.0, что писалась как раз под MC 1.7. Он устанавливается через треклятый setup.py ради которого мне пришлось накатывать Python 3.9, подключать Pip, докачивать Numpy с Pillow и всё ради того, что бы етот душнила напомнил о том, что его зовут питон:
Указал точный адресс етава душнилы-питона. На сей раз наебнулся уже сам setup.py:
Забыл и вернулся к актуальной версии Overviewer. Попробывал пойти от обратного и задать ресурс пак не как для вьювера (1.7.10), а как для майна (1.17). Внезапно сработало. Спустя 10 минут ожиданий у меня був следующий результат:
И тута я резко вспомнил, что играю ващет на ForgeOptiFine 1.7.10… Ну и не успел я даже подумать, как документация резко ответила:
McFord 23 мая 2022, 21:10
Ну, стоило ожидать что блоки из модов он не видит
Naked_Skull 23 мая 2022, 21:42 ↑
Для потомков
Чтобы было так:
Делай так:
worlds[«Prostoy SAVE. «] = «C:UsersUserNameAppDataRoaming.minecraftsavesMySuperWorld»» world = «Prostoy SAVE. » my_nether_lighting = [Base(), EdgeLines(), Nether(), SmoothLighting(strength=0.4)] my_end_lighting = [Base(), EdgeLines(), SmoothLighting(strength=0.4)] outputdir = «C:/Users/User/Desktop/rendermap» def marker_Filter(poi): if poi[‘id’] == «Sign» or poi[‘id’] == «minecraft:sign»: if poi[‘Text1’] == «»: return «n».join([poi[‘Text1’], poi[‘Text2’], poi[‘Text3’], poi[‘Text4’]]) def home_Filter(poi): if poi[‘id’] == «Sign» or poi[‘id’] == «minecraft:sign»: if poi[‘Text1’] == «»: return «n».join([poi[‘Text1’], poi[‘Text2’], poi[‘Text3’], poi[‘Text4’]]) def farm_Filter(poi): if poi[‘id’] == «Sign» or poi[‘id’] == «minecraft:sign»: if poi[‘Text1’] == «»: return «n».join([poi[‘Text1’], poi[‘Text2’], poi[‘Text3’], poi[‘Text4’]]) def town_Filter(poi): if poi[‘id’] == «Sign» or poi[‘id’] == «minecraft:sign»: if poi[‘Text1’] == «»: return «n».join([poi[‘Text1’], poi[‘Text2’], poi[‘Text3’], poi[‘Text4’]]) renders[«Day»] = < «title»: «Day Lighting», «rendermode»: lighting, «dimension»: «overworld», «markers»: [dict(name=»marker», filterFunction=marker_Filter), dict(name=»marker», filterFunction=marker_Filter, icon=»markers/marker_location.png»), dict(name=»home», filterFunction=home_Filter, icon=»markers/marker_home.png»), dict(name=»farm», filterFunction=farm_Filter, icon=»markers/marker_hoe_red.png»), dict(name=»town», filterFunction=town_Filter, icon=»markers/marker_town.png»)], >renders[«Cave»] = < «title»: «Cave», «rendermode»: cave, «dimension»: «overworld», «markers»: [dict(name=»marker», filterFunction=marker_Filter), dict(name=»marker», filterFunction=marker_Filter, icon=»markers/marker_location.png»), dict(name=»home», filterFunction=home_Filter, icon=»markers/marker_home.png»), dict(name=»farm», filterFunction=farm_Filter, icon=»markers/marker_hoe_red.png»), dict(name=»town», filterFunction=town_Filter, icon=»markers/marker_town.png»)], >renders[«Nether»] = < «title»: «Nether», «rendermode»: my_nether_lighting, «dimension»: «nether», «markers»: [dict(name=»marker», filterFunction=marker_Filter), dict(name=»marker», filterFunction=marker_Filter, icon=»markers/marker_location.png»), dict(name=»home», filterFunction=home_Filter, icon=»markers/marker_home.png»), dict(name=»farm», filterFunction=farm_Filter, icon=»markers/marker_hoe_red.png»), dict(name=»town», filterFunction=town_Filter, icon=»markers/marker_town.png»)], >renders[«End»] = < «title»: «End», «rendermode»: my_end_lighting, «dimension»: «end», «markers»: [dict(name=»marker», filterFunction=marker_Filter), dict(name=»marker», filterFunction=marker_Filter, icon=»markers/marker_location.png»), dict(name=»home», filterFunction=home_Filter, icon=»markers/marker_home.png»), dict(name=»farm», filterFunction=farm_Filter, icon=»markers/marker_hoe_red.png»), dict(name=»town», filterFunction=town_Filter, icon=»markers/marker_town.png»)], >
И вот так:
Источник: tabun.everypony.ru