#!/usr/bin/env python3 from sys import argv import pygame as pg # locals from ship import Ship from starfield import Starfield # Colors BLACK = (0,)*3 WHITE = (255,)*3 # Graphical Environment WIN_SIZE = (640, 480) MAX_FPS = 60 # Game constants # Sprite positions start = (0,0) # Setup pg.init() clock = pg.time.Clock() font = pg.font.SysFont('Courier',24) pg.display.set_caption(f"Space Collector") screen = pg.display.set_mode(WIN_SIZE) scr_rect = screen.get_rect() map_rect = pg.Rect( (start[0]-scr_rect.width/2, start[1]-scr_rect.height/2), scr_rect.size ) the_starfield = Starfield(screen); the_ship = Ship(start,scr_rect) the_ship.rect.x = scr_rect.centerx - the_ship.rect.width / 2 the_ship.rect.y = scr_rect.centery - the_ship.rect.height / 2 disp_sprites = pg.sprite.Group() #moving = pg.sprite.Group(gems,blocks) # Game loop carry_on = True win = False while carry_on: # Quitting states for event in pg.event.get(): if event.type == pg.QUIT: carry_on = False elif event.type==pg.KEYDOWN: if event.key==pg.K_ESCAPE: carry_on = False ### Game Logic ### mouse_events = pg.mouse.get_pressed() if mouse_events[0]: the_ship.deceleration = 0 the_ship.velocity += 1 if mouse_events[2]: the_ship.deceleration = 1 mousev = pg.math.Vector2(pg.mouse.get_pos()) mousev -= scr_rect.center # ship movement if mousev.length() > the_ship.SIZE/2: the_ship.direction += mousev.normalize()/(the_ship.velocity+1) the_ship.direction.normalize_ip() the_ship.velocity = max(the_ship.velocity - the_ship.deceleration, 0) if the_ship.velocity == 0: the_ship.deceleration = 0 # Move ship the_ship.change = (the_ship.velocity*the_ship.direction) the_ship.map_pos.x += round(the_ship.change.x) the_ship.map_pos.y += round(the_ship.change.y) # Move camera to follow ship map_rect.x = the_ship.map_pos.x - map_rect.w/2 map_rect.y = the_ship.map_pos.y - map_rect.h/2 ### Display Logic ### screen.fill(BLACK) the_starfield.draw(screen, map_rect) disp_sprites.update(map_rect=map_rect) disp_sprites.draw(screen) the_ship.update(rot_vector= the_ship.direction) screen.blit(the_ship.image, the_ship.rect) if True: elapsed_time = pg.time.get_ticks()/1000 elapsed_minutes = int(elapsed_time // 60) elapsed_seconds = int(elapsed_time // 1) % 60 time_string = f"{elapsed_minutes:d}:{elapsed_seconds:02d}" time_label = font.render(time_string, 1, WHITE) time_pos = (screen.get_width()-10-time_label.get_width(),10) screen.blit(time_label, time_pos) gem_str = f"Level Complete!" gem_label = font.render(gem_str,True, WHITE) screen.blit(gem_label, (10, 10)) pg.display.flip() clock.tick(MAX_FPS) pg.quit()