/
YuBabkin
/
LubHunt
Обзор
Документация
Войти
/
YuBabkin
/
LubHunt
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
rendering.py
248 строк
8 KB
Yura Babkin
Ошибки координат стен, игроков и взрывов.
20 дек 2024, 14:17
20 дек 2024, 14:17
2f65bda
Код
Авторство
О чём код?
# Pygame шаблон - скелет для нового проекта Pygame import pygame from pygame.color import THECOLORS SIZE_DX = 50 SIZE_DY = 50 SIZE_MARGIN = 100 COLOR_THING = (0, 100, 100) COLOR_BACKGROUND = (120, 100, 100) COLOR_FIELD = (180, 190, 180) COLOR_BORDER = (0, 0, 0) COLOR_GRID = (150, 150, 150) COLOR_WALL = (100, 100, 100) axes_label_x = ['А', 'Б', 'В', 'Г', 'Д', 'Ж', 'З', 'И', 'К', 'Л'] axes_label_y = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] class Player(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = pygame.Surface((50, 50)) self.image.fill(COLOR_GRID) self.rect = self.image.get_rect() # self.rect.center = (WIDTH / 2, HEIGHT / 2) def update(self): self.rect.x += 5 # if self.rect.left > WIDTH: # self.rect.right = 0 # all_sprites = pygame.sprite.Group() # player = Player() # all_sprites.add(player) # player = Player() # self.all_sprites.add(player) # Обновление # all_sprites.update() # Рендеринг # pygame.sprite.Sprite.__init__(self) # self.screen.fill(COLOR_FONT) # self.all_sprites.draw(self.screen) class Rendering: def __init__(self, size_x, size_y): self.size_x = size_x self.size_y = size_y # размер игрового поля в пикселях self.size_field_x = size_x * SIZE_DX self.size_field_y = size_y * SIZE_DY # Создаем игру и окно pygame.init() pygame.mixer.init() # clock = pygame.time.Clock() # размер игрового окна self.screen = pygame.display.set_mode(( self.size_field_x + 1*SIZE_DX + 2*SIZE_MARGIN, self.size_field_y + 1*SIZE_DY + 4*SIZE_MARGIN)) pygame.display.set_caption("Lab Hunter") return def draw_background(self): """ Заливка фоном """ self.screen.fill(COLOR_BACKGROUND) return def draw_field(self): """ отрисовка игрового поля """ # all_sprites = pygame.sprite.Group() field = pygame.Rect(SIZE_MARGIN + SIZE_DX, SIZE_MARGIN + SIZE_DY, self.size_field_x, self.size_field_y) pygame.draw.rect(self.screen, COLOR_FIELD, field, 0) # self.hline_draw(0, 0, self.size_x, color = COLOR_BORDER, width = 5) # self.hline_draw(0, self.size_y, self.size_x, color = COLOR_BORDER, width = 5) # self.vline_draw(0, 0, self.size_y, color = COLOR_BORDER, width = 5) # self.vline_draw(self.size_x, 0, self.size_y, color = COLOR_BORDER, width = 5) return self def draw_grid(self): """ Отрисовка координатной сетки игрового поля """ for x in range(0, self.size_x + 1): self.draw_vline(x, 0, self.size_y, color = COLOR_GRID) for y in range(0, self.size_y + 1): self.draw_hline(0, y, self.size_x, color = COLOR_GRID) return self def draw_axes(self): """ Отрисовка подписей координатной сектки """ for x, text in enumerate(axes_label_x): self.draw_text(x, -1, str(text)) for y, text in enumerate(axes_label_y): self.draw_text(-1, y, str(text)) return self def draw_maze(self, maze): """ Отрисовка стенок лабиринта """ for x in range(maze.hsize()): for y in range(maze.vsize() + 1): if maze._horizontal_walls[x][y]: self.draw_hline(x, y, 1, width = 3) for x in range(maze.hsize() + 1): for y in range(maze.vsize()): if maze._vertical_walls[x][y]: self.draw_vline(x, y, 1, width = 3) return self def draw_gamer(self, x, y, name): """ Отрисовка игроков """ font = pygame.font.SysFont('couriernew', 36) text = font.render('X', True, (200, 0, 0)) self.screen.blit(text, (self.__pix_x(x), self.__pix_y(y) + SIZE_DY/6)) font = pygame.font.SysFont('couriernew', 10) text = font.render(name, True, (100, 100, 100)) self.screen.blit(text, (self.__pix_x(x), self.__pix_y(y))) return self def draw_things(self, things): for t in things: self.draw_text(t.x, t.y, t.name, color = COLOR_THING, font_size = 18) return def draw_text(self, x, y, t, color = COLOR_BORDER, font_size = 28): font = pygame.font.SysFont('couriernew', font_size) text = font.render(str(t), True, color) self.screen.blit(text, (self.__pix_x(x), self.__pix_y(y))) return self def draw_text_big_up(self, text, color = (100, 120, 250), font_size = 36): """Отрисовка крупного текста НАД игровым полем """ const_pt = 30 font = pygame.font.SysFont('couriernew', font_size) text = font.render(text, True, color) self.screen.blit(text, (SIZE_MARGIN, SIZE_MARGIN / 2)) return self def draw_text_little_down(self, number_gamer, t1 = '', t2 = '', color = COLOR_BORDER, font_size = 14): """ Отрисовка текста о состоянии игрока ПОД игровым полем """ const_pt = 30 font = pygame.font.SysFont('couriernew', font_size) text = font.render(t1, True, color) self.screen.blit(text, (SIZE_MARGIN, SIZE_MARGIN + (10 + 1)*SIZE_DX + (number_gamer+1) * const_pt)) text = font.render(t2, True, color) self.screen.blit(text, (SIZE_MARGIN, 10+SIZE_MARGIN + (10 + 1)*SIZE_DX + (number_gamer+1) * const_pt)) return self def draw_hline(self, x, y, dx, color = COLOR_BORDER, width = 1): """ Отрисовка горизонтальной линии (поля с координатами левого верхнего угла (x, y)) """ pygame.draw.line(self.screen, color, (self.__pix_x(x), self.__pix_y(y)), (self.__pix_x(x + dx), self.__pix_y(y)), width=width) return self def draw_vline(self, x, y, dy, color = COLOR_BORDER, width = 1): pygame.draw.line(self.screen, color, (self.__pix_x(x), self.__pix_y(y)), (self.__pix_x(x), self.__pix_y(y+dy)), width=width) return self def __pix_x(self, x): """Координата X в пикселях верхнего левого угла квадата с координатами """ return SIZE_MARGIN + SIZE_DX + x*SIZE_DX def __pix_y(self, y): """Координата X в пикселях верхнего левого угла квадата с координатами """ return SIZE_MARGIN + SIZE_DX + y*SIZE_DY def flip(self): pygame.display.flip() return self def quit(self): pygame.quit() return self if __name__ == '__main__': print('\n * * * Тест отрисовки игрового поля * * *') # clock = pygame.time.Clock() # clock.tick(FPS) graphics = Rendering(10, 10) graphics.draw_background() graphics.draw_field() graphics.draw_grid() graphics.draw_axes() graphics.flip() # game_over=False # while not game_over: # for event in pygame.event.get(): # if event.type==pygame.QUIT: # game_over=True a = input('Теперь можно завершать выполенение программы') pygame.quit()