class Ventana(QtGui.QFrame): def __init__(self): super().__init__() self.setObjectName("Ventana") self.setMouseTracking(True) self.setGeometry(200, 100, 800, 600) self.setStyleSheet("#Ventana {background-image: url('img/bg.gif');background-color:green;}") self.setWindowTitle("Zombitch") self.shooter = Shooter(parent=self, x=400, y=300) self.timer = QtCore.QTimer(self) self.timer.timeout.connect(self.create_zombie) self.timer.setInterval(1000) self.timer.start() self.zombies = [Zombie(parent=self, x=0, y=0, target=self.shooter)] self.packages = [] self.__kills = 0 self.start_time = datetime.now() self.status = Status(parent=self) self.overlay = Overlay(parent=self) self.message = Message(parent=self) @property def kills(self): return self.__kills @kills.setter def kills(self, value): self.__kills = value self.status.update_kills() def actualizarImagen(self, myImageEvent): label = myImageEvent.image label.move(myImageEvent.x, myImageEvent.y) def keyPressEvent(self, QKeyEvent): if QKeyEvent.key() == QtCore.Qt.Key_Z: vehicle = Vehicle(parent=self, x=100, y=600) vehicle.summon() elif QKeyEvent.key() == QtCore.Qt.Key_Space: self.message.set_text("Paused") self.message.show() self.pause() else: self.shooter.move(QKeyEvent.key()) def mouseMoveEvent(self, QMouseEvent): x = QMouseEvent.x() y = QMouseEvent.y() self.shooter.guide((x,y)) def mousePressEvent(self, QMouseEvent): x = QMouseEvent.x() y = QMouseEvent.y() self.shooter.shoot((x,y)) self.shooter.guide((x,y)) def send_care_package(self): if random.random() > 0.93 and len(self.packages) <= 1: care = CarePackage(parent=self, shooter=self.shooter) care.summon() self.packages.append(care) def zombie_interval(self): if (datetime.now() - self.start_time).total_seconds() > 200: interval = random.expovariate(1/250) else: interval = 1000 - 50*self.kills interval = random.expovariate(1/max(interval, 500)) self.timer.setInterval(interval) def create_zombie(self): choice = random.randint(0,1) if choice == 0: x = random.randint(0,1)*800 y = random.randint(0,60)*10 elif choice == 1: x = random.randint(0,80)*10 y = random.randint(0,1)*600 if len(self.zombies) < 20: if random.random() > 0.60: self.zombies.append(SuperZombie(parent=self, x=x, y=y, target=self.shooter)) else: self.zombies.append(Zombie(parent=self, x=x, y=y, target=self.shooter)) self.zombie_interval() if (datetime.now() - self.start_time).total_seconds() > 20: self.send_care_package() def pause(self): self.timer.stop() for event in ["mouseMoveEvent", "mousePressEvent", "keyPressEvent"]: setattr(self, event, self.pass_event) for zombie in self.zombies: zombie.pause() def play(self): self.timer.start() def pass_event(self, *args): pass def end(self): self.message.set_text("Game Over") self.message.show() self.pause()