Hej, dzięki za liczne odpowiedzi ;) Można na was liczyć. Spróbuje się odnieść do niektórych zarzutów, zaprezentuję nowy kod i przedstawię listę pytań.
@Wizzie: przyznam, że pierwszego i ostatniego akapitu twego postu po prostu nie zrozumiałem. Ale też nie poświecałem zbytnio czasu na to. Po prostu nie miałem kiedy. Ale dzięki, szczególnie za to o zasadności stosowania funkcji
Wrzucam nowy kod. Troszkę go rozbudowałem o dodatkowe funkcje (dodawanie graczy, zarządzanie dodanymi już graczmi, generowanie imion graczy według potrzeby, kamień, papier, nożyce, jaszczurka i Spock :), rundy).
Kopiuj
import random
import time
import getpass
players_list = []
def generate_player_name():
names = ['Plaska Dziewica', 'Zbutwialy Piernik', 'Mistrz Wegorza', 'Zjadacz Sedesow',
'Stanikowy Deszcz', 'Smetny Pierd', 'Sprzedam Seata', 'Zimna Warka',
'Jacek Maly Wacek', 'Waleczny Mlot', 'Szalony Ziemniak', 'Sheldon'
'Waz Rzeczny', 'Tururu Tururu', 'Jest Niebezpieczny' ]
decision = ' '
possible_decision = ('Y', 'N')
while decision not in possible_decision:
player_name = random.choice(names)
decision = input('>> Do The Name ' + player_name + " Is OK With You? If Not I Will Draw Again [Y/N] ").upper()
if(decision == 'Y'):
print('>> Great then!', player_name)
return player_name
elif decision == 'N':
decision = ' '
def create_player(decision, possible_decisions):
flag = ' '
possible_flags = {'C': 'is_computer', 'H': 'is_human'}
while(flag not in possible_flags):
flag = input('>> Will The Player Be Controlled By [H]uman or [C]omputer? ').upper()
if(decision == 'M'):
player_name = input('>> Type The Name:')
elif(decision == 'A'):
player_name = generate_player_name()
players_list.append( {'player_name': player_name,
'player_flag': possible_flags[flag],
'player_decision': None,
'player_points': 0}
)
def add_player():
list_status = len(players_list)
decision = ' '
while decision != 'B':
decision = input(">> Do You Want To Create New Player [M]anualy Or Should I Do It [A]utomaticly (I'll Generate The Name)?\n [B]ack To Main Menu ").upper()
possible_decisions = ['A', 'M']
if(decision in possible_decisions):
create_player(decision, possible_decisions)
decision = ' '
possible_decisions = ['Y', 'N']
while decision not in possible_decisions:
decision = input('>> You Just Added The Player! Do You Want To Add Another One? [Y/N] ' ).upper()
if(decision == 'N'):
decision = 'B'
break
if(decision == 'B'):
print('>> You Just Added:', len(players_list) - list_status, 'Players')
def play():
print(">> We Will Play In That Order:", end = ': ')
for player in players_list:
print(player['player_name'], end = ', ')
print()
number = 99
while not number <= 5 or number <= 0:
number = int(input('>> Before You Start Type How Many Rounds Do You Want To Play?\n The Maximum Number Of Rounds Is Five '))
if number > 5:
print('As I Said You Cannot Play More Rounds Than Five')
elif number == 0:
print('In This Case I Predict The Score. NOBODY WON AND NOBODY LOST')
elif number < 0:
print("I Won't Comment On That. Just Type Once Again")
for rounds in range(0, number):
print('\n>> Round', rounds + 1)
make_choice()
give_points()
decide_winner()
clean_points()
def make_choice():
options = {1: 'rock', 2: 'paper', 3: 'scissors', 4: 'lizard', 5: 'Spock'}
for player in players_list:
if(player['player_flag'] == 'is_computer'):
print('>> It Is {player_name} Turn! The Player Is Controled By The Computer'.format(player_name = player['player_name']))
for i in range(1, 4):
print('>> {i}... '.format(i = i))
time.sleep(1)
player_decision = random.randint(1, 5)
elif(player['player_flag'] == 'is_human'):
player_decision = 2
while player_decision < 1 and player_decision > 5:
player_decision = int(getpass.getpass(">> It Is {player_name} Turn! The possible choices:\n 1: 'rock', 2: 'paper', 3: 'scissors', 4: 'lizard', 5: 'Spock' ".format(player_name = player['player_name'])))
print('>> {player_name} Made a Choice!\n'.format(player_name = player['player_name']));
player['player_decision'] = options[player_decision]
def give_points():
results = {('rock', 'rock'): 'game_is_draw',
('rock', 'paper'): 'playerB_wins',
('rock', 'scissors'): 'playerA_wins',
('rock', 'lizard'): 'playerA_wins',
('rock', 'Spock'): 'playerB_wins',
('paper', 'rock'): 'playerA_wins',
('paper', 'paper'): 'game_is_draw',
('paper', 'scissors'): 'playerB_wins',
('paper', 'lizard'): 'playerB_wins',
('paper', 'Spock'): 'playerA_wins',
('scissors', 'rock'): 'playerB_wins',
('scissors', 'paper'): 'playerA_wins',
('scissors', 'scissors'): 'game_is_draw',
('scissors', 'lizard'): 'playerA_wins',
('scissors', 'Spock'): 'playerB_wins',
('lizard', 'rock'): 'playerB_wins',
('lizard', 'paper'): 'playerA_wins',
('lizard', 'scissors'): 'playerB_wins',
('lizard', 'lizard'): 'game_is_draw',
('lizard', 'Spock'): 'playerA_wins',
('Spock', 'rock'): 'playerA_wins',
('Spock', 'paper'): 'playerB_wins',
('Spock', 'scissors'): 'playerA_wins',
('Spock', 'lizard'): 'playerB_wins',
('Spock', 'Spock'): 'game_is_draw'
}
print('Results:')
i = 1
for playerA in players_list:
for playerB in players_list[i:]:
result = results[playerA['player_decision'], playerB['player_decision']]
if result == 'game_is_draw':
playerA['player_points'] += 0.5
playerB['player_points'] += 0.5
print(' - Players {playerA_name} And {playerB_name} Has Drawn. Each Of Them Got 0.5 Point'
.format(playerA_name = playerA['player_name'], playerB_name = playerB['player_name']))
elif result == 'playerA_wins':
playerA['player_points'] += 1
print(' - Player {playerA_name} Won With {playerB_name}. Players {playerA_name} Got 1 Point'
.format(playerA_name = playerA['player_name'], playerB_name = playerB['player_name']))
elif result == 'playerB_wins':
playerB['player_points'] += 1
print(' - Player {playerB_name} Won With {playerA_name}. Players {playerB_name} Got 1 Point'
.format(playerA_name = playerA['player_name'], playerB_name = playerB['player_name']))
i += 1
def decide_winner():
sorted_list = sorted(players_list, key=lambda k: k['player_points'], reverse=True)
i = 0
while sorted_list[i]['player_points'] == sorted_list[i + 1]['player_points']:
i += 1
print('\n>> The Winner Is...', end = ' ')
time.sleep(2)
if i == 0:
print(sorted_list[0]['player_name'].upper(), '!!!')
elif i > 0:
print('There Is a Draw Between ', end = '')
for j in range (0, i + 1):
print(sorted_list[j]['player_name'], end = ', ')
print()
print('>> Congratulations! You Have Got', sorted_list[0]['player_points'], 'Points')
print('>> Results:')
for player in sorted_list:
print(' ', player['player_name'], player['player_points'])
print()
def managment_players():
print('>> The List Of Players: ')
for player in players_list:
print(' - {player_name} is controled by {player_flag}'. format(player_name = player['player_name'], player_flag = player['player_flag'][3:]))
possible_decision = ('D', 'B')
decision = ' '
while decision not in possible_decision:
decision = input('>> Do You Want To [D]elete a Player? [B]ack To Main Menu ').upper()
if decision == 'D':
number = 99
while not number < len(players_list) + 1:
number = int(input(">> What Player Do You Want To Delete? Give Me a Number "))
if number > len(players_list) + 1:
print('>> The Player With {number} Number Does Not Exist'.format(number = number))
else:
possible_decision = ('Y', 'N')
while decision not in possible_decision:
decision = input('>> Are You Sure You Want To Delete {player_name} Player? [Y/N] '.format(player_name = players_list[number - 1]['player_name'])).upper()
if decision == 'Y':
del players_list[number - 1]
print('>> You Just Removed The Player!')
break
possible_decision = ('D', 'B')
def clean_points():
for player in players_list:
player['player_points'] = 0
sorted_list = []
''' for tests
players_list.append( {'player_name': 'Marek',
'player_flag': 'is_human',
'player_decision': None,
'player_points': 0}
)
players_list.append( {'player_name': 'Karolinka',
'player_flag': 'is_computer',
'player_decision': None,
'player_points': 0}
)
players_list.append( {'player_name': 'Sraromir',
'player_flag': 'is_computer',
'player_decision': None,
'player_points': 0}
)
players_list.append( {'player_name': 'Smutna Julka',
'player_flag': 'is_computer',
'player_decision': None,
'player_points': 0}
)
'''
print(">> Welcome To Rock-Paper-Scissors-Lizard-Spock Game. All Rights Reserved. Enjoy! ")
decision = input('>> Before You [P]lay, Remeber To [A]dd Players. You Can [M]anage The List Of Participants At Any Time.\n When You Get Tired Of The Game, Just [E]xit ').upper()
while(decision != 'E'):
if(decision == 'E'):
print('>> Have a Nice Day! ')
elif(decision == 'P'):
if not players_list:
print('>> At First You Need To Add Players. Do It And I Will Let You Play')
else:
play()
elif(decision == 'A'):
add_player()
elif(decision == 'M'):
if not players_list:
print(">> You Moron! You Didn't Add Any Players Yet!")
else:
managment_players()
decision = input('>> So What Do You Want To Do Now? [P]lay, [A]dd a New Player, [M]anage Already Added Players, Or Just [E]xit? ').upper()
Maciej CąderekMaciej Cąderek