示例#1
0
 def test_init_one_by_one(self):
     f = Field(4, 4)
     rect = Rectangle(f, f)
     for c in rect.corners():
         self.assertEqual(c.x, f.x)
         self.assertEqual(c.y, f.y)
         self.assertEqual(c.rectangle, rect)
示例#2
0
 def __init__(self, main, resolution=1, parent=None):
     if isinstance(main, Rectangle):
         if main.height() == main.width() and is_power2(main.height()):
             self.main = main
             self.parent = parent
             self.resolution = resolution
             # Subindexes
             if resolution > 1:
                 self.top_left = Area(
                     Rectangle(self.main.top_left,
                               self.main.middle().top_left), resolution - 1,
                     self)
                 self.top_right = Area(
                     Rectangle(self.main.middle().top_right,
                               self.main.top_right), resolution - 1, self)
                 self.bottom_left = Area(
                     Rectangle(self.main.bottom_left,
                               self.main.middle().bottom_left),
                     resolution - 1, self)
                 self.bottom_right = Area(
                     Rectangle(self.main.bottom_right,
                               self.main.middle().bottom_right),
                     resolution - 1, self)
                 self.children = [
                     self.top_left, self.top_right, self.bottom_left,
                     self.bottom_right
                 ]
             self.rectangles = []
示例#3
0
    def test_dimensions(self):
        first = Field(0, 0)
        second = Field(9, 9)

        rect = Rectangle(first, second)
        self.assertEqual(rect.height(), 10)
        self.assertEqual(rect.width(), 10)
示例#4
0
 def test_remove3(self):
     a = Area(Rectangle(Field(0, 0), Field(15, 15)), 3)
     r = Rectangle(Field(8, 10), Field(10, 11))
     self.assertFalse(r in a.top_right.bottom_left.rectangles)
     a += r
     self.assertTrue(r in a.top_right.bottom_left.rectangles)
     a -= r
     self.assertFalse(r in a.top_right.bottom_left.rectangles)
示例#5
0
 def test_remove(self):
     a = Area(Rectangle(Field(0, 0), Field(7, 7)), 1)
     r = Rectangle(Field(0, 0), Field(4, 4))
     self.assertFalse(r in a.rectangles)
     a += r
     self.assertTrue(r in a.rectangles)
     a -= r
     self.assertFalse(r in a.rectangles)
示例#6
0
 def test_remove2(self):
     a = Area(Rectangle(Field(0, 0), Field(15, 15)), 2)
     r = Rectangle(Field(0, 0), Field(6, 6))
     self.assertFalse(r in a.bottom_left.rectangles)
     a += r
     self.assertTrue(r in a.bottom_left.rectangles)
     a -= r
     self.assertFalse(r in a.bottom_left.rectangles)
示例#7
0
 def test_init_subindexes(self):
     a = Area(Rectangle(Field(0, 0), Field(7, 7)), 2)
     self.assertTrue(
         a.bottom_left.main == Rectangle(Field(0, 0), Field(3, 3)))
     self.assertTrue(
         a.bottom_right.main == Rectangle(Field(4, 0), Field(7, 3)))
     self.assertTrue(a.top_left.main == Rectangle(Field(0, 4), Field(3, 7)))
     self.assertTrue(
         a.top_right.main == Rectangle(Field(4, 4), Field(7, 7)))
示例#8
0
    def test_init_area(self):
        a = Area(Rectangle(Field(0, 0), Field(31, 31)), 2)

        rect = Rectangle(Field(5, 5), Field(10, 10))

        a += rect

        for c in rect.corners():
            self.assertEqual(c.rectangle.area, a)
示例#9
0
 def test_all_rectangles(self):
     a = Area(Rectangle(Field(0, 0), Field(127, 127)), 4)
     original = set()
     for i in range(0, 100):
         rect = Rectangle(Field(i, i), Field(i, i))
         original.add(rect)
         a += rect
     result = a.all_rectangles()
     self.assertEqual(original, result)
示例#10
0
    def test_and_none(self):
        big1 = Field(5, 5)
        big2 = Field(10, 10)
        small1 = Field(1, 1)
        small2 = Field(4, 4)

        big = Rectangle(big1, big2)
        small = Rectangle(small1, small2)

        self.assertEqual(None, big & small)
示例#11
0
    def area():
        a = Area.of_size(16)

        rectangles = [
            Rectangle(Field(3, 3), Field(12, 3), type=FieldType.inaccessible),
            Rectangle(Field(3, 12), Field(12, 12), type=FieldType.inaccessible),
            Rectangle(Field(7, 6), Field(8, 9), type=FieldType.inaccessible),
        ]
        a += rectangles
        return a
示例#12
0
 def test_init_subsubindexes(self):
     a = Area(Rectangle(Field(0, 0), Field(7, 7)), 3)
     self.assertTrue(a.bottom_left.bottom_left.main == Rectangle(
         Field(0, 0), Field(1, 1)))
     self.assertTrue(a.bottom_left.bottom_right.main == Rectangle(
         Field(2, 0), Field(3, 1)))
     self.assertTrue(
         a.bottom_left.top_left.main == Rectangle(Field(0, 2), Field(1, 3)))
     self.assertTrue(a.bottom_left.top_right.main == Rectangle(
         Field(2, 2), Field(3, 3)))
示例#13
0
    def test_corner_shell(self):
        test_cases = {
            Rectangle(Field(0, 0), Field(5, 5)):
            Rectangle(Point(-0.5, -0.5), Point(5.5, 5.5)),
            Rectangle(Field(2, 2), Field(4, 4)):
            Rectangle(Point(1.5, 1.5), Point(4.5, 4.5))
        }

        for case, expected in test_cases.items():
            self.assertEqual(case.corner_shell(), expected)
示例#14
0
    def test_str(self):
        first = Field(0, 0)
        second = Field(17, 10)

        expected = "(0,10)	...	(17,10)\n" \
                   "...		...		...\n" \
                   "(0,0)	...	(17,0)"

        rect = Rectangle(first, second)

        self.assertEqual(rect.__str__(), expected)
示例#15
0
    def area():
        a = Area.of_size(8)

        rectangles = [
            Rectangle(Field(0, 0), Field(0, 5), type=FieldType.inaccessible),
            Rectangle(Field(3, 0), Field(3, 5), type=FieldType.inaccessible),
            Rectangle(Field(4, 5), Field(6, 5), type=FieldType.inaccessible),
            Rectangle(Field(6, 3), Field(7, 3), type=FieldType.inaccessible)
        ]
        a += rectangles
        return a
示例#16
0
 def test_add_multiple_list(self):
     a = Area(Rectangle(Field(0, 0), Field(15, 15)), 1)
     rectangles = [
         Rectangle(Field(2, 2), Field(3, 3)),
         Rectangle(Field(2, 5), Field(3, 5)),
         Rectangle(Field(5, 2), Field(6, 3)),
         Rectangle(Field(5, 5), Field(6, 6))
     ]
     a += rectangles
     # Check
     self.assertEqual(set(rectangles), a.all_rectangles())
示例#17
0
    def test_and_contains(self):
        big1 = Field(0, 0)
        big2 = Field(10, 10)
        small1 = Field(4, 4)
        small2 = Field(8, 8)

        big = Rectangle(big1, big2)
        small = Rectangle(small1, small2)

        self.assertEqual(small, big & small)
        self.assertEqual(small & big, big & small)
示例#18
0
    def area():
        a = Area.of_size(8)

        rectangles = [
            Rectangle(Field(2, 2), Field(3, 3), type=FieldType.inaccessible),
            Rectangle(Field(2, 5), Field(3, 6), type=FieldType.inaccessible),
            Rectangle(Field(5, 2), Field(6, 3), type=FieldType.inaccessible),
            Rectangle(Field(5, 5), Field(6, 6), type=FieldType.inaccessible)
        ]
        a += rectangles
        return a
示例#19
0
 def test_all_rectangles_complex(self):
     a = Area(Rectangle(Field(0, 0), Field(511, 511)), 4)
     original = set()
     for i in range(1, 20):
         for j in range(1, 20):
             rect = (Rectangle(Field(i * 6, j * 6),
                               Field(i * 6 + 2, j * 6 + 2)))
             original.add(rect)
             a += rect
     result = a.all_rectangles()
     self.assertEqual(original, result)
示例#20
0
 def test_add_multiple(self):
     a = Area(Rectangle(Field(0, 0), Field(15, 15)), 2)
     r = Rectangle(Field(6, 6), Field(10, 10))
     self.assertFalse(r in a.bottom_left.rectangles)
     self.assertFalse(r in a.bottom_right.rectangles)
     self.assertFalse(r in a.top_left.rectangles)
     self.assertFalse(r in a.top_right.rectangles)
     a += r
     self.assertTrue(r in a.bottom_left.rectangles)
     self.assertTrue(r in a.bottom_right.rectangles)
     self.assertTrue(r in a.top_left.rectangles)
     self.assertTrue(r in a.top_right.rectangles)
