Beispiel #1
0
class SplashScreen(GameState):
    def __init__(self):
        super(SplashScreen, self).__init__()
        self.title = self.font.render("Planet Golf", True, pg.Color("dodgerblue"))
        self.title_rect = self.title.get_rect(center=self.screen_rect.center)
        self.next_state = "GAMEPLAY"
        self.starfield = Starfield(self.screen_rect)
        
    def get_event(self, event):
        if event.type == pg.QUIT:
            self.quit = True
        elif event.type == pg.KEYUP:
            if event.key == pg.K_RETURN:
                self.done = True
            elif event.key == pg.K_ESCAPE:
                self.quit = True
    
    def update(self, dt):
        self.starfield.update()
        self.persist['level'] = "planets.txt"

    def draw(self, surface):
        surface.fill(pg.Color("black"))
        surface.blit(self.title, self.title_rect)        
        self.starfield.draw(surface)
Beispiel #2
0
class LunarSurface(object):
    def __init__(self, depth=3):
        self.starfield = Starfield()

        self.textures = []
        mul = 0.125 / 2.0
        for _ in range(depth):
            texture = pygame.Surface((512, screen_height * 2))
            texture.set_colorkey((255, 0, 255))
            texture.fill((255, 0, 255))
            heightmap = heightmap_1d(9)
            for x in range(512):
                min_y = int((heightmap[x] * mul + 1.0) / 2.0 * screen_height)
                for y in range(min_y, screen_height * 2):
                    noise = random.uniform(0.9, 1.0)
                    color = tuple(255.0 * noise * mul for _ in range(3))
                    texture.set_at((x, y), color)
            self.textures.append(texture)
            mul *= 2

    def update(self, delta):
        self.starfield.update(delta)

    def render(self, screen, camera):
        self.starfield.render(screen, camera)

        mul = 0.125
        for texture in self.textures:
            x = int(-camera.pos[0] * 10.0 * mul) % 512
            y = camera.pos[1] * 10.0 * mul
            screen.blit(texture, (x, y))
            screen.blit(texture, (x - 512, y))
            mul *= 2
Beispiel #3
0
class FinishScreen(GameState):
    def __init__(self):
        super(FinishScreen, self).__init__()
        self.next_state = "GAMEPLAY"
        self.starfield = Starfield(self.screen_rect)
        
    def get_event(self, event):
        if event.type == pg.QUIT:
            self.quit = True
        elif event.type == pg.KEYUP:
            if event.key == pg.K_RETURN:
                self.done = True
            elif event.key == pg.K_ESCAPE:
                self.next_state = "SPLASH"
                self.done = True
    
    def startup(self, persistent):
        self.persist = {}
        self.persist['level'] = persistent['level']
        self.success = persistent['success']
        self.score = float(persistent['score'])
        self.rank = 0
        self.highscores = []

        if self.success and self.score > 0:
            try:
                for line in open("highscore_" + self.persist['level'], "r+").readlines():
                    self.highscores.append(float(line))
            except:
                pass

            import bisect
            self.rank = bisect.bisect_left(self.highscores, self.score)
            self.highscores.insert(self.rank, self.score)
            with open("highscore_" + self.persist['level'], "w+") as f:
                for score in self.highscores:
                    f.write("{0}\n".format(score))


    def update(self, dt):
        self.starfield.update()

    def draw(self, surface):
        surface.fill(pg.Color("black"))
        self.starfield.draw(surface)

        if self.success:
            title = self.font.render(
                    "Success! You scored {0} points! [Rank {1}].".format(self.score, self.rank),
                    True, pg.Color("dodgerblue"))
            title_rect = title.get_rect(center=self.screen_rect.center)
            surface.blit(title, title_rect)
        else:
            title = self.font.render(
                    "You failed! Press 'return' to restart.",
                    True, pg.Color("dodgerblue"))
            title_rect = title.get_rect(center=self.screen_rect.center)
            surface.blit(title, title_rect)
Beispiel #4
0
def main():
    WINSIZE = 640, 480
    NUMBER_OF_STARS = 250
    STARTING_ANGLE = 180
    CLOSEST_STAR_COLOR = (255, 255, 255)
    STAR_SIZE_IN_PIXELS = 1
    #_V_ = 1
    pygame.init()
    pygame.key.set_repeat(1, 1)
    screen = pygame.display.set_mode(WINSIZE, pygame.SWSURFACE)
    stars = Starfield(screen, screen.get_rect(), NUMBER_OF_STARS,
                      STARTING_ANGLE, (40, 4), STAR_SIZE_IN_PIXELS,
                      CLOSEST_STAR_COLOR)

    ship1 = Ship(screen)

    done = False
    while not done:
        screen.fill(THECOLORS["black"])
        stars.update()
        ship1.draw()
        ship1.resetSprt()
        pygame.display.update()
        events = pygame.event.get()
        for e in events:
            if (e.type == QUIT):
                done = True
                break
            elif (e.type == KEYDOWN):
                if (e.key == K_ESCAPE):
                    done = True
                    break
                #Test for movement
                dx, dy = 0, 0
                if (e.key == K_DOWN):
                    dy += 1
                if (e.key == K_UP):
                    dy -= 1
                if (e.key == K_LEFT):
                    dx -= 1
                if (e.key == K_RIGHT):
                    dx += 1
                ship1.move(dx, dy)
                #if(e.key == K_PLUS):
                #stars.set_speed((
    print "Exiting!"

    return
