def DrawHexagon(puzzle): angle = 30 figure = GCompound() figureinside = GCompound() hexagon = createHexagon(HEX_SIDE) hexagon.setFilled(True) hexagon.setColor(CENTER_HEX_COLOR) figureinside.add(hexagon) labelinside = GLabel(puzzle[0]) labelinside.setFont(LABEL_FONT) figureinside.add(labelinside, -0.38 * labelinside.getWidth(), HEX_LABEL_DY) figure.add(figureinside) for i in range(1, 7): figureinside = GCompound() hexagon = createHexagon(HEX_SIDE) hexagon.setFilled(True) hexagon.setColor(OUTER_HEX_COLOR) figureinside.add(hexagon) labelinside = GLabel(puzzle[i]) labelinside.setFont(LABEL_FONT) figureinside.add(labelinside, -0.38 * labelinside.getWidth(), HEX_LABEL_DY) figureinside.movePolar(HEX_SEP, angle) angle += 60 figure.add(figureinside) gw.add(figure, GWINDOW_WIDTH / 2, GWINDOW_HEIGHT / 2)
class EnigmaLamp(GCompound): def __init__(self, letter): GCompound.__init__(self) lamp = GOval(LAMP_RADIUS * 2, LAMP_RADIUS * 2) lamp.setColor(LAMP_BORDER_COLOR) lamp.setFillColor(LAMP_BGCOLOR) self.add(lamp, -LAMP_RADIUS, -LAMP_RADIUS) # create design for lamps self.ch = GLabel(letter) self.ch.setColor(LAMP_OFF_COLOR) self.ch.setFont(LAMP_FONT) self.add(self.ch, -self.ch.getWidth() / 2, LAMP_LABEL_DY) def setState(self, state): # set state of lamp to be on or off if state: self.ch.setColor(LAMP_ON_COLOR) else: self.ch.setColor(LAMP_OFF_COLOR) def getState(self): # get state of lamp )(n or off) if self.ch.getColor() == LAMP_ON_COLOR: return True else: return False
def letterFound(ch): """ Checks if the letter clicked is in the word and replaces dashes with the letter everywhere it appears """ nonlocal full_word, mystery_word, word_display, game_over s = 0 if full_word.find(ch) != -1: while s <= len(full_word): if full_word.find(ch, s) != -1: letter = full_word.find(ch, s) mystery_word = mystery_word[:letter] + ch + mystery_word[ letter + 1:] s += letter + 1 else: s = len(full_word) + 1 gw.remove(word_display) word_display = GLabel(mystery_word) word_display.setFont(WORD_FONT) gw.add(word_display, (GWINDOW_WIDTH - word_display.getWidth()) / 2, GWINDOW_HEIGHT - WORD_BASE) if mystery_word == full_word: message = gw.getElementAt(GWINDOW_WIDTH / 2, GWINDOW_HEIGHT - MESSAGE_BASE) gw.remove(message) message = GLabel('YOU WIN!') message.setFont(MESSAGE_FONT) message.setColor(CORRECT_COLOR) gw.add(message, (GWINDOW_WIDTH - message.getWidth()) / 2, GWINDOW_HEIGHT - MESSAGE_BASE) game_over = True animateMelting() return True
class EnigmaKey(GCompound): def __init__(self, letter): GCompound.__init__(self) key = GOval(KEY_RADIUS * 2, KEY_RADIUS * 2) key.setLineWidth(KEY_BORDER) key.setColor(KEY_BORDER_COLOR) key.setFillColor(KEY_BGCOLOR) self.add(key, -KEY_RADIUS, -KEY_RADIUS) # create design for keys self.ch = GLabel(letter) self.ch.setColor(KEY_UP_COLOR) self.ch.setFont(KEY_FONT) self.add(self.ch, -self.ch.getWidth() / 2, KEY_LABEL_DY) def setLetterColor(self, color): # change letter color if needed self.ch.setColor(color) def mousedownAction(self, enigma): # define mousedownAction self.setLetterColor(KEY_DOWN_COLOR) enigma.keyPressed(self) def mouseupAction(self, enigma): # define mouseupAction self.setLetterColor(KEY_UP_COLOR) enigma.keyReleased(self)
def ballsMessage(): global ballsmsg ballsmsg = GLabel("Balls Remaining: " + str(N_BALLS)) # Tell player number of balls remaing ballsmsg.setFont("30pt 'Arial'") x = (GWINDOW_WIDTH - ballsmsg.getWidth()) / 2 gw.add(ballsmsg, x, 2 * GWINDOW_HEIGHT / 3 + spacing)
def runSimulation(): decisionIndicators = createWindow() progressLabel = GLabel("GAMES PLAYED: 0") progressLabel.setFont(MESSAGE_FONT) gw.add(progressLabel, 20, 50) def adjustIndicators(): progressLabel.setLabel('GAMES PLAYED: {}'.format(agent.epochsSoFar)) for state in decisionIndicators: action = agent.getPolicy(state) indicator = decisionIndicators[state] if action == 'hit': indicator.setFillColor("green") indicator.setFilled(True) else: indicator.setFillColor("red") indicator.setFilled(True) def adjustIndicatorsAlt(): progressLabel.setLabel('GAMES PLAYED: {}'.format(agent.epochsSoFar)) for state in decisionIndicators: hitValue = agent.getQValue(state, 'hit') standValue = agent.getQValue(state, 'stand') hitDifferential = hitValue - standValue if hitDifferential > 1: color = "#00FF00" elif hitDifferential > 0.5: color = "#00CC00" elif hitDifferential > 0.2: color = "#008800" elif hitDifferential > 0.1: color = "#006600" elif hitDifferential > 0.05: color = "#004400" elif hitDifferential > -0.05: color = "#000000" elif hitDifferential > 0.1: color = "#440000" elif hitDifferential > -0.2: color = "#660000" elif hitDifferential > -0.5: color = "#880000" elif hitDifferential > -1: color = "#CC0000" else: color = "#FF0000" indicator = decisionIndicators[state] indicator.setFillColor(color) indicator.setFilled(True) timer1 = gw.createTimer(agent.go, 1000) timer1.setRepeats(True) timer1.start() timer2 = gw.createTimer(adjustIndicatorsAlt, 1500) timer2.setRepeats(True) timer2.start()
def create_centered_label(text, x, y, font=None): """ Creates a new GLabel centered at the point (x, y) in both the horizontal and vertical directions. If font is specified, it is used to set the font of the label. """ label = GLabel(text) if font is not None: label.setFont(font) center_label(label, x, y) return label
def createCenteredLabel(text, x, y, font=None): """ Creates a new GLabel centered at the point (x, y) in both the horizontal and vertical directions. If font is specified, it is used to set the font of the label. """ label = GLabel(text) if font is not None: label.setFont(font) label.setLocation(x - label.getWidth() / 2, y + label.getAscent() / 2) return label
def createButton(s):# makes a button with the string s button=GCompound() buttonSize=75 label=GLabel(s) label.setColor("white") label.setFont("8px 'Sans-Serif'") c=GOval(-(label.getWidth()+20)//2,-buttonSize//2,label.getWidth()+20,buttonSize) c.setFillColor("black") c.setFilled(True) button.add(c) button.add(label,-label.getWidth()//2,0) return button
def ArpanetSimulation(): def clickAction(e): nodeList = [] obj = gw.getElementAt(e.getX(), e.getY()) if isinstance(obj, ArpanetNode): nodeList = [obj] elif isinstance(obj, GLine): active = obj.getColor() == "Black" start = obj.getStartPoint() end = obj.getEndPoint() n1 = gw.getElementAt(start.getX(), start.getY()) n2 = gw.getElementAt(end.getX(), end.getY()) if active: obj.setColor("LightGray") n1.removeNeighbor(n2) n2.removeNeighbor(n1) else: obj.setColor("Black") n1.addNeighbor(n2) n2.addNeighbor(n1) elif obj == allButton: nodeList = arpanet.getNodes() elif isinstance(obj, GLabel): node = arpanet.findNode(obj.getLabel()) name = node.getName() if node.isActive(): node.setActive(False) obj.setColor("LightGray") node.setRoutingTable(RoutingTable(name)) monitors[name].update() else: node.setActive(True) obj.setColor("Black") monitors[name].update() for node in nodeList: name = node.getName() myTable = node.getRoutingTable() if node.isActive(): for neighbor in node.getNeighbors(): if neighbor.isActive(): neighbor.getRoutingTable().update(name, myTable) for name in monitors: monitors[name].update() gw = GWindow(GWINDOW_WIDTH, GWINDOW_HEIGHT) arpanet = createArpanetGraph(gw) monitors = createArpanetMonitors(gw, arpanet) allButton = GLabel("Update All") allButton.setFont(ALL_BUTTON_FONT) gw.add(allButton, ALL_BUTTON_X, ALL_BUTTON_Y) gw.addEventListener("click", clickAction)
def endGame(): global N_BALLS, count, timer, endmsg, againmsg, clicks N_BALLS -= 1 if count == (N_ROWS * N_COLS): # If all bricks have been removed timer.stop() gw.remove(ball) endmsg = GLabel("You Won!") # Create end message, if won endmsg.setFont("36pt 'Arial'") x = (GWINDOW_WIDTH - endmsg.getWidth()) / 2 gw.add(endmsg, x, GWINDOW_HEIGHT / 2) elif N_BALLS > 0: #gw.remove(paddle) clicks = 0 endmsg = GLabel("You Lost :(") # Create end message, if lost endmsg.setFont("30pt 'Arial'") x = (GWINDOW_WIDTH - endmsg.getWidth()) / 2 gw.add(endmsg, x, GWINDOW_HEIGHT * .6) againmsg = GLabel("Click to Play Again") # Create end message, if lost againmsg.setFont("30pt 'Arial'") x = (GWINDOW_WIDTH - againmsg.getWidth()) / 2 gw.add(againmsg, x, GWINDOW_HEIGHT * .6 + spacing) count = 0 Breakout() elif N_BALLS == 0: timer.stop() endmsg = GLabel("You Lost :(") # Create end message, if lost endmsg.setFont("30pt 'Arial'") x = (GWINDOW_WIDTH - endmsg.getWidth()) / 2 gw.add(endmsg, x, GWINDOW_HEIGHT / 2)
def setUp(): # Create display global ballsmsg, N_BALLS, greet for i in range(5): # Create rows of bricks of specified colors color = colors[i] y = (BRICK_HEIGHT + BRICK_SEP) * 2 * i for i in range(2): drawRow(100 + (BRICK_HEIGHT + BRICK_SEP) * i + y, color) makePaddle() # Create paddle (in setup) greet = GLabel("Click to Begin") greet.setFont("36pt 'Arial'") x = (GWINDOW_WIDTH - greet.getWidth()) / 2 gw.add(greet, x, 2 * GWINDOW_HEIGHT / 3)
class SudokuDigitSelectorSubcell(GCompound): def __init__(self, digit): GCompound.__init__(self) self.digit = str(digit) cell = GRect(0, 0, SUBCELL_WIDTH, SUBCELL_WIDTH) cell.setColor(CELL_BORDER_COLOR) cell.setFillColor(SUBCELL_FILL_COLOR) cell.setFilled(True) self.add(cell, 0, 0) self.label = GLabel(digit) self.label.setFont(SUBCELL_FONT) self.label.setColor(SUBCELL_TEXT_COLOR) self.add(self.label, SUBCELL_WIDTH//2 - self.label.getWidth()//2, SUBCELL_WIDTH//2 + self.label.getAscent()//2 - 3)
def __init__(self): ''' The constructor creates a return button on the enigma. ''' GCompound.__init__(self) button = createFilledRect(-RETURN_WIDTH / 2, -RETURN_HEIGHT / 2, RETURN_WIDTH, RETURN_HEIGHT, fill=RETURN_BGCOLOR, border=RETURN_BORDER_COLOR) button.setLineWidth(RETURN_BORDER) label = GLabel('RETURN') label.setFont(RETURN_FONT) label.setColor(RETURN_COLOR) self.add(button) self.add(label, -label.getWidth() / 2, RETURN_LABEL_DY)
def __init__(self, letter): ''' The constructor initalizes the key for a given letter. ''' GCompound.__init__(self) button = createFilledCircle(0, 0, KEY_RADIUS, fill=KEY_BGCOLOR, border=KEY_BORDER_COLOR) button.setLineWidth(KEY_BORDER) key = GLabel(letter) key.setFont(KEY_FONT) self.key = key key.setColor(KEY_UP_COLOR) self.add(button) self.add(key, -key.getWidth() / 2, KEY_LABEL_DY)
def step(): nonlocal vx, vy, ball, bricks_hit, balls_left, x_text, y_text collider = getCollidingObject() if ball.getX() < 0 or ball.getX() > GWINDOW_WIDTH - BALL_SIZE: vx *= -1 elif ball.getY() < 0: vy *= -1 elif ball.getY() > GWINDOW_HEIGHT - BALL_SIZE: timer.stop() gw.remove(ball) balls_left -= 1 if balls_left > 0: ball = GOval((GWINDOW_WIDTH - BALL_SIZE) / 2, (GWINDOW_HEIGHT - BALL_SIZE) / 2, BALL_SIZE, BALL_SIZE) ball.setFilled(True) gw.add(ball) gw.add(instruct) else: msg = GLabel('You Lose.') msg.setColor('red') msg.setFont('bold 36px sans-serif') x = (GWINDOW_WIDTH - msg.getWidth()) / 2 y = (GWINDOW_HEIGHT - msg.getHeight()) / 2 gw.add(msg, x, y) if collider == paddle: vy *= -1 elif not (collider == paddle or collider == gw.getElementAt( x_text, y_text)) and collider is not None: vy *= -1 gw.remove(collider) bricks_hit += 1 if bricks_hit == N_COLS * N_ROWS: timer.stop() msg = GLabel('You Win!') msg.setColor('green') msg.setFont('bold 36px sans-serif') x = (GWINDOW_WIDTH - msg.getWidth()) / 2 y = (GWINDOW_HEIGHT - msg.getHeight()) / 2 gw.add(msg, x, y) ball.move(vx, vy) gw.remove(gw.getElementAt(x_text, y_text)) lives = GLabel('Lives: ' + str(balls_left)) gw.add(lives, x_text, y_text)
def step(): nonlocal snowman, dx, dy, full_word if snowman.getX() > (GWINDOW_WIDTH - BASE_SIZE) or snowman.getX() < BASE_SIZE: dx *= -1 gw.remove( gw.getElementAt(GWINDOW_WIDTH / 2, GWINDOW_HEIGHT - WORD_BASE)) word_display = GLabel(full_word) word_display.setFont(WORD_FONT) word_display.setColor(INCORRECT_COLOR) gw.add(word_display, (GWINDOW_WIDTH - word_display.getWidth()) / 2, GWINDOW_HEIGHT - WORD_BASE) elif snowman.getY() < (GWINDOW_HEIGHT - BASE_SIZE - BODY_SIZE - HEAD_SIZE) or snowman.getY() > SNOWMAN_BASE: dy *= -1 snowman.move(dx, dy)
def __init__(self, letter): ''' The constructor creates a lamp for a given letter. ''' GCompound.__init__(self) self.letter = letter lamp = createFilledCircle(0, 0, LAMP_RADIUS, fill=LAMP_BGCOLOR, border=LAMP_BORDER_COLOR) lamp = GLabel(letter) lamp.setFont(LAMP_FONT) self.lamp = lamp self.state = False lamp.setColor(LAMP_OFF_COLOR) self.add(lamp) self.add(lamp, -lamp.getWidth() / 2, LAMP_LABEL_DY)
class TextBox(GCompound): def __init__(self, msg, font="Helvetica", font_size=12, font_color="#000000"): super().__init__() self.label = GLabel(msg) self.label.setFont("{}px '{}'".format(font_size, font)) self.label.setColor(font_color) self.add(self.label, -self.get_width() // 2, (self.label.getAscent() - self.label.getDescent()) // 2) def get_height(self): return self.label.getAscent() + self.label.getDescent() def get_width(self): return self.label.getBounds().getWidth()
def __init__(self, permuation): ''' The constructor initalizes the rotor in the base setting. ''' GCompound.__init__(self) self.permuation = permuation self.inversion = invertKey(permuation) self.offset = 0 rotor = createFilledRect(-ROTOR_WIDTH / 2, -ROTOR_HEIGHT / 2, ROTOR_WIDTH, ROTOR_HEIGHT, fill=ROTOR_BGCOLOR) setting = GLabel(ALPHABET[self.offset]) setting.setColor(ROTOR_COLOR) setting.setFont(ROTOR_FONT) self.setting = setting self.add(rotor) self.add(setting, -setting.getWidth() / 2, ROTOR_LABEL_DY)
def shuffle(e): # Function to shuffle hexs global shuffleword, beehive obj = gw.getElementAt(e.getX(), e.getY()) # if obj is not None: letters = shuffleword[1:7] # Only shuffle after first letter letters = [char for char in letters] # Break shuffleword into list random.shuffle(letters) letters = "".join(letters) # Create new shuffled string for i in range(6): # Add new cells and letters cell = createHexagon(HEX_SIDE) cell.setFilled(True) cell.setColor(OUTER_HEX_COLOR) cell.movePolar(HEX_SEP, 30 + 60 * i) beehive.add(cell) letter = GLabel(letters[i]) letter.setFont(LABEL_FONT) beehive.add(letter, cell.getX() - letter.getWidth() / 2, cell.getY() + HEX_LABEL_DY)
class MenuBar(GCompound): def __init__(self): GCompound.__init__(self) bar = GRect(GWINDOW_WIDTH, MENU_BAR_HEIGHT) bar.setFilled(True) bar.setColor(CELL_BORDER_COLOR) bar.setFillColor(MENU_BAR_BGCOLOR) self.add(bar, 0, 0) self.label = GLabel("Y O U D O K U") self.label.setFont(MENU_TITLE_FONT) self.label.setColor(MENU_TITLE_COLOR) self.add(self.label, GWINDOW_WIDTH//2 - self.label.getWidth()//2, MENU_BAR_HEIGHT//2 + self.label.getAscent()//2 - 5) def mousedown(self, x, y): pass def mouseup(self, x, y): pass
def __init__(self, node): GCompound.__init__(self) self._node = node frame = GRect(ArpanetMonitor.WIDTH, ArpanetMonitor.MAX_NODES * ArpanetMonitor.VSPACE) self.add(frame, 0, ArpanetMonitor.VSPACE) label = GLabel(node.getName()) label.setFont(ArpanetMonitor.FONT) x = ArpanetMonitor.MARGIN y = label.getAscent() self.add(label, x, y) self._label = label self._lines = [] for i in range(ArpanetMonitor.MAX_NODES): y += ArpanetMonitor.VSPACE label = GLabel("") label.setFont(ArpanetMonitor.FONT) self.add(label, x, y) self._lines.append(label) self.update()
def __init__(self, rotor): ''' The constructor initalizes the selector in the standard setting in the three rotor model. ''' GCompound.__init__(self) self.offset = rotor self.rotor = rotor button = createFilledRect(-SELECTOR_WIDTH / 2, -SELECTOR_HEIGHT / 2, SELECTOR_WIDTH, SELECTOR_HEIGHT, fill=SELECTOR_BGCOLOR, border=SELECTOR_COLOR) button.setLineWidth(3) setting = GLabel(str(self.offset)) setting.setFont(SELECTOR_FONT) setting.setColor(SELECTOR_COLOR) self.setting = setting self.add(button) self.add(setting, -setting.getWidth() / 2, SELECTOR_LABEL_DY)
class EnigmaRotor(GCompound): def __init__(self, letter, perm, inverse): GCompound.__init__(self) rotor = GRect(ROTOR_WIDTH, ROTOR_HEIGHT) rotor.setColor(ROTOR_BGCOLOR) rotor.setFilled(True) self.add(rotor, -ROTOR_WIDTH / 2, -ROTOR_HEIGHT / 2) # create design for rotors self.ch = GLabel(letter) self.ch.setColor(ROTOR_COLOR) self.ch.setFont(ROTOR_FONT) self.add(self.ch, -self.ch.getWidth() / 2, ROTOR_LABEL_DY) self.perm = perm self.inverse = inverse self.offset = 0 self.rotor = rotor def clickAction(self, enigma): # advance on click action of rotors self.advance() def advance(self): # define advance self.offset += 1 if self.offset == 26: self.offset = 0 r = True # tells that the rotor should carry else: r = False # tells that the rotor should not carry self.ch.setLabel(ALPHABET[self.offset]) return r
def createArpanetGraph(gw): graph = ArpanetGraph(gw) for name, x, y, dx, dy in NODE_TABLE: node = ArpanetNode(name) node.setRoutingTable(RoutingTable(name)) graph.addNode(node) gw.add(node, x, y) label = GLabel(name) label.setFont(LABEL_FONT) gw.add(label, x + dx, y + dy) graph.connect("BBN", "CMU") graph.connect("BBN", "MIT") graph.connect("BBN", "UTAH") graph.connect("CMU", "NRL") graph.connect("CMU", "UTAH") graph.connect("HARV", "MIT") graph.connect("HARV", "NRL") graph.connect("MIT", "HARV") graph.connect("NRL", "RAND") graph.connect("RAND", "UCLA") graph.connect("SRI", "STAN") graph.connect("SRI", "UTAH") graph.connect("STAN", "UCLA") return graph
def createBeehive(puzzle): #This function takes the parameter as string and outputs the beehive angle = 30 figure = GCompound( ) #This will store the whole beehive and is the output of the function in the end figureinside = GCompound( ) #This will store the intermediate values to be put into figure hexagon = createHexagon(HEX_SIDE) hexagon.setFilled(True) hexagon.setColor(CENTER_HEX_COLOR) figureinside.add(hexagon) labelinside = GLabel(puzzle[0]) labelinside.setFont(LABEL_FONT) figureinside.add( labelinside, -0.5 * labelinside.getWidth(), HEX_LABEL_DY ) #Using -0.5 times label width tends to center the label more figure.add(figureinside) for i in range(1, 7): figureinside = GCompound() hexagon = createHexagon(HEX_SIDE) hexagon.setFilled(True) hexagon.setColor(OUTER_HEX_COLOR) figureinside.add(hexagon) labelinside = GLabel(puzzle[i]) labelinside.setFont(LABEL_FONT) labelinside.setLocation(-0.5 * labelinside.getWidth(), HEX_LABEL_DY) figureinside.add(labelinside) figureinside.movePolar(HEX_SEP, angle) angle += 60 figure.add(figureinside) return figure
def createBeehive(puzzle): global beehive cell = None puzzle = puzzle.upper() """ Creates a GCompound that contains the objects necessary to display the beehive structure for the Spelling Bee. The puzzle parameter is a seven-letter string that defines the labels on the hexagons. The first letter goes in the center hexagon; each subsequent letter goes in a hexagon whose center is HEX_SEP pixels from the center at angles of 30, 90, 150, 210, 270, and 330 degrees as the letters move counterclockwise around the hexagon. """ beehive = GCompound() # Create GCompund cell = createHexagon(HEX_SIDE) cell.setFilled(True) cell.setColor(CENTER_HEX_COLOR) beehive.add(cell) # Add center cell letter = GLabel(puzzle[0]) letter.setFont(LABEL_FONT) beehive.add(letter, cell.getX() - letter.getWidth() / 2, cell.getY() + HEX_LABEL_DY) # Add center letter for i in range(6): # Add other cells and letters cell = createHexagon(HEX_SIDE) cell.setFilled(True) cell.setColor(OUTER_HEX_COLOR) cell.movePolar(HEX_SEP, 30 + 60 * i) beehive.add(cell) letter = GLabel(puzzle[i + 1]) letter.setFont(LABEL_FONT) beehive.add(letter, cell.getX() - letter.getWidth() / 2, cell.getY() + HEX_LABEL_DY) shuffle = createHexagon(HEX_SIDE) # Create shuffle button shuffle.setFilled(True) shuffle.setColor(CENTER_HEX_COLOR) shuffle.movePolar(HEX_SEP * 1.75, -120) beehive.add(shuffle) letter = GLabel("SHUFFLE") letter.setFont("12px bold 'Helvetica Neue','Sans-Serif'") beehive.add(letter, shuffle.getX() - letter.getWidth() / 2, shuffle.getY() + letter.getAscent() / 2) return beehive # Return completed beehive
def displayWordsList(puzzle): puzzle = puzzle.lower() legalWords = [] # Create blank list of words points = 0 x = WORDLIST_X i = 0 for word in ENGLISH_WORDS: if isLegalEntry(word, puzzle): legalWords.append(word) # Add leagal words to legalWords def isPangram(word): # Check to see if Pangram letters = 0 for ch in puzzle: if ch in word: letters += 1 if letters == len(puzzle): return True else: return False for word in legalWords: points += len(word) - 3 # Number of points per word if isPangram(word): # Make changes if pangram points += 7 line = GLabel(word) line.setColor(PANGRAM_COLOR) line.setFont(WORDLIST_FONT) else: line = GLabel(word) line.setFont(WORDLIST_FONT) y = WORDLIST_Y + WORDLIST_DY * i gw.add(line, x, y) # Add words to window i += 1 if y >= GWINDOW_HEIGHT - (SCORE_BASELINE + SCORE_WORDLIST_SEP + line.getAscent()): x += WORDLIST_DX i = 0 score = GLabel( str(len(legalWords)) + " words; " + str(points) + " points") # Add score to window score.setFont(WORDLIST_FONT) gw.add(score, WORDLIST_X, GWINDOW_HEIGHT - SCORE_BASELINE)
def createCenteredLabel(text, x, y, font=None): label = GLabel(text) if font is not None: label.setFont(font) label.setLocation(x - label.getWidth() / 2, y + label.getAscent() / 2) return label