2017-01-24 4 views
0

У меня возникли проблемы с работой над игровым проектом, когда вы пытаетесь создать приглашение пользователя при запуске новой игры и создании нового пользователя, если введенное имя пользователя еще не было exit, иначе добавьте статистику, если имя пользователя уже существует. Те статистики, которые выигрывают, проигрывают, рисуют, которые добавляются к статистике пользователей.Создание статистики пользователя и добавления

Таким образом, я мог только подумать о двух вариантах: сначала создайте словарь с именем пользователя в качестве ключа и вложенным списком для своих значений статусов, или иначе создайте класс с функцией имени пользователя и функциями для каждый список, такой как список побед, список потерь и т. д.

Любая помощь или идеи были бы высоко оценены!

28 января Edit:

По желанию для кода, я выложу сегменты, что у меня есть и то, что я ищу, чтобы достичь ...

Часть 1 - Имя пользователя Создание:

while True: 
    playerinput = input("Please type a number correlating with your menu choice, or 4 to return to main menu: ") 

    if playerinput == "1": 
     game_range = range(1, 10) 
     play_the_game(playerinput, game_range) 
    elif playerinput == "2": 
     game_range = range(1, 26) 
     play_the_game(playerinput, game_range) 
    elif playerinput == "3": 
     game_range = range(1, 28) 
     play_the_game(playerinput, game_range) 
    elif playerinput == "4": 
     exec(open("menuitems.py").read(), globals()) 
    else: 
     print("Unknown input: ", playerinput, ", please try again") 

На этом этапе запуска новой игры (я оставил элементы меню, чтобы сократить размер кода здесь), выбрав параметр меню, я хочу, чтобы он попросил пользователя ввести имя пользователя в этот момент, и либо создайте нового пользователя, если он еще не существует, либо добавьте его к st ATS.

Часть 2 - Статистика по пользователям (это большая часть кода):

def play_the_game(playerinput, game_range): 
while True: 
    board = [" "] * (max(game_range) + 1) 
    plays = [] 
    player_icon, computer_icon = player_choice() 
    turn = who_goes_first() 
    print(turn + " will get the first turn of the game") 
    game_in_play = True 

    while game_in_play: 
     if turn == "player": 
      print_the_board(board, playerinput) 
      print(""" 
      Computer: Choose your move carefully, human 
      """) 
      print("Enter your move between ", min(game_range), "-", max(game_range), ", ", min(game_range), 
        " for top left, ", max(game_range), " for bottom right") 
      player_move = input("Enter your move: ") 
      if player_move == "e": 
       break 
      if player_move == "u": 
       if len(plays) == 0: 
        print("No more moves left to undo - you cheated your way back to the beginning!") 
        continue 
       print("I shouldn't be letting you do this - it really feels like cheating...") 
       player_move = plays.pop() 
       board[player_move] = " " 
       player_move = plays.pop() 
       board[player_move] = " " 
       continue 
      if not player_move.isdigit(): 
       AI_insults() 
       continue 
      if int(player_move) not in game_range or not free_space_on_board(board, int(player_move)): 
       AI_insults() 
       continue 

      make_a_move(board, player_icon, int(player_move)) 
      plays.append(int(player_move)) 

      if win_condition(board, player_icon, playerinput): 
       print_the_board(board, playerinput) 
       print("Congrats! You beat that pesky computer!") 
       game_in_play = False 
      else: 
       if draw_condition(board, game_range): 
        print_the_board(board, playerinput) 
        print("It's a draw!") 
        break 
       else: 
        turn = "Computer" 

     else: 
      move = computer_move(board, computer_icon, playerinput, game_range) 
      plays.append(move) 
      make_a_move(board, computer_icon, move) 

      if win_condition(board, computer_icon, playerinput): 
       print_the_board(board, playerinput) 
       AI_endgame_brag() 
       game_in_play = False 

      else: 
       if draw_condition(board, game_range): 
        print_the_board(board, playerinput) 
        print("It's a draw!") 
        break 
       else: 
        turn = "player" 
    if not end_game(): 
     break 

Я оставил целую много функций, используемых в этом коде, чтобы снова попытаться держать этот маленький, но то, что я хочу выполнить так, чтобы «win_condition» для игрока выполнялся, затем он добавляет +1 к статистике выигрышей пользователей, если «draw_condition», затем +1, чтобы нарисовать статистику, и если компьютер победит, то +1 к убытку ,

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

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

+2

Пожалуйста, покажите нам свой код, что вы пробовали, какие входные данные, какие выходы, какие ожидаемые выходы. –

ответ

0

Обновлено: Хорошая новость! Я думал о решении моей проблемы, которая была на самом деле очень простое решение, которое выглядит следующим образом ...

with open("users.json", "r") as f: 
    try: 
    user_dict = json.load(f) 
    except ValueError: 
    user_dict = {} 
username = input("Please enter a username to create a new user, or to access an existing user: ") 
if username not in user_dict: 
    user_dict[username] = [0, 0, 0] 

Тогда после выигрыша, рисовать, потери и т.д., я добавил этот код в код игры следующий каждый выигрывает/проигрывает состояние и т. д. до перерыва.

   if win_condition(board, player_icon, playerinput): 
        print_the_board(board, playerinput) 
        print("Congrats! You beat that pesky computer!") 
        user_dict[username][0] += 1 
        game_in_play = False 

Добавив "user_dict [имя пользователя] [индекс] + = 1", где я буду просто использовать индекс 0 для победы, индекс 1 для потерь, и 3 для розыгрышей.

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

with open("users.json", "w") as f: 
     json.dump(user_dict, f) 

Он отлично работает с постоянными статистики привязаны к именам пользователей в настоящее время, благодаря Stack для команд JSON, которые я нашел здесь ...