Beispiel #1
0
class Player:
    def __init__(self,
                 posx,
                 posy,
                 speed,
                 fps,
                 control_keys,
                 width=5,
                 height=60):
        self.fps = fps
        self.control_keys = control_keys
        self.score = 0
        self.speed = speed
        self.rect = Rect(posx, posy, width, height)

    def move(self, pressed_keys):
        if pressed_keys[self.control_keys.up_key_code]:
            self.rect.move(y_d=-self.speed / self.fps)
        elif pressed_keys[self.control_keys.down_key_code]:
            self.rect.move(y_d=self.speed / self.fps)
        elif self.control_keys.left_key_code != None and pressed_keys[
                self.control_keys.left_key_code]:
            self.rect.move(x_d=-self.speed / self.fps)
        elif self.control_keys.right_key_code != None and pressed_keys[
                self.control_keys.right_key_code]:
            self.rect.move(x_d=self.speed / self.fps)

    def draw(self, surface):
        pygame.draw.rect(surface, (255, 255, 255),
                         (*self.rect.position, *self.rect.dimention))

    def update(self, pressed_keys):
        self.move(pressed_keys)
Beispiel #2
0
    def _get_rect_tensor_descs_no_overlap(self, rect, window_rect, factor):
        assert isinstance(rect, Rect)
        assert isinstance(window_rect, Rect)

        window_size = window_rect.height()
        map_size = window_size >> (factor + self.num_poolings)

        edge = window_size / map_size

        center = rect.center()
        sx = int(center.x - window_rect.left)
        sy = int(center.y - window_rect.top)
        x = int(sx / edge)
        y = int(sy / edge)

        res = []

        for dx in range(-3, 3):
            for dy in range(-2, 2):
                wx = x + dx
                wy = y + dy
                if 0 <= wx and wx < map_size and 0 <= wy and wy < map_size:
                    # window coord
                    wrect = Rect(wx * edge, wy * edge, (wx + 1) * edge, (wy + 1) * edge)
                    # img coord
                    wrect.move(window_rect.top, window_rect.left)

                    i = wrect.intersection(rect)

                    if i.valid(): #self._check_rect(rect, wrect):
                        # img coord
                        #i = wrect.intersection(rect)
                        qual_out = i.area() / float(wrect.area())
                        # if qual_out <= 0:
                        #     print rect ,wrect, i
                        # window coord
                        i.move(-wrect.top, -wrect.left)
                        # window 0..1 coord
                        i.stretch(1.0 / wrect.height(), 1.0 / wrect.width())

                        if qual_out > 0.01:
                            res.append((wy, wx, i.left, i.top, i.right, i.bottom, qual_out))

        return res
Beispiel #3
0
print('Controllo conflitti natura')
for place in list(buildings):
        for n in list(nature):
            if(place.overlaps(n)):
                if(defaultResurce[n.name][1]=='removable'):
                    nature.remove(n)
                else:
                    if(place.name=='HOUSE'):
                        try:
                            buildings.remove(place)
                        except ValueError as e:
                            pass
                    else:
                        print('muovo a nord '+place.name+' di : '+str(n.top-place.top))
                        place.move(1,n.top-place.top)  

for place in list(buildings):
    for place2 in list(buildings):
        if(not (id(place)==id(place2))):
            if(place.overlaps(place2)):
                if(place.name=='HOUSE'):
                    if(place in buildings):
                        buildings.remove(place)    
                else:
                    if(not place2.name=='HOUSE'):
                        r=random.randint(0,1)
                        if(r==0):
                            place.move(0,place.right-place.left+place2.right-place2.left)
                        if(r==1):
                            place.move(1,place.bottom-place.top+place2.bottom-place2.top)