示例#21
0
    def test_and_2to0_intersection_vertical_right(self):
        first_s = Field(0, 10)
        first_e = Field(10, 20)
        second_s = Field(4, 5)
        second_e = Field(8, 15)

        result = Rectangle(Field(4, 10), Field(8, 15))

        first = Rectangle(first_s, first_e)
        second = Rectangle(second_s, second_e)

        self.assertTrue(result == first & second)
示例#22
0
    def test_and_1to1_intersection(self):
        first_s = Field(0, 0)
        first_e = Field(9, 11)
        second_s = Field(4, 3)
        second_e = Field(12, 12)

        result = Rectangle(Field(4, 3), Field(9, 11))

        first = Rectangle(first_s, first_e)
        second = Rectangle(second_s, second_e)

        self.assertEqual(result, first & second)
示例#23
0
    def test_root(self):
        a = Area(Rectangle(Field(0, 0), Field(1023, 1023)), 8)
        other = Area(Rectangle(Field(0, 0), Field(1023, 1023)), 8)

        for child in a.children:
            while child.is_subindexed():
                child = child.bottom_left
            self.assertEquals(child.get_root(), a)
            # Abusive
            self.assertNotEqual(child.get_root(), child)
            self.assertNotEqual(child.get_root(), child.parent)
            self.assertNotEqual(child.get_root(), other)
示例#24
0
    def test_conversion2(self):
        r = Rectangle(Field(1, 1), Field(5, 5))
        results = {
            "(1,1)": (0.5, 0.5),
            "(1,5)": (0.5, 5.5),
            "(5,1)": (5.5, 0.5),
            "(5,5)": (5.5, 5.5)
        }

        for c in r.corners():
            r = results[c.__str__()]
            self.assertEqual(Point(r[0], r[1]), Point.corner_to_point(c))
示例#25
0
    def test_and_2to0_intersection_horizontal_right(self):
        first_s = Field(10, 0)
        first_e = Field(20, 10)
        second_s = Field(8, 4)
        second_e = Field(16, 9)

        result = Rectangle(Field(10, 4), Field(16, 9))

        first = Rectangle(first_s, first_e)
        second = Rectangle(second_s, second_e)

        self.assertTrue(result == first & second)
示例#26
0
    def gen_area(self):
        # DO NOT CHANGE!!!
        a = Area(Rectangle(Field(0, 0), Field(15, 15)), 1)

        rectangles = [
            Rectangle(Field(2, 2), Field(3, 3), type=FieldType.inaccessible),
            Rectangle(Field(2, 5), Field(3, 6), type=FieldType.inaccessible),
            Rectangle(Field(5, 2), Field(6, 3), type=FieldType.inaccessible),
            Rectangle(Field(6, 5), Field(6, 5), type=FieldType.inaccessible)
        ]
        a += rectangles
        return a
示例#27
0
    def test_add_coinciding(self):
        a = Area(Rectangle(Field(0, 0), Field(15, 15)), 2)
        base = Rectangle(Field(6, 6), Field(10, 10))
        r1 = Rectangle(Field(6, 6), Field(10, 10))
        r2 = Rectangle(Field(4, 4), Field(8, 8))
        r3 = Rectangle(Field(10, 10), Field(13, 13))
        rs = [r1, r2, r3]

        a += base

        for r in rs:
            with self.assertRaises(Exception):
                a += r
示例#28
0
    def test_init_area_big(self):
        a = Area(Rectangle(Field(0, 0), Field(1023, 1023)), 5)

        rect1 = Rectangle(Field(5, 5), Field(10, 10))
        rect2 = Rectangle(Field(200, 500), Field(1001, 700))
        rect3 = Rectangle(Field(201, 201), Field(201, 201))

        rectangles = {rect1, rect2, rect3}

        for r in rectangles:
            a += r
            for c in r.corners():
                self.assertEqual(c.rectangle.area, a)
