С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: PyGame
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 07.08.2020
Сообщений: 4

Pygame (Змейка) проблема с проигрышем музыки

14.08.2020, 14:46. Показов 1662. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, я решил добавить в свою игру фоновую музыку, но при помещении музыки в основной цикл она начинает бесконечное кол-во раз проигрывать начало файла (примерно пол секунды), т.е просто бесконечно проигрывается один и тот же звук.
При проигрывании музыки не в основном цикле все нормально(но ее нельзя зациклить на бесконечное кол-во повторов), также, если перемещать окно pygame то музыка начинает нормально работать.
Прошу помочь, заранее спасибо!
Вот основной код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import pygame
from control import Control
from snakes import Snake
from food import Food
 
pygame.init()
pygame.mixer.init()
window = pygame.display.set_mode([800, 600])
win = pygame.display.set_mode([800, 600])
pygame.display.set_caption('Змейка_dev_0.1')
BCK_COL = pygame.Color("Gray")
snake_speed = 0
snake = Snake()
control = Control()
food = Food()
weight = height = 20
indent = 1
food.get_food_position()
pygame.mixer_music.load('fon.mp3')
 
 
while control.flag_type:
    pygame.mixer_music.play(-1)
    control.control()
    pygame.time.delay(100)
    window.fill(BCK_COL)
    for i in range(38):
        x = i * weight + (i + 1) * indent
        pygame.draw.rect(window, pygame.Color("White"), (x, 0, weight, height))
    for row in range(28):
        y = row * height + (row + 1) * indent
        pygame.draw.rect(window, pygame.Color("White"), (0, y, weight, height))
    for wor in range(28):
        y = wor * height + (wor + 1) * indent
        pygame.draw.rect(window, pygame.Color("White"), (778, y, weight, height))
    for i in range(38):
        x = i * weight + (i + 1) * indent
        pygame.draw.rect(window, pygame.Color("White"), (x, 568, weight, height))
    food.draw_food(window)
    snake.snake_draw(window)
    if snake.snake_head in snake.body[1:]:
        control.flag_type = False
    if snake_speed % 100 == 0 and control.flag_pause:
        snake.move(control)
        snake.snake_eat(food)
        snake.snk_animation()
    pygame.display.flip()
 
pygame.quit()
Здесь значения flag_type(Основной цикл по сути):
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import pygame
 
 
class Control:
    def __init__(self):
        self.flag_type = True
        self.show = True
        self.flag_directions = "RIGHT"
        self.flag_pause = True
 
# Здесь записаны значения flag_direction в зависимости от нажатой клавиши, но я не думаю что проблема в этой функции
    def control(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.flag_type = False
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_d and self.flag_directions != "LEFT":
                    self.flag_directions = "RIGHT"
                elif event.key == pygame.K_a and self.flag_directions != "RIGHT":
                    self.flag_directions = "LEFT"
                elif event.key == pygame.K_w and self.flag_directions != "DOWN":
                    self.flag_directions = "UP"
                elif event.key == pygame.K_s and self.flag_directions != "UP":
                    self.flag_directions = "DOWN"
                elif event.key == pygame.K_SPACE:
                    if self.flag_pause:
                        self.flag_pause = False
                    elif self.flag_pause == False:
                        self.flag_pause = True






Вот классы snake и food если нужно:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import pygame
from control import Control
from food import Food
 
control = Control()
food = Food()
 
class Snake:
    def __init__(self):
 
        self.snake_head = [80, 60]
        self.body = [[80, 60], [70, 60], [60, 60]]
 
    def move(self, control):
        if control.flag_directions == "RIGHT":
            self.snake_head[0] += 10
            if self.snake_head[0] > 778:
                control.flag_type = False
        elif control.flag_directions == "LEFT":
            self.snake_head[0] -= 10
            if self.snake_head[0] < 10:
                control.flag_type = False
        elif control.flag_directions == "UP":
            self.snake_head[1] -= 10
            if self.snake_head[1] < 12:
                control.flag_type = False
        elif control.flag_directions == "DOWN":
            self.snake_head[1] += 10
            if self.snake_head[1] > 565:
                control.flag_type = False
 
    def snk_animation(self):
        self.body.insert(0, list(self.snake_head))
        self.body.pop()
 
    def snake_draw(self, window):
        for section in self.body:
            pygame.draw.rect(window, (0, 255, 1), (section[0],section[1], 10, 10))
 
    def snake_eat(self,food):
        if self.snake_head[0] == food.food_position[0] and self.snake_head[1] == food.food_position[1]:
            self.body.append(food.food_position)
            food.get_food_position()
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
import pygame
import random
 
 
class Food:
    def __init__(self):
        self.food_position = []
 
    def get_food_position(self):
        self.food_position = [random.randrange(1,760/10)*10,random.randrange(1,560/10)*10]
 
    def draw_food(self, window):
        pygame.draw.rect(window, pygame.Color("Red"),pygame.Rect(self.food_position[0],self.food_position[1],10,10))
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.08.2020, 14:46
Ответы с готовыми решениями:

Змейка на pygame
Здравствуйте, пишу змейку на pygame в учебных целях. В классической змейке, змея анимируется тиками(рывками), ровно на одну клетку. Я уже 2...

Змейка pygame
Здравствуйте, написал змейку на pygame. Писал не по шаблону, а сам все реализовывал. Хочется знать мнение более опытных людей, какие...

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.08.2020, 14:46
Помогаю со студенческими работами здесь

опять змейка (Python+Pygame) Противный баг
Друг познакомил с чудесной библиотекой Pygame И я решил на скорую руку реализовать змейку Из разных статей и гайдов,я выяснил-что...

Змейка на python с pygame (100 строчек начинающего)
Здравствуйте, уважаемые форумчане. Я бы очень хотел побольше критики (начиная от ошибок в этом тексте и заканчивая неправильно выбранной...

Проблема с pygame.su
Привет всем. Решил реализовать рейкастинг на Python. Хочу нанести текстуры, но не могу выделить под них subsurface код: import pygame ...

Проблема со змейкой на Pygame
Всем привет, решил написать вот такую змейку: # -*- coding: utf-8 -*- import pygame import random pygame.init() WINDOW_WIDTH =...

Проблема с установкой модуля pygame
хочу установить библиотеку pygame. начинается загрузка , у тут вылезает это: note: This error originates from a subprocess, and...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru