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)
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
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)
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])
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)