2013-07-23 4 views
0

Я делаю небольшую игру, где, когда происходят события, прямоугольники генерируются в случайных точках x и y, и у меня возникают некоторые проблемы с реализацией функций. Вот базовый код:Функции случайных чисел Python

xran = random.randint(5, 485) 
yran = random.randint(5, 485) 
xran1 = random.randint(5, 450) 
yran1 = random.randint(5, 400) 

def allRand(): 
    #This REGENERATES those randoms making it 'spawn' in a new location. 
    xran = random.randint(0, 485) 
    yran = random.randint(0, 485) 
    xran1 = random.randint(5, 450) 
    yran1 = random.randint(5, 400) 

char = pygame.draw.rect(screen, black, (x,y,15,15), 0) 
food = pygame.draw.rect(screen, green, (xran,yran,10,10), 0) 
badGuy = pygame.draw.rect(screen, red, (xran1,yran1,50,100), 0) 


if char.colliderect(food): 
    score += 1 
    print "Your score is:",score 
    allRand() 

Вызывает ли функция, которая восстанавливает случайные числа, для любого из вас? Я знаю, что он регенерирует их, потому что я распечатал переменные, по какой-то причине мои исправления не работают.

Примечание: Это просто фрагмент моего кода, который предназначен только для того, чтобы дать представление о том, что я пытаюсь сделать.

Спасибо!

ответ

1

Вам необходимо указать xran и т. Д. С global внутри функции allRand(). В противном случае это просто создает новые переменные внутри области функций, присваивая им случайные значения, а затем отбрасывая их, когда функция возвращается.

+2

Нет, это не так. Если вы не объявляете их global * в функции *, то их назначения в функции создают новые переменные в области функций, которые затеняют глобальные переменные. Испытайте это для себя, чтобы узнать. –

+0

Я чувствую себя действительно глупым, извините. Спасибо за помощь. –

1

Ваш метод allRand() не имеет никакого кода. Вы должны вставлять строки, которые хотите в эту функцию.

Это своего рода работа, потому что вы все еще называете эти утверждения ниже своего определения. Но это не потому, что вы вызываете функцию.

+0

Это ошибка форматирования stackoverflow. Не мой код. –

1

Чтобы добавить к ответу Ли Дэниела Кроккера, когда вы создаете переменные в функции, они существуют только в этой функции. Если вы хотите, чтобы существовать вне вы можете сделать их глобальные переменные, как он предложил, вы можете вернуть их и поймать их:

>>> def square(number): 
    squared = number*number 
    return squared 

>>> square(3) 
9 
>>> ninesquared = square(3) 
>>> ninesquared 
9 
>>> 

Read more

Похоже, что вам нужно освоить свои основы. Я предлагаю сделать это сначала, прежде чем пытаться в pygame.

EDIT:

Если определить переменные вне функции, они не будут производить какие-либо переменные, которые определяют в функции либо.

>>> x = 5 
>>> def rais(): 
    x = 10 


>>> x 
5 
>>> rais() 
>>> x 
5 
>>> 

Отметьте как rais ничего не сделал? Если мы изменим строку в rais на x = x + 1, тогда python вернет нам ошибку, которая не определена.

Если вы хотите, чтобы переменные вошли в функцию, вам необходимо передать их в качестве параметров, но еще раз они ничего не будут влиять вне функции, если вы не вернетесь и не захватите их. И еще раз, вы можете объявить их глобальными переменными, и это также сработает.

+0

Я отредактировал свой ответ. –

Смежные вопросы