def post_field(cls, channel, field, new_message=False):

        field_text = ""
        
        # TODO remove this 3 line after implement output person infomation
        for person in field.persons:
            field_text += object_to_emoji(person) + "×" + str(person.life_num) + " "
        field_text += "\n"

        point = Point(0, 0)
        for y in range(field.y_size):
            for x in range(field.x_size):
                point.x = x
                point.y = y
                field_text += object_to_emoji(field.get_field_object(point))
            field_text += "\n"

        if new_message or channel not in cls.recent_field_ts:
            if new_message:
                ts = cls.recent_field_ts[channel]
                slacker.chat.update(channel, ts, "The field is expired.\nPlease scroll to bottom for next field")
            res = slacker.chat.post_message(channel, field_text)
            cls.recent_field_ts[channel] = res.body["ts"]
            cls.add_controller(channel, res.body["ts"])
        else:
            ts = cls.recent_field_ts[channel]
            slacker.chat.update(channel, ts, field_text)
    def test_Person_should_put_bomb_after_fired(self):
        field = Field(8, 10, ["user1", "user2"])
        bom1 = Bomb("user1", 1)
        bom2 = Bomb("user1", 2)
        person = field.persons[0]
        person.bomb_count = 2

        person.get_bomb()
        person.get_bomb()
        self.assertEqual(person._used_bomb, 2)
        field.objects = [
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
        ]
        field.bombs = [
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, bom1, bom2, None, None, None, None, None, None],
        ]
        field.fire_bomb(Point(7, 2))  # bom1
        self.assertEqual(person._used_bomb, 0)
    def test_person_should_move_in_Field(self):
        field = Field(11, 11, ["user1", "user2"])
        person1 = field.person_by_user("user1")
        self.assertIsNotNone(person1)
        person1.point = Point(1, 1)
        person2 = field.person_by_user("user2")
        self.assertIsNotNone(person2)
        person2.point = Point(6, 8)

        field.move_top(person1)
        self.assertEqual(person1.point, Point(1, 1))
        field.move_bottom(person1)
        self.assertEqual(person1.point, Point(1, 2))
        field.put_bomb(person1)
        bomb_point = person1.point
        self.assertIsNotNone(field.bombs[1][2])
        field.move_top(person1)
        self.assertEqual(person1.point, Point(1, 1))
        field.put_bomb(person1)
        self.assertIsNone(
            field.bombs[1][1],
            "It should not put a bomb because a bomb is not remained")

        field.move_right(person1)
        self.assertEqual(person1.point, Point(2, 1))
        field.move_left(person1)
        self.assertEqual(person1.point, Point(1, 1))

        field.fire_bomb(bomb_point)
        field.put_bomb(person1)
        self.assertIsNotNone(field.bombs[1][1], "It should put a bomb")
    def test_Field_items_should_get_by_person(self):
        field = Field(8, 10, ["user1", "user2"])

        fire = Item.fire
        bomb = Item.add_bomb
        sped = Item.speed
        person = field.persons[0]

        person.point = Point(1, 1)
        field.items = [
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, fire, bomb, sped, fire, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
        ]
        field.objects[1][1] = Object.empty
        field.objects[1][2] = Object.empty
        field.objects[1][3] = Object.empty
        field.objects[1][4] = Object.empty
        field.objects[1][5] = Object.empty

        self.assertEqual(person.fire_count, 1)
        self.assertEqual(person.bomb_count, 1)
        self.assertEqual(person.speed_count, 1)

        field.move_bottom(person)
        self.assertEqual(person.fire_count, 2)
        self.assertEqual(person.bomb_count, 1)
        self.assertEqual(person.speed_count, 1)

        field.move_bottom(person)
        self.assertEqual(person.fire_count, 2)
        self.assertEqual(person.bomb_count, 2)
        self.assertEqual(person.speed_count, 1)

        field.move_bottom(person)
        self.assertEqual(person.fire_count, 2)
        self.assertEqual(person.bomb_count, 2)
        self.assertEqual(person.speed_count, 2)

        field.move_bottom(person)
        self.assertEqual(person.fire_count, 3)
        self.assertEqual(person.bomb_count, 2)
        self.assertEqual(person.speed_count, 2)

        field.move_top(person)
        field.move_top(person)
        field.move_top(person)
        field.move_top(person)
        self.assertEqual(person.fire_count, 3)
        self.assertEqual(person.bomb_count, 2)
        self.assertEqual(person.speed_count, 2)
 def test_put_two_bomb_at_one_pos(self):
     field = Field(8, 11, ["user1", "user2"])
     person1 = field.person_by_user("user1")
     person1.point = Point(1, 1)
     field.objects[1][1] = Object.empty
     person1.bomb_count = 2
     field.put_bomb(person1)
     self.assertEqual(person1._used_bomb, 1)
     field.put_bomb(person1)
     self.assertEqual(person1._used_bomb, 1)
    def test_dead_person_should_not_move_in_Field(self):
        field = Field(8, 10, ["user1", "user2"])
        field.objects = [
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
        ]
        person1 = field.person_by_user("user1")
        self.assertIsNotNone(person1)
        person1.point = Point(1, 1)
        field.move_bottom(person1)
        self.assertEqual(person1.point, Point(1, 2))

        person1.life_num = 2

        bom2 = Bomb("user1", 1)
        field.bombs[1][1] = bom2
        field.fire_bomb(Point(1, 1))
        field.move_bottom(person1)
        self.assertEqual(person1.point, Point(1, 3))

        field.bombs[1][2] = bom2
        field.fire_bomb(Point(1, 2))
        field.move_bottom(person1)
        self.assertEqual(person1.point, Point(1, 3))
    def test_field_should_get_field_object(self):
        field = Field(8, 10, ["user1", "user2"])

        wall = Object.wall
        block = Object.block
        emp = Object.empty
        bomb = Bomb("user1", 1)
        item = Item.speed

        field.objects = [
            [wall, block, emp, emp, emp, emp, emp, emp, emp, emp],
            [None, emp, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
        ]

        field.bombs = [
            [bomb, bomb, bomb, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
        ]

        field.items = [
            [item, item, item, item, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
        ]

        point = Point(0, 0)
        self.assertEqual(Field.get_field_object(field, point), wall)
        point = Point(0, 1)
        self.assertEqual(Field.get_field_object(field, point), block)
        point = Point(0, 2)
        self.assertEqual(Field.get_field_object(field, point), bomb)
        point = Point(0, 3)
        self.assertEqual(Field.get_field_object(field, point), item)
        point = Point(1, 1)
        self.assertEqual(Field.get_field_object(field, point),
                         field.person_by_user("user1"))
        point = Point(0, 4)
        self.assertEqual(Field.get_field_object(field, point), emp)
    def test_bomb_should_fire(self):
        field = Field(8, 10, ["user1", "user2"])
        bom1 = Bomb("user1", 3)
        fire = Fire()
        field.bombs = [
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, bom1, None, None, None, None, None, None, None],
        ]
        wall = Object.wall
        block = Object.block
        field.objects = [
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, wall, None, None, block, None, None, None, None, None],
        ]
        field.fire_bomb(Point(7, 2))  # bom1

        self.assertAllField(field.bombs, [
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, fire, None, None, None, None, None, None, None],
            [None, None, fire, None, None, None, None, None, None, None],
            [None, None, fire, None, None, None, None, None, None, None],
            [None, None, fire, fire, fire, None, None, None, None, None],
        ])
    def test_Field_should_proceed_time(self):
        field = Field(8, 10, ["user1", "user2"])
        field.persons[0].point = Point(7, 9)
        bom1 = Bomb("user1", 1)
        field.objects = [
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
        ]
        field.bombs[0][0] = bom1
        field.proceed_time(3)
        self.assertEqual(field.bombs[0][0], bom1)
        field.proceed_time(1)
        self.assertEqual(field.bombs[0][0], bom1)
        field.proceed_time(1)
        self.assertEqual(field.bombs[0][0], Fire())
        field.proceed_time(2)
        self.assertEqual(field.bombs[0][0], None)

        bom2 = Bomb("user1", 2)
        field.bombs[5][5] = bom2
        field.proceed_time(0.3)
        self.assertEqual(field.bombs[5][5], bom2)
        field.proceed_time(0.7)
        self.assertEqual(field.bombs[5][5], bom2)
        field.proceed_time(4.3)
        self.assertEqual(field.bombs[5][5], Fire())
        field.proceed_time(1.5)
        self.assertEqual(field.bombs[5][5], Fire())
        field.proceed_time(0.6)
        self.assertEqual(field.bombs[5][5], None)
