1
Fork 0
This repository has been archived on 2023-03-26. You can view files and clone it, but cannot push or open issues or pull requests.
attack-on-blocks/target.py

85 lines
3.5 KiB
Python
Raw Normal View History

2015-05-12 22:45:19 +01:00
import pygame, logging
2015-05-11 22:15:40 +01:00
from random import randint
2015-05-13 09:03:04 +01:00
from game import generate_random_level
2015-04-28 12:20:15 +01:00
2015-05-07 19:50:57 +01:00
2015-04-28 12:20:15 +01:00
class Target(pygame.sprite.Sprite):
2015-05-12 22:43:41 +01:00
def __init__(self, x, y, textures, color=(30,0,150), width=23, height=23):
2015-04-28 12:20:15 +01:00
super().__init__()
self.width = width
self.height = height
2015-05-19 12:17:27 +01:00
self.textures = textures
self.default_texture = textures.get_target_texture()
self.image = pygame.transform.scale(self.default_texture[0], (self.width, self.height))
2015-04-28 12:20:15 +01:00
self.rect = self.image.get_rect()
2015-05-12 22:45:02 +01:00
self.speed = 5
self.rect.x, self.rect.y = (x+(self.width/2)),(y+(self.width/2)) # centres co-ordinates
2015-05-07 19:50:57 +01:00
self.type = "NORMAL"
2015-05-19 12:17:27 +01:00
self.lives = 1
2015-05-07 19:50:57 +01:00
def move(self):
self.rect.x += self.speed
def drop(self):
2015-05-12 22:45:02 +01:00
self.rect.y += 13
self.speed *= -1
2015-05-07 19:50:57 +01:00
2015-05-09 23:55:43 +01:00
def set_position(self, x, y, center=False):
if center:
self.rect.x, self.rect.y = (x+(self.width/2)),(y+(self.width/2))
else:
self.rect.x, self.rect.y = x, y
def generate_targets(player, window_size, Levels):
sprite_list = []
group = pygame.sprite.Group()
if player.level > len(Levels)-1:
level = generate_random_level()
else: level = Levels[player.level]
logging.debug("Generating Level: " + str(level))
for i in range(level.rows):
i *= level.padding + 8
for j in range(75, window_size[0] - 75, level.padding + 10):
temp = Target(x=j,y=i, textures=player.options["Textures"])
sprite_list.append(temp)
del temp
if len(sprite_list) < level.firebacks:
firebacks = len(sprite_list)
else: firebacks = level.firebacks
for i in range(firebacks):
2015-06-04 12:34:22 +01:00
loop = 0
changed = False
while not changed:
2015-06-04 12:34:22 +01:00
if loop == firebacks: changed = True
index = randint(0, len(sprite_list)-1) if (len(sprite_list) - 1 != 0) else 0
if sprite_list[index].type != "SHOOTER":
sprite_list[index].type = "SHOOTER"
2015-05-19 12:13:44 +01:00
sprite_list[index].lives = 2
sprite_list[index].image = pygame.transform.scale(player.options["Textures"].get_texture("SHOOTER"), (sprite_list[index].width, sprite_list[index].height))
x,y = sprite_list[index].rect.x, sprite_list[index].rect.y
sprite_list[index].rect = sprite_list[index].image.get_rect()
sprite_list[index].set_position(x,y, center=False) #Already Centered!
changed = True
2015-06-04 12:34:22 +01:00
loop += 1
2015-05-19 12:13:44 +01:00
if len(sprite_list) < level.powerups:
powerups = len(sprite_list)
else: powerups = level.powerups
for i in range(powerups):
changed = False
while not changed:
index = randint(0, len(sprite_list)-1) if (len(sprite_list) - 1 != 0) else 0
if sprite_list[index].type != "POWERUP" and sprite_list[index].type != "SHOOTER" :
sprite_list[index].type = "POWERUP"
sprite_list[index].image = pygame.transform.scale(player.options["Textures"].get_texture("POWERUP"), (sprite_list[index].width, sprite_list[index].height))
x,y = sprite_list[index].rect.x, sprite_list[index].rect.y
sprite_list[index].rect = sprite_list[index].image.get_rect()
sprite_list[index].set_position(x,y, center=False) #Already Centered!
changed = True
for sprite in sprite_list: #Because sprite groups dont support indexing!
group.add(sprite)
return group