Beispiel #4
0
class Entity(object):
    def __init__(self,
                 scene,
                 img=None,
                 x=0,
                 y=0,
                 batch=None,
                 group=None,
                 rect=None,
                 world=True,
                 add=True):
        self.scene = scene
        if add:
            self.scene.entities.append(self)

        self.batch = batch
        self.group = group
        self.world = world  #???

        self.offset = (0, 0)
        self.velocity = [0, 0]
        self.acceleration = [0, 0]

        image = None

        # string of image to be loaded
        if type(img) in (str, unicode):
            image = pyglet.resource.image(img)
            self.type = 'sprite'
        # not image but block
        elif type(img) == dict:
            self.type = 'block'
            vertices = img["vertices"]
            color = []

            # vertices can be passed it rect format (x, y, width, height)
            # or normal format (x1, y1, x2, x2, ...., x4, y4)
            if len(vertices) == 4:
                x, y, w, h = vertices
                vertices = (x, y, x + w, y, x + w, y + h, x, y + h)

            if len(img["color"]) == 3:
                color = img["color"] * 4
            else:
                color = img["color"]

            self.vertices = self.batch.add(4, pyglet.gl.GL_QUADS, self.group,
                                           ('v2f', vertices), ('c3B', color))

            if rect == None:
                # vertices can be passed it rect format (x, y, width, height)
                # or normal format (x1, y1, x2, x2, ...., x4, y4)
                if len(img["vertices"]) == 4:
                    self.rect = Rect(*img["vertices"])
                else:
                    self.rect = Rect(vertices[0], vertices[1],
                                     vertices[2] - vertices[1],
                                     vertices[5] - vertices[1])
            else:
                self.rect = rect
        # does not show anything, only for other things (collisions)
        elif img == None:
            self.type = 'none'
            self.rect = rect
        # image already given
        else:
            self.type = 'sprite'
            image = img

        # if sprite, create sprite, and rect
        if self.type == 'sprite':
            # create rect from sprite
            if rect == None:
                self.sprite = pyglet.sprite.Sprite(image,
                                                   x=x,
                                                   y=y,
                                                   batch=batch,
                                                   group=group)

                self.rect = Rect(x, y, image.width, image.height)
            # custom rect
            else:
                self.sprite = pyglet.sprite.Sprite(image,
                                                   x=rect.left,
                                                   y=rect.top,
                                                   batch=batch,
                                                   group=group)

                self.rect = rect

    def delete(self):
        self.sprite.delete()

    def enable_gravity(self, g=GRAVITY):
        self.acceleration[1] = g

    def step_x(self, dt):
        self.velocity[0] += self.acceleration[0] * dt

        self.move(self.velocity[0] * dt, 0)

    def step_y(self, dt):
        self.velocity[1] += self.acceleration[1] * dt

        self.move(0, self.velocity[1] * dt)

    # decopule sprite and rect!
    def set_offset(self, x, y):
        self.offset = (x, y)
        self.sprite.set_position(self.rect.left + self.offset[0],
                                 self.rect.top + self.offset[1])

    def move(self, x, y):
        self.rect.move(x, y)
        self.sprite.set_position(self.rect.left + self.offset[0],
                                 self.rect.top + self.offset[1])
Beispiel #5
0
print('Controllo conflitti natura')
for place in list(buildings):
    for n in list(nature):
        if (place.overlaps(n)):
            if (defaultResurce[n.name][1] == 'removable'):
                nature.remove(n)
            else:
                if (place.name == 'HOUSE'):
                    try:
                        buildings.remove(place)
                    except ValueError as e:
                        pass
                else:
                    print('muovo a nord ' + place.name + ' di : ' +
                          str(n.top - place.top))
                    place.move(1, n.top - place.top)

for place in list(buildings):
    for place2 in list(buildings):
        if (not (id(place) == id(place2))):
            if (place.overlaps(place2)):
                if (place.name == 'HOUSE'):
                    if (place in buildings):
                        buildings.remove(place)
                else:
                    if (not place2.name == 'HOUSE'):
                        r = random.randint(0, 1)
                        if (r == 0):
                            place.move(
                                0, place.right - place.left + place2.right -
                                place2.left)