1

私は、3 つの異なる整数を生成し、それらを個々の値に割り当てて、1 番目、2 番目、3 番目に進むことを決定できるようにするプログラムに取り組んでいます。この場合、3 人の異なるプレイヤーがいて、それぞれが「10 面ダイス」を振ると想定しています。一番高い人が最初のターンを取得し、2 番目に高い人が 2 番目に、3 番目が最後に行く必要があります。すべてが順調に進んでいるように見えますが、自分の価値観を理解した今、プレイヤーが順番にプレイできるようにそれらを調整する方法がわかりません。ご意見をいただければ幸いです。

これまでにまとめたコードは次のとおりです。

import sys
import os
import random
import time

os.system('clear')
print ('Welcome!  Please type Player 1\'s name!: ')
playerOne = input()
print ('Okay!  Please type Player 2\'s name!: ')
playerTwo = input()
print ('Fantastic!  Finally, please type Player 3\'s name!: ')
playerThree = input()
os.system('clear')
print()
time.sleep(2)

def startFightRoll():
    playerOneRoll = random.randint(1,10)
    time.sleep(.5)
    print('Okay, let\'s roll a ten-sided die to see who gets to go first!')
    print()
    time.sleep(2)
    print ('<Ten-sided dice roll> ')
    print ('---------------------------------')
    print (playerOne + ' rolls ' + str(playerOneRoll))
    print()
    print()
    playerTwoRoll = random.randint(1,10)
    time.sleep(2)
    print ('<Ten-sided dice roll> ')
    print ('---------------------------------')
    print (playerTwo + ' rolls ' + str(playerTwoRoll))
    print()
    print()
    playerThreeRoll = random.randint(1,10)
    time.sleep(2)
    print ('<Ten-sided dice roll> ')
    print ('---------------------------------')
    print (playerThree + ' rolls ' + str(playerThreeRoll))

startFightRoll()

以下のスレッドに対応して;

さて、私はこれに慣れていないので、私のコードを許してください - それは効率的ではなく、私はまだ物事に慣れています. 1) プレイヤーが名前フィールドに何も入力しないこと、および 2) ダイスロールで同点が生成されることに対処するために、それにいくつかの部分を追加しました。サイコロの出目を降順で並べたリストも作成しましたが、今度は出目を生成したユーザーに関連付ける方法を見つける必要があります。これを適切に行う方法についての指針は非常に高く評価されています。

import sys
import os
import random
import time

os.system('clear')


def playerOneName():
    global playerOne
    playerOne = input()
    if len(playerOne) < 1:
        print('Please enter your name, Player 1!')
        playerOneName()

def playerTwoName():
    global playerTwo
    playerTwo = input()
    if len(playerTwo) < 1:
        print('Please enter your name, Player 2!')
        playerTwoName()

def playerThreeName():
    global playerThree
    playerThree = input()
    if len(playerThree) < 1:
        print('Please enter your name, Player 3!')
        playerThreeName()

os.system('clear')
print()
time.sleep(2)
def startFightRoll():
    global playerOneRoll
    global playerTwoRoll
    global playerThreeRoll
    playerOneRoll = random.randint(1,10)
    time.sleep(.5)
    print('Okay, let\'s roll a ten-sided die to see who gets to go first!')
    print()
    time.sleep(2)
    print ('<Ten-sided dice roll> ')
    print ('---------------------------------')
    print (playerOne + ' rolls ' + str(playerOneRoll))
    print()
    print()
    playerTwoRoll = random.randint(1,10)
    time.sleep(2)
    print ('<Ten-sided dice roll> ')
    print ('---------------------------------')
    print (playerTwo + ' rolls ' + str(playerTwoRoll))
    print()
    print()
    playerThreeRoll = random.randint(1,10)
    time.sleep(2)
    print ('<Ten-sided dice roll> ')
    print ('---------------------------------')
    print (playerThree + ' rolls ' + str(playerThreeRoll))
    if playerOneRoll == playerTwoRoll:
        print ('There\'s a tie, rolling again!')
        time.sleep(3)
        os.system('clear')
        startFightRoll()
    if playerOneRoll == playerThreeRoll:
        print ('There\'s a tie, rolling again!')
        time.sleep(3)
        os.system('clear')
        startFightRoll()
    if playerTwoRoll == playerThreeRoll:
        print ('There\'s a tie, rolling again!')
        os.system('clear')
        time.sleep(3)
        startFightRoll()    

    O = [playerOneRoll, playerTwoRoll, playerThreeRoll]
    O = sorted(O, reverse = True)
    print (O)

print ('Welcome!  Please type Player 1\'s name!: ')
playerOneName()
print ('Okay!  Please type Player 2\'s name!: ')
playerTwoName()
print ('Fantastic!  Finally, please type Player 3\'s name!: ')
playerThreeName()
os.system('clear')
startFightRoll()
4

