1

该程序模拟(使用 Zelle 图形)Monty Hall 刺激。我相当新,尤其是图形。

Monty Hall 的问题来自于Monty Hall 主持的“Let's Make a Deal”电视游戏节目。节目结束时,一位幸运的参赛者有机会赢得像汽车一样的大奖。他们被带到三扇紧闭的门前。两扇门后面是一个“zonk”——一个像山羊一样没人想要的奖品。剩下的门藏着一辆车。参赛者选择了一扇门。然后,蒙蒂霍尔会打开一扇参赛者没有选择的门,露出一个 zonk。那时,参赛者可以选择坚持他们选择的门或选择剩下的门。

当我运行它时,然后双击中间门,它给了我一个错误并且没有显示 Zonk [一只浣熊 - 没有人想要的奖品]。但是,当我运行时,然后单击门一或运行然后单击在二号门上,错误没有出现,Zonk 显露出来。这些点击控件在函数中处理processingDoor_Clicks()

错误是:_tkinter.TclError: bad screen distance "blue"

是什么导致了这个错误?

from graphics import *
from random import randint

def main():
    print("Monty Hall Game")
    win = GraphWin("Monty Hall Game", 800, 900)
    win.setBackground("purple")
    switch, stay, play, doorOne, doorTwo, doorThree = drawAll(win)
    carSpot, zonkOne, zonkTwo = place_Zonk_Car(win)
    processDoors_clicks(win, carSpot, zonkOne, zonkTwo, doorOne, doorTwo, doorThree)
    #processDoors_clicks(win, carSpot, zonkOne, zonkTwo)


def drawAll(win):
    switch, stay, play = drawButtons(win)
    doorOne, doorTwo, doorThree = drawDoors(win)
    return switch, stay, play, doorOne, doorTwo, doorThree

#keep position of car pass for arg (in a box) // 
#ifs click to see if clicks are in boxes 
#if win.getmouse //getx and gety// for click

def place_Zonk_Car(win):
    carSpot = randint(1,3)

    print(carSpot)

    if carSpot == 1: #left
        drawCar = Image(Point(150, 375), 'prize2.png')
        draw_zonkOne = Image(Point(400, 375), 'box_of_possums.gif') #from draw photo 2
        draw_zonkTwo = Image(Point(650, 375), 'door3.png') #from draw photo 3

        print("behind foor one")
    elif carSpot == 2: #middle
        drawCar = Image(Point(400, 375), 'prize2.png')
        draw_zonkOne = Image(Point(150, 375), 'box_of_possums.gif') #drawn from 1
        draw_zonkTwo = Image(Point(650, 375), 'box_of_possums.gif') #drawn from 3

        print("behind door two")
    elif carSpot == 3: #right
        drawCar = Image(Point(650, 375), 'prize2.png')
        draw_zonkOne = Image(Point(150, 375), 'box_of_possums.gif') #left from 1
        draw_zonkTwo = Image(Point(400, 375), 'box_of_possums.gif')#drawn from 2

        print("behind door three")
    #drawCar.draw(win)
    #draw_zonkOne.draw(win)
    #draw_zonkTwo.draw(win)
    return drawCar, draw_zonkOne, draw_zonkTwo #store to draw later, but reveal one earlier on



def drawButtons(win):
    switchOption = Rectangle(Point(50, 500), Point(250, 550))
    switchOption.draw(win)
    switchOption.setFill('white')
    switchText  = Text(Point(150, 525), "switch")
    switchText.draw(win)

    stayOption = Rectangle(Point(300, 500), Point(500, 550))
    stayOption.draw(win)
    stayOption.setFill('white')
    stayText  = Text(Point(400, 525), "stay")
    stayText.draw(win)

    playOption = Rectangle(Point(550, 500), Point(750, 550))
    playOption.draw(win)
    playOption.setFill('white')
    playText  = Text(Point(650, 525), "play again")
    playText.draw(win)

    return switchOption, stayOption, playOption

def drawDoors(win):
    presentText = Text(Point(400, 200), "Click a Door")
    presentText.draw(win)

    doorOne = Rectangle(Point(50, 300), Point(250, 450))
    doorOne.draw(win)
    doorOne.setFill('white')
    doorPhotoOne = Image(Point(150, 375), 'door1.png')
    doorPhotoOne.draw(win)

    doorTwo = Rectangle(Point(300, 300), Point(500, 450))
    doorTwo.draw(win)
    doorTwo.setFill('white')
    doorPhotoTwo = Image(Point(400, 375), 'door2.png')
    doorPhotoTwo.draw(win)

    doorThree = Rectangle(Point(550, 300), Point(750, 450))
    doorThree.draw(win)
    doorThree.setFill('white')
    doorPhotoThree = Image(Point(650, 375), 'door3.png')
    doorPhotoThree.draw(win)

    return doorOne, doorTwo, doorThree


#def montyHallGame(win):

def processDoors_clicks(win, carSpot, zonkOne, zonkTwo, doorOne, doorTwo, doorThree):
    #find clicks
    click_Y_Val = win.getMouse().getY() #user picks doors (x and y) -- monty will later
    click_X_Val = win.getMouse().getX()
    #must be in this

    if (click_X_Val >= 50 and click_X_Val <= 250) and (click_Y_Val >= 300 and click_Y_Val <= 450): # door 1
        doorOne.setOutline("blue")
        doorOne.setWidth(4)
        zonkOne.draw(win)


    elif (click_X_Val >= 300 and click_X_Val <= 500) and (click_Y_Val >= 300 and click_Y_Val <= 450): # door 2
        doorTwo.setWidth("blue")
        doorOne.setWidth(4)
        zonkTwo.draw(win)


    elif (click_X_Val >= 550 and click_X_Val <= 750) and (click_Y_Val >= 300 and click_Y_Val <= 450): # door 3
        doorThree.setOutline("blue")
        doorOne.setWidth(4)
        zonkOne.draw(win)
4

0 回答 0