import sys import pygame import threading import time import datetime import platform import subprocess pygame.init() screen = pygame.display.set_mode((800, 480)) pygame.display.set_caption('The Red Robot Radio - Virtualx Game Engine') font = pygame.font.Font(None, 30) clock = pygame.time.Clock() FPS = 60 ax = 0 ay = 0 bx = 0 by = 0 cx = 0 cy = 0 dx = 0 dy = 0 ex = 0 ey = 0 BLACK = (0, 0, 0) #WHITE = (255, 255, 255) pygame.mixer.music.load('music/space.ogg') csfx = pygame.mixer.Sound('sfx/crash.ogg') lcfx = pygame.mixer.Sound('sfx/complete.ogg') pygame.mixer.music.play(-1) #sound = pygame.mixer.Sound(file='bmx.ogg') #raw_array = sound.get_raw() #raw_array = raw_array[100000:92557920] #cut_sound = pygame.mixer.Sound(buffer=raw_array) #cut_sound.play(-1) class Background(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.x = 0 self.y = 0 self.image = pygame.image.load('backgrounds/galaxy.png') #self.image = pygame.Surface((32, 32)) #self.image.fill(WHITE) self.rect = self.image.get_rect() # Get rect of some size as 'image'. self.velocity = [0, 0] def update(self): self.rect.move_ip(*self.velocity) class Crash(pygame.sprite.Sprite): def __init__(self): super().__init__() self.image = pygame.image.load('backgrounds/crash.png') #self.image = pygame.Surface((32, 32)) #self.image.fill(WHITE) self.rect = self.image.get_rect() # Get rect of some size as 'image'. self.velocity = [0, 0] class Antenna(pygame.sprite.Sprite): def __init__(self): super().__init__() self.image = pygame.image.load('backgrounds/antenna.png') #self.image = pygame.Surface((32, 32)) #self.image.fill(WHITE) self.rect = self.image.get_rect() # Get rect of some size as 'image'. self.velocity = [0, 0] def update(self): self.rect.move_ip(*self.velocity) class Player(pygame.sprite.Sprite): def __init__(self,xset,yset): pygame.sprite.Sprite.__init__(self) self.x = xset self.y = yset self.image = pygame.image.load('sprites/ss.png') #self.image = pygame.Surface((32, 32)) #self.image.fill(WHITE) #self.rect = self.image.get_rect() # Get rect of some size as 'image'. self.rect = pygame.Rect(self.x,self.y,108, 68) self.velocity = [0, 0] def update(self): self.rect.move_ip(*self.velocity) class Wallh(pygame.sprite.Sprite): def __init__(self,xset,yset): pygame.sprite.Sprite.__init__(self) self.x = xset self.y = yset self.image = pygame.image.load('sprites/wallh.png') #self.image = pygame.Surface((32, 32)) #self.image.fill(WHITE) #self.rect = self.image.get_rect() # Get rect of some size as 'image'. self.rect = pygame.Rect(self.x,self.y,50, 1000) self.velocity = [0, 0] def update(self): self.rect.move_ip(bx, by) class Wallv(pygame.sprite.Sprite): def __init__(self,xset,yset): pygame.sprite.Sprite.__init__(self) self.x = xset self.y = yset self.image = pygame.image.load('sprites/wallv.png') #self.image = pygame.Surface((32, 32)) #self.image.fill(WHITE) #self.rect = self.image.get_rect() # Get rect of some size as 'image'. self.rect = pygame.Rect(self.x,self.y,3400, 50) self.velocity = [0, 0] def update(self): self.rect.move_ip(bx, by) class Css(pygame.sprite.Sprite): def __init__(self,xset,yset): pygame.sprite.Sprite.__init__(self) self.x = xset self.y = yset self.image = pygame.image.load('sprites/css.png') #self.image = pygame.Surface((32, 32)) #self.image.fill(WHITE) #self.rect = self.image.get_rect() # Get rect of some size as 'image'. self.rect = pygame.Rect(self.x,self.y,108, 68) self.velocity = [0, 0] def update(self): self.rect.move_ip(bx, by) class Sat(pygame.sprite.Sprite): def __init__(self,xset,yset): pygame.sprite.Sprite.__init__(self) self.x = xset self.y = yset self.image = pygame.image.load('sprites/sat.png') #self.image = pygame.Surface((32, 32)) #self.image.fill(WHITE) #self.rect = self.image.get_rect() # Get rect of some size as 'image'. self.rect = pygame.Rect(self.x,self.y,30, 22) self.velocity = [0, 0] def update(self): self.rect.move_ip(bx, by) class Goal(pygame.sprite.Sprite): def __init__(self,xset,yset): pygame.sprite.Sprite.__init__(self) self.x = xset self.y = yset self.image = pygame.image.load('sprites/radio.png') #self.image = pygame.Surface((32, 32)) #self.image.fill(WHITE) #self.rect = self.image.get_rect() # Get rect of some size as 'image'. self.rect = pygame.Rect(self.x,self.y,69, 120) self.velocity = [0, 0] def update(self): self.rect.move_ip(bx, by) class Bus(pygame.sprite.Sprite): def __init__(self,xset,yset): pygame.sprite.Sprite.__init__(self) self.x = xset self.y = yset self.image = pygame.image.load('sprites/bus.png') #self.image = pygame.Surface((32, 32)) #self.image.fill(WHITE) #self.rect = self.image.get_rect() # Get rect of some size as 'image'. self.rect = pygame.Rect(self.x,self.y,118, 63) self.velocity = [0, 0] def update(self): self.rect.move_ip(bx, by) class Tc(pygame.sprite.Sprite): def __init__(self,xset,yset): pygame.sprite.Sprite.__init__(self) self.x = xset self.y = yset self.image = pygame.image.load('sprites/tc.png') #self.image = pygame.Surface((32, 32)) #self.image.fill(WHITE) #self.rect = self.image.get_rect() # Get rect of some size as 'image'. self.rect = pygame.Rect(self.x,self.y,118, 63) self.velocity = [0, 0] def update(self): self.rect.move_ip(bx, by) class Ast1(pygame.sprite.Sprite): def __init__(self,xset,yset): pygame.sprite.Sprite.__init__(self) self.x = xset self.y = yset self.image = pygame.image.load('sprites/asteroid.png') #self.image = pygame.Surface((32, 32)) #self.image.fill(WHITE) #self.rect = self.image.get_rect() # Get rect of some size as 'image'. self.rect = pygame.Rect(self.x,self.y,108, 78) self.velocity = [0, 0] def update(self): self.rect.move_ip(cx, cy) class Ast2(pygame.sprite.Sprite): def __init__(self,xset,yset): pygame.sprite.Sprite.__init__(self) self.x = xset self.y = yset self.image = pygame.image.load('sprites/asteroid.png') #self.image = pygame.Surface((32, 32)) #self.image.fill(WHITE) #self.rect = self.image.get_rect() # Get rect of some size as 'image'. self.rect = pygame.Rect(self.x,self.y,108, 78) self.velocity = [0, 0] def update(self): self.rect.move_ip(dx, dy) class Ast3(pygame.sprite.Sprite): def __init__(self,xset,yset): pygame.sprite.Sprite.__init__(self) self.x = xset self.y = yset self.image = pygame.image.load('sprites/asteroid.png') #self.image = pygame.Surface((32, 32)) #self.image.fill(WHITE) #self.rect = self.image.get_rect() # Get rect of some size as 'image'. self.rect = pygame.Rect(self.x,self.y,108, 78) self.velocity = [0, 0] def update(self): self.rect.move_ip(ex, ey) player = Player(346,206) css1 = Css(483,262) css2 = Css(500,400) sat1 = Sat(550,-100) sat2 = Sat(600,100) goal = Goal(3000,-100) bus1 = Bus(600,656) tc1 = Tc(854,472) ast1 = Ast1(120,200) ast2 = Ast2(300,100) ast3 = Ast3(500,150) wall1 = Wallh(-100,-200) wall2 = Wallh(3100,-200) wall3 = Wallv(-200,-200) wall4 = Wallv(-200,800) background = Background() crash = Crash() antenna = Antenna() running = True live = True complete = False debug = False # This set debug mode pygame.mouse.set_visible(False) #rect = pygame.Rect((0, 0), (32, 32)) #image = pygame.Surface((32, 32)) #image.fill(WHITE) start_time = pygame.time.get_ticks() runtime = 0 pygame.event.set_grab(True) while running: dt = clock.tick(FPS) / 1000 #screen.fill(BLACK) datetime.datetime.now() for event in pygame.event.get(): if event.type == pygame.QUIT: quit() elif event.type == pygame.KEYDOWN: if event.key == pygame.K_n: pygame.mixer.music.stop() elif event.key == pygame.K_m: pygame.mixer.music.play(-1) elif event.key == pygame.K_c: if debug: #this trigger spaceship crash event live = False pygame.mixer.music.stop() csfx.play() elif event.key == pygame.K_r: #this restart the game player = Player(346,206) css1 = Css(483,262) css2 = Css(500,400) sat1 = Sat(550,-100) sat2 = Sat(600,100) goal = Goal(3000,-100) bus1 = Bus(600,656) tc1 = Tc(854,472) ast1 = Ast1(120,200) ast2 = Ast2(300,100) ast3 = Ast3(500,150) wall1 = Wallh(-100,-200) wall2 = Wallh(3100,-200) wall3 = Wallv(-200,-200) wall4 = Wallv(-200,800) live = True complete = False pygame.mixer.music.play(-1) start_time = pygame.time.get_ticks() elif event.key == pygame.K_ESCAPE: quit() if event.type == pygame.MOUSEMOTION: #This control camera pygame.mouse.set_pos([400, 240]) ax, ay = event.rel bx = ax * 7 by = ay * 7 cx = ax * 1 cy = ay * 1 dx = ax * 0.5 dy = ay * 0.5 ex = ax * 0.1 ey = ay * 0.1 if live: runtime = pygame.time.get_ticks() - start_time if (live & debug == False): if pygame.sprite.collide_rect(player, wall3): live = False pygame.mixer.music.stop() csfx.play() elif pygame.sprite.collide_rect(player, wall4): live = False pygame.mixer.music.stop() csfx.play() if pygame.sprite.collide_rect(player, wall1): live = False pygame.mixer.music.stop() csfx.play() elif pygame.sprite.collide_rect(player, wall2): live = False pygame.mixer.music.stop() csfx.play() elif pygame.sprite.collide_rect(player, css1): live = False pygame.mixer.music.stop() csfx.play() elif pygame.sprite.collide_rect(player, css2): live = False pygame.mixer.music.stop() csfx.play() elif pygame.sprite.collide_rect(player, sat1): live = False pygame.mixer.music.stop() csfx.play() elif pygame.sprite.collide_rect(player, sat2): live = False pygame.mixer.music.stop() csfx.play() elif pygame.sprite.collide_rect(player, bus1): live = False pygame.mixer.music.stop() csfx.play() elif pygame.sprite.collide_rect(player, tc1): live = False pygame.mixer.music.stop() csfx.play() elif pygame.sprite.collide_rect(player, goal): live = False complete = True pygame.mixer.music.stop() lcfx.play() player.update() css1.update() css2.update() sat1.update() sat2.update() goal.update() bus1.update() tc1.update() ast1.update() ast2.update() ast3.update() wall1.update() wall2.update() wall3.update() wall4.update() if live: screen.blit(background.image, background.rect) screen.blit(ast3.image, ast3.rect) screen.blit(ast1.image, ast2.rect) screen.blit(ast1.image, ast1.rect) screen.blit(player.image, player.rect) screen.blit(css1.image, css1.rect) screen.blit(css2.image, css2.rect) screen.blit(sat1.image, sat1.rect) screen.blit(sat2.image, sat2.rect) screen.blit(goal.image, goal.rect) screen.blit(bus1.image, bus1.rect) screen.blit(tc1.image, tc1.rect) screen.blit(wall1.image, wall1.rect) screen.blit(wall2.image, wall2.rect) screen.blit(wall3.image, wall3.rect) screen.blit(wall4.image, wall4.rect) elif complete: playhr = (int(runtime / 3600000)) playmin = (int(runtime / 60000) - (playhr * 60)) playsec = (int(runtime / 1000) - (playmin * 60) - (playhr * 3600)) playmsec = (runtime - (playsec * 1000) - (playmin * 60000) - (playhr * 3600000)) playtime = "%d:%02d:%02d:%03d" % (playhr, playmin, playsec, playmsec) screen.blit(antenna.image, antenna.rect) yourtimetext = font.render(str("Your Time"), True, pygame.Color('white')) screen.blit(yourtimetext, (350, 400)) yourtime = font.render(str(playtime), True, pygame.Color('white')) screen.blit(yourtime, (350, 440)) else: playhr = (int(runtime / 3600000)) playmin = (int(runtime / 60000) - (playhr * 60)) playsec = (int(runtime / 1000) - (playmin * 60) - (playhr * 3600)) playmsec = (runtime - (playsec * 1000) - (playmin * 60000) - (playhr * 3600000)) playtime = "%d:%02d:%02d:%03d" % (playhr, playmin, playsec, playmsec) screen.blit(crash.image, crash.rect) yourtimetext = font.render(str("Your Time"), True, pygame.Color('white')) screen.blit(yourtimetext, (350, 400)) yourtime = font.render(str(playtime), True, pygame.Color('white')) screen.blit(yourtime, (350, 440)) rfps = font.render(str(int(clock.get_fps())), True, pygame.Color('white')) screen.blit(rfps, (50, 50)) if debug: sysclock = font.render(str(datetime.datetime.utcnow()), True, pygame.Color('white')) cpuarch = font.render(str(platform.machine()), True, pygame.Color('white')) playcount = font.render(str(runtime), True, pygame.Color('white')) #infox = font.render(str(bx), True, pygame.Color('white')) #infoy = font.render(str(by), True, pygame.Color('white')) screen.blit(sysclock, (120, 50)) screen.blit(cpuarch, (50, 80)) screen.blit(playcount, (160, 80)) #screen.blit(infox, (50, 110)) #screen.blit(infoy, (50, 140)) pygame.display.update()