コード例 #1
0
    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
コード例 #2
0
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)
コード例 #3
0
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)
コード例 #4
0
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
コード例 #5
0
 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)
コード例 #6
0
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
コード例 #7
0
 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
コード例 #8
0
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)
コード例 #9
0
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)
コード例 #10
0
        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)
コード例 #11
0
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()
コード例 #12
0
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
コード例 #13
0
ファイル: gtools.py プロジェクト: nickathryne/Enigma
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
コード例 #14
0
 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)
コード例 #15
0
ファイル: arpanet.py プロジェクト: sschlott/Routing
 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()
コード例 #16
0
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
コード例 #17
0
    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)
コード例 #18
0
 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)
コード例 #19
0
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)
コード例 #20
0
 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)
コード例 #21
0
    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)
コード例 #22
0
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
コード例 #23
0
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)
コード例 #24
0
 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()
コード例 #25
0
ファイル: EnigmaReturn.py プロジェクト: nickathryne/Enigma
    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)
コード例 #26
0
ファイル: EnigmaKey.py プロジェクト: nickathryne/Enigma
    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)
コード例 #27
0
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)
コード例 #28
0
 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)
コード例 #29
0
    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
コード例 #30
0
ファイル: EnigmaLamp.py プロジェクト: nickathryne/Enigma
    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)