我已经准备了一个与任意数量的玩家一起玩 Housie 的代码。它通知是否有人赢得了比赛,并在有人赢得满堂彩时终止
解决这个问题的方法是这样的;我准备了10个清单。每个列表有 3 个按升序排列的唯一随机数,范围从 10 到 20、20 到 30、...、80 到 90。接下来,我将 5 个随机列表中的第一个数字分配到顶行,第二个另外 5 个随机列表中的数字到中间行,另外 5 个随机列表中的第三个数字到底行。我这样做的目的是不重复数字,确保票的每一行只打印 5 个数字,每列的数字从上到下按升序排列
我在没有要打印的数字的地方使用了空字符串“ ”,并且我使用了星号/星号“ * ”标记告诉玩家他/她已在该票上标记了该数字!
这是一张样票;
<player name>, your ticket is as follows:-
[' ' ' ' ' ' '33' ' ' '54' '66' '72' '83']
[' ' '12' '27' ' ' '45' '57' ' ' ' ' '88']
['8' '19' '29' ' ' '49' ' ' ' ' '75' ' ']
<player name>, do you want to mark?(Type 'Yes' or 'No'):
然后我问玩家是否想标记。然后我确保玩家输入了一个存在于票证中并且也被调用的整数
它看起来像这样(标记后);
The lucky number is 54!
<player name>, your ticket is as follows:-
[' ' ' ' ' ' '33' ' ' '54' '66' '72' '83']
[' ' '12' '27' ' ' '45' '57' ' ' ' ' '88']
['8' '19' '29' ' ' '49' ' ' ' ' '75' ' ']
<player name>, do you want to mark?(Type 'Yes' or 'No'): Yes
<player name>, type the number you want to mark: 54
<player name>, your ticket is as follows:-
[' ' ' ' ' ' '33' ' ' '*54' '66' '72' '83']
[' ' '12' '27' ' ' '45' '57' ' ' ' ' '88']
['8' '19' '29' ' ' '49' ' ' ' ' '75' ' ']
注意整数 54 旁边有一个星号
然后询问用户是否想检查他/她是否赢了!关于获奖者的确认信息如下;
<player name>, do you want to check if you have won?(Type 'Yes' or 'No'): Yes
Sorry <player name>, you have not won!
Jaldi 5 Winner: None
Top row winner: None
Middle row winner: None
Bottom row winner: None
Full house winner: None
我已确保所调用的数字不会重复(主板是一个列表,其数字范围从 1 到 90,每次调用一个数字时,都会从主板中删除 sam 随机数,同时给玩家标记的机会,代码保证号码出现在玩家的票中,号码不出现在主板上。如果玩家输入的号码不满足上述条件,它会不断询问,直到玩家输入正确的数字
这段代码的特点是它接受任意数量的玩家。它最初会询问您玩游戏的玩家人数,然后多次询问每个玩家的姓名
最后,当玩家赢得满堂彩时,代码会自动终止
这是我准备的代码;
import random
import numpy as np
def list_of_ten(lower_limit, upper_limit):
yield list(str(number) for number in range(lower_limit, upper_limit))
def replace(numbers_list, row, collection):
for element in numbers_list:
if len(element) == 1:
collection[row][0] = element
elif int(element) == 90:
collection[row][-1] = element
else:
collection[row][int(element[0])] = element
def check_number(number, array):
row_counter = 0
column_counter = 0
for row in array:
if number in row:
for element in row:
if element == number:
return True, tuple((row_counter, column_counter))
column_counter += 1
row_counter += 1
else:
return False, None
def class_instantiation(player_count, class_to_create):
names_dict = dict()
counter = 0
while counter < int(player_count):
temporaray_input = input(f"Enter the name of the player{counter + 1}: ")
names_dict[temporaray_input.lower()] = class_to_create(temporaray_input)
counter += 1
return names_dict
def call_method(diction):
for tup in diction.items():
diction[tup[0]].display_ticket()
diction[tup[0]].mark()
def call_numeral(diction):
for tup in diction.items():
return diction[tup[0]].call_number()
class Player:
board = list(range(1, 91))
jaldi_5_winner = None
top_row_winner = None
middle_row_winner = None
bottom_row_winner = None
full_house_winner = None
def __init__(self, name):
self.name = name
self.full_list = list()
self.check_top = list()
self.check_middle = list()
self.check_bottom = list()
n1 = random.sample(next(list_of_ten( 1, 10)), 3)
n2 = random.sample(next(list_of_ten(10, 20)), 3)
n3 = random.sample(next(list_of_ten(20, 30)), 3)
n4 = random.sample(next(list_of_ten(30, 40)), 3)
n5 = random.sample(next(list_of_ten(40, 50)), 3)
n6 = random.sample(next(list_of_ten(50, 60)), 3)
n7 = random.sample(next(list_of_ten(60, 70)), 3)
n8 = random.sample(next(list_of_ten(70, 80)), 3)
n9 = random.sample(next(list_of_ten(80, 91)), 3)
n1.sort()
n2.sort()
n3.sort()
n4.sort()
n5.sort()
n6.sort()
n7.sort()
n8.sort()
n9.sort()
number_list = [n1, n2, n3, n4, n5, n6, n7, n8, n9]
self.ticket = np.array([[' '] * 9] * 3)
self.top_row = [element[0] for element in random.sample(number_list, 5)]
self.middle_row = [element[1] for element in random.sample(number_list, 5)]
self.bottom_row = [element[2] for element in random.sample(number_list, 5)]
replace(self.top_row, 0, self.ticket)
replace(self.middle_row, 1, self.ticket)
replace(self.bottom_row, 2, self.ticket)
def display_ticket(self):
print("\n\n" + f"{self.name}, your ticket is as follows:-" + "\n")
print(self.ticket[0])
print(self.ticket[1])
print(self.ticket[2])
def call_number(self):
print(f"The lucky number is {Player.board.pop(Player.board.index(random.choice(Player.board)))}!")
def mark(self):
mark_it = input("\n" + f"{self.name}, do you want to mark?(Type 'Yes' or 'No'): ")
while not mark_it.lower() == 'yes' and not mark_it.lower() == 'no':
mark_it = input("\n" + f"{self.name}, please type 'Yes' or 'No' only: ")
if mark_it.lower() == 'yes':
mark_number = input("\n" + f"{self.name}, type the number you want to mark: " + " ")
condition = check_number(mark_number, self.ticket)
while not condition[0] or int(mark_number) in Player.board:
mark_number = input("\n" + "Type a number present in your ticket which has also been called: ")
condition = check_number(mark_number, self.ticket)
if mark_number in self.ticket[0]:
self.check_top.append(mark_number)
self.full_list.append(mark_number)
elif mark_number in self.ticket[1]:
self.check_middle.append(mark_number)
self.full_list.append(mark_number)
else:
self.check_bottom.append(mark_number)
self.full_list.append(mark_number)
self.ticket[condition[1][0]][condition[1][1]] = "*" + mark_number
self.display_ticket()
winner_input = input("\n" + f"{self.name}, do you want to check if you have won?(Type 'Yes' or 'No'): ")
while not winner_input.lower() == 'yes' and not winner_input.lower() == 'no':
winner_input = input("\n" + f"{self.name}, please type 'Yes' or 'No' only: ")
if winner_input.lower() == 'yes':
if len(self.full_list) == 5 and Player.jaldi_5_winner == None:
print("\n" + f"{self.name}, you have won jaldi 5!" + "\n")
Player.jaldi_5_winner = self.name
elif len(self.full_list) == 15 and Player.full_house_winner == None:
print("\n" + f"Congratulations, {self.name}, you have won the game!" + "\n")
Player.full_house_winner = self.name
elif len(self.check_top) == 5 and Player.top_row_winner == None:
print("\n" + f"{self.name}, you have won the top row!" + "\n")
Player.top_row_winner = self.name
elif len(self.check_middle) == 5 and Player.middle_row_winner == None:
print("\n" + f"{self.name}, you have won the middle row!" + "\n")
Player.middle_row_winner = self.name
elif len(self.check_bottom) == 5 and Player.bottom_row_winner == None:
print("\n" + f"{self.name}, you have won the bottom row!" + "\n")
Player.bottom_row_winner = self.name
else:
print("\n" + f"Sorry {self.name}, you have not won!" + "\n")
print(f" Jaldi 5 Winner: {Player.jaldi_5_winner} ")
print(f" Top row winner: {Player.top_row_winner} ")
print(f"Middle row winner: {Player.middle_row_winner}")
print(f"Bottom row winner: {Player.bottom_row_winner}")
print(f"Full house winner: {Player.full_house_winner}")
no_of_players = input("How many players are going to play housie?: ")
players_dict = class_instantiation(no_of_players, Player)
while True:
if Player.full_house_winner != None:
break
else:
call_numeral(players_dict)
call_method(players_dict)