Как я могу постоянно хранить данные в переменных, зацикливая код, в котором находятся эти переменные? - PullRequest
0 голосов
/ 10 марта 2020

Таким образом, в основном задача, которую я пытаюсь выполнить, - это создать игру connect 4, используя python и текстовое кодирование, чтобы напечатать игровую доску connect 4. В настоящее время я закончил создание доски и позволил игроку вставить жетон (O) в первый ряд игрового поля. Тем не менее, я не могу позволить игроку размещать счетчики в любой из вышеперечисленных строк, поскольку данные «O» хранятся в той переменной, которая должна быть, но затем однажды возвращаются к своей исходной переменной. l oop перезапускается на второй ход. В настоящее время я еще не разработал ни одного противника или игрока 2 для игры, так как эта проблема ставит меня в тупик. Я пробовал разные методы, такие как создание разных циклов, прерывание l oop в определенных областях и некоторые другие методы, которые, как я думал, могли бы решить проблему, но пока ничего не помогло. Вот код, о котором я говорю:

place2 = " "
place3 = " "
place4 = " "
place5 = " "
place6 = " "
place7 = " "
place8 = " "
place9 = " "
place10 = " "
place11 = " "
place12 = " "
place13 = " "
place14 = " "
place15 = " "
place16 = " "
place17 = " "
place18 = " "
place19 = " "
place20 = " "
place21 = " "
place22 = " "
place23 = " "
place24 = " "
place25 = " "
print("This is connect 4. You have to connect 4 tokens on the board before your opponent")
print("""
| {20} | {21} | {22} | {23} | {24} |
|---|---|---|---|---|
| {15} | {16} | {17} | {18} | {19} |
|---|---|---|---|---|
| {10} | {11} | {12} | {13} | {14} |
|---|---|---|---|---|
| {5} | {6} | {7} | {8} | {9} |
|---|---|---|---|---|
| {0} | {1} | {2} | {3} | {4} |
|---|---|---|---|---|
| A | B | C | D | E |
""".format(place1, place2, place3, place4, place5, place6, place7, place8, place9, place10, place11, place12, place13, place14, place15, place16, place17, place18, place19, place20, place21, place22, place23, place24, place25))
while True:
    place = input("Pick a slot to put your token in; A, B, C, D or E:   ")

    if place.casefold() == "a":
        place1 = "O"
    elif place.casefold() == "b":
        place2 = "O"
    elif place.casefold() == "c":
        place3 = "O"
    elif place.casefold() == "d":
        place4 = "O"
    elif place.casefold() == "e":
        place5 = "O"
    else:
        print("That's not an option, select again")

    if place5 == "O":
        place10 = "O"
    elif place10 == "O":
        place15 = "O"
    elif place15 == "O":
        place20 = "O"
    elif place20 == "O":
        place25 == "O"

    print("You placed your token in the " + str(place).upper() + " column")
    print("""
    | {20} | {21} | {22} | {23} | {24} |
    |---|---|---|---|---|
    | {15} | {16} | {17} | {18} | {19} |
    |---|---|---|---|---|
    | {10} | {11} | {12} | {13} | {14} |
    |---|---|---|---|---|
    | {5} | {6} | {7} | {8} | {9} |
    |---|---|---|---|---|
    | {0} | {1} | {2} | {3} | {4} |
    |---|---|---|---|---|
    | A | B | C | D | E |
    """.format(place1, place2, place3, place4, place5, place6, place7, place8, place9, place10, place11, place12, place13, place14, placee15, place16, place17, place18, place19, place20, place21, place22, place23, place24, place25))

Этот код немного грязный, так как это мой первый год, когда я использую кодирование в качестве темы. Я решил сначала проверить код в столбце «e», однако всякий раз, когда игрок вводит «e», код отображает «O» в местах 5 и 10. Я подозреваю, что это может быть связано с тем, что код говорит что если place5 = "O", то place10 также = "O". Есть ли способ постоянно хранить «O» вместо переменных, и есть ли правильный способ сделать так, чтобы, если токен находился в месте ввода, токен был помещен над ним?

1 Ответ

0 голосов
/ 10 марта 2020

Я думаю, что основная причина, по которой ваш код смутил вас, заключается в том, насколько грязным он был. Вы можете упростить его много , используя список для разных мест, а затем распаковать его для функции format с помощью оператора *. Кроме того, вы начали индексировать свои места с 0, что, как правило, хорошая идея, но затем забыли об этом и рассматривали place1 как основу столбца a, даже если это place0.

Я позволил себе также изменить способ размещения выбора пользователя на al oop, что немного яснее и в меньшей степени зависит от определенного размера платы. Это конечный результат, который работает - дайте мне знать, если вы что-то не понимаете:

places = [" "] * 25
print("This is connect 4. You have to connect 4 tokens on the board before your opponent")

while True:
    print("""
| {20} | {21} | {22} | {23} | {24} |
|---|---|---|---|---|
| {15} | {16} | {17} | {18} | {19} |
|---|---|---|---|---|
| {10} | {11} | {12} | {13} | {14} |
|---|---|---|---|---|
| {5} | {6} | {7} | {8} | {9} |
|---|---|---|---|---|
| {0} | {1} | {2} | {3} | {4} |
|---|---|---|---|---|
| A | B | C | D | E |
""".format(*places))  # Unpack 'places' list to match format

    place = input("Pick a slot to put your token in; A, B, C, D or E:   ")
    base = ord(place.lower()) - ord("a")  # Get index of lowest place in input letter's column

    for i in range(base, len(places), 5):
        if places[i] == " ":  # Is empty
            places[i] = "O"
            break
    else:  # No break, loop ended naturally
        print("That's not an option, select again")
        continue  # Don't show 'token placed' message

    print("You placed your token in the " + str(place).upper() + " column")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...