Code Duplication    Length = 75-75 lines in 2 locations

examples/samples_libtcodpy.py 1 location

@@ 983-1057 (lines=75) @@
980
        x += 1
981
982
# the class building the dungeon from the bsp nodes
983
def traverse_node(node, *dat):
984
    global bsp_map
985
    if libtcod.bsp_is_leaf(node):
986
        # calculate the room size
987
        minx = node.x + 1
988
        maxx = node.x + node.w - 1
989
        miny = node.y + 1
990
        maxy = node.y + node.h - 1
991
        if not bsp_room_walls:
992
            if minx > 1:
993
                minx -= 1
994
            if miny > 1:
995
                miny -=1
996
        if maxx == SAMPLE_SCREEN_WIDTH - 1:
997
            maxx -= 1
998
        if maxy == SAMPLE_SCREEN_HEIGHT - 1:
999
            maxy -= 1
1000
        if bsp_random_room:
1001
            minx = libtcod.random_get_int(None, minx, maxx - bsp_min_room_size + 1)
1002
            miny = libtcod.random_get_int(None, miny, maxy - bsp_min_room_size + 1)
1003
            maxx = libtcod.random_get_int(None, minx + bsp_min_room_size - 1, maxx)
1004
            maxy = libtcod.random_get_int(None, miny + bsp_min_room_size - 1, maxy)
1005
        # resize the node to fit the room
1006
        node.x = minx
1007
        node.y = miny
1008
        node.w = maxx-minx + 1
1009
        node.h = maxy-miny + 1
1010
        # dig the room
1011
        for x in range(minx, maxx + 1):
1012
            for y in range(miny, maxy + 1):
1013
                bsp_map[x][y] = True
1014
    else:
1015
        # resize the node to fit its sons
1016
        left = libtcod.bsp_left(node)
1017
        right = libtcod.bsp_right(node)
1018
        node.x = min(left.x, right.x)
1019
        node.y = min(left.y, right.y)
1020
        node.w = max(left.x + left.w, right.x + right.w) - node.x
1021
        node.h = max(left.y + left.h, right.y + right.h) - node.y
1022
        # create a corridor between the two lower nodes
1023
        if node.horizontal:
1024
            # vertical corridor
1025
            if left.x + left.w - 1 < right.x or right.x + right.w - 1 < left.x:
1026
                # no overlapping zone. we need a Z shaped corridor
1027
                x1 = libtcod.random_get_int(None, left.x, left.x + left.w - 1)
1028
                x2 = libtcod.random_get_int(None, right.x, right.x + right.w - 1)
1029
                y = libtcod.random_get_int(None, left.y + left.h, right.y)
1030
                vline_up(bsp_map, x1, y - 1)
1031
                hline(bsp_map, x1, y, x2)
1032
                vline_down(bsp_map, x2, y + 1)
1033
            else:
1034
                # straight vertical corridor
1035
                minx = max(left.x, right.x)
1036
                maxx = min(left.x + left.w - 1, right.x + right.w - 1)
1037
                x = libtcod.random_get_int(None, minx, maxx)
1038
                vline_down(bsp_map, x, right.y)
1039
                vline_up(bsp_map, x, right.y - 1)
1040
        else:
1041
            # horizontal corridor
1042
            if left.y + left.h - 1 < right.y or right.y + right.h - 1 < left.y:
1043
                # no overlapping zone. we need a Z shaped corridor
1044
                y1 = libtcod.random_get_int(None, left.y, left.y + left.h - 1)
1045
                y2 = libtcod.random_get_int(None, right.y, right.y + right.h - 1)
1046
                x = libtcod.random_get_int(None, left.x + left.w, right.x)
1047
                hline_left(bsp_map, x - 1, y1)
1048
                vline(bsp_map, x, y1, y2)
1049
                hline_right(bsp_map, x + 1, y2)
1050
            else:
1051
                # straight horizontal corridor
1052
                miny = max(left.y, right.y)
