【问题标题】:Dice Roll in Python GUIPython GUI 中的掷骰子
【发布时间】:2013-03-17 02:26:05
【问题描述】:

我正在尝试弄清楚如何使用randint 函数在 Python GUI 中掷骰子。

我想用鼠标点击两次来为randint 的掷骰子生成两个数字,然后再点击两次来改变骰子以显示这些数字。

我已经显示了骰子和所有内容,但我不确定如何在此项目的窗口中使用与骰子相关的randintmouseclick 函数。此项目必须使用randintmouseclick。我一直在尝试使用list 随机删除或不删除骰子中的点,但问题是似乎没有使用randint 的有效方法。如有任何建议,我将不胜感激。

from graphics import *

def main():


    #Set interface
    w = GraphWin()
    s1 = Rectangle(Point(70,70), Point(20,20))
    s1.setFill("Green")
    s1.setOutline("Black")
    s1.draw(w)


    s2 = Rectangle(Point(140, 140), Point (90,90))
    s2.setFill("Green")
    s2.setOutline("Black")
    s2.draw(w)

    center = Point(60,60)
    ds1 = Circle(center, 5)
    ds1.setFill("Red")
    ds1.draw(w)

    center2 = Point(45,60)
    ds2 = Circle(center2, 5)
    ds2.setFill("Red")
    ds2.draw(w)

    center3 = Point(30,60)
    ds3 = Circle(center3, 5)
    ds3.setFill("Red")
    ds3.draw(w)

    center4 = Point(30,30)
    ds4 = Circle(center4, 5)
    ds4.setFill("Red")
    ds4.draw(w)

    center5 = Point(45,30)
    ds5 = Circle(center5, 5)
    ds5.setFill("Red")
    ds5.draw(w)

    center6 = Point(60,30)
    ds6 = Circle(center6, 5)
    ds6.setFill("Red")
    ds6.draw(w)

    center7 = Point(130,130)
    ds7 = Circle(center7, 5)
    ds7.setFill("Red")
    ds7.draw(w)

    center8 = Point(130,115)
    ds8 = Circle(center8, 5)
    ds8.setFill("Red")
    ds8.draw(w)

    center9 = Point(130,100)
    ds9 = Circle(center9, 5)
    ds9.setFill("Red")
    ds9.draw(w)

    center10 = Point(100,100)
    ds10 = Circle(center10, 5)
    ds10.setFill("Red")
    ds10.draw(w)

    center11 = Point(100,115)
    ds11 = Circle(center11, 5)
    ds11.setFill("Red")
    ds11.draw(w)

    center12 = Point(100,130)
    ds12 = Circle(center12, 5)
    ds12.setFill("Red")
    ds12.draw(w)

    #Display message
    m = Text(Point(1,3), ("Click to roll dice: "))
    m.draw(w)

Lab4.py