示例#29
0
    def gen_area(self):
        a = Area(Rectangle(Field(0, 0), Field(7, 7)), 1)

        rectangles = [
            Rectangle(Field(2, 2), Field(3, 3), type=FieldType.inaccessible),
            Rectangle(Field(2, 5), Field(3, 6), type=FieldType.inaccessible),
            Rectangle(Field(5, 2), Field(6, 3), type=FieldType.inaccessible),
            Rectangle(Field(5, 5), Field(6, 6), type=FieldType.inaccessible)
        ]
        a.main.size = MagicMock(return_value=64)
        a.all_rectangles = MagicMock(return_value=set(rectangles))
        a += rectangles  # TODO: Mocking should work without this instruction
        return a
示例#30
0
    def test_init(self):
        f1 = Field(0, 0)
        f2 = Field(10, 0)
        f3 = Field(10, 10)
        f4 = Field(0, 10)

        rectangle = Rectangle(f1, f3)

        real = [f1, f2, f3, f4]

        testing = rectangle.corners()

        for i in range(0, 4):
            self.assertTrue(real[i] == testing[i])
示例#31
0
def add_rectagle(x1, y1, x2, y2, label):
    x1 = float(x1)
    y1 = float(y1)
    x2 = float(x2)
    y2 = float(y2)

    rect = Rectangle(
        (x1, y1),
        (x2, y2),
        {label: 1}
    )

    if len(rectangles) > 0:
        closest = min(rectangles, key=rect.distance)
        dist    = rect.distance(closest)
    else:
        dist = float('inf')

    if dist > 0.0005:  # TODO: tune this value
        rectangles.append(rect)
    else:
        closest.labels[label] += 1

    return jsonify()
示例#32
0
def main():
    global font
    global message
    pygame.init()
    pygame.display.set_caption("Lunar Lander Re-Created By Matthew Jones And Philip Jones")
    screen = pygame.display.set_mode((800,600))
    
    font = pygame.font.SysFont('Calibri', 25, True, False)
    
    lander = Lander()
    lander_group = Group()
    lander_group.add(lander)
    
    burn = Burn(lander)
    burn_group = Group()
    burn_group.add(burn) 
    
    fuel_bar_front = Rectangle(blue)
    fuel_bar_front_group = Group()
    fuel_bar_front_group.add(fuel_bar_front)
    
    fuel_bar_back = Rectangle(white)
    fuel_bar_back_group = Group()
    fuel_bar_back_group.add(fuel_bar_back)
    
    planet = Planet()
    planet_group = Group()
    planet_group.add(planet)
    
    done = False
    pygame.display.update()
    flicker = True
    music = False
    first_frame = True
    
    landed_ok = None
    while not done:
        thrust = False
        left = False
        right = False
        pygame.event.pump()
        keys=pygame.key.get_pressed()
        if keys[K_ESCAPE]:
            done = True
        if landed_ok is None:
            if keys[K_SPACE] or keys[K_UP]:
                thrust = True
            if keys[K_LEFT]:
                left = True
            if keys[K_RIGHT]:
                right = True
        
        landed = False
        if first_frame:
            first_frame = False
        else:
            offset_x, offset_y = (planet.rect.left - lander.rect.left), (planet.rect.top - lander.rect.top)
            landed = lander.mask.overlap(planet.mask, (offset_x, offset_y))  != None               
            
        status = lander.calculate_vertical_speed(thrust, landed)
        if landed and landed_ok is None:
            landed_ok = status
            if landed_ok:
                landed_message()
            else:
                crashed_message()
                
        if not landed and lander.height < 200:
            if lander.delta_vert < -2:
                message = "Almost there!  TOO FAST!"
            else:
                message = "Almost there! Slow down for a soft landing"           
        lander.calc_horizontal(left, right)
        screen.fill(background_colour)
        lander.render()
        lander_group.draw(screen)
        if not landed and thrust and lander.is_fuel_remaining():
            flicker = not flicker
            image_number = 1 if flicker else 0
            burn.render(image_number)
            burn_group.draw(screen)
            if not music:
                play_sound('../sounds/rocket_sound.mp3',  True)
                music = True
        elif music and not landed:
            music = False
            pygame.mixer.music.stop()
    
        #draw fuel bar :)
        percent_fuel = float(lander.fuel) / float(Lander.max_fuel) * 100.0
        fuel_bar_back.render(10, 10, 104, 12)
        fuel_bar_back_group.draw(screen)
        fuel_bar_front.render(12,  12,  percent_fuel,  8)
        fuel_bar_front_group.draw(screen)
        
        planet.render()
        planet_group.draw(screen)
        
        display_message(screen)
        
        pygame.display.update()
        time.sleep(0.015)