Помогите с игрой кости

adilamir

Новичок
Пользователь
Апр 28, 2020
11
0
1
Здравствуйте. Как сделать, чтобы один игрок выиграл, когда соберет 100 очков за несколько бросков?
Python:
import random
class Kubiki:
    def __init__(a):
        pass
    def player_name(a):
       a.n1 = input("Имя первого игрока: ")
       a.n2 = input("Имя второго игрока: ")
       return a.n1, a.n2
    def dice(a, sides=6):
       return random.randint(1, sides)
    def rolling_dices(a):
       a.roll_dice = a.dice()
       if a.roll_dice == 1:
          print("Выпали кости номиналом в один ")
       if a.roll_dice == 2:
          print("Выпали кости номиналом в два ")
       if a.roll_dice == 3:
          print("Выпали кости номиналом в три ")
       if a.roll_dice == 4:
          print("Выпали кости номиналом в четыре ")
       if a.roll_dice == 5:
          print("Выпали кости номиналом в пять")
       if a.roll_dice == 6:
          print("Выпали кости номиналом в шесть")
       a.roll_dice2 = a.dice()
       if a.roll_dice2 == 1:
          print("и один")
       if a.roll_dice2 == 2:
          print("и два")
       if a.roll_dice2 == 3:
          print("и три")
       if a.roll_dice2 == 4:
          print("и четыре")
       if a.roll_dice2 == 5:
          print("и пять")
       if a.roll_dice2 == 6:
          print("и шесть")
       return a.roll_dice, a.roll_dice2
    def results(a):
       print("Игроку", a.n1, a.roll_dice, a.roll_dice2)
    def results2(a):
       print("Игроку", a.n2, a.roll_dice, a.roll_dice2)
def main():
   game = Kubiki()
   game.player_name()
   game.rolling_dices()
   game.results()
   game.rolling_dices()
   game.results2()
if __name__ == '__main__':
    main()
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Вот вариант для нескольких игроков:
Python:
import random


class Player:
    def __init__(self):
        self.name = input('Введите имя игрока: ')
        self.dice = {1: 'один', 2: 'два', 3: 'три', 4: 'четыре', 5: 'пять', 6: 'шесть'}
        self.score = 0

    def roll_dice(self):
        roll = random.randint(1, 6)
        self.score += roll
        print(f'{self.name} выкинул: {self.dice[roll]} (Сумма: {self.score})')


print("Игра 'Кости'")
print('-' * 30)
players = [Player(), Player(), Player()]
print('-' * 30)

while True:
    for player in players:
        player.roll_dice()

    winners = [i for i, item in enumerate(players) if item.score >= 100]
    print('-' * 30)

    if len(winners) == 1:
        print(f'Победил {players[winners[0]].name}.')
        break
    elif len(winners) > 1:
        print('Ничья')
        break
 
  • Мне нравится
Реакции: adilamir и Vlad_SD

God

Уже не совсем ламер.
Пользователь
Апр 11, 2020
91
15
8
Сделайте проверку его очков после каждого хода, в чём проблема?
 

Vlad_SD

Активный пользователь
Пользователь
Апр 7, 2020
91
45
18
Вот вариант решения задачи, написал немного по-другому, но принцип тот же.

Python:
import random


class Kubiki(object):

    def __init__(self):
        self.name_1 = 'Игрок1'  # input('enter player_1')
        self.name_2 = 'Игрок2'  # input('enter player_2')
        # создаем два списка, где будем хранить  сумму выпавших значений для каждого игрока
        self.empty_list_1 = []
        self.empty_list_2 = []
        self.dictionary = {1: 'один', 2: 'два', 3: 'три', 4: 'четыре', 5: 'пять', 6: 'шесть'}

    def score_list_player_1(self, rand_val_1, rand_val_2):
        """Функция считает результаты рандомных бросков"""
        self.empty_list_1.append(rand_val_1 + rand_val_2)
        print(f'Рузальтаты кубика --> {self.dictionary.get(rand_val_1)} и {self.dictionary.get(rand_val_2)}')
        print(f'Счёт {self.name_1} составляет {sum(self.empty_list_1)}')
        # если сумма после добавления новых двух кубиков превысила 100, то печатаем сообщение об этом
        # return чтобы остановить цикл в main()
        if sum(self.empty_list_1) >= 100:
            res_1 = f'Игрок {self.name_1} победил с итоговым счётом {sum(self.empty_list_1)}!'
            return res_1

    def score_list_player_2(self, rand_val_1, rand_val_2):
        """Функция считает результаты рандомных бросков"""
        self.empty_list_2.append(rand_val_1 + rand_val_2)
        print(f'Рузальтаты кубика --> {self.dictionary.get(rand_val_1)} и {self.dictionary.get(rand_val_2)}')
        print(f'Счёт {self.name_2} составляет {sum(self.empty_list_2)}')
        # если сумма после добавления новых двух кубиков превысила 100, то печатаем сообщение об этом
        # return чтобы остановить цикл в main()
        if sum(self.empty_list_2) >= 100:
            res_2 = f'Игрок {self.name_2} победил с итоговым счётом {sum(self.empty_list_2)}!'
            return res_2


