2017-01-24 13 views
0

私は、ゲームプロジェクトに取り組んで、新しいゲームを開始したときにユーザー作成のプロンプトを作成しようとしていて、入力したユーザー名がまだ新しい終了します。そうでない場合は、ユーザー名がすでに存在する場合は統計情報を追加します。これらの統計は、勝利、損失、引き分けであり、ユーザーの統計に追加されます。ユーザーの作成と統計の追加

私は2つのオプションを考えることができました。最初に、ユーザー名をキーとした辞書とその統計値のネストされたリストを作成するか、またはユーザー名関数と関数を持つクラスを作成します勝利リスト、損失リストなどの各リスト。

何か助けやアイデアをいただければ幸いです!

1月28日編集:コードの要求ごととして

、私は達成するために探しているものを私が持っていると何のセグメントを投稿します...

パート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 

私は再びこの小さなを維持しようとするそのコードで使用される機能の全体の多くを残してきましたが、どのようなI達成するためには、プレイヤーのための "win_condition"が達成される必要がありますし、 "draw_condition"の場合は+1、統計を描画するために+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) 

そして私は今、ゲームはそれは次のようになり終了したときにトリガーされます関数にコードのビットを追加しました...、おかげでスタック私はここで見つけたJSONコマンドのために...

関連する問題