Рубрики
Без рубрики

Игра стратегии Python – возьми последний камень

Напишите веселую стратегическую игру, используя язык программирования Python и в то же время разработайте свои вычислительные мысли.

Автор оригинала: Robin Andrews.

Вот a Веселая игра Отказ Играйте в это сначала с другом, если сможешь. Начните с числа между 10 и 20. Возьмите его в очередь, чтобы вычесть один или два из числа. Игрок забрать последний камень выигрывает. Убедитесь, что вы оба поступите на первом месте.

Далее исследуйте, как это работает, используя фактическую кучу камней/гальки, или если у вас нет, что угодно, где есть несколько идентичных элементов. Я закончил использовать рисовые булавки!

Есть ли выигрышная стратегия? Это зависит от того, кто начинает? Если есть выигрышная стратегия, что это за? Есть ли какие-то ситуации, когда вы не можете выиграть, если ваш оппонент использует определенную стратегию?

Проведите некоторое время, думая об этом и выполняем эксперименты. Может быть, напишите ваши результаты на бумаге и посмотрите, есть ли шаблон.

Это определенно стоит провести некоторое время думать и экспериментировать С этой игрой. Я написал ответ ниже, и вы можете раскрыть его, нажав «Show Solution». Если вы сдаетесь слишком рано, хотя вы отрицаете себе возможность укрепить свои навыки мышления, а также почувствовать удовлетворение, которое приходит, когда вы выясните такие вещи для себя.

Ключ к игре – делимость на 3 Отказ Если количество камней, оставшихся на вашем повороте, является множественным из 3 (I.E, 3, 6, 9 и т. Д.), Вы не можете выиграть, если ваш оппонент правильно воспроизводит. Если количество камней имеет оставшуюся часть 1 при разделении на 3, вы должны взять 1 камень. Если количество камней имеет оставшуюся часть 2, когда делится на 3, вы должны взять 2 камня.

Python Program для последней каменной стратегии игры

Ниже вы найдете списка кода для программы Python, которая имитает играть в эту игру против противника.

При обучении программы с Python или любым другим языком программирования, вы обязательно должны на самом деле Введите примеры кода для себя в большинстве ситуаций. Это обеспечит гораздо более эффективный опыт обучения, чем просто копирование/вставляющий код и запустить его. Для этого есть несколько причин, которые я не буду уходить в настоящее время, но принять мое слово для него и ввести в предоставленный код.

Код может или не может быть немного выше вашего уровня способности полностью понимать. Если это так, вы должны просто ввести его в любом случае. Вы обнаружите, что, по-настоящему, некоторое понимание будет продвигаться в «осмосе», а затем, когда вы запускаете код несколько раз и вернулись, чтобы посмотреть на него, вы, вероятно, найдут его намного больше смысла, чем это сделал, чтобы начать с.

Программа написана с использованием Функции И это программирование, которое вам определенно нужно освоить, если вы намерены всерьез принимать программирование всерьез, так что это хорошее место для дохода на борт. Функции называются довольно повседневным образом, как и переменные в программе (это очень важная привычка попасть в начало – не используйте имена, такие как Num и Val в Например, ваши программы, так как они не предоставляют достаточно информации для всех, кто читает код, включая вас, когда вы вернетесь к нему через некоторое время …)

Вот список кодов Python для последней каменной игры:

"""
Take the Last Stone game.
A simple console game where the player takes turns with the computer to remove 1 or two stones from a pile of stones.
The player to take the last stone wins.
Robin Andrews - https://compucademy.net
"""

import random
import os

START_NUM = 11
LEVEL = 1  # Only 1 and 2 available
if LEVEL not in [1, 2]:
    raise ValueError("That level isn't available. 1 or 2 only.")


def print_title():
    print(r"""
.____                     __      _________ __                        
|    |   _____    _______/  |_   /   _____//  |_  ____   ____   ____  
|    |   \__  \  /  ___/\   __\  \_____  \\   __\/  _ \ /    \_/ __ \ 
|    |___ / __ \_\___ \  |  |    /        \|  | (  <_> )   |  \  ___/ 
|_______ (____  /____  > |__|   /_______  /|__|  \____/|___|  /\___  >
        \/    \/     \/                 \/                  \/     \/ 
    """)


def choose_player():
    if random.randint(0, 1) == 0:
        return "human"
    else:
        return "computer"


def player_turn():
    global current_number
    player_choice = input("Take away 1 or 2 stones? ")
    while player_choice not in ["1", "2"]:
        player_choice = input("Invalid input. Take away 1 or 2 stones? ")
    player_choice = int(player_choice)
    current_number = current_number - player_choice
    print()
    if current_number <= 0:
        print("You win!")


def computer_turn():
    global current_number
    if LEVEL == 1:
        computer_choice = random.randint(1, 2)
    elif LEVEL == 2:
        # Computer cannot win from this position if opponent plays correctly.
        if current_number % 3 == 0:
            computer_choice = 1  # Arbitrary as can't force win. Could be 2 as well.
        elif current_number % 3 == 1:
            # Move 1 stone and make the opponent lose
            computer_choice = 1
        elif current_number % 3 == 2:
            # Move 2 stones and make the opponent lose
            computer_choice = 2
    current_number = current_number - computer_choice
    print(f"Computer turn. The computer chooses {computer_choice}.")
    print()
    if current_number <= 0:
        print("The computer wins!")


def play_again():
    print()
    return input("Would you like to play again (yes or no)? ").lower().startswith("y")


def main():
    global current_number
    lets_play_again = True

    while lets_play_again:
        current_number = START_NUM
        current_player = choose_player()
        print_title()

        while current_number > 0:
            print(f"The current number is {current_number}.")
            print()
            if current_player == "human":
                player_turn()
                current_player = "computer"
            else:
                computer_turn()
                current_player = "human"
        if not play_again():
            lets_play_again = False

    print()
    print("Goodbye!")


if __name__ == "__main__":
    main()

Вот несколько пунктов по поводу кода:

  • Название печатается с использованием Ascii Art – Вы можете нажать на ссылку, чтобы узнать больше.
  • Есть 2 уровня. Уровень 1 использует случайный выбор для определения движения противника, тогда как уровень 2 использует стратегия.
  • Start_num Константа может быть использована для изменения начального количества камней.
  • Существует вложенный пока цикл, чтобы разрешить повторную игру.
  • Не беспокойтесь о глобальный Отказ Это просто делает teake_number Доступно по всей программе. Контекст это все: Глобальные переменные сломают интернет Отказ

Я надеюсь, что вы нашли это интересным и полезным. Если вы хотите научиться программированию Python от меня, почему бы не связаться, и мы можем обсудить вам потребности в обучении.

Счастливые вычисления!