def main():
    # инициализировать имена нам нужно только один раз, поэтому выносим за цикл создание экземпляра
    game = Kubiki()
    while True:
        # предаёт 4 разных значений 2 для игрока1 и 2 для игрока2
        roll_1, roll_2 = random.randint(1, 6), random.randint(1, 6)
        roll_3, roll_4 = random.randint(1, 6), random.randint(1, 6)
        player_1 = game.score_list_player_1(roll_1, roll_2)
        player_2 = game.score_list_player_2(roll_3, roll_4)
        # если есть return от  обех функций, то ничья, так как оба игрока должны сделать равное число бросков
        if player_1 and player_2:
            print('Ничья, счёт обоих равен или больше 100')
            break
            # если есть return от одной из функций, то печается return (res1 / res2)
        elif player_1 or player_2:
            # выбираем, что печатать, если пришло от score_list_player_1, то res1
            # если присло от score_list_player_2, то res2
            message = player_1 if player_1 else player_2
            print(message)

            break


if __name__ == '__main__':
    main()
 
Последнее редактирование:
  • Мне нравится
Реакции: adilamir

adilamir

Новичок
Пользователь
Апр 28, 2020
11
0
1
Вот вариант решения задачи, написал немного по-другому, но принцип тот же.

Python:
import random


class Kubiki(object):

    def __init__(self):
        self.name_1 = 'Игрок1'  # input('enter player_1')
        self.name_2 = 'Игрок2'  # input('enter player_2')
        # создаем два списка, где будем хранить  сумму выпавших значений для каждого игрока
        self.empty_list_1 = []
        self.empty_list_2 = []
        self.dictionary = {1: 'один', 2: 'два', 3: 'три', 4: 'четыре', 5: 'пять', 6: 'шесть'}

    def score_list_player_1(self, rand_val_1, rand_val_2):
        """Функция считает результаты рандомных бросков"""
        self.empty_list_1.append(rand_val_1 + rand_val_2)
        print(f'Рузальтаты кубика --> {self.dictionary.get(rand_val_1)} и {self.dictionary.get(rand_val_2)}')
        print(f'Счёт {self.name_1} составляет {sum(self.empty_list_1)}')
        # если сумма после добавления новых двух кубиков превысила 100, то печатаем сообщение об этом
        # return чтобы остановить цикл в main()
        if sum(self.empty_list_1) >= 100:
            res_1 = f'Игрок {self.name_1} победил с итоговым счётом {sum(self.empty_list_1)}!'
            return res_1

    def score_list_player_2(self, rand_val_1, rand_val_2):
        """Функция считает результаты рандомных бросков"""
        self.empty_list_2.append(rand_val_1 + rand_val_2)
        print(f'Рузальтаты кубика --> {self.dictionary.get(rand_val_1)} и {self.dictionary.get(rand_val_2)}')
        print(f'Счёт {self.name_2} составляет {sum(self.empty_list_2)}')
        # если сумма после добавления новых двух кубиков превысила 100, то печатаем сообщение об этом
        # return чтобы остановить цикл в main()
        if sum(self.empty_list_2) >= 100:
            res_2 = f'Игрок {self.name_2} победил с итоговым счётом {sum(self.empty_list_2)}!'
            return res_2


def main():
    # инициализировать имена нам нужно только один раз, поэтому выносим за цикл создание экземпляра
    game = Kubiki()
    while True:
        # предаёт 4 разных значений 2 для игрока1 и 2 для игрока2
        roll_1, roll_2 = random.randint(1, 6), random.randint(1, 6)
        roll_3, roll_4 = random.randint(1, 6), random.randint(1, 6)
        player_1 = game.score_list_player_1(roll_1, roll_2)
        player_2 = game.score_list_player_2(roll_3, roll_4)
        # если есть return от  обех функций, то ничья, так как оба игрока должны сделать равное число бросков
        if player_1 and player_2:
            print('Ничья, счёт обоих равен или больше 100')
            break
            # если есть return от одной из функций, то печается return (res1 / res2)
        elif player_1 or player_2:
            # выбираем, что печатать, если пришло от score_list_player_1, то res1
            # если присло от score_list_player_2, то res2
            message = player_1 if player_1 else player_2
            print(message)

            break


if __name__ == '__main__':
    main()
Спасибо большое
 

Форум IT Специалистов