Exemple #1
0
        scale(np.random.rand(), [0, 1], [tolerance, borders[0] - tolerance]),
        scale(np.random.rand(), [0, 1], [tolerance, borders[1] - tolerance]))


def random_velocity(magnitude):
    angle = scale(np.random.rand(), [0, 1], [0, 360])
    vec = pg.Vector2()
    vec.from_polar((magnitude, angle))
    return vec


def scale(value, old, new):
    return ((value - old[0]) / (old[1] - old[0])) * (new[1] - new[0]) + new[0]


X_AXIS_VEC = pg.Vector2(1, 0)
Y_AXIS_VEC = pg.Vector2(0, 1)
DEBUG_POSITION_COLOR = pg.Color('green')
SCREEN_WIDTH, SCREEN_HEIGHT = cfg.environment()['dim']


class Agent:
    def __init__(self, sprite: pg.Surface, position: pg.Vector2,
                 velocity: pg.Vector2, reaction_radius: float):
        self.original_sprite = sprite
        self.showable_sprite = None
        self.hitbox = None
        self.position = position
        self.velocity = velocity
        self.acceleration = pg.Vector2(0, 0)
        self.alive = True
 def __init__(self, pos, images, mission, dry = False):
     self.dry = dry
     self.pos = pos
     self.images = images
     self.speed = 1                # Acceleration multiplier
     self.acceleration = 1
     self.fire_per_sec = 4.5
     self.completeness = 1
     self.title = "Alien Zapper 1"
     self.name = "zapper"
     self.time_passed = 0
     self.lasers = []
     self.size = (64, 64)
     self.boom_size = (200, 200)
     self.rect = self.get_rect()
     self.health = 1
     self.shield = 0
     self.max_health = 1
     self.max_shield = 1
     self.hover_alt = 0
     self.min_alt = 0
     self.target_alt = 0
     self.standard_alt = 0
     self.alt_change_speed = 5
     self.hitBy = []
     self.items = []
     self.current_items = {}
     self.fireObject = Laser
     self.dead = False
     self.kill = False
     self.frame = 1
     self.frame_rate = 1 / 25
     self.frame_time = 0
     self.friction = 1
     self.velocity = pygame.Vector2((0, 0))
     self.max_velocity = 6
     self.target_x_velocity = 0
     self.mission = mission
     self.mass = 1.5           # Mass in kilograms
     self.death_frames = 25
     self.max_temp = 300 # Works up to 300 deg. F
     self.canFire = True
     self.fire_from = "center"
     self.beam = False
     self.rotation = 0
     self.rotation_speed = 90
     self.max_rotation = 60
     self.add_temp = 0
     self.rotate = False
     self.whimp = False
     self.regen = False
     self.hover = False
     self.extra_dip = 0
     self.send_to_ground()
     self.regen_time = 0
     self.just_fired = False
     self.death_sound = None
     self.weapon_power = 1
     self.always_beam = False
     self.general_acc = 20
     self.im_back = False
