# Robot saving nature import os import sys import time import random import pygame from pygame.locals import * from robot import Robot from garbage import Garbage from person import Person pygame.init() # Screen size window_h = 600 window_w = 800 unit = 1.0 score = 0 robot_speed = 9 garbage_speed = 1 person_speed = 4 # Person generation interval person_generation_ticks = 150 last_person_tick = 0 # Garbage generation interval garbage_generation_ticks = 500 last_garbage_tick = 0 trash = [] people = [] screen = pygame.display.set_mode((window_w, window_h)) # Background image object_background = pygame.image.load('images/park_2.png') # Robot robot = Robot(window_w, window_h, unit, robot_speed) # Person person = Person( window_w, window_h, unit, person_speed) start_time = time.time() fps = 30 frame_time = 1.0/fps # Main loop exit = False lost_game = False alert = 30 while not exit: # Process pygame events for event in pygame.event.get(): # Escape key to quit the game if event.type == pygame.QUIT or \ (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE): exit = True break robot.input(event) if exit: break current_time = time.time() if current_time - start_time <= frame_time: continue start_time = current_time if lost_game == False: # If enough time passed generate a new object if last_person_tick == 0: last_person_tick = person_generation_ticks people.append(Person( window_w, window_h, unit, person_speed)) else: last_person_tick -= 1 if lost_game == False: # If enough time passed generate a new object if last_garbage_tick == 0: last_garbage_tick = garbage_generation_ticks for person in people: trash.append(Garbage( window_w, window_h, unit, garbage_speed, \ (person.position[0] - (person.image_rect.height/2), \ person.position[1] - (person.image_rect.width/2)) )) else: last_garbage_tick -= 1 # Score text score_text = "Score: " + str(score) font = pygame.font.Font(None, 36) text = font.render( score_text , 1, (0, 0, 0, 0)) # check collisions for garbage in trash: if robot.collides_with(garbage): #lost_game = True trash.remove(garbage) score += 50 # Remove objects that "died" for person in people: if person.died(): people.remove(person) for garbage in trash: if garbage.died_x() or garbage.died_y(): trash.remove(garbage) # Persons for person in people: person.update() # Garbage for garbage in trash: garbage.update() # Robot robot.update() # draw the background first, because it will cover all the screen screen.blit(object_background, (0,0)) # draw everything else over the background # Score screen.blit(text, (0, 0)) # Persons for person in people: person.draw(screen) #Garbage for garbage in trash: garbage.draw(screen) #Robot robot.draw(screen) # Alert when touching person for person in people: if robot.collides_with(person): robot.draw(screen) robot.draw_alert(screen) score -= 5 for person in people: if garbage.collides_with(person): garbage.draw(screen) garbage.draw_alert(screen) score -= 5 pygame.display.update() pygame.quit()