Untitled
unknown
plain_text
a year ago
5.8 kB
17
Indexable
import pygame
import csv
pygame.init()
clock = pygame.time.Clock()
FPS = 60
# Game window
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 640
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption('Playable Level')
# Define game variables
ROWS = 16
MAX_COLS = 150
TILE_SIZE = SCREEN_HEIGHT // ROWS
TILE_TYPES = 21
health = 0
health_box_value = 1
total_health_boxes = 0
collected_health_boxes = 0
# Load images
pine1_img = pygame.image.load('img/Background/pine1.png').convert_alpha()
pine2_img = pygame.image.load('img/Background/pine2.png').convert_alpha()
mountain_img = pygame.image.load('img/Background/mountain.png').convert_alpha()
sky_img = pygame.image.load('img/Background/sky_cloud.png').convert_alpha()
img_list = []
for x in range(TILE_TYPES):
img = pygame.image.load(f'img/tile/{x}.png').convert_alpha()
img = pygame.transform.scale(img, (TILE_SIZE, TILE_SIZE))
img_list.append(img)
# Define colors
WHITE = (255, 255, 255)
GREEN = (144, 201, 120)
BLACK = (0, 0, 0)
# Define font
font = pygame.font.SysFont('Futura', 30)
# Load level data from CSV and count total health boxes
def load_level_data(filename):
global total_health_boxes
world_data = []
with open(filename, newline='') as csvfile:
reader = csv.reader(csvfile, delimiter=',')
for row in reader:
row_data = [int(tile) for tile in row]
world_data.append(row_data)
total_health_boxes += row_data.count(19)
return world_data
# Draw background
def draw_bg():
screen.fill(GREEN)
width = sky_img.get_width()
for x in range(4):
screen.blit(sky_img, (x * width, 0))
screen.blit(mountain_img, (x * width, SCREEN_HEIGHT - mountain_img.get_height() - 300))
screen.blit(pine1_img, (x * width, SCREEN_HEIGHT - pine1_img.get_height() - 150))
screen.blit(pine2_img, (x * width, SCREEN_HEIGHT - pine2_img.get_height()))
# Draw the world
def draw_world(world_data):
for y, row in enumerate(world_data):
for x, tile in enumerate(row):
if x * TILE_SIZE < SCREEN_WIDTH:
if tile >= 0:
screen.blit(img_list[tile], (x * TILE_SIZE, y * TILE_SIZE))
# Display health count
def draw_text(text, font, text_col, x, y):
img = font.render(text, True, text_col)
screen.blit(img, (x, y))
# Define player class
class Player(pygame.sprite.Sprite):
def __init__(self, x, y):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load('img/player.png').convert_alpha()
self.image = pygame.transform.scale(self.image, (TILE_SIZE, TILE_SIZE))
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
self.vel_x = 0
self.vel_y = 0
self.speed = 5
def update(self, world_data):
global health, collected_health_boxes
self.vel_x, self.vel_y = 0, 0
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
self.vel_x = -self.speed
if keys[pygame.K_RIGHT]:
self.vel_x = self.speed
if keys[pygame.K_UP]:
self.vel_y = -self.speed
if keys[pygame.K_DOWN]:
self.vel_y = self.speed
# Check boundaries
new_x = self.rect.x + self.vel_x
new_y = self.rect.y + self.vel_y
if new_x < 0:
new_x = 0
if new_x + self.rect.width > SCREEN_WIDTH:
new_x = SCREEN_WIDTH - self.rect.width
if new_y < 0:
new_y = 0
if new_y + self.rect.height > SCREEN_HEIGHT:
new_y = SCREEN_HEIGHT - self.rect.height
# Collision detection
if not self.check_collision(new_x, self.rect.y, world_data):
self.rect.x = new_x
if not self.check_collision(self.rect.x, new_y, world_data):
self.rect.y = new_y
# Check for health kit collection
self.collect_health_kit(world_data)
def check_collision(self, x, y, world_data):
for row_idx, row in enumerate(world_data):
for col_idx, tile in enumerate(row):
if tile >= 0 and tile != 19:
tile_rect = pygame.Rect(col_idx * TILE_SIZE, row_idx * TILE_SIZE, TILE_SIZE, TILE_SIZE)
player_rect = pygame.Rect(x, y, self.rect.width, self.rect.height)
if tile_rect.colliderect(player_rect):
return True
return False
def collect_health_kit(self, world_data):
global health, collected_health_boxes
for row_idx, row in enumerate(world_data):
for col_idx, tile in enumerate(row):
if tile == 19: # Health kit tile
tile_rect = pygame.Rect(col_idx * TILE_SIZE, row_idx * TILE_SIZE, TILE_SIZE, TILE_SIZE)
if self.rect.colliderect(tile_rect):
world_data[row_idx][col_idx] = -1 # Remove the health kit from the world
health += health_box_value # Increase health
collected_health_boxes += 1 # Increment collected health boxes
# Initialize game objects
world_data = load_level_data('level0_data.csv')
player = Player(100, 100)
player_group = pygame.sprite.Group()
player_group.add(player)
# Game loop
run = True
win = False
while run:
clock.tick(FPS)
draw_bg()
player_group.update(world_data)
draw_world(world_data)
player_group.draw(screen)
draw_text(f'Health: {health}', font, WHITE, 10, 40)
if collected_health_boxes >= total_health_boxes:
win = True
if win:
draw_text('You Win!', font, WHITE, SCREEN_WIDTH // 2 - 50, SCREEN_HEIGHT // 2)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
pygame.display.update()
pygame.quit()
Editor is loading...
Leave a Comment