Я довольно новичок в классах на Python. При кодировании игры с линкором я столкнулся с проблемой выбора случайных координат x, y для местоположения кораблей компьютера и координат атаки компьютера. Я путаюсь, создавать ли случайные числа в качестве локальной переменной в одной из функций или как атрибут класса или атрибут экземпляра.Генератор случайных чисел Battleship Python
Первоначально я думал создать атрибут экземпляра (ниже), но я получил rand_x не определен. Я попытался создать функцию «Броненосец», которая генерировала случайные числа, но каждый раз, когда она была вызвана, она возвращала одну и ту же пару координат. Это единственный способ сделать это для создания локальной переменной для случайных #s? Поскольку я буду использовать случайный генератор более одного раза, было бы неплохо не повторять этот код.
Благодарим за ваше терпение.
EDIT: Я включил больше кода со случайной функцией и заменил size
на случайную функцию с self.size
.
Например, линкор (4,2,0,0) может дать мне hitlist
из [[2,1], [2,1]]. Я хотел бы случайных № внутри hitlist
.
import random
hitlist=[]; #a global variable
class Battleship(object):
""" Ship object container. A game where the user tries to destroy the enemy's ships User tries to guess computer's position x and y """
def __init__(self, size, numberships,position_x,position_y):
self.position_x=position_x
self.position_y=position_y
self.numberships=numberships
self.size = size
def plotships(self,r):
"""input is integer coordinates for ships and output is an array of arrays with battleship locations CREATES THE HITLIST DONT REPEAT"""
print('plotships function running')
for i in range(self.numberships):
hitlist.append(r) #random number from function randomness
print(hitlist)
return hitlist
def randomness(self):
rand_x=random.choice(range(self.size))
rand_y=random.choice(range(self.size))
randcoord=[rand_x,rand_y]
return randcoord
#Game Interface
size=int(input('Gameboard size'))
numberships=int(input('Waiting for Number of enemy ships'))
b=Battleship(size,numberships,0,0)
random=b.randomness() #create a random x y coordinate
b.plotships(random) #create a hitlist
Убедитесь, что вы импортировали ' random'. Попробуйте использовать 'random.randint (0, self.size - (wtv - ваш диапазон x)' и 'random.randint (0, self.size - (wtv - ваш диапазон y)' –
Вам необходимо [изменить] ваш вопрос заключается в том, чтобы включить [mcve]. Поскольку он стоит единственным способом, мы можем сказать, что не так, это угадать, что почти наверняка будет ошибкой. –
@ Imtiaz Raqib Это% 100, переусердящее эту проблему, но вы могли бы использовать более безопасный вызов генератора случайных чисел (IE: 'os.urandom'). Не хотите, чтобы враг предсказывал местоположение вашего флота Admiral @ st4rgut. –