2017-01-04 25 views
1

私はちょうど私のロックペーパーはさみのゲームをPythonで終えました。今のところ、ユーザーは3つのボタンの中から選択しなければならず、文字列user1は "Rock"、 "Paper"、または "Scissors"のいずれかに設定されています。 そして、私はゲームを評価する場合、コードは単に文と例のチェックのためならば、いくつかを実行しますロックペーパーはさみ - 数学的に勝者を得る

if computer == "Paper" 

しかし、私は私自身のアイテムでゲームを少し拡張したい場合は、それはたくさんのだろう"if/else"。 Sow私は各項目に固有の番号を付けると思ったので、この番号を使うだけで、文字列を混乱させる必要はありません。

私の先生は、誰が勝つのかを知るために、2つのintを分割するヒントを教えてくれました。

しかし、私はこれについてしばらく考えてから、私がこれをどうやってできるかについては何の解決策も見つけられませんでした。この背後にある論理についてはちょっとしたことですが、コードは必要ありません。

アイテムとして2つの整数を使用して、数学的にちょうど勝者を見つけることができますか?

よろしくお願いいたします。 DirtyDev!

+1

正確には、あなたの質問は何ですか? –

+0

質問@Robが編集しました。私はちょうど数学のビットを使用して2つのintに応じて勝者を取得したい – dv02

+1

@DirtyDevあなたは勝者が選ばれた方法を説明していない。あなたは数字を持つあなた自身のアイテムを追加したいと言ったが、どの数字が何の数字を打つのか分からず、その情報がなければ、あなたがアルゴリズムを書くのを手伝うことは不可能である。アルゴリズムが何をすべきか。 –

答えて

5

あなたの質問に対するあなたのコメントで言うように、通常のロックペーパーはさみを実装しようとしています。さんは割り当ててみましょう:

Rock:  0 
Paper: 1 
Scissors: 2 

この答えは、あなたがモジュロ演算子(%)について知っていると仮定し、そうでない場合は、それが何を意味するのか理解するために最初のことを調べてください。私はこの答えでそれを使用するので、はさみ(2)に1を加えると、3の代わりに0が得られます。なぜなら、ロックは0であり、3の項目がないからです。

私たちは、それが他の人の選択の直後に来たら勝つ選択をしたい、それが前に来れば失う、そして彼らが等しいならば結ぶ。例えば、2は1の直後に来るので、ハサミは紙を打つ。モジュロ演算子を使用して、1〜3の範囲内にあることを確認します(1と3を含む)。

プレイヤー1が勝利したかどうかを判断するには、プレイヤー2の移動よりも移動が1大きいかどうかを確認します。彼らが結びついているかどうかを知るために、彼らは同じ動きをしているかどうかを確認するそして、どちらも真実でなければ、プレーヤー2は勝たなければならない。ここではいくつかのテストでの実装例です:

>>> def winner(p1, p2): 
... if (p1+1) % 3 == p2: 
...  return "Player 2 won because their move is one greater than player 1" 
... elif p1 == p2: 
...  return "It's a draw because both players played the same move" 
... else: 
...  return "Player 1 wins because we know that it's not a draw and that player 2 didn't win" 
... 
>>> 
>>> 
>>> rock = 0 
>>> paper = 1 
>>> scissors = 2 
>>> winner(rock, paper) 
'Player 2 won because their move is one greater than player 1' 
>>> winner(paper, scissors) 
'Player 2 won because their move is one greater than player 1' 
>>> winner(scissors, rock) 
'Player 2 won because their move is one greater than player 1' 
>>> winner(rock, scissors) 
"Player 1 wins because we know that it's not a draw and that player 2 didn't win" 
>>> winner(paper, paper) 
"It's a draw because both players played the same move" 

さて、このゲームでは、数学的なルールは、アイテムが数1それ未満(モジュロ3)でアイテムを打つということでした。アイテムを追加する場合は、ゲームの仕組みを管理する数学的なルールを用意する必要があります。 1つの例(それほど楽しいことではない)は、アイテム1がアイテム1よりも小さい(したがって、アイテム1よりも喪失している)ルールを維持し、他のアイテムとはネクタイを持つこれはやや退屈なゲームになります。

その回答が役立ちますように!がんばろう!

関連する問題