from graphics import *
from random import*
def main():
    print ("This program rolls dice using randint")

    w = GraphWin()
    s1 = Rectangle(Point(70,70), Point(20,20))
    s1.setFill("Green")
    s1.setOutline("Black")
    s1.draw(w)

    s2 = Rectangle(Point(140, 140), Point (90,90))
    s2.setFill("Green")
    s2.setOutline("Black")
    s2.draw(w)

    #Display message
    m = Text(Point(1,3), ("Click to roll dice: "))
    m.draw(w)

    center = Point(60,60)
    sd1 = Circle(center, 5)
    sd1.setFill("Red")

    center = Point(45,60)
    sd2 = Circle(center, 5)
    sd2.setFill("Red")

    center3 = Point(30,60)
    sd3 = Circle(center3, 5)
    sd3.setFill("Red")

    center4 = Point(30,30)
    sd4 = Circle(center4, 5)
    sd4.setFill("Red")

    center5 = Point(45,30)
    sd5 = Circle(center5, 5)
    sd5.setFill("Red")

    center6 = Point(60,30)
    sd6 = Circle(center6, 5)
    sd6.setFill("Red")

    center7 = Point(130,130)
    sd7 = Circle(center7, 5)
    sd7.setFill("Red")

    center8 = Point(130,115)
    sd8 = Circle(center8, 5)
    sd8.setFill("Red")

    center9 = Point(130,100)
    sd9 = Circle(center9, 5)
    sd9.setFill("Red")

    center10 = Point(100,100)
    sd10 = Circle(center10, 5)
    sd10.setFill("Red")

    center11 = Point(100,115)
    sd11 = Circle(center11, 5)
    sd11.setFill("Red")

    center12 = Point(100,130)
    sd12 = Circle(center12, 5)
    sd12.setFill("Red")

    w.getMouse()
    RN = randint(0,5)
    if RN == 0:
        w.getMouse()
        sd1.draw
    elif RN == 1:
        w.getMouse()
        sd1.draw
        sd2.draw
    elif RN == 2:
        w.getMouse()
        sd1.draw
        sd2.draw
        sd3.draw
    elif RN == 3:
        w.getMouse()
        sd1.draw
        sd2.draw
        sd3.draw
        sd4.draw
    elif RN == 4:
        w.getMouse()
        sd1.draw
        sd2.draw
        sd3.draw
        sd4.draw
        sd5.draw
    elif RN == 5:
        w.getMouse()
        sd1.draw
        sd2.draw
        sd3.draw
        sd4.draw
        sd5.draw
        sd6.draw

        w.getMouse()
        RN = randint(0,5)
        if RN == 0:
                w.getMouse()
                sd7.draw
        elif RN == 1:
                w.getMouse()
                sd7.draw
                sd8.draw
        elif RN == 2:
                w.getMouse()
                sd7.draw
                sd8.draw
                sd9.draw
        elif RN == 3:
                w.getMouse()
                sd7.draw
                sd8.draw
                sd9.draw
                sd10.draw
        elif RN == 4:
                w.getMouse()
                sd7.draw
                sd8.draw
                sd9.draw
                sd10.draw
                sd11.draw
        elif RN == 5:
                w.getMouse()
                sd7.draw
                sd8.draw
                sd9.draw
                sd10.draw
                sd11.draw
                sd12.draw

                #Change message
                m = Text(Point(1,3), ("Click to close program: "))
                m.draw(w)
                w.getMouse()
                w.close()

这就是我最终解决它的方法。

