Форум программистов, компьютерный форум, киберфорум
Python: PyGame
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
1 / 0 / 1
Регистрация: 01.06.2019
Сообщений: 61

Pygame, построение блоков по шаблону

04.12.2019, 20:15. Показов 2343. Ответов 2

Студворк — интернет-сервис помощи студентам
Здравствуйте, немного не по теме, теперь для pygame создали отельный раздел? Круто.
А теперь по делу, суть вопроса следующая. изучая pygame я наткнулся на один пример как можно выложить уровень/локацию / карту(называйте как хотите) спрайтами по текстовому шаблону. Поработав с ним вроде все запустилось, но есть одна проблема. всю карту он выкладывает только одним типом блока. То есть к примеру если уровень в тексте выглядит так -

level = ["############",
"#==========#",
"#==#######=#",
"#=====#====#",
"#====Q=====#",
"############",]

где # стена, а Q трава, то программа не различает разницы между Q и # и лепит на эти координаты одну и ту же картинку.
Собственно вопрос как сделать так что бы к каждому символу привязать свой спрайт?
в архиве полный код и текстуры
Вложения
Тип файла: rar test31.rar (6.9 Кб, 9 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.12.2019, 20:15
Ответы с готовыми решениями:

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

Построение блоков. CSS
Здравствуйте. Вот у меня есть несколько объектов(div-ы): родительский: .work_space { position: relative; height: auto; }...

Порядок построение блоков
#galery{ width: 521px; height: 512px; margin: 0 auto; } #galery .foto{ position: relative; height: 512px; }

2
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,302
05.12.2019, 01:23
Лучший ответ Сообщение было отмечено Kxarog как решение

Решение

Так вы выводите только спрайт стены

Python
1
screen.blit(image, rect)
вот так можно сделать

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import sys
import pygame
 
pygame.init()
screen = pygame.display.set_mode((800, 600))
BLOCK_COLOR = (50, 50, 255)
BG_COLOR = (0, 0, 0)
 
level = ["############",
         "#==========#",
         "#==#######=#",
         "#=====#====#",
         "#====Q=====#",
         "############",]
 
player_rect = pygame.Rect((64*3, 64, 64, 64))
clock = pygame.time.Clock()
image = pygame.image.load('textures/stena.png')
trava = pygame.image.load('textures/trava.png')
 
def makelevel(level):
    collidelist = []
    for y, line in enumerate(level):
        for x, character in enumerate(line):
            if character == "#":
                block = pygame.Rect(x*64, y*64, 64, 64)
                collidelist.append((block, image))
            if character == "Q":
                block = pygame.Rect(x*64, y*64, 64, 64)
                collidelist.append((block, trava))
    return collidelist
 
 
def move(xvel, yvel, player_rect, collidelist):
    player_rect.x += xvel
    for block in collidelist:
        block = block[0]
        if player_rect.colliderect(block):
            if xvel < 0: 
                player_rect.left = block.right
            elif xvel > 0:  
                player_rect.right = block.left
            break
 
    player_rect.y += yvel
    for block in collidelist:
        block = block[0]
        if player_rect.colliderect(block):
            if yvel < 0:
                player_rect.top = block.bottom
            elif yvel > 0:
                player_rect.bottom = block.top
            break
 
collidelist = makelevel(level)
 
while True:
    for event in pygame.event.get ():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
 
    pressed = pygame.key.get_pressed()
    if pressed[pygame.K_RIGHT]:
        move(5, 0, player_rect, collidelist)
    if pressed[pygame.K_LEFT]:
        move(-5, 0, player_rect, collidelist)
    if pressed[pygame.K_UP]:
        move(0, -5, player_rect, collidelist)
    if pressed[pygame.K_DOWN]:
        move(0, 5, player_rect, collidelist)
 
 
    screen.fill(BG_COLOR)
 
    for rect in collidelist:
        screen.blit(rect[1], rect[0])
 
    pygame.draw.rect(screen, (255, 255, 255), player_rect)
 
    pygame.display.update()
    clock.tick(30)
1
1 / 0 / 1
Регистрация: 01.06.2019
Сообщений: 61
05.12.2019, 19:55  [ТС]
Цитата Сообщение от tooru Посмотреть сообщение
Так вы выводите только спрайт стены
Это просто я вырезал все мои жалкие потуги из кода. А так большое спасибо за помощь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.12.2019, 19:55
Помогаю со студенческими работами здесь

Построение ссылочных блоков через li
Не могу придумать как правильно реализовать такую вещь: &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;&quot;&gt;link&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a...

При импорте pygame пишет что нет модуля pygame.base
Устанавливаю для kivy.Всё есть (sython,gsstreamer,kivy,pyscripter,python) , а вот фраем. pygame не работает.Почему?Что ещё надо для работы...

Ошибка в pygame AttributeError: 'pygame.Rect' object has no attribute 'blit'
Создаю игру, крестики нолики Почему возникает ошибка и как ее исправить? AttributeError: 'pygame.Rect' object has no attribute 'blit' ...

pygame.error: cannot convert without pygame.display initialized
Только начал изучать спрайты Выдаёт ошибку: Traceback (most recent call last): File &quot;D:/project1/OCode.py&quot;, line 18, in...

Pygame ошибка module ‘pygame’ has no ‘init’ member
Всем здравствуйте. Недавно начал работать с VS code и выдает такая ошибка. Прикрепляю полностью скрин. Нашел решение перед каждой...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru