0 / 0 / 0
Регистрация: 07.08.2020
Сообщений: 4

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

14.08.2020, 14:46. Показов 1806. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru