2017-11-11 198 views
0

我对python语言和编程一般都很陌生,对我一无所知。我创建了一个随机行走场景,它在随机方向上进行一次特定次数的步骤。我遇到的一件事情是,有时它会离开我设置的图形窗口,我不能再看到它在哪里。 下面是代码:如何保持走出图形窗口的随机行走场景

from random import * 
from graphics import * 
from math import * 

def walker(): 
    win = GraphWin('Random Walk', 800, 800) 
    win.setCoords(-50, -50, 50, 50) 
    center = Point(0, 0) 
    x = center.getX() 
    y = center.getY() 

while True: 
    try: 
     steps = int(input('How many steps do you want to take? (Positive integer only) ')) 
     if steps > 0: 
      break 
     else: 
      print('Please enter a positive number') 
    except ValueError: 
     print('ERROR... Try again') 

for i in range(steps): 
    angle = random() * 2 * pi 
    newX = x + cos(angle) 
    newY = y + sin(angle) 
    newpoint = Point(newX, newY).draw(win) 
    Line(Point(x, y), newpoint).draw(win) 
    x = newX 
    y = newY 

walker() 

我的问题是,有没有办法,我可以设置图形窗口的参数,使步行者不能窗外去了?如果它试图,它会转过身来尝试另一个方向?

谢谢!

回答

0

尝试定义x和y的上限和下限。然后用一个while循环继续尝试随机点,直到下一个点处于边界内。

from random import * 
from graphics import * 
from math import * 

def walker(): 
    win = GraphWin('Random Walk', 800, 800) 
    win.setCoords(-50, -50, 50, 50) 
    center = Point(0, 0) 
    x = center.getX() 
    y = center.getY() 

while True: 
    try: 
     steps = int(input('How many steps do you want to take? (Positive integer only) ')) 
     if steps > 0: 
      break 
     else: 
      print('Please enter a positive number') 
    except ValueError: 
     print('ERROR... Try again') 

# set upper and lower bounds for next point 
upper_X_bound = 50.0 
lower_X_bound = -50.0 
upper_Y_bound = 50.0 
lower_Y_bound = -50.0 
for i in range(steps): 
    point_drawn = 0 # initialize point not drawn yet 
    while point_drawn == 0: # do until point is drawn 
     drawpoint = 1 # assume in bounds 
     angle = random() * 2 * pi 
     newX = x + cos(angle) 
     newY = y + sin(angle) 
     if newX > upper_X_bound or newX < lower_X_bound: 
      drawpoint = 0 # do not draw, x out of bounds 
     if newY > upper_Y_bound or newY < lower_Y_bound: 
      drawpoint = 0 # do not draw, y out of bounds 
     if drawpoint == 1: # only draw points that are in bounds 
      newpoint = Point(newX, newY).draw(win) 
      Line(Point(x, y), newpoint).draw(win) 
      x = newX 
      y = newY 
      point_drawn = 1 # set this to exit while loop 

walker()