-5

オフィスタワーを描画する関数を作成しています:

  • ウィンドウは 20 ピクセルの正方形です

  • ウィンドウ間のギャップは 10 ピクセルです

  • ドアは幅 20 ピクセル、高さ 50 ピクセル、オレンジ

私のコードはそれを正しく描画しません:

from graphics import *
from random import *

def add_window(win, nH, nV):
    w, h = win.getWidth(), win.getHeight()
    rects = []
    for x in range(nH):
        rects.append([])
        for y in range(nV):
            r = Rectangle(Point( x   *w//nH,  y   *h//vV),
                          Point((x+1)*w//nH, (y+1)*h//nV))
            window = [ r,
                       True,
                       [ 'red', 'green' ]
                       ]
            rects[x].append(window)
            rects[x][y][0].draw(win)
            rects[x][y][0].setOutline('blue')
            color = window[2][randint[0,1]]
            rects[x][y][0].setFill(color)
    return rects

WIN_W, WIN_H = 500, 400

#Top left coner of the building
BLDG_LEFT, BLDG_TOP = 50, 50

#How many floors, how many windows perfloor, window digit and gap
FLOORS, WIN_FLR, WIN_SZ, GAP = 10, 5, 20, 5

win = None

#Syntax : window[x][y]
#   [0] : Rectangle() object
#   [1] : True/False
windows = []
#--------------------------------------------------------------------

def draw_window(x, y):
    global windows
    windows = []
    left = BLDG_LEFT + GAP + x* (WIN_SZ+GAP)
    top =  BLDG_TOP  + GAP + y* (WIN_SZ+GAP)
    r = Rectangle(Point( x   *WIN_SZ+GAP,  y   *(WIN_SZ+GAP)),
                  Point((x+1)*WIN_SZ+GAP, (y+1)*(WIN_SZ+GAP)))
    windows[x][y].append(r)
    bit = randint(0,1)
    windows[x][y].append(bool(bit))
    windows[x][y][0].setFill(COLORS[bit])
    windows[x][y][0].draw(win)


def draw_windows():
    for i in range(WIN_FLR):
        windows.append([])
        for j in range(FLOORS):
            windows[i].append([])
            draw_window(i, j)


def office_tower():
    global win
    win = GraphWin("OFFICE TOWER", WIN_W, WIN_H)
    draw_window(1, 1)

    while True:
        pt = win.getmouse()
        if pt.x < 10 and pt.y < 10:
            break

        # windows coordinates
        x = int((pt.x - BLDG_LEFT - GAP)/(WIN_SZ + GAP))
        y = int((pt.y - BLDG_TOP  - GAP)/(WIN_SZ + GAP))
        print(str((pt.x, pt.y)) + ' --> ' + str((x, y)))

        windows[x][y][1] = netwindows[x][y][1]
        windows[x][y][0].setFill(COLORS[windows[x][y][1]])


def draw_building():
    global windows
    win = GraphWin("OFFICE TOWER", WIN_W, WIN_H)
    N_H, N_V = 5, 10

    while True:
        pt = win.getMouse()
        m_x, m_y = pt.getX(), pt.getY()

        # Grid coordinates:
        g_x = m_x // (WIN_W//N_H)
        g_y = m_y // (WIN_H//N_V)

        # For development purposes:
        if m_x < 10 and m_y < 10:
            break
4

1 に答える 1