我正在尝试对具有红色圆圈的游戏进行编码,其中用户应该在窗口中最多点击7次。如果用户点击圈子外部,圈子会将其位置更改为用户点击的位置。当用户在圈内单击3次(不必连续)或用户总共点击7次时,游戏应该结束。 我编写并完成了大部分工作,我认为,它只是让我无法按照我想要的那样工作。
from graphics import *
def draw_circle(win, c=None):
x = random.randint(0,500)
y = random.randint(0,500)
if var is None:
centa = Point(x,y)
var = Circle(centa,50)
var.setFill(color_rgb(200,0,0))
var.draw(win)
else:
p1 = c.p1
x_dif = (p1.x - x) * -1
y_dif = (p1.y - y) * -1
var.move(x_dif, y_dif)
return (var, x, y)
def main():
win= GraphWin("game",800,800)
score = 0
var,x,y = draw_circle(win)
while score <= 7:
mouseClick2=win.getMouse()
if mouseClick2.y >= y-50 and mouseClick2.y <= y +50 and
mouseClick2.x >= x-50 and mouseClick2.x <= x+50:
score=score + random.randint(0,5)
var,x,y = draw_circle(win, c)
print ("Success!")
print (("the score is, {0}").format(score))
感谢您的帮助!
答案 0 :(得分:0)
我不是一个真正的蟒蛇人,但我看到你的hitbox是错误的。如果还有其他问题,请将其评论给我。
将hitbox解为圆圈
你已经写好了有东西但是你应该检查点击是否在圆形而不是方形。毕达哥拉斯三角形就是解决这个问题的方法。 检查:
if (math.sqrt(delta_x **2 + delta_y **2) <= circle_radius)
其中delta_x和delta_y是中心坐标减去鼠标位置
答案 1 :(得分:0)
我看到了几个问题。
if mouseClick2.y >= y-50...
条件分布在两行,但您没有行继续符。main()
。random
。draw_circle
参数调用while
循环中的c
,但全局范围内没有该名称的变量。你可能打算传入var
。c
中的draw_circle
表面上是指您想要操纵的圆形对象,但有一半时间是您操纵var
而不是c
。cvar
分配值,但从不使用它。else
中的draw_circle
块通过从c.p1中减去光标坐标来计算移动增量。但是c.p1是圆圈的左上角,而不是圆圈的中心。所以你的命中检测是50像素。
import random
from graphics import *
def draw_circle(win, c=None):
x = random.randint(0,500)
y = random.randint(0,500)
if c is None:
centa = Point(x,y)
c = Circle(centa,50)
c.setFill(color_rgb(200,0,0))
c.draw(win)
else:
center_x = c.p1.x + 50
center_y = c.p1.y + 50
x_dif = (center_x - x) * -1
y_dif = (center_y - y) * -1
c.move(x_dif, y_dif)
return (c, x, y)
def main():
win= GraphWin("game",800,800)
score = 0
var,x,y = draw_circle(win)
while score <= 7:
mouseClick2=win.getMouse()
if mouseClick2.y >= y-50 and mouseClick2.y <= y +50 and \
mouseClick2.x >= x-50 and mouseClick2.x <= x+50:
score=score + random.randint(0,5)
var,x,y = draw_circle(win, var)
print ("Success!")
print (("the score is, {0}").format(score))
main()
其他可能的改进:
var
和c
可以拥有更多描述性名称。mouseClick2
作为名称没有多大意义,因为没有mouseClick1
。 (a-b) * -1
与(b-a)
相同。+=
来增加分数,从而节省五个字符。
import math
import random
from graphics import *
RADIUS = 50
def draw_circle(win, circle=None):
x = random.randint(0,500)
y = random.randint(0,500)
if circle is None:
circle = Circle(Point(x,y),RADIUS)
circle.setFill(color_rgb(200,0,0))
circle.draw(win)
else:
circle.move(
x - circle.p1.x - RADIUS,
y - circle.p1.y - RADIUS
)
return (circle, x, y)
def main():
win= GraphWin("game",800,800)
score = 0
circle,x,y = draw_circle(win)
while score <= 7:
cursor = win.getMouse()
if math.hypot(cursor.x - x, cursor.y - y) <= RADIUS:
score += random.randint(0,5)
circle,x,y = draw_circle(win, circle)
print ("Success!")
print (("the score is, {0}").format(score))
main()