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

Изменение разрешения игры на PyGame с квадратного

18.12.2021, 02:08. Показов 1178. Ответов 1

Студворк — интернет-сервис помощи студентам
Довольно долго пытался понять, как сделать так чтобы данная программа работала в 720 на 480, но она продолжает некорректно отображаться, либо не отображаться вовсе. Прошу помочь с решением данной проблемы.



На данный момент имею следующий код:
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
from pygame import Rect
import pygame
import sys
import math
 
SCREEN_HEIGHT = 720  # локальные переменные
SCREEN_WIDTH = 720
MAP_SIZE = 10
TILE_SIZE = int(SCREEN_WIDTH / MAP_SIZE)
MAX_DEPTH = int(MAP_SIZE * TILE_SIZE)
FOV = math.pi / 3
HALF_FOV = FOV / 2
CASTED_RAYS = 100
STEP_ANGLE = FOV / CASTED_RAYS
 
player_x = (SCREEN_WIDTH / 2)
player_y = (SCREEN_WIDTH / 2)
player_angle = math.pi
 
pygame.init()
MAP = (
    '          '
    ' ######## '
    ' # #    # '
    ' # #  ### '
    ' #      # '
    ' #      # '
    ' #  ##  # '
    ' #   #  # '
    ' ######## '
    '          '
)
 
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption('лУчИИИИИИИИИ')
clock = pygame.time.Clock()
 
 
class Camera(object):
    def __init__(self, camera_func, width, height):
        self.camera_func = camera_func
        self.state = Rect(0, 0, width, height)
 
    def apply(self, target):
        return target.rect.move(self.state.topleft)
 
    def update(self, target):
        self.state = self.camera_func(self.state, target.rect)
 
 
def camera_configure(camera, target_rect):
    length, t, _, _ = target_rect
    _, _, w, h = camera
    length, t = -length + SCREEN_WIDTH / 2, -t + SCREEN_HEIGHT / 2
    length = min(0, length) 
    length = max(-(camera.width - SCREEN_WIDTH), length)  
    t = max(-(camera.height - SCREEN_HEIGHT), t)  
    t = min(0, t) 
 
    return Rect(length, t, w, h)
 
 
def draw_map():  #отрисовка карты
    for row in range(MAP_SIZE):
        for col in range(MAP_SIZE):
            square = row * MAP_SIZE + col
            pygame.draw.rect(screen, (5, 5, 5) if MAP[square] == '#' else (0, 0, 0),
                             (col * TILE_SIZE, row * TILE_SIZE, TILE_SIZE - 2, TILE_SIZE - 2))
    pygame.draw.circle(screen, (0, 255, 0), (int(player_x), int(player_y)), 8)  # отрисовка игрока
    #ЛУЧИ
    # pygame.draw.line(screen, (0, 255, 0), (player_x, player_y), (player_x - math.sin(player_angle) * 50,
    #                                                              player_y + math.cos(player_angle) * 50), 3)
    pygame.draw.line(screen, (0, 255, 0), (player_x, player_y),
                     (player_x - math.sin(player_angle - HALF_FOV) * 50,
                      player_y + math.cos(player_angle - HALF_FOV) * 50), 3)
 
    pygame.draw.line(screen, (0, 255, 0), (player_x, player_y),
                     (player_x - math.sin(player_angle + HALF_FOV) * 50,
                      player_y + math.cos(player_angle + HALF_FOV) * 50), 3)
 
 
def cast_rays():
    start_angle = player_angle - HALF_FOV
    for ray in range(CASTED_RAYS):
        for depth in range(MAX_DEPTH):
            # получаем координаты ЛУЧА
            target_x = player_x - math.sin(start_angle) * depth
            target_y = player_y + math.cos(start_angle) * depth
            # конвертирую координаты ЦЕЛИ на координаты КАРТЫ
            col = int(target_x / TILE_SIZE)
            row = int(target_y / TILE_SIZE)
            square = row * MAP_SIZE + col
            if MAP[square] == '#':  # просто отрисовка
                pygame.draw.rect(screen, (255, 255, 255),
                                 (col * TILE_SIZE, row * TILE_SIZE, TILE_SIZE - 2,
                                  TILE_SIZE - 2))
                pygame.draw.line(screen, (255, 255, 0), (player_x, player_y), (target_x, target_y))
                break
        start_angle += STEP_ANGLE  # изменяюугол
 
 
while True:
    keys = pygame.key.get_pressed()  #функционал кнопок
    for event in pygame.event.get():
        if event.type == pygame.QUIT or keys[pygame.K_ESCAPE]:
            exit()
    pygame.draw.rect(screen, (0, 0, 0), (0, 0, SCREEN_HEIGHT, SCREEN_HEIGHT))  # bg - фон
    draw_map()  # отрисовка мира
    cast_rays()  # отрисовка лучей
    if keys[pygame.K_LEFT]:
        player_angle -= 0.1
    if keys[pygame.K_RIGHT]:
        player_angle += 0.1
    if keys[pygame.K_UP]:
        player_x += -math.sin(player_angle) * 5
        player_y += math.cos(player_angle) * 5
    if keys[pygame.K_DOWN]:
        player_x -= -math.sin(player_angle) * 5
        player_y -= math.cos(player_angle) * 5
    pygame.display.flip()
    clock.tick(60)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.12.2021, 02:08
Ответы с готовыми решениями:

Pygame. Имитация игры в змейку
Всем добрый день. Начал изучать язык с книжки Свегарта, и ближе к концу книги разбирают игру: есть игровое поле, на него добавляются...

Карта для игры Pygame
У меня проблема. Я делаю игру на питоне - pygame. Это своеобразный лабиринт. НО. Я рисую стены построчно. Это не практично, тормозит, и...

Застой при создании игры на Pygame
#В работу игры снаряд должен попасть в врага и тогда враг пропадает.Но почему-то при попадании враг не пропадает.Что не так с кодом?Добавте...

1
1 / 1 / 0
Регистрация: 25.10.2021
Сообщений: 12
08.01.2022, 16:52
MalinaCKrotom, что конкретно вас не устраивает?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.01.2022, 16:52
Помогаю со студенческими работами здесь

Скиньте небольшой код мультиплеерной игры на pygame
Скиньте небольшой код любой мультиплеерной игры на pygame.

Установка разрешения выше разрешения матрицы (установленного разрешения по умолчанию)
Есть планшет с hdmi (Cutepad r91), у него матрица 1024*768. Соответственно, при подключении по Hdmi, даже при установке разрешения hdmi...

Изменение разрешения
Есть монитор ASUS PB278Q (16:9), 27', 2560x1440. Если нужно будет сменить разрешение до 1920x1080, будет ли искажаться изображение? И самое...

Изменение разрешения видео
Здравствуйте! Задача у меня сделать видеозахват c помощью DirectShow, пока не в файл, а в режиме превью. Все работает, только внизу...

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Номеклатура. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru