Ejemplo n.º 1
0
class Saver():
    def __init__(self, balls=int(random.random() * 100), trail=" "):
        self.field = Field(title="Term Saver")
        self.balls = [Ball(x=int(random.random() * self.field.x-1)+1, y=int(random.random() * self.field.y-1)+1) for x in range(balls)]
        self.speed = 0.009
        self.trail = trail
        return

    def update(self):
        for ball in self.balls:
            hitWall = self.walled(ball)

            if hitWall: # wall collision
                ball.bounce(hitWall)

            # ball collision

            self.clearTrail(ball, self.trail, True)
            ball.move()

            self.field.write_at(item=ball.image, coords=ball.getPosition())

        # clear the field randomly (.1% chance)
        if random.choice(range(1000)) == 1:
            self.field.clear()
        self.field.deploy()
        return

    def walled(self, ball):
        direction = []
        if ball.x < 1:
            direction.append('right')
        elif ball.x >= self.field.x-1:
            direction.append('left')

        if ball.y < 1:
            direction.append('down')
        elif ball.y >= self.field.y-1:
            direction.append('up')

        if len(direction):
            return ' '.join(direction)
        return None

    def run(self):
        run = 1
        while run:
            c = self.field.display.getch()
            if c == ord('q'):
                run = 0
            self.update()
            time.sleep(self.speed)
        self.field.destroy()
        return

    def clearTrail(self, obj, remains=" ", centered=False):
        for i in range(len(obj.image)):
            self.field.write_at(item=remains, coords=[obj.x+i, obj.y], centered=centered)
        return
Ejemplo n.º 2
0
class Rain():
    def __init__(self, drops=int(random.random() * 100), trail=" "):
        self.field = Field(title="Zen Rain")
        self.drops = [Drop(x=int(random.random() * self.field.x-1)+1, y=int(random.random() * self.field.y-1)+1) for x in range(drops)]
        self.speed = 0.009
        self.trail = trail
        self.wind  = random.choice((1, -1, 0))
        return

    def new_drop(self):
        newdrop = Drop(x=int(random.random() * self.field.x-1)+1, y=int(random.random() * self.field.y-1)+1)
        newdrop.dx = self.wind
        return newdrop

    def update(self):
        for drop in self.drops:
            hitWall = self.walled(drop)

            if hitWall: # wall collision
                drop.bounce(hitWall)

                if 'more' in hitWall:
                    self.drops.pop(self.drops.index(drop))
                    self.drops.append(self.new_drop())

            self.clearTrail(drop, self.trail, True)
            drop.move()

            self.field.write_at(item=drop.image, coords=drop.getPosition(), color='blue')

        # clear the field randomly (.1% chance)
        #if random.choice(range(1000)) == 1:
        #    self.field.clearField()
        self.field.deploy()
        return

    def walled(self, drop):
        direction = []
        if drop.x < 1:
            direction.append('right')
        elif drop.x >= self.field.x-1:
            direction.append('left')

        if drop.y < 1:
            direction.append('down')
        elif drop.y >= self.field.y-1:
            direction.append('more')

        if len(direction):
            return ' '.join(direction)
        return None


    def run(self):
        run = 1
        while run:
            c = self.field.display.getch()
            if c == ord('q'):
                run = 0
            self.update()
            time.sleep(self.speed)
        self.field.destroy()
        return

    def clearTrail(self, obj, remains=" ", centered=False):
        for i in range(len(obj.image)):
            self.field.write_at(remains, (obj.x + i), obj.y, None, centered, None)
        return