Exemple #3
0
    def Draw(self, clock):

        self.surf.fill((0, 0, 0))

        if len(self.units) == 1:
            self.gameOver = True

        for gravity in self.gravities:
            pygame.draw.circle(
                self.surf,
                gravity.color,
                gravity.center,
                gravity.strength / 2,
            )

        for booster in self.boosters:
            if booster.done is True:
                self.boosters.remove(booster)
                self.AddRandomBooster()
            else:
                booster.Draw(self.surf)

        for unit in self.units:
            for booster in self.boosters:

                offset = (unit.centerx - booster.centerx + booster.width * 2,
                          unit.centery - booster.centery + booster.width * 2)
                if unit.mask.overlap(booster.mask, offset):
                    booster.Activate(unit)
                    break

            if math.fabs(unit.angularVelocity < 90) and not self.gameOver:
                print('unit', unit.name, 'is dead')
                self.units.remove(unit)

                explodeColor = pygame.transform.average_color(unit.imgBase)

                for i in range(500 - len(self.particles)):
                    intensity = random.randint(10, 300)
                    if intensity > 250:
                        intensity *= 3

                    self.AddParticle(
                        unit.position,
                        intensity=intensity,
                        color=pygame.Color((
                            max(
                                0,
                                min(255, explodeColor[0] +
                                    random.randint(-25, 25))),
                            max(
                                0,
                                min(255, explodeColor[1] +
                                    random.randint(-25, 25))),
                            max(
                                0,
                                min(255, explodeColor[2] +
                                    random.randint(-25, 25))),
                        )),
                    )
                # self.AddRandomUnit()
                continue  # this unit is dead

            totalGravity = pygame.Vector2(0, 0)
            for gravity in self.gravities:
                distance = pygame.Vector2(gravity.center) - pygame.Vector2(
                    unit.center)

                if distance.magnitude():
                    gravityVector = distance.normalize() * gravity.strength
                    totalGravity += gravityVector

            unit.acceleration = totalGravity
            unit.Draw(clock)

        self.UnitsBounceOffEachOther()

        for particle in self.particles:
            if particle.lifespan <= 0:
                self.particles.remove(particle)

            particle.Update(clock)
            pygame.draw.circle(
                self.surf,
                particle.color,
                particle.position,
                particle.size,
            )

        if self.sidebarWidth:
            self.DrawSideBar()
Exemple #4
0
 def update_p(self, dt):
     self.old_p = pygame.Vector2(self.p)
     self.p += self.v * dt
Exemple #5
0
 def __init__(self, x1, y1, x2, y2, color, width=1):
     self.a = pygame.Vector2(x1, y1)
     self.b = pygame.Vector2(x2, y2)
     self.color = color
     self.width = width
Exemple #6
0
 def get_desired_velocity(self):
     return sum((self._get_escape_velocity(creature)
                 for creature in self.creature.other_creatures
                 if type(creature) in self.get_threatening_creatures()),
                pygame.Vector2())
