【发布时间】:2013-03-17 02:26:05
【问题描述】:
我正在尝试弄清楚如何使用randint 函数在 Python GUI 中掷骰子。
我想用鼠标点击两次来为randint 的掷骰子生成两个数字,然后再点击两次来改变骰子以显示这些数字。
我已经显示了骰子和所有内容,但我不确定如何在此项目的窗口中使用与骰子相关的randint 和mouseclick 函数。此项目必须使用randint 和mouseclick。我一直在尝试使用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,表示那里是否有一个点。等等...选择对您最有意义的形式。