from graphics import *
from random import*
def main():
    print ("This program rolls dice using randint")

    w = GraphWin()
    s1 = Rectangle(Point(70,70), Point(20,20))
    s1.setFill("Green")
    s1.draw(w)

    s2 = Rectangle(Point(140, 140), Point (90,90))
    s2.setFill("Green")
    s2.draw(w)

    #Display message
    m = Text(Point(60,10), ("Click to roll dice: "))
    m.draw(w)
    #Define die faces
    center = Point(60,60)
    sd1 = Circle(center, 5)
    sd1.setFill("Red")

    center = Point(45,60)
    sd2 = Circle(center, 5)
    sd2.setFill("Red")

    center3 = Point(30,60)
    sd3 = Circle(center3, 5)
    sd3.setFill("Red")

    center4 = Point(30,30)
    sd4 = Circle(center4, 5)
    sd4.setFill("Red")

    center5 = Point(45,30)
    sd5 = Circle(center5, 5)
    sd5.setFill("Red")

    center6 = Point(60,30)
    sd6 = Circle(center6, 5)
    sd6.setFill("Red")

    center7 = Point(130,130)
    sd7 = Circle(center7, 5)
    sd7.setFill("Red")

    center8 = Point(130,115)
    sd8 = Circle(center8, 5)
    sd8.setFill("Red")

    center9 = Point(130,100)
    sd9 = Circle(center9, 5)
    sd9.setFill("Red")

    center10 = Point(100,100)
    sd10 = Circle(center10, 5)
    sd10.setFill("Red")

    center11 = Point(100,115)
    sd11 = Circle(center11, 5)
    sd11.setFill("Red")

    center12 = Point(100,130)
    sd12 = Circle(center12, 5)
    sd12.setFill("Red")


    #Set loops for each die
    w.getMouse()
    RN = randint(1,6)
    if RN == 1:
        w.getMouse()
        sd1.draw(w)
    elif RN == 2:
        w.getMouse()
        sd1.draw(w)
        sd2.draw(w)
    elif RN == 3:
        w.getMouse()
        sd1.draw(w)
        sd2.draw(w)
        sd3.draw(w)
    elif RN == 4:
        w.getMouse()
        sd1.draw(w)
        sd2.draw(w)
        sd3.draw(w)
        sd4.draw(w)
    elif RN == 5:
        w.getMouse()
        sd1.draw(w)
        sd2.draw(w)
        sd3.draw(w)
        sd4.draw(w)
        sd5.draw(w)
    elif RN == 6:
        w.getMouse()
        sd1.draw(w)
        sd2.draw(w)
        sd3.draw(w)
        sd4.draw(w)
        sd5.draw(w)
        sd6.draw(w)

    w.getMouse()
    RN2 = randint(1,6)
    if RN2 == 1:
        w.getMouse()
        sd7.draw(w)
    elif RN2 == 2:
        w.getMouse()
        sd7.draw(w)
        sd8.draw(w)
    elif RN2 == 3:
        w.getMouse()
        sd7.draw(w)
        sd8.draw(w)
        sd9.draw(w)
    elif RN2 == 4:
        w.getMouse()
        sd7.draw(w)
        sd8.draw(w)
        sd9.draw(w)
        sd10.draw(w)
    elif RN2 == 5:
        w.getMouse()
        sd7.draw(w)
        sd8.draw(w)
        sd9.draw(w)
        sd10.draw(w)
        sd11.draw(w)
    elif RN2 == 6:
        w.getMouse()
        sd7.draw(w)
        sd8.draw(w)
        sd9.draw(w)
        sd10.draw(w)
        sd11.draw(w)
        sd12.draw(w)

    #Change message
    m.undraw()
    m2 = Text(Point(80,10), ("Click to close program: "))
    m2.draw(w)

    w.getMouse()
    w.close()

main()

【问题讨论】:

  • 您能展示一下到目前为止您尝试过的代码吗? (听起来你已经完成了部分工作,它会帮助任何试图回答的人)
  • 为 1、2、3、4、5 和 6 定义骰子面的样子,然后创建一个从 1 到 6 的随机整数并渲染该骰子面。
  • 已添加代码。我觉得我过于复杂了,但正如我所说,我是一个初学者。
  • @Patashu:谢谢。你能提供一个简短的例子来说明这可能是什么样的吗?
  • @Breck ODonnell 有很多方法 - 它可能是一张看起来像脸的图像。它可以是一个点列表(一个点是一个具有 x 和 y 的类),该面上每个点一个点。它可能是一个二维列表,大小为 3*3,每个位置都有 false 和 true,表示那里是否有一个点。等等...选择对您最有意义的形式。

标签: python dice


【解决方案1】:

试试这个方法:

  1. 创建一个包含所有骰子面的列表。
  2. 当有人点击鼠标时,选择一个介于 0 和骰子面数之间的随机整数。
  3. 然后将该数字用作骰子面列表的下标。
  4. 显示骰子面。

既然你问到randint

>>> from random import randint
>>> randint(0,5)
2
>>> randint(0,5)
5
>>> randint(0,5)
1

所以你现在需要的是这个逻辑:

if mouse_click:
   random_number = randint(0,5)
   display_dice_face(dice_faces[random_number])

因为getMouse() 方法将等待鼠标点击,所以这更容易了。

我认为这应该让你开始。

【讨论】:

  • 我尝试了现在在主帖中显示的第二个代码。从理论上讲,它似乎可以工作,但鼠标点击没有做任何事情。我遗漏了什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 2013-01-15
  • 2018-06-30
  • 1970-01-01
相关资源
最近更新 更多