3 に答える 3

2

Lattyware が述べたように、コードの一部を繰り返しています。忙しすぎて読むことができないだけでなく、ロジックを台無しにする可能性があります (貼り付け後に変数を変更するのを忘れた場合)。したがって、繰り返しコードを関数に入れることをお勧めします。

あなたのコードに関しては、2 人のプレイヤーが同じ数字を出した場合を考慮しました。この場合、プログラムは新しい数字が出るまで再びロールします。

import os
import random
import time

os.system('clear')
print ('Welcome!  Please type Player 1\'s name!: ')
playerOne = input()
print ('Okay!  Please type Player 2\'s name!: ')
playerTwo = input()
print ('Fantastic!  Finally, please type Player 3\'s name!: ')
playerThree = input()
os.system('clear')
print()
time.sleep(2)


def initialRoll(player):
    """Roll the dice for the given player"""

    playerRoll = random.randint(1, 10)
    print ('<Ten-sided dice roll> ')
    print ('---------------------------------')
    print (player + ' rolls ' + str(playerRoll))
    print()
    return playerRoll


def startFightRoll():
    """Determine the order of the players."""

    time.sleep(.5)
    print('Okay, let\'s roll a ten-sided die to see who gets to go first!')
    print()

    // Temporarily store the rolls. The key is the roll number and the value is the
    // player who rolled it
    order = {}
    for player in [playerOne, playerTwo, playerThree]:
        playerRoll = initialRoll(player)

        # Let's make sure that two players didn't roll the same number, if they did
        # then let's roll a new number
        while playerRoll in order:
            print ('OH No! That number has already been rolled. Let\'s roll again')
            playerRoll = initialRoll(player)

        order[playerRoll] = player
        time.sleep(2)

    # Sort the keys (which are the numbers rolled), then create a new list with order
    # of who should go first
    return [order[roll] for roll in sorted(order.keys(), reverse=True)]

rollOrder = startFightRoll()
print ('The order of the players are: ' + ', '.join(rollOrder))
于 2013-02-25T20:53:13.660 に答える
0

リストに値を追加します(リストはx):

x = sorted(x)

辞書を使いたい。

各プレイヤー名とそのランダムロールを辞書に追加します。

players = {'player1': randint(1, 10), 'player2': randint(1, 10), 'player3': randint(1, 10)}

ただし、目的のために、ロールを反復処理するため、この辞書の反対(ロール、次にプレーヤー名)が必要です。ロールのいずれかが同じである場合、これは混乱するため、より広い範囲を作成できます(randint(1, 1000)たとえば)。

players = {randint(1, 1000): 'player1', randint(1, 1000): 'player2', randint(1, 1000): 'player3'}
rolls = sorted(players.keys())
player_sequence = [players[n] for n in rolls]
于 2013-02-25T20:00:39.627 に答える
0

これは、辞書を作成してそのキーをソートするという 1 つの可能な代替手段です (これは少し奇妙ですが、認めます)。3 つの「重複した」ブロックに注目してください。Lattyware のコメントによる各プレイヤーのループの提案を実装して、さらに一歩進めてください。

import sys
import os
import random
import time

os.system('clear')
print ('Welcome!  Please type Player 1\'s name!: ')
playerOne = raw_input()
print ('Okay!  Please type Player 2\'s name!: ')
playerTwo = raw_input()
print ('Fantastic!  Finally, please type Player 3\'s name!: ')
playerThree = raw_input()
os.system('clear')
print()
time.sleep(2)
def startFightRoll():
    time.sleep(.5)
    print('Okay, let\'s roll a ten-sided die to see who gets to go first!')
    print

    rolls = {}

    playerOneRoll = random.randint(1,10)
    rolls[playerOneRoll] = 'Player One'
    time.sleep(1)
    print ('<Ten-sided dice roll> ')
    print ('---------------------------------')
    print (playerOne + ' rolls ' + str(playerOneRoll))
    print
    print

    playerTwoRoll = random.randint(1,10)
    rolls[playerTwoRoll] = 'Player Two'
    time.sleep(1)
    print ('<Ten-sided dice roll> ')
    print ('---------------------------------')
    print (playerTwo + ' rolls ' + str(playerTwoRoll))
    print
    print

    playerThreeRoll = random.randint(1,10)
    rolls[playerThreeRoll] = "Player Three"
    time.sleep(1)
    print ('<Ten-sided dice roll> ')
    print ('---------------------------------')
    print (playerThree + ' rolls ' + str(playerThreeRoll))
    print
    print

    print "The winner is %s" % rolls[max(rolls.keys())]


startFightRoll()
于 2013-02-25T20:09:40.083 に答える