Первый python проект: Boggle - PullRequest
       2

Первый python проект: Boggle

0 голосов
/ 08 апреля 2020

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

def valid_direction(x1, y1, x2, y2):        

    dy = y2 - y1     
    dx = x2 - x1    
    if dx == 0:
        return dy != 0
    elif dy == 0:
        return dx != 0
    else:
        return abs(dx) == abs(dy)

Я также хочу разрешить пользователю вводить координаты, относящиеся к букве с 16-буквенной квадратной доски. В оболочке это выглядит так:

|w||e||b||e|    
|r||t||o||l|    
|e||t||a||e|    
|i||p||a||a|    
Enter coordinate: 

Введенные координаты сохраняются в path = [], для которого я уже написал функцию. Моя цель - заставить эту функцию работать так, чтобы пользователю предлагалось несколько раз, пока он не закончил вводить фактическое слово. Вот функция

def validate_path(path):    

    word = word_from_path(path, board)    
    if valid_word(word):
        # is it value = value from while loop and the rest?
        value = word_value(word)
        print("Value of {} is {}".format(word, value))
        score += value
    else:
        print("Invalid word")

    return validate_path(path)

И часть l oop для игры

while game:

       curr_input = input("Enter coordinate: ")
    if curr_input == "quit":
        print("Your total score is:", score)   
        game = False
    elif curr_input == "done":
         validate_path(path)  

Большое спасибо всем, кто тратит время на чтение всего этого!

1 Ответ

0 голосов
/ 08 апреля 2020

Функция valid_direction сохраняет delta-y (изменение координаты y) в dy и delta-x в dx. Затем последующие операторы if имеют следующие логики c:

  1. Если координата y не изменилась (dy == 0), то если dx == 0, вернуть 0, поскольку координаты являются одинаковыми, и это неверный ход, в противном случае верните 1.
  2. Если координата x не изменилась (dx == 0), сделайте то же самое, что и в 1., за исключением случаев, когда y и x обращены.
  3. Если координаты x и y изменились (dy != 0 and dx != 0), проверьте, не изменились ли они обе на одну и ту же абсолютную величину. Если так, то это диагональное движение на эту абсолютную величину, и оно возвращает 1, в противном случае возвращается 0.

Я не уверен, что это то, что вы хотите для Boggle, хотя, так как я думаю, что вы хотите строго смежные ходы (или перемещение в диагональное пространство), проверить правильность перемещения между двумя точками будет:

def valid_direction(x1, y1, x2, y2):        

    dy = y2 - y1     
    dx = x2 - x1
    if dx == 0:
        return abs(dy) == 1
    elif dy == 0:
        return abs(dx) == 1
    else:
        return abs(dx) == abs(dy) == 1

, который проверяет, отличаются ли координаты последующих ходов точно один. Или, более кратко говоря:

def valid_direction(x1, y1, x2, y2):        

    dy = y2 - y1     
    dx = x2 - x1
    if not dy and not dx:
        return 0
    return abs(dx) <= 1 and abs(dy) <= 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...