Exemple #7
0
def main():

    global globl_draw_boxes

    pygame.init()
    screen = pygame.display.set_mode(SIZE)
    clock = pygame.time.Clock()
 
    curr_chunk = Chunk(800)

    mage = Character("Dude", scale=4)
    mage.pos.xy = (WIDTH/2 - mage.size[0]), (HEIGHT/2 - mage.size[1]/2)

    companion = Companion("little friend", scale=2)
    companion.pos.xy = (WIDTH/2), (HEIGHT/2)

    #TODO add all elements to the chunk model
    entities = []
    for i in range(6):
        entities.append(Entity("./img/trees/tree_0.png", pygame.Vector2(random.randint(0, curr_chunk.size), random.randint(0, curr_chunk.size)), scale=6))
        entities.append(Entity("./img/trees/pine_0.png", pygame.Vector2(random.randint(0, curr_chunk.size), random.randint(0, curr_chunk.size)), scale=6))
        entities.append(Entity("./img/rocks/rock_0.png", pygame.Vector2(random.randint(0, curr_chunk.size), random.randint(0, curr_chunk.size)), scale=3))

    # sort entities by y pos for correct placement
    entities = sorted(entities, key=operator.attrgetter('pos.y'))

    collision_boxes = []
    border_boxes = []
    for entity in entities:
        collision_boxes.append(entity.coll_box)
        border_boxes.append(entity.bord_box)


    # add entities to current chunk
    for entity in entities:
        curr_chunk.add_entity(entity)

    c = 0 
    while True:
        c += 1

        # get collisions
        collisions = pygame.Rect.collidelistall(mage.coll_box, collision_boxes)
        layer_collisions = pygame.Rect.collidelistall(mage.coll_box, border_boxes)
        pre_collisions = pygame.Rect.collidelistall(mage.pre_coll_box, collision_boxes)

        # get companion collisions
        comp_collisions = pygame.Rect.collidelistall(companion.coll_box, collision_boxes)
        comp_layer_collisions = pygame.Rect.collidelistall(companion.coll_box, border_boxes)
        comp_pre_collisions = pygame.Rect.collidelistall(companion.pre_coll_box, collision_boxes)

        # get objects of collisions
        collision_objects = []
        for collision in pre_collisions:
            collision_objects.append(entities[i])

        # get objects of companion collisions
        comp_collision_objects = []
        for collision in comp_pre_collisions:
            comp_collision_objects.append(entities[i])

        # get pressed keyboard keys
        keys = pygame.key.get_pressed()

        if keys[pygame.K_b]:
            globl_draw_boxes = not globl_draw_boxes

        # move player and companion
        mage.interaction(collision_objects, keys=keys)
        companion.interaction(mage.pos, comp_collision_objects, keys=keys)
        
        # draw the background
        screen.fill(pygame.Color(78, 86, 82))

        # # draw entities
        # for entity in entities:
            # screen.blit(entity.image, entity.get_pos())

        # draw entities from current chunk
        for entity in curr_chunk.entities:
            screen.blit(entity.image, entity.get_pos())

        # draw mage & companion
        # player companion collision
        if pygame.Rect.colliderect(mage.pre_coll_box, companion.pre_coll_box):
            if mage.pre_coll_box.center[1] > companion.pre_coll_box.center[1]:
                companion.update(screen)
                mage.update(screen)
            else:
                mage.update(screen)
                companion.update(screen)
        else:
            companion.update(screen)
            mage.update(screen)


        # draw collision and borderboxes
        if globl_draw_boxes:
            # entity boxes
            for i in range(len(entities)):
                if len(collisions) > 0:
                    if i in collisions:
                        pygame.draw.rect(screen, (255, 0, 0), entities[i].coll_box, 1)
                    else:
                        pygame.draw.rect(screen, (255, 255, 0), entities[i].coll_box, 1)
                else:
                    pygame.draw.rect(screen, (255, 255, 0), entities[i].coll_box, 1)
                pygame.draw.rect(screen, (0, 255, 0), entities[i].bord_box, 1)
            # mage box
            pygame.draw.rect(screen, (0, 255, 0), mage.bord_box, 1)
            if len(collisions) > 0:
                pygame.draw.rect(screen, (255, 0, 0), mage.coll_box, 1)
                pygame.draw.rect(screen, (255, 0, 0), mage.pre_coll_box, 1)
            else:
                pygame.draw.rect(screen, (255, 255, 0), mage.coll_box, 1)
                pygame.draw.rect(screen, (255, 255, 0), mage.pre_coll_box, 1)
            pygame.draw.rect(screen, (255, 255, 0), companion.coll_box, 1)
            pygame.draw.rect(screen, (255, 255, 0), companion.pre_coll_box, 1)

        # draw entities infront of player if necessary
        if len(layer_collisions) > 0:
            for i in layer_collisions:
                screen.blit(entities[i].image, entities[i].get_pos())
        
        # draw entities infront of companion if necessary
        if len(comp_layer_collisions) > 0:
            for i in comp_layer_collisions:
                screen.blit(entities[i].image, entities[i].get_pos())

        # update loop
        pygame.display.update()
        clock.tick(100)

        # check for quit
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
 def __init__(self, position, velocity):
     self.pos = PG.Vector2(position)
     self.vel = PG.Vector2(velocity)
Exemple #9
0
import time
import random

import numpy as np
import pygame as pg
from pygame.sprite import collide_rect

from src.sprites.spritesheet import SpriteStripAnim
from src.utils import assets

GRAVITY = pg.Vector2((0, 3.8))


