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
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)
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 create_object(): """ Creates the original DVD Logo. Code from here will be moved into the new class that you are creating. """ width = 200 height = 200 obj = GCompound() cube = GRect(0, 0, width, height) cube.set_filled(True) cube.set_color(random_color()) obj.add(cube) dvdtext = GLabel("DVD") dvdtext.set_font("bold 60px 'serif'") obj.add(dvdtext, width / 2 - dvdtext.get_width() / 2, height / 2 - 10) vidtext = GLabel("video") vidtext.set_font("bold 50px 'serif'") vidtext.set_color("white") obj.add(vidtext, width / 2 - vidtext.get_width() / 2, height / 2 + vidtext.get_ascent()) return obj
def render_label(self): if self.label is not None: self.remove(self.label) if self.digit is not None and self.digit != "0": self.label = GLabel(self.digit) else: self.label = GLabel("") self.label.setFont(CELL_FONT) if self.only_a_suggestion: self.label.setColor(SUGGESTION_TEXT_COLOR) else: self.label.setColor(CELL_TEXT_COLOR) self.add(self.label, CELL_WIDTH//2 - self.label.getWidth()//2, CELL_WIDTH//2 + self.label.getAscent()//2 - 7)
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 createCardTotalLabels(): alphabet = ['02','03','04','05','06','07','08','09','10', '11','12','13','14','15','16','17','18','19', '20','21'] alphabetLabels = [GLabel(letter) for letter in alphabet] for label in alphabetLabels: label.setFont(LETTER_FONT) return alphabetLabels
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 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 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 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 __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 __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 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 __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 __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 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 __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, 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 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 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)
def __init__(self, text, fn=None): GCompound.__init__(self) label = GLabel(text) label.set_font(self.BUTTON_FONT) width = max(self.BUTTON_MIN_WIDTH, 2 * self.BUTTON_MARGIN + label.get_width()) frame = GRect(width, self.BUTTON_DEFAULT_HEIGHT) frame.set_filled(True) frame.set_fill_color("White") self.add(frame) self.add(label) self.text = text self.label = label self.frame = frame self.fn = fn self._recenter()
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 estimate_pi(tries): """ Uses random dart throws at a circular target to approximate the value of pi. As the number of throws gets large, pi should be approximately 4 times the fraction of throws that hit the circle. """ def take_shot(): """ Simulates a random "throw" toward the target, and draws a circle of the correct color depending on if the throw struck the target or not. """ x = random.random() * size y = random.random() * size is_hit = (x - radius)**2 + (y - radius)**2 < radius if is_hit: color = "red" n_hits += 1 else: color = "black" gw.add(create_filled_circle(x, y, 1, color)) size = 500 radius = size / 2 # Creates the window and adds the circular target gw = GWindow(size, size) gw.add(create_filled_circle(radius, radius, radius, "blue")) # Simulate tries number of throws num_hits = 0 for i in range(tries): take_shot() # Compute pi pi = num_hits / tries * 4 # Display the rounded value of pi centered pretty in window lab = GLabel(str(round(pi, 2))) lab.set_font("bold 100px 'serif'") lab.set_color("white") x = size / 2 - lab.get_width() / 2 y = size / 2 - lab.get_ascent() / 2 gw.add(lab, x, y)
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, 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 __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)