1053
                maxy = min(left.y + left.h - 1, right.y + right.h - 1)
1054
                y = libtcod.random_get_int(None, miny, maxy)
1055
                hline_left(bsp_map, right.x - 1, y)
1056
                hline_right(bsp_map, right.x, y)
1057
    return True
1058
1059
bsp = None
1060
bsp_generate = True

examples/samples_tcod.py 1 location

@@ 825-899 (lines=75) @@
822
        y += 1
823
824
# draw a horizontal line
825
def hline(m, x1, y, x2):
826
    if x1 > x2:
827
        x1, x2 = x2, x1
828
    for x in range(x1, x2 + 1):
829
        m[x][y] = True
830
831
# draw a horizontal line left until we reach an empty space
832
def hline_left(m, x, y):
833
    while x >= 0 and not m[x][y]:
834
        m[x][y] = True
835
        x -= 1
836
837
# draw a horizontal line right until we reach an empty space
838
def hline_right(m, x, y):
839
    while x < SAMPLE_SCREEN_WIDTH and not m[x][y]:
840
        m[x][y] = True
841
        x += 1
842
843
# the class building the dungeon from the bsp nodes
844
def traverse_node(node, *dat):
845
    global bsp_map
846
    if libtcod.bsp_is_leaf(node):
847
        # calculate the room size
848
        minx = node.x + 1
849
        maxx = node.x + node.w - 1
850
        miny = node.y + 1
851
        maxy = node.y + node.h - 1
852
        if not bsp_room_walls:
853
            if minx > 1:
854
                minx -= 1
855
            if miny > 1:
856
                miny -= 1
857
        if maxx == SAMPLE_SCREEN_WIDTH - 1:
858
            maxx -= 1
859
        if maxy == SAMPLE_SCREEN_HEIGHT - 1:
860
            maxy -= 1
861
        if bsp_random_room:
862
            minx = libtcod.random_get_int(None,
863
                                          minx, maxx - bsp_min_room_size + 1)
864
            miny = libtcod.random_get_int(None,
865
                                          miny, maxy - bsp_min_room_size + 1)
866
            maxx = libtcod.random_get_int(None,
867
                                          minx + bsp_min_room_size - 1, maxx)
868
            maxy = libtcod.random_get_int(None,
869
                                          miny + bsp_min_room_size - 1, maxy)
870
        # resize the node to fit the room
871
        node.x = minx
872
        node.y = miny
873
        node.w = maxx - minx + 1
874
        node.h = maxy - miny + 1
875
        # dig the room
876
        for x in range(minx, maxx + 1):
877
            for y in range(miny, maxy + 1):
878
                bsp_map[x][y] = True
879
    else:
880
        # resize the node to fit its sons
881
        left = libtcod.bsp_left(node)
882
        right = libtcod.bsp_right(node)
883
        node.x = min(left.x, right.x)
884
        node.y = min(left.y, right.y)
885
        node.w = max(left.x + left.w, right.x + right.w) - node.x
886
        node.h = max(left.y + left.h, right.y + right.h) - node.y
887
        # create a corridor between the two lower nodes
888
        if node.horizontal:
889
            # vertical corridor
890
            if left.x + left.w - 1 < right.x or right.x + right.w - 1 < left.x:
891
                # no overlapping zone. we need a Z shaped corridor
892
                x1 = libtcod.random_get_int(None, left.x, left.x + left.w - 1)
893
                x2 = libtcod.random_get_int(None,
894
                                            right.x, right.x + right.w - 1)
895
                y = libtcod.random_get_int(None, left.y + left.h, right.y)
896
                vline_up(bsp_map, x1, y - 1)
897
                hline(bsp_map, x1, y, x2)
898
                vline_down(bsp_map, x2, y + 1)
899
            else:
900
                # straight vertical corridor
901
                minx = max(left.x, right.x)
902
                maxx = min(left.x + left.w - 1, right.x + right.w - 1)