Building a Circular Room in Python (LibTcod Roguelike tutorial)

56 views Asked by At

I'm happy to say I'm still learning and new to making and building quite anything in code so far, but I have been tackling the Tcod Roguelike tutorial to try some things out.

I have gotten to the procedural generation of rooms and have gotten it to work, but I have not been able to figure out how to build a circular room using the library and tools that they have in place. As an idea, here's the base normal code:

class RectangularRoom:
    def __init__(self, x: int, y: int, width: int, height: int):
        self.x1 = x
        self.y1 = y
        self.x2 = x + width
        self.y2 = y + height

    @property
    def center(self) -> Tuple[int, int]:
        center_x = int((self.x1 + self.x2) / 2)
        center_y = int((self.y1 + self.y2) / 2)

        return center_x, center_y

    @property
    def inner(self) -> Tuple[int, int]:
        """Return the inner area of this room as a 2D array index."""
        return slice(self.x1 + 1, self.x2), slice(self.y1 +1, self.y2)
    
    def intersects(self, other: RectangularRoom) -> bool:
        """Return True if this room overlaps with another RectangularRoom."""
        return(
            self.x1 <= other.x2
            and self.x2 >= other.x1
            and self.y1 <= other.y2
            and self.y2 >= other.y1
        )

The procedural generator fills in the x, y, width, and height values then carves out an array of rectangular rooms.

I tried using to build a circular room by getting the appropriate variables to write the equation of a circle but have run into ValueErrors. As a note, I'm not having the procedural generator make anything with this, so I just have a set singular "Room" to fill in the values. I'm positive I have too much going on, but I really just have no idea where to go with this.

class CircularRoom:
    # I need radius and circumference
    def __init__(self, x:int, y: int, h: int, k: int, r: int):
        self.x0 = x
        self.y0 = y
        self.x1 = h
        self.y1 = k
        self.r0 = r
        self.x2 = int(m.sqrt(r ** 2 - (y - k) ** 2) + h)
        self.y2 = int(m.sqrt(r ** 2 - (x - h) ** 2) + k)

I know there are tools like Turtle and Matplotlib, but I want to draw within this without using those if I have to. If it comes down to it, I'll use those sources, but I want to believe (and I'm positive it's possible) that I can make a circular room in Tcod

0

There are 0 answers