Pull to refresh

Comments 11

Практический кейс #3: Генерация идей и псевдокод

Подход: AI используется для мозгового штурма и создания высокоуровневого плана решения задачи.

Реализация: для сложного проекта "Клон Minecraft" ученик запрашивает идеи о структуре проекта:

Ученик: "Как организовать код для создания упрощенной версии игры типа Minecraft на Python? Я хочу разбить это на модули."

DeepSeek пишет:

Организация кода для упрощенной Minecraft-подобной игры на Python

Для создания упрощенной версии Minecraft на Python с модульной структурой я рекомендую следующую организацию кода:

Основные модули

  1. main.py - Главный файл для запуска игры

from game_engine import GameEngine

def main():
    game = GameEngine()
    game.run()

if __name__ == "__main__":
    main()
  1. game_engine.py - Ядро игры, управляющее всеми процессами

import pygame
from world import World
from player import Player
from rendering import Renderer
from settings import *

class GameEngine:
    def __init__(self):
        pygame.init()
        self.screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
        pygame.display.set_caption("Python Minecraft Clone")
        self.clock = pygame.time.Clock()
        self.running = True
        
        self.world = World()
        self.player = Player()
        self.renderer = Renderer(self.screen, self.world, self.player)
    
    def run(self):
        while self.running:
            self.handle_events()
            self.update()
            self.render()
            self.clock.tick(FPS)
    
    def handle_events(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.running = False
            # Обработка других событий
    
    def update(self):
        self.player.update(self.world)
        # Другие обновления
    
    def render(self):
        self.renderer.render()
        pygame.display.flip()
  1. settings.py - Конфигурационные параметры

# Display settings
SCREEN_WIDTH = 1024
SCREEN_HEIGHT = 768
FPS = 60

# World settings
CHUNK_SIZE = 16
WORLD_HEIGHT = 64

# Player settings
PLAYER_SPEED = 5
GRAVITY = 0.5
JUMP_STRENGTH = 10

# Colors
SKY_COLOR = (135, 206, 235)
  1. world.py - Генерация и управление игровым миром

import numpy as np
from noise import snoise2  # Для генерации шума Перлина
from block import Block
from settings import *

class World:
    def __init__(self):
        self.chunks = {}
        self.generate_terrain()
    
    def generate_terrain(self):
        # Простая генерация ландшафта с использованием шума Перлина
        for x in range(-2, 3):
            for z in range(-2, 3):
                self.generate_chunk(x, z)
    
    def generate_chunk(self, chunk_x, chunk_z):
        chunk_blocks = np.zeros((CHUNK_SIZE, WORLD_HEIGHT, CHUNK_SIZE), dtype=object)
        
        for x in range(CHUNK_SIZE):
            for z in range(CHUNK_SIZE):
                world_x = chunk_x * CHUNK_SIZE + x
                world_z = chunk_z * CHUNK_SIZE + z
                
                # Генерация высоты с использованием шума
                height = int(snoise2(world_x * 0.1, world_z * 0.1, octaves=3) * 5 + WORLD_HEIGHT // 2)
                
                for y in range(WORLD_HEIGHT):
                    if y < height - 3:
                        chunk_blocks[x, y, z] = Block("STONE")
                    elif y < height:
                        chunk_blocks[x, y, z] = Block("DIRT")
                    elif y == height:
                        chunk_blocks[x, y, z] = Block("GRASS")
        
        self.chunks[(chunk_x, chunk_z)] = chunk_blocks
    
    def get_block(self, x, y, z):
        # Получение блока по координатам
        chunk_x = x // CHUNK_SIZE
        chunk_z = z // CHUNK_SIZE
        
        if (chunk_x, chunk_z) not in self.chunks:
            return None
        
        local_x = x % CHUNK_SIZE
        local_z = z % CHUNK_SIZE
        
        if 0 <= y < WORLD_HEIGHT:
            return self.chunks[(chunk_x, chunk_z)][local_x, y, local_z]
        return None
  1. block.py - Класс блока и его свойства

class Block:
    BLOCK_TYPES = {
        "AIR": {"solid": False, "color": (0, 0, 0, 0)},
        "GRASS": {"solid": True, "color": (34, 139, 34)},
        "DIRT": {"solid": True, "color": (139, 69, 19)},
        "STONE": {"solid": True, "color": (128, 128, 128)}
    }
    
    def __init__(self, block_type="AIR"):
        self.type = block_type
        self.properties = self.BLOCK_TYPES.get(block_type, self.BLOCK_TYPES["AIR"])
    
    def is_solid(self):
        return self.properties["solid"]
    
    def get_color(self):
        return self.properties["color"]
  1. player.py - Управление игроком

from settings import *

class Player:
    def __init__(self):
        self.x = 0
        self.y = WORLD_HEIGHT
        self.z = 0
        self.velocity_y = 0
        self.on_ground = False
    
    def update(self, world):
        # Обработка движения и гравитации
        keys = pygame.key.get_pressed()
        
        # Горизонтальное движение
        if keys[pygame.K_w]:
            self.z -= PLAYER_SPEED
        if keys[pygame.K_s]:
            self.z += PLAYER_SPEED
        if keys[pygame.K_a]:
            self.x -= PLAYER_SPEED
        if keys[pygame.K_d]:
            self.x += PLAYER_SPEED
        
        # Прыжок
        if keys[pygame.K_SPACE] and self.on_ground:
            self.velocity_y = -JUMP_STRENGTH
            self.on_ground = False
        
        # Гравитация
        self.velocity_y += GRAVITY
        self.y += self.velocity_y
        
        # Проверка столкновений с землей
        block_below = world.get_block(int(self.x), int(self.y + 0.5), int(self.z))
        if block_below and block_below.is_solid() and self.y + 0.5 >= int(self.y + 0.5):
            self.y = int(self.y + 0.5) - 0.5
            self.velocity_y = 0
            self.on_ground = True
        else:
            self.on_ground = False
  1. rendering.py - Визуализация игры

import pygame
from settings import *

class Renderer:
    def __init__(self, screen, world, player):
        self.screen = screen
        self.world = world
        self.player = player
    
    def render(self):
        # Очистка экрана
        self.screen.fill(SKY_COLOR)
        
        # Простой рендеринг - вид сверху
        block_size = 10
        for x in range(-20, 20):
            for z in range(-20, 20):
                for y in range(WORLD_HEIGHT - 1, -1, -1):
                    block = self.world.get_block(
                        int(self.player.x) + x,
                        y,
                        int(self.player.z) + z
                    )
                    if block and block.is_solid():
                        screen_x = SCREEN_WIDTH // 2 + (x - z) * block_size
                        screen_y = SCREEN_HEIGHT // 2 + (x + z) * block_size // 2 - y * block_size
                        
                        pygame.draw.rect(
                            self.screen,
                            block.get_color(),
                            (screen_x, screen_y, block_size, block_size)
                        )
                        break  # Рендерим только верхний блок в столбце

Дополнительные модули (для расширения функциональности)

  1. inventory.py - Управление инвентарем

  2. crafting.py - Система крафтинга

  3. biomes.py - Генерация различных биомов

  4. entities.py - Мобы и другие сущности

  5. saving.py - Сохранение и загрузка мира

Зависимости

Для этого проекта вам понадобятся:

  • pygame для графики и ввода

  • noise для генерации шума Перлина (можно установить через pip install noise)

Советы по развитию проекта

  1. Начните с простой 2D-визуализации (как в коде выше)

  2. Постепенно добавляйте 3D-рендеринг (используя OpenGL или Pygame 3D)

  3. Реализуйте систему чанков для оптимизации

  4. Добавьте больше типов блоков и материалов

  5. Реализуйте систему освещения и день/ночь

Такой модульный подход позволит вам легко расширять функциональность игры и поддерживать код в чистоте.

Несколько советов для дальнейшей разработки:

  1. Начните с минимальной версии

    • Сначала сделайте базовое движение, генерацию мира и отрисовку простых блоков.

    • Потом добавляйте более сложные механики (инвентарь, крафтинг, врагов).

  2. Используйте отладку

    • Если что-то работает не так, выводите значения переменных через print().

    • Например, можно проверять координаты игрока или наличие блоков вокруг.

  3. Оптимизируйте рендеринг

    • В текущем примере рендеринг простой, но если мир станет большим, игра начнёт тормозить.

    • Позже можно добавить:

      • Отсечение невидимых блоков (рендерить только то, что видит игрок).

      • Чанкование (загружать только ближайшие части мира).

  4. Постепенно усложняйте генерацию мира

    • Сначала сделайте плоский мир (для тестов).

    • Потом добавьте холмы (noise).

    • Затем — пещеры, деревья, воду.

Если захотите добавить 3D, можно использовать:

  • PyOpenGL (сложнее, но мощнее)

  • Ursina Engine (удобная библиотека для voxel-игр)

Удачи в разработке! 🚀 Если нужно что-то доработать или объяснить подробнее — пишите.

Проблеме ИИ не в замене программистов, а в непомерных аппетитов. В ближайшие год-два у человечества не останется электричества и воды из-за AI. Потом вспомните, как сами стали причиной трагедии.

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

Спасибо за очень и очень интересный комментарий!!! в части энергопотребления: да, дата-центры для AI потребляют много ресурсов, но утверждение о том, что "человечество останется без электричества и воды" в ближайшие годы, на мой взнляд, представляется преувеличением. Ведутся активные исследования по повышению энергоэффективности AI-систем и использованию возобновляемых источников энергии. Например, Microsoft и Google инвестируют в углеродно-нейтральные дата-центры.

Что касается низкокачественного контента – очень с вами согласна, это действительно проблема. Когда барьер входа в создание контента снижается, количество может расти за счет качества. Однако, исторически такая же критика звучала при появлении печатного станка, фотографии, персональных компьютеров и интернета. Общество постепенно адаптируется, вырабатывая новые критерии оценки достоверности.

Ваш тезис о том, что "массы используют инструмент во вред" содержит долю истины, но, на мой взгляд, не совсем учитывает значительное количество позитивных применений: в медицине, научных исследованиях, образовании, особенно для людей с ограниченными возможностями или из регионов с ограниченными ресурсами.

Наиболее важный аспект вашей мысли – необходимость образования!!!! Полностью согласна с вами, что технологическая грамотность и критическое мышление становятся ключевыми навыками. Вместо того чтобы отвергать новые инструменты, возможно, стоит сфокусироваться на том, как интегрировать их в образовательный процесс таким образом, чтобы они расширяли, а не заменяли человеческое мышление.

Любая мощная технология несет как возможности, так и риски. Вопрос не в том, использовать ли AI, а в том, как направить его развитие в этичное и устойчивое русло.

ощущение что ваш ответ написан нейронкой

люди/кони) согласна с вами, надо писать короче и меньше умничать)))

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

Я утрирую насчёт ресурсов для того, чтобы мы серьезно задумались, что творим. Просто если пройтись по цифрам, то волосы встают дыбом, - потребление за короткий срок (всего каких-то несколько лет) выросло до колоссальных значений. При таком взрывном экспоненциальном росте человечеству не хватит и десятка планет Земля.

Вы же учтите, что при капитализме в первую очередь важно продвинуть продукт. Никто не озаботиться вопросами безопасности, если об этом не говорить слишком громко. И то ваш голос может спокойно заткнуть крупная компания, вывалив соответствующую сумму.

Я это к тому, что сейчас рулит агрессивное продвижение. Илон Маск за рекордно короткий срок создал самый большой суперкомпьютер на нейросетях. Он состоит из 200 тысяч (!) передовых чипов Нвидии для работы с ИИ. Маск планирует нарастить это количество до миллиона. При этом от местных жителей пришло множество жалоб, что Маск работает в нарушение всех договоренностей, законодательств и норм. Но это один из богатейших людей на планете и правила ему не указ. Он с удовольствием погубит человечество ради своих целей и даже не поморщится.

Майкрософт с Гуглом уже давно ведут политику снижения углеродного следа. Вот только с рассветом ИИ обе корпорации от нее по-тихому отказались. Более того, они очень хитро оформляют отчёты, чтобы скрывать масштабы выбросов.

И вроде бы китайцы работают ради улучшения энергоэффективности и снижении затрат, но их зажимают западные компании. Крупные игроки - OpenAi, xAI, Meta, Google - хотят доминировать и продвигают собственные решения, которые разительно опаснее.

Чего стоит одно только ускорение OpenAI в разработке новых языковых моделей с ликвидацией важных этапов их проверки!

Короче, бизнес развивается быстрее, чем меры по безопасности и предотвращению катастроф. Да и за 200 с лишним лет индустриальная цивилизация не смогла побороть побочные эффекты ее существования в виде негативного влияния на окружающую среду.

Конечно, извините за пафос, мир тесно завязан на цепочке "смерть-рождение-перерождение". И всё же человечество оказывает слишком разрушительное влияние на дом, в котором живёт. А большинство благих намерений отметает. В истории хватает альтернативных решений, разработанных учёными и гениальными изобретателями, которые могли бы улучшить нашу жизнь. Но всегда на горизонте возникает дядя с деньгами, который душит альтернативу в зародыше.

Спасибо, про критерии оценки достоверности интересно сказано. Действительно, не легко воспринимать слом эпох.

Да, согласен, позитивные решения тоже есть. Тут стоит обратить внимание, что под всем вами перечисленным не ведётся таких массовых обсуждений. Я же веду речь об инструментах, пущенных в народ. Который злоупотребляет доступными ему средствами. Вместо точечного внедрения замещает одним средством большинство вещей. Не задать вопрос и успокоиться - а читать целую книгу, разбирая каждую фразу с ИИ, да ещё введя это дело в привычку, на постоянной основе. Получаем, что один человек уже опустошает чрезмерное количество имеющихся в наличии ресурсов. Таких людей, по последним данным об использовании чата ГПТ, - больше 4 миллиардов в месяц. Так как вы думаете, насколько быстро таким макаром ресурсы будут исчерпаны? И насколько быстро тогда, в условиях ограниченного времени, мы должны разработать альтернативные решения?

Развитие критического мышления - тоже сложная тема. Можно ли его развить, не ставя при этом ограничений? Ребенок ставит вопрос нейросети - получает мгновенный ответ. Он не учит думать, потому что подстраивается под собеседника. А критическое мышление - это вопрос самостоятельных поисков.

Этика и устойчивое русло - актуальные темы конкретно для вас. На фоне проблем с дальнейшим жизнеобеспечением вопросы этики кажутся слишком мелочными.

К сожалению, в жизни приходится заниматься и более приземлёнными вещами.

Простите, даже не так: нам обязательно нужно обращать внимание на ряд вопросов, чтобы не погубить себя. А теперь перенесите свои проблемы на масштаб всего человечества - и поймёте, что я имею в виду. Цивилизация как единый организм не следит за собой. Оно с удовольствием играется в песочнице, но так и не научилось ни убираться толком, ни проводить профилактику в виде регулярных оздоровительных упражнений и чек-апов организма.

Извините, я лишь усугубил проблематику. Но вопрос этот действительно один из важнейших для нас всех, а о нем никто не говорит.

Знаете, читая ваш комментарий, поймала себя на мысли, что киваю головой почти на каждый абзац. Да, мы реально оказались в странной ситуации — технологии развиваются с бешеной скоростью, а осознанность отстаёт.

Эти 200 тысяч чипов Маска — это же просто безумие! И ведь это только начало. Когда слышу такие цифры, сразу представляю гигантские серверные, пожирающие электричество как маленькие города. А местные жители, которые протестуют, выглядят как муравьи рядом с бульдозером — тебя просто не заметят, когда на кону стоят такие деньги.

Особенно зацепило про лицемерие корпораций с их "зелёными" инициативами. Это же как диетолог, который тайком жрёт гамбургеры! "Мы заботимся о планете" — говорят на публику и тут же строят дата-центры размером с район. Красиво оформленная отчётность прикрывает неприглядную реальность.

А насчёт детей и критического мышления — тут я вижу более глубокую проблему. Мы же сами не умеем жить без "костылей"! Навигатор вместо умения ориентироваться, калькулятор вместо простых расчётов в уме, а теперь ещё и ИИ вместо собственных мыслей. Как тут детям учиться думать, если взрослые всё больше передают эту функцию на аутсорс?

При этом я всё-таки верю, что есть выход из этого тупика. Не может быть, чтобы человечество, которое долетело до Луны и расшифровало геном, не смогло найти баланс между прогрессом и выживанием. Возможно, решение придёт с неожиданной стороны — например, от стран, которые не могут позволить себе такую ресурсную расточительность и вынуждены искать более эффективные подходы.

Что если настоящий прорыв будет не в создании ещё более мощных моделей, а в разработке алгоритмов, которые потребляют в сотни раз меньше энергии? Или в новых материалах для чипов, которые не требуют столько редкоземельных элементов? Надежда есть, но для этого нужно, чтобы такие разговоры, как наш, стали мейнстримом, а не оставались на обочине.

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

Как говорится, если не можешь остановить беспредел, нужно его возглавить:) Абсолютно согласна с позицией, что вместо того, чтобы запрещать детям пользоваться ИИ, нужно научить правильно его использовать.

Как говорится, если шторм нельзя остановить - самое время научиться на нём серфить. 😊 Вместо того чтобы прятать детей от искусственного интеллекта, лучше вооружить их хорошей инструкцией и каской))) - пусть осваивают новые технологии с умом и пользой!

Sign up to leave a comment.

Articles