import pgzrun import random WIDTH = 800 HEIGHT = 600 background = Actor('grass') player = Actor('p3_front') player.x = 400 player.y = 300 coin = Actor('coingold') coin.x = random.randint(50, WIDTH - 50) coin.y = random.randint(50, HEIGHT - 50) trees = [] tree_count = 2 for _ in range(tree_count): new_tree = Actor('tree') new_tree.x = random.randint(80, WIDTH - 80) new_tree.y = random.randint(80, HEIGHT - 80) while new_tree.colliderect(player): new_tree.x = random.randint(80, WIDTH - 80) new_tree.y = random.randint(80, HEIGHT - 80) trees.append(new_tree) score = 0 timer = 35 def check_tree_collision(new_x, new_y): temp_player = Actor('p3_front', pos=(new_x, new_y)) for tree in trees: if temp_player.colliderect(tree): return False return True def update(): global score global timer if timer <= 0: return timer -= 1 / 60 move_speed = 5 if keyboard.up: new_y = player.y - move_speed if check_tree_collision(player.x, new_y): player.y = new_y if keyboard.down: new_y = player.y + move_speed if check_tree_collision(player.x, new_y): player.y = new_y if keyboard.left: new_x = player.x - move_speed if check_tree_collision(new_x, player.y): player.x = new_x if keyboard.right: new_x = player.x + move_speed if check_tree_collision(new_x, player.y): player.x = new_x if player.colliderect(coin): while True: coin.x = random.randint(50, WIDTH - 50) coin.y = random.randint(50, HEIGHT - 50) overlap_tree = False for t in trees: if coin.colliderect(t): overlap_tree = True break if not overlap_tree: break score += 1 sounds.sfx_coin_single1.play() def draw(): if timer <= 0: screen.fill((30, 30, 30)) screen.draw.text('Game Over', (330, 270), color=(255,255,255), fontsize=36) screen.draw.text('Final Score: ' + str(score), (330, 330), color=(255,255,255), fontsize=30) else: background.draw() for tree in trees: tree.draw() player.draw() coin.draw() screen.draw.text('Score: ' + str(score), (15,10), color=(255,255,255), fontsize=30) screen.draw.text('Time: ' + str(round(timer, 2)), (330,10), color=(255,255,255), fontsize=30) pgzrun.go() # Must be last line