import pygame
import random
import math
import time
import os
import sys
def resource_path(relative_path):
""" Get absolute path to resource, works for dev and for PyInstaller """
if getattr(sys, 'frozen', False):
base_path = sys._MEIPASS
else:
base_path = os.getcwd()
return os.path.join(base_path, relative_path)
# Инициализация Pygame и звука
pygame.init()
pygame.mixer.init()
# error_sound = pygame.mixer.Sound(resource_path("error_sound.mp3")) # Убедитесь, что звуковой файл находится в той же папке
error_sound = pygame.mixer.Sound("error_sound.mp3") # Убедитесь, что звуковой файл находится в той же папке
# Настройки экрана
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Память и Реакция")
# Цвета и шрифты
RED = (255, 0, 0)
BLUE = (0, 0, 255)
DARK_GREEN = (0, 128, 0)
GRAY = (200, 200, 200)
WHITE = (255, 255, 255)
FONT = pygame.font.Font(None, 36)
# Настройки шариков
BALL_RADIUS = 15
SPEED = 7
# Текст транспаранта
congratulation_text = FONT.render("Отлично!", True, RED)
congratulation_rect = congratulation_text.get_rect(center=(WIDTH // 2, HEIGHT // 2))
# Класс шарика
class Ball:
def __init__(self, color):
self.x = random.randint(BALL_RADIUS, WIDTH - BALL_RADIUS)
self.y = random.randint(BALL_RADIUS, HEIGHT - BALL_RADIUS)
self.vx = random.randint(-SPEED, SPEED)
self.vy = random.randint(-SPEED, SPEED)
self.color = color
self.original_color = color
self.is_moving = False
def move(self):
if self.is_moving:
self.x += self.vx
self.y += self.vy
# Отражение от краев экрана
if self.x - BALL_RADIUS < 0 or self.x + BALL_RADIUS > WIDTH:
self.vx *= -1
if self.y - BALL_RADIUS < 0 or self.y + BALL_RADIUS > HEIGHT:
self.vy *= -1
def draw(self):
pygame.draw.circle(screen, self.color, (int(self.x), int(self.y)), BALL_RADIUS)
def change_color(self):
self.color = GRAY
# Проверка столкновения между шариками
def check_collision(ball1, ball2):
distance = math.sqrt((ball1.x - ball2.x) ** 2 + (ball1.y - ball2.y) ** 2)
return distance < 2 * BALL_RADIUS
# Обработка столкновений
def handle_collisions(balls):
for i in range(len(balls)):
for j in range(i + 1, len(balls)):
if check_collision(balls[i], balls[j]):
balls[i].vx, balls[j].vx = balls[j].vx, balls[i].vx
balls[i].vy, balls[j].vy = balls[j].vy, balls[i].vy
# Создание шариков
def create_balls(num_blue, num_green):
balls = []
while len(balls) < num_blue + num_green:
new_ball = Ball(BLUE if len(balls) < num_blue else DARK_GREEN)
if not any(check_collision(new_ball, ball) for ball in balls):
balls.append(new_ball)
return balls
# Проверка нажатия
def check_click(ball, mouse_pos):
return (ball.x - mouse_pos[0]) ** 2 + (ball.y - mouse_pos[1]) ** 2 <= BALL_RADIUS ** 2
# Начальное количество шариков
num_blue = num_green = 2
# Игровой цикл
running = True
clock = pygame.time.Clock()
balls = create_balls(num_blue, num_green)
game_started = False
start_time = None
click_positions = []
show_congratulation = False
while running:
screen.fill((255, 255, 255))
# Обработка событий
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if not game_started:
game_started = True
start_time = time.time()
for ball in balls:
ball.is_moving = True
if show_congratulation:
show_congratulation = False
elif event.type == pygame.MOUSEBUTTONDOWN and not game_started:
click_positions.append(pygame.mouse.get_pos())
current_time = time.time()
# Движение и отрисовка шариков
for ball in balls:
ball.move()
ball.draw()
# Обработка столкновений
if game_started:
handle_collisions(balls)
# Остановка шариков и изменение цвета
if game_started and current_time - start_time > 5:
for ball in balls:
ball.is_moving = False
ball.change_color()
game_started = False
# Проверка результатов кликов
if not game_started and len(click_positions) >= num_blue and not show_congratulation:
correct_clicks = 0
for pos in click_positions:
for ball in balls:
if ball.original_color == BLUE and check_click(ball, pos):
correct_clicks += 1
break
if correct_clicks == num_blue:
num_blue += 1
num_green += 1
show_congratulation = True
else:
num_blue = max(1, num_blue - 1)
num_green = max(1, num_green - 1)
error_sound.play()
balls = create_balls(num_blue, num_green)
click_positions = []
# Отрисовка транспаранта
if show_congratulation:
screen.blit(congratulation_text, congratulation_rect)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Комментарии
Не верится, что этот ИИ создан индийскими программистами. Наверно древний ИИ с Марса через марсоход внедрился в суперкомпьютеры Земли и безобразничает.
Индийские программисты таки лучшие в мире?)
Индийский ИИ лучший в мире - если не слышали - пару лет назад был скандал когда вместо ИИ управляющего умным домом выяснилось что сидит толпа индусов за мониторами с камерами и включает свет по мере движения хозяев дома по дому.
Вот когда текст программы будет состоять из одних комментариев, вот тогдаааа .... Наступит счастье. Может быть. А то пока видим какой-то нечеловеческий бред типа
Это не бред, а нормальная строка кода на питоне. Красивый язык, кстати.
Вот только доводят до ума его очень постепенно, что говорить, если в той версии питон, которая у меня на работе применяется, даже switch/case структуры ещё нет :( она, если не ошибаюсь, появляется только в 3.10, а у меня только 3.8, какая боль :(
elif Вам в помощь. Дешево и сердито!
Ими и приходится пользоваться, как по мне, выглядит не очень.
Для этих целей с самых ранних версий использовали списки и словари)
["Aba", "caba"][True]
switch = (
"a": "first letter",
"b": "second",
}
switch.get(input_letter, "default answer")
Case - вообще крайне рыхлая, ненадежная конструкция. Лучше использовать объектный подход.
Чисто формально, логичный шаг по пути от машинных кодов к человеческому языку, но пока это больше игрушка. Главный недостаток, невозможность получать воспроизводящийся результат и невозможность собирать значимые по объему описания в исполняемый файл.
А так да, со временем программа будет писаться именно как ТЗ для компилятора. Другое дело, что не совсем на русском, а на специальном диалекте, который более логичен, однозначен, конкретен и краток.
В любом случае, развитие программирование, это развитие языка как средства выражения мысли и компилятора, как средства преобразования этой мысли в форму доступную компьютеру.
Прикольно получилось, но по качеству код так себе:
1. move() и draw() вызываются парно. В чём великий смысл?
2. Цикл движения-отрисовки происходит без учёта game_started
3. Но при этом есть ещё такой флаг .is_moving
В целом код выглядит красиво но избыточно и немного нелогично, хороший программист написал бы более красиво. Но в целом впечатляет.
Как вариант, для улучшения качества, формулировать ТЗ более формально,по пунктам.
В том то и прикол, что вот так, на уровне болтовни получилось вполне работающее.
Помню времена, когда код, сгенерированный компилятором, ругали за избыточность и некрасоту :)
Так и было, и в результате куча слоёв логики, которая фиг его знает что делает, но оперативку и процессор занимает.
А вообще, с каждой новой итерацией инструментов разработки, уровень требований к программисту снижается. И качество программ ещё больше падает.
Когда айтишники начинают плеваться на китайские поделки, то я всегда предлагаю посмотреть в зеркало.
Зато возрастает количество )))))
Но как говорил кто-то из классиков: Главное достоинство программы в том, что она работает. А в оптимизации реально нуждаются доли процента от всего кода.
Была какая то передача, где задали вопрос - "Какие профессии в ближайшем будущем исчезнут?"
- И это профессия программиста.
Нет не исчезнет. Это очень большая отрасль, возможно самая большая из существующих, и продолжает расти. Рутину ИИ наверно заменит, но этап первичной разработки от идеи до прототипа - нет.
Ну и всё упирается в вычислительные ресурсы. Поэтому нет, не заменит - займёт нишу. Возможно тестирование и дэвопс.
Ага-ага. То же самое говорили, когда появились компиляторы для ЯВУ. Тогда исчезли спецы по написанию на ассемблере (а до того писали вообще в коде и ругали ассемблер за неоптимальность).
куда исчезли?
Умерли, переквалифицировались по маловостребованности.
не, они в микроконтроллерщики пошли
А кто будет ЖПТ указания давать?
И как ты пришёл к такому выводу?
Ходят слухи, что для написания программ существуют специализированные Имитаторы Интеллекта. Не удивлюсь, если они напишут и лучше и быстрее, чем почти универсальный чЯтЖПТ.
ЛитРПГ начитались?
Современную херню не читаю. И тебе не советую.
Игры бывают разные... А это детский сад какой-то?!