Beispiel #5
0
def main():
	WINSIZE = 640,480	
	NUMBER_OF_STARS = 250
	STARTING_ANGLE = 180
  	CLOSEST_STAR_COLOR = (255, 255, 255)
	STAR_SIZE_IN_PIXELS = 1
	#_V_ = 1
	pygame.init()
	pygame.key.set_repeat(1,1)
	screen = pygame.display.set_mode(WINSIZE,pygame.SWSURFACE)
	stars = Starfield(screen,screen.get_rect(),NUMBER_OF_STARS,STARTING_ANGLE,(40,4),STAR_SIZE_IN_PIXELS,CLOSEST_STAR_COLOR)
	
	ship1 = Ship(screen)
	
	done = False
	while not done:
		screen.fill(THECOLORS["black"])
		stars.update()
		ship1.draw()
		ship1.resetSprt()
		pygame.display.update()
		events = pygame.event.get()
		for e in events:
			if(e.type == QUIT):
				done = True
				break
			elif (e.type == KEYDOWN):
				if(e.key == K_ESCAPE):
					done = True
					break
				#Test for movement
				dx,dy = 0,0
				if(e.key == K_DOWN):
					dy += 1
				if(e.key == K_UP):
					dy -= 1
				if(e.key == K_LEFT):
					dx -= 1
				if(e.key == K_RIGHT):
					dx += 1
				ship1.move(dx,dy)
				#if(e.key == K_PLUS):
					#stars.set_speed((
	print "Exiting!"
	
	return
Beispiel #6
0
class Gameplay(GameState):
    def __init__(self):
        super(Gameplay, self).__init__()
        self.initial_velocity = None
        self.next_state = "FINISHED"
        
    def startup(self, persistent):
        self.persist = persistent
        self.persist['success'] = False
        self.persist['score'] = 0
        self.entities = []
        self.started = False
        self.paused = False
        self.starfield = Starfield(self.screen_rect)
        self.show_cursor = False
        self.time = 0.0

        # Load level
        for line in open(self.persist['level']).readlines():
            mass, size, pos, vel, mutable, color  = line.split(":")
            pos = pos.split(",")
            vel = vel.split(",")
            mutable = mutable.startswith('1')

            entity = Planet(
                    float(size),
                    mass=float(mass), 
                    pos=Vector2d(float(pos[0]), float(pos[1])),
                    vel=Vector2d(float(vel[0]), float(vel[1])),
                    elasticity = 0.97,)
            entity.mutable = mutable
            c = map(int, color.split(","))
            entity.color = pg.Color(*c)
            self.entities.append(entity)
        
    def get_event(self, event):
        if event.type == pg.QUIT:
            self.quit = True
        elif event.type == pg.MOUSEBUTTONUP:
            self.started = True
        elif event.type == pg.KEYUP:
            if event.key == pg.K_p:
                self.paused = not self.paused
            elif event.key == pg.K_ESCAPE:
                self.done = True
        
    def update(self, dt):
        dt /= 100.0
        if not self.started:
            p = pg.mouse.get_pos()
            self.cursor = Vector2d([float(i) for i in p])
            player = self.entities[0].pos
            diff = self.cursor - player
            if diff.length() < 1000:
                self.show_cursor = True
                diff /= 50
                self.initial_velocity = diff
                self.entities[0].vel = Vector2d(
                        float(diff[0]),
                        float(diff[1]))
            else:
                self.show_cursor = False
        elif not self.paused:
            self.time += dt
            entity_set = list(self.entities)
            # Success condition
            if self.entities[0].collides_with(self.entities[-1]):
                self.persist['init_vel'] = self.initial_velocity
                self.persist['success'] = True
                self.persist['score'] = self.time
                self.done = True
                return

            for entity in entity_set:
                entity_set.remove(entity)
                for other in entity_set:
                    if entity.collides_with(other):
                        entity.resolve_collision(other)

                    force = entity.calc_gravity(other)
                    entity.apply_force(entity.pos, force)
                    other.apply_force(other.pos, -force)

            for entity in self.entities:
                if entity.mutable == True:
                    entity.update(0, dt)

            self.starfield.update()
        else:
            pass

    def draw(self, surface):
        surface.fill(pg.Color("Black"))
        self.starfield.draw(screen)
        if not self.started and self.show_cursor:
            pg.draw.aaline(
                    surface,
                    pg.Color("dodgerblue"),
                    self.entities[0].pos,
                    self.cursor)

        for entity in self.entities:
            pg.gfxdraw.aacircle(
                surface,
                int(entity.pos[0]),
                int(entity.pos[1]),
                int(entity.radius),
                entity.color)

            pg.gfxdraw.filled_circle(
                surface,
                int(entity.pos[0]),
                int(entity.pos[1]),
                int(entity.radius),
                entity.color)
        

        label = self.font.render(str(self.initial_velocity), True, pg.Color("dodgerblue"))
        surface.blit(label, (10, 40))

        label = self.font.render(str(self.time), True, pg.Color("dodgerblue"))
        surface.blit(label, (10, 80))

        if not self.started:
            text = "Use mouse to launch satellite."
            title = self.font.render(text, True, pg.Color("dodgerblue"))
            title_rect = title.get_rect(center=self.screen_rect.center)
            surface.blit(title, title_rect)

        elif self.paused:
            title = self.font.render("PAUSED", True, pg.Color("dodgerblue"))
            title_rect = title.get_rect(center=self.screen_rect.center)
            surface.blit(title, title_rect)