あ、またゲームコーダーの方、こんにちは 今日は、簡単なロック・ペーパー・サイザーズ・ゲームを一人で作る方法をご案内します。
準備はいいですか?さあ、始めましょう
ロック・ペーパー・サイザーズ・ゲームの紹介
新しいゲームを作る前に、そのゲームのルール、入力、出力など、必要なことをすべて理解する必要がある。
ゲームの遊び方を教えてください。
じゃんけんは、私たちが小さい頃からやっている定番の手遊びです。
一般的には2人(2人以上でも可)で、手を伸ばして3つの形(ジャンケン、紙、はさみ)のいずれかを同時に形成して遊びます。
オプションのハンドジェスチャーはどのように形成するのですか?
岩は握りこぶし、紙は平手、ハサミはV字(ピースシグナル)で表現します。
下の画像は、そのジェスチャーのイラストです。
1
2
|
import random
import getpass
|
おすすめ記事 Pythonで作るグラフィカルなハイローゲーム
ゲームのルール
ゲームのコーディング部分は少し複雑になりますが、ゲームのルールは簡単で、以下の通りです。
-
- ハサミで切ったほうが勝ち。
- ハサミは紙に対して勝つ。
- 紙が岩に勝つ。
B
ステップ1 – 必要なモジュールをインポートします。
ゲームを作っていく中で、いくつかのモジュールを利用することになります。
順を追って紹介していきますね。
- 1.Randomモジュール。整数、浮動小数点数、その他のオブジェクトをランダムに生成するための組み込みモジュールです。
- Getpassモジュール。Getpassモジュールは、通常、ユーザーからパスワードを取得するために使用されますが、ゲームでは、公正なゲームのためにプレーヤー2からプレーヤー1の入力を隠すために同じものが使用されます。
モジュールをインポートするには、次のコードを使用します。
1
2
3
4
5
6
7
8
9
10
11
12
|
def Info ():
print ( " HELLO THERE! WELCOME TO ROCK PAPER SCISSORS GAME!" )
print ( "INSTRUCTIONS: )
print ( " )
print ( " SCISSORS beats PAPER" )
print ( " PAPER beats ROCK" )
print ( " ROCK beats SCISSORS" )
print ( "--------------------------------------------------------------------------" )
print ( "Choose between the two options: " )
print ( " 1. Play with the computer" )
print ( " 2. Play with a friend" )
print ( " 3. Exit Game" )
|
ステップ2 – 挨拶文の印刷と、ゲームの遊び方をプレイヤーに聞く。
ゲームビルダーは、ゲームを始める前にプレイヤーに挨拶することをお勧めします。
挨拶メッセージが良ければ、同じゲームの他の開発者よりも優れたゲームになります。
挨拶が終わると、プレイヤーはコンピュータと遊ぶか、友達と遊ぶか、それとも単にゲームを終了するかを尋ねられます。
この例では、挨拶に関するすべての情報を格納する関数を定義します。
そのためのコードを以下に示します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
Info () choices = [ "rock" , "paper" , "scissors" ]
wrong = True
while wrong:
try :
n = int ( input ( "Enter your choice of Gameplay: " ))
if (n = = 1 ):
wrong = False
x = int ( input ( "Enter number of rounds you want to play: " ))
begin_game_computer(x)
elif (n = = 2 ):
wrong = False
x = int ( input ( "Enter number of rounds you want to play: " ))
begin_game_friend(x)
elif (n = = 3 ):
wrong = False
print ( " )
else :
print ( "Choose Again!" )
except (ValueError):
print ( "INVALID INPUT! Choose Again!" )
wrong = True
|
Info`関数が呼ばれると、以下のようなパターンで情報が表示されます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
def draw_diagrams(ch):
if (ch = = "rock" ):
print ( """
_______
---' ____)
(_____)
(_____)
(____)
---.__(___)
""" )
elif (ch = = "paper" ):
print ( """
_______
---' ____)____
______)
_______)
_______)
---.__________)
""" )
elif (ch = = "scissors" ):
print ( """
_______
---' ____)____
______)
__________)
(____)
---.__(___)
""" )
else :
print ( "WRONG INPUT! CHOOSE AGAIN PLEASE! )
|
対局方法を選択した後、対局者はコンピュータまたは友人と何ラウンド対局したいかを尋ねられます。
このとき、ラウンド数は整数であるべきで、プレイヤーの選択したプレイ方法も有効であるべきです。
同じようにゲームを開始する全体のコードを以下に示します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
def begin_game_computer(n):
score1 = 0
score2 = 0
for i in range (n):
print ( "---------------------------------------------------------------------------" )
print ( "ROUND NUMBER: " ,i + 1 )
check = True
while check:
p_ch = input ( "Choose your option: " )
if (p_ch.lower() in choices):
check = False
else :
print ( "Wrong Input! Enter Again!" )
c_ch = choices[random.randint( 0 , 2 )]
print ( " )
draw_diagrams(p_ch.lower())
print ( " )
draw_diagrams(c_ch.lower())
winner = check_win(p_ch,c_ch)
if (winner = = 1 ):
print ( "YOU WIN THE ROUND HURRAY! )
score1 + = 1
elif (winner = = 2 ):
print ( "Oh no! Computer wins the round! )
score2 + = 1
else :
print ( "DRAW ROUND! )
print ( "---------------------------------------------------------------------------" )
print ( "FINAL SCORES ARE AS FOLLOWS: " )
print ( "YOUR SCORE: " ,score1)
print ( "COMPUTER's SCORE: " ,score2)
if (score1>score2):
print ( "---------------------------------------------------------------------------" )
print ( "HURRAY YOU WIN! Congratulations!" )
print ( "---------------------------------------------------------------------------" )
elif (score1<score2):
print ( "---------------------------------------------------------------------------" )
print ( "Computer wins this time! Better Luck next time!" )
print ( "---------------------------------------------------------------------------" )
else :
print ( "---------------------------------------------------------------------------" )
print ( "It's a draw game!" )
print ( "---------------------------------------------------------------------------" )
|
ここで、具体的に何が起こっているのかを理解しましょう。
まず、Info関数を呼び出してプレイヤーを迎え入れ、PythonのExceptionを利用して必要な処理をしています。
コンピュータと遊ぶ場合はbegin_game_computer関数、友人と遊ぶ場合はbegin_game_friend関数が呼ばれます。
ステップ3 – 様々な目的のために別々の機能を作成します。
さて、ゲーム構築の主要なステップは、ゲームを適切に動作させるために必要な関数を定義することです。
ここでは、すべてのプロジェクトをゼロから構築してみましょう。
1. 手札図の描画関数を定義します。
ゲームをよりインタラクティブにするために、右の選択肢に対応する手札図を表示する関数を定義します。
そのためのコードは以下の通りです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
def check_win(c1,c2):
if (c1 = = 'rock' and c2 = = 'paper' ):
return 2
elif (c1 = = 'paper' and c2 = = 'rock' ):
return 1
elif (c1 = = 'paper' and c2 = = 'scissors' ):
return 2
elif (c1 = = 'scissors' and c2 = = 'paper' ):
return 1
elif (c1 = = 'rock' and c2 = = 'scissors' ):
return 1
elif (c1 = = 'scissors' and c2 = = 'rock' ):
return 2
elif (c1 = = c2):
return 0 |
2. コンピュータと遊ぶための関数を定義します。
説明の前に、まずコードを示して、きちんと説明しましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
def begin_game_friend(n):
score1 = 0
score2 = 0
for i in range (n):
print ( "---------------------------------------------------------------------------" )
print ( "ROUND NUMBER: " ,i + 1 )
check = True
while check:
p1_ch = getpass.getpass(prompt = "Choose your option player 1: " ,stream = None )
if (p1_ch.lower() in choices):
check = False
else :
print ( "Wrong Input! Enter Again!" )
check = True
while check:
p2_ch = input ( "Choose your option player 2: " )
if (p2_ch.lower() in choices):
check = False
else :
print ( "Wrong Input! Enter Again!" )
print ( " )
draw_diagrams(p1_ch.lower())
print ( "PLAYER 2 CHOICE: " )
draw_diagrams(p2_ch.lower())
winner = check_win(p1_ch,p2_ch)
if (winner = = 1 ):
print ( "Player 1 wins the round! )
score1 + = 1
elif (winner = = 2 ):
print ( "Player 2 wins the round! )
score2 + = 1
else :
print ( "DRAW ROUND! )
print ( "---------------------------------------------------------------------------" )
print ( "FINAL SCORES ARE AS FOLLOWS: " )
print ( "PLAYER 1 SCORE: " ,score1)
print ( "PLAYER 2 SCORE: " ,score2)
if (score1>score2):
print ( "---------------------------------------------------------------------------" )
print ( "PLAYER 1 WINS! Congratulations!" )
print ( "---------------------------------------------------------------------------" )
elif (score1<score2):
print ( "---------------------------------------------------------------------------" )
print ( "PLAYER 2 WINS! Congratulations" )
print ( "---------------------------------------------------------------------------" )
else :
print ( "---------------------------------------------------------------------------" )
print ( "It's a draw game!" )
print ( "---------------------------------------------------------------------------" )
|
では、全体の情報をよく理解しましょう。
この関数はゲームの中で重要な役割を果たしますので、きちんと理解するようにしましょう。
2人のプレーヤー(この場合はコンピュータ)の得点を格納するために、score1
とscore2
という変数を作ります。
さて、ループはラウンドの合計数だけ実行され、各ラウンドで3つのことを含めるようにします。
- 1.両プレイヤーの入力。コンピュータには3つの選択肢を持つリストを定義し、ランダムライブラリを使ってコンピュータが3つの選択肢からランダムに1つを選ぶ。
- ラウンドの勝敗を確認します。どちらのプレイヤーが勝ったかを確認するために、両方の入力を引数として受け取り、どちらのプレイヤーが勝ったか(1か2)を返す別の関数を使用します。勝者チェック関数のコードは以下の通りです。
- スコア値の更新 次のステップは、1番目と2番目のプレーヤーのどちらかが勝った場合にスコアを増加させることであり、引き分けの場合は何も起こらない。
これと同じ手順をプレイヤーの言ったラウンド数だけ繰り返す。
3. 友達と一緒に遊ぶための機能を定義します。
友人と一緒にゲームをするのは、コンピュータと全く同じです。
唯一の違いは、この場合、2番目の入力をランダムに取るのではなく、2つの入力を取るということです。
もう一つの小さな変更点は、2人目のプレイヤーが選択肢を入力する前に、1人目のプレイヤーの回答を隠しておくことです。
これには getpass
メソッドを使用します。
それでは、友達と一緒に遊ぶためのコードをお見せしましょう。
この記事もチェック:Pythonのmapメソッドの使い方|ラムダ関数や引数が複数の場合の使い方も解説
最終成果物
これでゲームを始める準備が整いました。
コンピュータと友人との2ラウンドの結果をお見せしましょう。
まとめ
無事、ゲーム構築の全体像を理解することができたでしょうか!?おめでとうございます。
これで、じゃんけんのロジックの作り方がわかったので、他のゲームも作ってみましょう。
お読みいただきありがとうございました。