Как создать список (x, y), в котором изменяется только одна переменная, а другая остается неизменной? - PullRequest
0 голосов
/ 15 декабря 2011
SHIPS = (('AirCraftCarrier', 5), ('Battleship', 4),
         ('Submarine', 3), ('Destroyer', 3), ('PatrolBoat', 2))
position = ('v', 'h')

def setShip(self, board, graphics):
        maxval = board.getSize() - 1
        coords = []
        sizes = [(v) for k, v in SHIPS]
        for i in sizes:
            legal = False
            while not legal:
                pos = choice(position)
                if pos == 'v':
                    x = randint(0, maxval-1)
                    y = some kind of code to change y while keeping x same
                if pos == 'h':
                    x = some kind of code to change x while keeping y same 
                    y = randint(0, maxval-1)

                if not board.isOccupied(x, y):
                    legal = True
                    coords.append((pos, x, y))
            #return grid.displayShip(x, y)
            return coords

Теперь, если выбран вариант v=vertical, значения y должны измениться, в то время как значения x остаются прежними. Это заставит мой корабль располагаться вертикально. Я не знаю, как сделать эту работу. Мне нужно, чтобы первое значение было выбрано случайным образом, а затем значения после него, чтобы просто пройти длину корабля, однако последнее значение не может быть больше 9, поскольку моя сетка может идти только до 9.

1 Ответ

0 голосов
/ 17 декабря 2011

Вы должны удалить переменные, которые вы не хотите изменять, из цикла while, который проверяет доступные позиции.Вы можете сделать это несколькими способами.Один из вариантов такой:

def setShip(self, board, graphics):
        maxval = board.getSize() - 1
        coords = []
        sizes = [v for k, v in SHIPS]
        for i in sizes:
            legal = False
            x = randint(0, maxval-1)
            y = randint(0, maxval-1)
            pos = choice(position)
            while not legal:
                if pos == 'v':
                    y = y+1 if y < 9 else 0
                if pos == 'h':
                    x = x+1 if x < 9 else 0
                if not board.isOccupied(x, y):
                    legal = True
                    coords.append((pos, x, y))

            return coords

Обратите внимание, что я также ограничил значение, которое может принять позиция.Если лодка исчезнет с одной стороны, она появится с другой.Проблема с этим кодом состоит в том, что лодка движется всегда в одном направлении (от 0 до> 9).Вы должны изменить это, возможно, чтобы выбрать направление, которое вы хотите.например:

sense = choice([1, -1])

и затем во внутреннем цикле, например:

y = y + sense if y < 9 else 0
...