class ActiveEntity(pg.sprite.Sprite):
    """
    Class to implement moving sprites

    :param container: Application container
    :param entity: Enemy map DTO
    :param character: Character DTO
    """
    def __init__(self, container, entity, character, *groups):
        super().__init__(*groups)
        sheet_path = assets.path_to("characters", character.name,
                                    character.sheet)
        sheet = container.image_from_path(sheet_path)
        sheet = SpriteStripAnim(sheet,
                                (0, 0, character.height, character.width),
                                character.rows,
                                rows=4,
                                scale=(character.rescale_x,
 def __init__( self, x1:int, y1:int, x2:int, y2:int ):
     self.p1 = pygame.Vector2(x1, y1)
     self.p2 = pygame.Vector2(x2, y2)
 def Contains(self, pos, TIMESTEP, translate, zoom):
     # Constains function for mouse inputs
     thisPos = PG.Vector2(self.GetStepPos(TIMESTEP, translate))
     if ((thisPos - pos).magnitude() <= self.size / zoom): return True
Exemple #12
0
def random_position():
    borders = cfg.borders()
    tolerance = cfg.environment()['border_tolerance']
    return pg.Vector2(
        scale(np.random.rand(), [0, 1], [tolerance, borders[0] - tolerance]),
        scale(np.random.rand(), [0, 1], [tolerance, borders[1] - tolerance]))
Exemple #13
0
 def steer_to_center(self):
     to_center = pg.Vector2(SCREEN_WIDTH / 2,
                            SCREEN_HEIGHT / 2) - self.position
     self.velocity = self.velocity.lerp(to_center, 0.03)
Exemple #14
0
def random_velocity(magnitude):
    angle = scale(np.random.rand(), [0, 1], [0, 360])
    vec = pg.Vector2()
    vec.from_polar((magnitude, angle))
    return vec
Exemple #15
0
#! /usr/bin/python

import pygame
from pygame import *

SCREEN_SIZE = pygame.Rect((0, 0, 800, 640))
TILE_SIZE = 64
GRAVITY = pygame.Vector2((0, 0.1))


class CameraAwareLayeredUpdates(pygame.sprite.LayeredUpdates):
    def __init__(self, target, world_size):
        super().__init__()
        self.target = target
        self.cam = pygame.Vector2(0, 0)
        self.world_size = world_size
        if self.target:
            self.add(target)

    def update(self, *args):
        super().update(*args)
        if self.target:
            x = -self.target.rect.center[0] + SCREEN_SIZE.width / 2
            y = -self.target.rect.center[1] + SCREEN_SIZE.height / 2
            self.cam += (pygame.Vector2((x, y)) - self.cam) * 0.05
            self.cam.x = max(-(self.world_size.width - SCREEN_SIZE.width),
                             min(0, self.cam.x))
            self.cam.y = max(-(self.world_size.height - SCREEN_SIZE.height),
                             min(0, self.cam.y))

    def draw(self, surface):
 def __init__(self, coordinates, radius):
     self.position = pygame.Vector2(coordinates)
     self.radius = radius
Exemple #17
0
  
    triangulation = [triangle for triangle in triangulation if not onSuper(triangle)]

    return triangulation

pygame.init()
window = pygame.display.set_mode((500, 500))

background = 20, 40, 100
white = 255, 255, 255

points = []
for i in range(100):
    x = random.randint(20, window.get_width()-40)
    y = random.randint(20, window.get_height()-40)
    points.append(pygame.Vector2(x, y))

delaunay = DelaunayTriangulation(points, *window.get_size())

run = True
while run:
    for event in pygame.event.get():
          if event.type == pygame.QUIT:
              run = False
    
    window.fill(background)
    for triangle in delaunay:
        triangle.Show(window, white)
    pygame.display.flip()

pygame.quit()
 def __init__(self, coordinates, width, height):
     self.position = pygame.Vector2(coordinates)
     self.width = width
     self.height = height
Exemple #19
0
    def interaction(self, poi, collisions, keys=[]):
        self.poi = poi
        # hover animation
        if keys[pygame.K_j]:
            self.hover = not self.hover
            time.sleep(0.2)

        # set speed via shift-key
        if keys[pygame.K_LSHIFT]:
            self.speed = 2
        elif keys[pygame.K_LCTRL]:
            self.speed = 0.5
        else:
            self.speed = 1

        # get blocked directions
        blocked_directions = []
        for obj in collisions:
            blocked_directions.append(pygame.Vector2(self.pre_coll_box.center[0] - obj.coll_box.center[0], self.pre_coll_box.center[1] - obj.coll_box.center[1]))


        distance = poi - self.pos
        self.poi_rad = 200

        if distance.length() >= self.poi_rad - 10 or random.randint(0,1000) > 995:
            self.new_pos = poi + 0.5*self.poi_rad*pygame.Vector2(random.randint(-1,1), random.randint(-1, 1))

        if not pygame.Vector2(self.new_pos - self.pos).length() < 10:
            # move
            self.move_dir -= (self.pos - self.new_pos).normalize() / self.acceleration
            #print(self.move_dir)

            # # move
            # if keys[pygame.K_RIGHT] or keys[pygame.K_LEFT] or keys[pygame.K_DOWN] or keys[pygame.K_UP]:
            #     # parse keyboard inputs
            #     if keys[pygame.K_RIGHT]:
            #         self.move_dir[0] += self.speed / self.acceleration
            #     if keys[pygame.K_LEFT]:
            #         self.move_dir[0] -= self.speed / self.acceleration
            #     if keys[pygame.K_DOWN]:
            #         self.move_dir[1] += self.speed / self.acceleration
            #     if keys[pygame.K_UP]:
            #         self.move_dir[1] -= self.speed / self.acceleration

            # set speed to self.speed independent to direction (possible with vec.scale_to_length)
            if self.move_dir.length() > self.speed:
                self.move_dir = self.move_dir.normalize() * self.speed

            # state machine for collisions
            blocked = False
            #TODO fix algorithm
            for vec in blocked_directions:
                res = vec + self.move_dir*0.8
                #print(res, vec)
                if res.length() < vec.length():
                    #blocked = True
                    if math.sqrt(vec[0]*vec[0] + self.move_dir[0]*self.move_dir[0]) > math.sqrt(vec[1]*vec[1] + self.move_dir[1]*self.move_dir[1]):
                        self.move_dir[0] = 0.0
                    if math.sqrt(vec[1]*vec[1] + self.move_dir[1]*self.move_dir[1]) > math.sqrt(vec[0]*vec[0] + self.move_dir[0]*self.move_dir[0]):
                        self.move_dir[1] = 0.0
                
            # add vectors
            if not blocked:
                self.pos += self.move_dir

            #set facing direction
            if self.move_dir[0] >= 0:
                self.group = pygame.sprite.Group(self.animation_walk_right)
            else:
                self.group = pygame.sprite.Group(self.animation_walk_left)
        else:
            self.move_dir /= self.acceleration
            self.idle()
Exemple #20
0
def make_vector(point):
    vec = pygame.Vector2()
    vec.xy = point[0], point[1]
    return vec
Exemple #21
0
 def __init__(self, item_id, position, item_radius, drag):
     self.item_id = item_id
     self.position = position
     self.item_radius = item_radius
     self.velocity = pg.Vector2(0, 0)
     self.drag = drag
Exemple #22
0
  def get_stick_head(self):
    stick_ball_offset = pygame.Vector2(settings.ball_radius, 0)
    offset_rotated = stick_ball_offset.rotate(-self.angle)

    ball_pos = self.get_ball_pos()
    return Rect(ball_pos[0] + offset_rotated[0], ball_pos[1] + offset_rotated[1], settings.stick_head_width, settings.stick_head_height, self.angle)
 def __init__(self, flock):
     velocity = pygame.Vector2(0, 0)
     velocity.from_polar((1, 0))
     super().__init__(flock, pygame.Vector2(1000, 500), velocity)
     self.weight = 10
Exemple #24
0
            continue
        tile = map.Tile(tile_id, [col, row])
        world.append(tile)

clocks = pygame.time.Clock()
size = width, height = 1920, 1024
black = 0, 0, 0

can_jump = False

screen = pygame.display.set_mode(size)
ball = pygame.image.load("64x64.png")

player = p.Player()

v_input = pygame.Vector2()


def get_playerinput(event):

    for event in pygame.event.get():
        if event.type == pygame.QUIT: sys.exit()
        if event.type == pygame.KEYDOWN and event.key == pygame.K_w:
            v_input.y = v_input.y + 1
        if event.type == pygame.KEYUP and event.key == pygame.K_w:
            v_input.y = v_input.y - 1
        if event.type == pygame.KEYDOWN and event.key == pygame.K_a:
            v_input.x = v_input.x - 1
        if event.type == pygame.KEYUP and event.key == pygame.K_a:
            v_input.x = v_input.x + 1
        if event.type == pygame.KEYDOWN and event.key == pygame.K_s:
Exemple #25
0
 def __init__(self):
     self.current_speed = 10
     self.position = pygame.Vector2()
     self.look_vector = pygame.Vector2()
     self.rect = pygame.Rect(0, 0, 0, 0)
import pygame
from pygame import *
import random
import leveldata
from leveldata import *

#Global Variables - includes custom user events and songs list information
SCREEN_SIZE = pygame.Rect((0, 0, 1200, 800))
TILE_SIZE = 64 
GRAVITY = pygame.Vector2((0, 0.475))
_songs = ["Media\\Music\\DownUnder.mp3","Media\\Music\\HorseNoName.mp3",
          "Media\\Music\\dreaming.mp3","Media\\Music\\Buffalo.mp3"]
_currently_playing_song = None
LEVEL = pygame.USEREVENT + 2
RETURNLEVEL = pygame.USEREVENT + 5
COLLISIONSOUND = pygame.USEREVENT + 7
SPIKEDEATH = pygame.USEREVENT + 6
LIFECOUNT = 3

#effect_lev0intro = pygame.mixer.Sound('')
#effect_lev1intro = pygame.mixer.Sound('')
#effect_lev2intro = pygame.mixer.Sound('')
#effect_lev3intro = pygame.mixer.Sound('')

#randomly picks next song from list to play during game
def play_a_different_song():
    global _currently_playing_song, _songs
    next_song = random.choice(_songs)
    while next_song == _currently_playing_song:
        next_song = random.choice(_songs)
    _currently_playing_song = next_song
Exemple #27
0
# Define width and height of screen here
screen_width = 1000
screen_height = 700

# Put together some reference rects and create the screen
game_rect = pygame.Rect(80, 0, screen_width - 80, screen_height)
sidebar_rect = pygame.Rect(0, 0, 80, screen_height)
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.draw.rect(screen, (50, 50, 50), sidebar_rect)

# Calculate some useful constants
hex_radius = 7
hex_height = 2 * hex_radius
hex_width = 2 * hex_radius * sin60
cell_parameter = hex_width
half_hex = pygame.Vector2(hex_width / 2, hex_height / 2)
grid_origin = game_rect.center - Vex(grid_a - 1,
                                     grid_b - 1).Vector2() / 2 * cell_parameter

# Pre-load vertices for a unit hexagon that is frequently used
center = pygame.Vector2(hex_width / 2, hex_height / 2)
unit_hex = [None] * 6
unit_hex[0] = pygame.Vector2(-hex_width / 2, -hex_radius / 2)
unit_hex[1] = pygame.Vector2(-hex_width / 2, hex_radius / 2)
unit_hex[2] = pygame.Vector2(0, hex_height / 2)
unit_hex[3] = pygame.Vector2(hex_width / 2, hex_radius / 2)
unit_hex[4] = pygame.Vector2(hex_width / 2, -hex_radius / 2)
unit_hex[5] = pygame.Vector2(0, -hex_height / 2)


# Utility class - maps a numerical scale to corresponding interpolations between two colors
Exemple #28
0
 def get_desired_velocity(self):
     sum_steering = sum(
         (creature.velocity for creature in self.creature.flock.creatures),
         pygame.Vector2())
     sum_steering /= len(self.creature.flock.creatures)
     return sum_steering.normalize() * self.creature.max_speed
    def __init__(self, x, y, width, height):
        self.position = pygame.Vector2(x, y)
        self.velocity = pygame.Vector2(0, 0)

        self.width = width
        self.height = height
Exemple #30
0
 def __init__(self, position):
     self.position = pygame.Vector2(position)
     self.is_alive = True