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

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

04.12.2019, 20:15. Показов 2327. Ответов 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,301
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
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru