Код (Text): > strings ./mc | grep CFLAGS ... CFLAGS=-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security' 'LDFLAGS=-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now -Wl,--as-needed ... Я не гарантирую, что это именно его CFLAGS, а не какой-то статически слинкованной с ним чуши, но всё же. Я тебе уже ни раз говорил, что не надо поддаваться предвзятости подтверждения. Ну и не надо пытаться многозначительно обобщать с одного примера.
Допустим существует всего X программ, сколько примеров "-О0" нужно, чтобы уверенно говорить, что большинство использует "-О0"? Для "доказательного обгуанивания" достаточно собрать выборку из парочки якобы подтверждающих утверждение примеров и игнорировать X-2 остальных.
Вовремя я успел скачать 2000 строк кода. Спасибо! Можно попробовать в x64-битном формате скомпилировать и ASM-code сгенерировать. P.S. Проверил EXE-файл, который прилагался к коду - он x64-битный.
GRAFik, вчера мысль возникла - сделать отдельный редактор уровней для игры как игру minecraft. Выбираешь текстуры для карты, строишь, потом сохраняешь все в файл. Далее загружаешь карту уровня в игре со всеми обьектами из этого файла. unreal engine на минималках )
Ну хорошая идея. А я ещё на Питоновском варианте обратил внимание, что будет много уровней (семь вроде). Блин, с кем поведешься... С вами точно геймером-программистом станешь. Мне уже понравилось...
Оказывается из кс 1.6 можно декомпилировать модели и потом загружать их с помощью python в 3d. Не нужно ничего рисовать. Модели это имхо самая сложная часть игры.
Таким образом сколько бы примеров я ни привел, ты просто подставишь в формулу X-N их количество и заявишь, что X это большущий гориллиард, а N многократно меньше и ничего не доказывает. На -o0 я не настаиваю, вообще с легкостью готов признать, что в ряде случаев это -o2, просто хреновое -o2.
Спасибо за тест. С этими моделями довольно сложная история. У них там вводится понятие скелета(кости) и все текстуры двигаются за костями. Даже у автоматов есть кости ) Нужно собирать отдельный проект в нем тестировать бег, стрельбу и т.д. Вводить дополнительную структуру для бота и менять в ней состояние полей. Всему свое время. Скоро добавлю звуки в игру (самое легкое для добавления).
# Углы вращения модели и дистанция камеры angle_y = 0.0 angle_x = 0.0 distance = 30.0 <--- збс А я чото такими вещами упоролся, можно в начале сделать бегающих по карте скелетов: Код (Python): import pygame, math, sys # ---------- КЛАСС КОСТИ ---------- class Bone: def __init__(self, length, angle=0, parent=None): self.length = length # длина кости (в пикселях) self.angle = angle # угол относительно родителя (в радианах) self.parent = parent # ссылка на родительскую кость self.x = self.y = 0 # позиция (будет вычислена) def get_endpoint(self): """Возвращает (x, y) конечной точки кости""" rad = self.get_global_angle() return (self.x + self.length * math.cos(rad), self.y + self.length * math.sin(rad)) def get_global_angle(self): """Суммирует углы всех родителей (абсолютный угол)""" if self.parent: return self.parent.get_global_angle() + self.angle return self.angle def update_position(self, start_x, start_y): """Рекурсивно обновляет позиции всех дочерних костей""" self.x, self.y = start_x, start_y end_x, end_y = self.get_endpoint() for child in children: # упрощённо: ищем детей if child.parent is self: child.update_position(end_x, end_y) # ---------- СОЗДАЁМ СКЕЛЕТ ---------- shoulder = Bone(100, 0) # плечо (угол 0°) elbow = Bone(80, math.radians(45), shoulder) # локоть (согнут на 45°) children = [shoulder, elbow] # список всех костей # ---------- ИНИЦИАЛИЗАЦИЯ PYGAME ---------- pygame.init() screen = pygame.display.set_mode((600, 400)) clock = pygame.time.Clock() # ---------- ГЛАВНЫЙ ЦИКЛ ---------- while True: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() # Управление: вращаем плечо мышкой mouse_x, mouse_y = pygame.mouse.get_pos() shoulder.angle = math.atan2(mouse_y - 200, mouse_x - 100) # отсчёт от базы # Обновляем позиции (база в точке (100, 200)) shoulder.update_position(100, 200) # Рисуем screen.fill((30, 30, 30)) # Рисуем все кости for bone in children: end = bone.get_endpoint() pygame.draw.line(screen, (0, 255, 200), (bone.x, bone.y), end, 5) pygame.draw.circle(screen, (255, 100, 100), (int(bone.x), int(bone.y)), 6) pygame.display.flip() clock.tick(60) Мне иногда кажется все эти координаты точек можно из python конвертировать при помощи llm в какой-то свой более легкий и понятный формат =) --- Сообщение объединено, 23 июн 2026 в 05:36 --- *при помощи подсказок llm
Продолжаем баловаться... Код (Python): # PYTHON 3.11 # Skeletal Walking Leg Demo import pygame import math import sys # ---------- КЛАСС КОСТИ (Усовершенствованный) ---------- class Bone: def __init__(self, length, angle=0, parent=None): self.length = length # длина кости (в пикселях) self.angle = angle # угол относительно родителя (в радианах) self.parent = parent # ссылка на родительскую кость self.x = self.y = 0 # позиция старта кости (вычисляется) def get_endpoint(self): """Возвращает (x, y) конечной точки кости""" rad = self.get_global_angle() return (self.x + self.length * math.cos(rad), self.y + self.length * math.sin(rad)) def get_global_angle(self): """Суммирует углы всех родителей (абсолютный угол в пространстве)""" if self.parent: return self.parent.get_global_angle() + self.angle return self.angle def update_position(self, start_x, start_y, all_bones): """ Рекурсивно обновляет позиции этой кости и всех её "детей" """ self.x, self.y = start_x, start_y end_x, end_y = self.get_endpoint() # Ищем «детей» этой кости в общем списке и обновляем их for child in all_bones: if child.parent is self: child.update_position(end_x, end_y, all_bones) # ---------- ИНИЦИАЛИЗАЦИЯ PYGAME ---------- pygame.init() SCREEN_WIDTH = 800 SCREEN_HEIGHT = 500 screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) pygame.display.set_caption("Skeletal Walking Leg Demo") clock = pygame.time.Clock() font = pygame.font.Font(None, 24) # ---------- СОЗДАЁМ ИЕРАРХИЮ НОГИ ---------- # Точка крепления (таз) будет находиться в центре экрана LEG_BASE_X = SCREEN_WIDTH // 2 LEG_BASE_Y = SCREEN_HEIGHT // 2 - 50 # Создаем кости: Бедро -> Колено -> Стопа hip = Bone(length=90, angle=math.radians(90)) # Направлено изначально вниз knee = Bone(length=80, angle=math.radians(30), parent=hip) foot = Bone(length=40, angle=math.radians(-30), parent=knee) # Общий список костей для удобного пересчета и отрисовки bones_list = [hip, knee, foot] # ---------- ГЛАВНЫЙ ЦИКЛ ---------- running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False pygame.quit() sys.exit() # ВРЕМЯ ДЛЯ АНИМАЦИИ (переводим миллисекунды в секунды для плавности) time_seconds = pygame.time.get_ticks() / 1000.0 # СКОРОСТЬ ХОДЬБЫ walk_speed = 4.0 # --- БИОМЕХАНИКА ШАГА (Формулы синуса) --- # 1. Бедро качается вперед-назад вокруг центральной оси (90 градусов) hip.angle = math.radians(90) + math.sin(time_seconds * walk_speed) * math.radians(25) # 2. Колено сгибается только тогда, когда нога уходит назад (создаем естественность) # Наш синус смещен, чтобы колено реалистично поджималось при подъёме ноги knee.angle = math.radians(40) + math.sin(time_seconds * walk_speed - 1.0) * math.radians(30) # 3. Стопа слегка покачивается, чтобы пружинить при «наступании» на воображаемую землю foot.angle = math.radians(-20) + math.cos(time_seconds * walk_speed) * math.radians(15) # ОБНОВЛЯЕМ ПОЗИЦИИ ВСЕХ СУСТАВОВ (эффект домино от таза к стопе) hip.update_position(LEG_BASE_X, LEG_BASE_Y, bones_list) # --- ОТРИСОВКА ОКРУЖЕНИЯ --- screen.fill((25, 25, 35)) # Красивый темно-синий фон # Рисуем линию «земли», чтобы было видно, как нога шагает по ней pygame.draw.line(screen, (70, 70, 80), (0, LEG_BASE_Y + 160), (SCREEN_WIDTH, LEG_BASE_Y + 160), 2) # Рисуем кости и суставы for bone in bones_list: end_point = bone.get_endpoint() # Рисуем саму кость (бирюзовая толстая линия) pygame.draw.line(screen, (0, 210, 255), (bone.x, bone.y), end_point, 8) # Рисуем сустав-шарнир (розовый круг в основании кости) pygame.draw.circle(screen, (255, 90, 120), (int(bone.x), int(bone.y)), 7) # Рисуем кончик последней кости (носок стопы) if bone is foot: pygame.draw.circle(screen, (255, 90, 120), (int(end_point[0]), int(end_point[1])), 5) # Информационный текст на экране info_text = font.render("Усовершенствованный демо-скелет: Шагающая нога (Бедро -> Колено -> Стопа)", True, (200, 200, 200)) screen.blit(info_text, (15, 15)) pygame.display.flip() clock.tick(60)
Версия игры со звуком. Перевел винапи на python, есть глюки (игрока начинает заносить). Наткнулся на интересный проект игры minecraft в несколько строк на c++ (с исходниками).
Доведём ходьбу до логического конца, а то одна нога прям как у одноногого инвалида. Код (Python): import pygame import math import sys # ---------- КЛАСС КОСТИ ---------- class Bone: def __init__(self, length, angle=0, parent=None): self.length = length # длина кости (в пикселях) self.angle = angle # угол относительно родителя (в радианах) self.parent = parent # ссылка на родительскую кость self.x = self.y = 0 # позиция старта кости def get_endpoint(self): """Возвращает (x, y) конечной точки кости""" rad = self.get_global_angle() return (self.x + self.length * math.cos(rad), self.y + self.length * math.sin(rad)) def get_global_angle(self): """ Суммирует углы всех "родителей" """ if self.parent: return self.parent.get_global_angle() + self.angle return self.angle def update_position(self, start_x, start_y, all_bones): """Рекурсивно обновляет позиции этой кости и всех её "детей" """ self.x, self.y = start_x, start_y end_x, end_y = self.get_endpoint() for child in all_bones: if child.parent is self: child.update_position(end_x, end_y, all_bones) # ---------- ИНИЦИАЛИЗАЦИЯ PYGAME ---------- pygame.init() SCREEN_WIDTH = 800 SCREEN_HEIGHT = 500 screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) pygame.display.set_caption("CS 1.6 Style Two-Legged Walking Demo") clock = pygame.time.Clock() font = pygame.font.Font(None, 24) # Точка таза (центр) LEG_BASE_X = SCREEN_WIDTH // 2 LEG_BASE_Y = SCREEN_HEIGHT // 2 - 50 # ---------- СОЗДАЕМ ДВЕ НОГИ ---------- # ПРАВАЯ НОГА r_hip = Bone(90, math.radians(90)) r_knee = Bone(80, math.radians(30), parent=r_hip) r_foot = Bone(40, math.radians(-30), parent=r_knee) # ЛЕВАЯ НОГА l_hip = Bone(90, math.radians(90)) l_knee = Bone(80, math.radians(30), parent=l_hip) l_foot = Bone(40, math.radians(-30), parent=l_knee) # Объединяем все кости в один список bones_list = [r_hip, r_knee, r_foot, l_hip, l_knee, l_foot] # ---------- ГЛАВНЫЙ ЦИКЛ ---------- running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # Время анимации time_seconds = pygame.time.get_ticks() / 1000.0 walk_speed = 4.0 # Текущая фаза движения для ПРАВОЙ ноги phase_right = time_seconds * walk_speed # Сдвигаем фазу ЛЕВОЙ ноги ровно на половину цикла (плюс Пи радиан) phase_left = time_seconds * walk_speed + math.pi # --- УПРАВЛЕНИЕ ПРАВОЙ НОГОЙ --- r_hip.angle = math.radians(90) + math.sin(phase_right) * math.radians(25) r_knee.angle = math.radians(40) + math.sin(phase_right - 1.0) * math.radians(30) r_foot.angle = math.radians(-20) + math.cos(phase_right) * math.radians(15) # --- УПРАВЛЕНИЕ ЛЕВОЙ НОГОЙ --- l_hip.angle = math.radians(90) + math.sin(phase_left) * math.radians(25) l_knee.angle = math.radians(40) + math.sin(phase_left - 1.0) * math.radians(30) l_foot.angle = math.radians(-20) + math.cos(phase_left) * math.radians(15) # Обновляем позиции обеих ног r_hip.update_position(LEG_BASE_X, LEG_BASE_Y, bones_list) l_hip.update_position(LEG_BASE_X, LEG_BASE_Y, bones_list) # --- ОТРИСОВКА --- screen.fill((25, 25, 35)) # Земля pygame.draw.line(screen, (70, 70, 80), (0, LEG_BASE_Y + 160), (SCREEN_WIDTH, LEG_BASE_Y + 160), 2) # Рисуем кости for bone in bones_list: end_point = bone.get_endpoint() # Визуально разделяем ноги (левая темнее) if bone in [l_hip, l_knee, l_foot]: color_bone = (0, 140, 180) # Темно-бирюзовый color_joint = (180, 50, 80) # Бордовый else: color_bone = (0, 210, 255) # Ярко-бирюзовый color_joint = (255, 90, 120) # Розовый pygame.draw.line(screen, color_bone, (bone.x, bone.y), end_point, 8) pygame.draw.circle(screen, color_joint, (int(bone.x), int(bone.y)), 7) # Исправленный блок отрисовки носков стопы if bone in [r_foot, l_foot]: feat_x = int(end_point[0]) feat_y = int(end_point[1]) pygame.draw.circle(screen, color_joint, (feat_x, feat_y), 5) info_text = font.render("Синхронизированный шаг двух ног (Сдвиг фазы на математический Pi)", True, (200, 200, 200)) screen.blit(info_text, (15, 15)) pygame.display.flip() clock.tick(60) pygame.quit() sys.exit()