Example #1
0
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()