Game/Game_1/main.py

127 lines
3.6 KiB
Python

import pygame
pygame.init()
class Wall(pygame.sprite.Sprite):
def __init__(self, size, pos) -> None:
super().__init__()
self.image = pygame.surface.Surface(size)
self.image.fill("red")
self.rect = self.image.get_rect(center=pos)
def create_floor(file_name):
floor = []
with open (file_name) as f:
lines = f.readlines()
for i, line in enumerate(lines[::2]):
if floor == "#":
floor.append(Floor((30,30), (30 + 30*i)))
return floor
def create_walls(file_name):
walls = []
with open(file_name) as f:
lines = f.readlines()
for i, line in enumerate(lines[::2]):
for j, floor in enumerate(line[1::2]):
if floor == "|":
walls.append(Wall((5, 30), (15 + 30*j, 30*i)))
for i, line in enumerate(lines[1::2]):
for j, floor in enumerate(line[::2]):
if floor == "-":
walls.append(Wall((30, 5), (30*j, 15 + 30*i)))
return walls
screen = pygame.display.set_mode((1920, 1015))
pygame.display.set_caption("Game_name")
clock = pygame.time.Clock()
dt = 0
player_pos = pygame.Vector2(screen.get_width() / 2, screen.get_height() / 2)
floor_image = pygame.transform.scale(pygame.image.load("Floor.png").convert_alpha(), (30, 30))
#class Player(pygame.sprite.Sprite):
#def __init__(self, size, pos, walls)
player = pygame.transform.scale(pygame.image.load("Player.png").convert_alpha(), (25, 30))
running = True
wall_list = create_walls("lvl.txt")
for wall in wall_list:
print(f'{wall.rect.size})x = {wall.rect.x}; y = {wall.rect.y}')
walls = pygame.sprite.Group(*wall_list)
floor_list = create_floor("lvl.txt")
for floor in floor_list:
print(f'{floor.rect.size})x = {floor.rect.x}; y = {floor.rect.y}')
floor = pygame.sprite.Group(*floor_list)
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill("cyan")
for y in range(10,20):
for x in range(26,38):
screen.blit(floor_image, (30*x, 30*y))
screen.blit(player, (player_pos.x, player_pos.y))
keys = pygame.key.get_pressed()
if keys[pygame.K_w]:
player_pos.y -= 200 * dt
if keys[pygame.K_s]:
player_pos.y += 200 * dt
if keys[pygame.K_a]:
player_pos.x -= 200 * dt
if keys[pygame.K_d]:
player_pos.x += 200 * dt
walls.draw(screen)
pygame.display.flip()
dt = clock.tick(60)/1000
floor.draw(screen)
class Camera:
def __init__(self, player, size=(400, 300)):
self.player = player
self.center = pygame.display.get_surface().get_rect().center
self.size = size
self.player_size = self.player.rect.size
self.speed_x = 0
self.speed_y = 0
def update(self, dt, sprites):
x_move = abs(self.player.rect.centerx - self.center[0]) > self.size[0] // 2
y_move = abs(self.player.rect.centery - self.center[1]) > self.size[1] // 2
if x_move or y_move:
for sprite in sprites:
if x_move:
self.speed_x = (self.player.rect.centerx - self.center[0]) * 2 * dt
sprite.rect.x -= self.speed_x
if y_move:
self.speed_y = (self.player.rect.centery - self.center[1]) * 2 * dt
sprite.rect.y -= self.speed_y
pygame.quit()