示例#10
0
    def test_Field_should_fire_with_other_bomb(self):
        field = Field(8, 10, ["user1", "user2"])
        bom1 = Bomb("user1", 1)
        bom2 = Bomb("user1", 2)
        bom3 = Bomb("user1", 3)
        bom4 = Bomb("user1", 4)
        bom5 = Bomb("user1", 5)
        fire = Fire()
        fired_person = FiredPerson(field.persons[0])
        field.objects = [
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
        ]
        field.bombs = [
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, bom3, None, None, bom5, None, None, bom2, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, bom1, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, bom4, None, None, None, None, None, None, None],
        ]
        field.fire_bomb(Point(7, 2))  # bom4
        self.assertAllField(field.bombs, field.bombs, "assertAllField works")

        self.assertAllField(field.bombs, [
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, None, None, None, None, None, None, None, None, None],
            [None, bom3, fire, None, bom5, None, None, bom2, None, None],
            [None, None, fire, None, None, None, None, None, None, None],
            [None, None, fire, None, None, None, None, bom1, None, None],
            [None, None, fire, None, None, None, None, None, None, None],
            [fire, fire, fire, fire, fire, fire, fire, None, None, None],
        ])

        field.persons[0].point = Point(3, 9)
        field.persons[0].life_num = 1
        field.objects[1][7] = Object.block

        field.fire_bomb(Point(3, 1))  # bom3

        self.assertAllField(field.bombs, [
            [None, fire, None, None, fire, None, None, None, None, None],
            [None, fire, None, None, fire, None, None, fire, None, None],
            [None, fire, None, None, fire, None, None, fire, None, None],
            [
                fire, fire, fire, fire, fire, fire, fire, fire, fire,
                fired_person
            ],
            [None, fire, fire, None, fire, None, None, fire, None, None],
            [None, fire, fire, None, fire, None, fire, fire, fire, None],
            [None, fire, fire, None, fire, None, None, fire, None, None],
            [fire, fire, fire, fire, fire, fire, fire, None, None, None],
        ])

        self.assertEqual(field.objects[1][7], Object.empty)