Программа Python, которая запускает игру в свинью с человеком-игроком и компьютером - PullRequest
0 голосов
/ 04 октября 2018

Итак, в двух словах, кто идет первым, определяется случайным образом.Когда ход игрока появляется, у него / нее есть возможность удерживать или бросать.Если он решает бросить, игра в кости бросается, и значения добавляются (к turn_score) до тех пор, пока не наступит> 20, после чего наступает поворот компьютеров.

Счет хода добавляется к окончательному счету после каждого хода.Если выпадает 1, счет хода становится 0 (финал НЕ меняется).

Любой совет, где я ошибаюсь с этим?

import random
def roll_dice():
    return random.randint(1,6)

players = ['Player One', 'Player Two']
scores = {'Player One': 0, 'Player Two': 0}
random.shuffle(players)

while True:
    for i in players:
        if i == 'Player One':
            choice = input("Roll(r) or Hold(h)?: ")
            turn_score = 0
            final_score = 0
            if (choice=='r'):
                while(turn_score<=20):
                    dice_value = roll_dice()
                    turn_score += dice_value
                    if (dice_value==1):
                        turn_score = 0
                        print("-rolled a ",dice_value)
                        print("Pigged out!")
                        break
                    print("Turn score is: ",turn_score)
                    final_score += turn_score
                    print("Your final score is: ",final_score)
                    if (final_score>100):
                        break
        else:
            turn_score=0
            print("It is " +  str(i) + "'s turn.")
            while(turn_score<20):
                dice_value = roll_dice()
                if (dice_value==1):
                    turn_score = 0
                    scores[i] +=0
                    print("- rolled a ",dice_value)
                    print("Pigged out!")
                    break
                else:
                    turn_score+=dice_value
                    print("-rolled a ",dice_value)
        scores[i] += turn_score
        print("Turn score is: ",turn_score)
        print('{} score: {} {} score: {}'.format(players[0], scores[players[0]], players[1], scores[players[1]]))
        if scores[i]>100:
            break
    if scores[i]>100:
        break

winner = [winner for winner in scores if scores[winner] == max(scores.values())]
print(str(winner) + " is the winner!")`

Вот что я получаю в качестве вывода:

It is Player Twos turn.
-rolled a  3
-rolled a  5
-rolled a  5
-rolled a  5
-rolled a  4
Turn score is:  22
Player Two score: 22 Player One score: 0
Roll(r) or Hold(h)?: h
It is Player Twos turn.
- rolled a  1
Pigged out!
Turn score is:  0
Player Two score: 22 Player One score: 0
Roll(r) or Hold(h)?: r
Turn score is:  3
Your final score is:  3
Turn score is:  5
Your final score is:  8
Turn score is:  9
Your final score is:  17
Turn score is:  13
Your final score is:  30
Turn score is:  16
Your final score is:  46
Turn score is:  19
Your final score is:  65
-rolled a  1
Pigged out!
It is Player Twos turn.
- rolled a  1
Pigged out!
Turn score is:  0
Player Two score: 22 Player One score: 0
Roll(r) or Hold(h)?:

1 Ответ

0 голосов
/ 04 октября 2018

Хорошо, если я не понимаю игру, я думаю, ваша проблема в том, что вы добавляете счет хода к итоговому счету в каждом раунде , вместо того, чтобы добавлять разницу между счетом хода иисходный итоговый счет в каждом раунде (т.е. вы даете игровые очки за предыдущие броски в этом ходу, даже если они бросают 1 в последующем броске).

Вместо:

        turn_score = 0
        final_score = 0
        if (choice=='r'):
            while(turn_score<=20):
                dice_value = roll_dice()
                turn_score += dice_value
                if (dice_value==1):
                    turn_score = 0
                    print("-rolled a ",dice_value)
                    print("Pigged out!")
                    break
                print("Turn score is: ",turn_score)
                final_score += turn_score
                print("Your final score is: ",final_score)
                if (final_score>100):
                    break

Я думаю, что вы хотите:

        turn_score = 0
        final_score = 0
        if (choice=='r'):
            while(turn_score<=20):
                dice_value = roll_dice()
                turn_score += dice_value
                if dice_value == 1:
                    turn_score = 0
                    print("-rolled a ",dice_value)
                    print("Pigged out!")
                    break
                print("Turn score is: ", turn_score)
                print("Your final score is: ", final_score + turn_score)
                if final_score + turn_score > 100:
                    final_score += turn_score
                    break
...