第11章 じゃんけんゲームを作ろう
いよいよ最後の章です。今までの復習なので前置きなしで進めていきます。「もうバッチリ!」という人にはもしかしたら退屈に思うかもしれません。
1.プロジェクトの作成
2.シーンとノードを追加
3.スクリプトとシグナルの接続
プロジェクトの作成
まずはプロジェクトの作成をしましょう。筆者は「じゃんけんゲーム」というプロジェクト名にしました。
シーンとノードの追加
次はシーンとノードの作成です。
2Dシーンを作成して「Main」という名前でシーンを保存しましょう。また「Main」をメインシーンに設定してもオッケーです。
以下の画像を保存してください。
Spriteノードを追加して保存した画像を割り当ててください。ノードの名前は「Player」にしてください。
さらに縦に3分割してください。さらにゲーム画面上で左側に配置してください。(紫色の枠がゲーム画面上です)
同様のSpriteノードを右側に配置します。ノード名は「Cpu」にします。
「Button」ノードを3つ追加していきます。「Gu」「Tyoki」「Pa」という名前にします。
テキストも同様に変更します。
「Label」ノードを追加してください。ノード名は「Result」です。
「Player」ノード(画像)の少し上に「Result」ノードを配置してください。Textは「Result」です。
「Main」ノード(ルートノード)にスクリプトをアタッチして、「Gu」「Tyoki」「Pa」の「pressed」シグナルを接続してください。
残りはスクリプトの作業です。
スクリプトとシグナルの接続
まずはじゃんけんの出す手を以下の変数で表現します。
gu :グーの値を示す。(整数の 0 )
tyoki :チョキの値を示す。(整数の 1 )
pa :パーの値を示す。(整数の 2 )
上記の3つの変数はソースコード上で統一するので、ブロック外で変数宣言をします。
extends Node2D
# ----------------追加----------------
# じゃんけんの値
var gu = 0
var tyoki = 1
var pa = 2
func _ready():
pass
func _on_Gu_pressed():
pass
func _on_Tyoki_pressed():
pass
func _on_Pa_pressed():
pass
ほかにも勝ち負けを変数で表現します。
win :じゃんけんに勝った。(整数の 0 )
lose :じゃんけんに負けた。(整数の 1 )
draw :じゃんけんであいこになった。(整数の 2 )
同様にソースコード上で統一するためにブロック外で変数宣言します。
extends Node2D
# じゃんけんの値
var gu = 0
var tyoki = 1
var pa = 2
# ----------------追加----------------
# 勝ち負けの値
var win = 0
var lose = 1
var draw = 2
func _ready():
pass
func _on_Gu_pressed():
pass
func _on_Tyoki_pressed():
pass
func _on_Pa_pressed():
pass
次に zyanken関数を用意します。引数は player_hand , cpu_handの2つです。戻り値は勝敗を表す値です。
zyanken( player_hand , cpu_hand )
じゃんけんの勝ち負けを計算する関数
player_hand:プレイヤーが出した手
cpu_hand :CPUが出した手
戻り値 :勝敗を表す値
extends Node2D
# じゃんけんの値
var gu = 0
var tyoki = 1
var pa = 2
# 勝ち負けの値
var win = 0
var lose = 1
var draw = 2
func _ready():
pass
# ----------------追加----------------
# じゃんけんの勝ち負けを計算する関数
func zyanken( player_hand , cpu_hand ):
pass
func _on_Gu_pressed():
pass
func _on_Tyoki_pressed():
pass
func _on_Pa_pressed():
pass
まずは「あいこ」のパターンを作りましょう。
# じゃんけんの勝ち負けを計算する関数
func zyanken( player_hand , cpu_hand ):
# プレイヤーとcpuの出した手が同じ場合はあいこ
if player_hand == cpu_hand :
return draw
次にプレイヤーが勝つパターンを if文で再現します。以下がプレイヤーが勝つパターンです。
パターン1:プレイヤーが「グー」で、CPUが「チョキ」
パターン2:プレイヤーが「チョキ」で、CPUが「パー」
パターン3:プレイヤーが「パー」で、CPUが「グー」
まずパターン1を if文で再現します。
# じゃんけんの勝ち負けを計算する関数
func zyanken( player_hand , cpu_hand ):
# プレイヤーとcpuの出した手が同じ場合はあいこ
if player_hand == cpu_hand :
return draw
# プレイヤーが「グー」で、CPUが「チョキ」
if player_hand == gu:
if cpu_hand == tyoki:
return win
同じようにパターン2、パターン3を実装します。
# じゃんけんの勝ち負けを計算する関数
func zyanken( player_hand , cpu_hand ):
# プレイヤーとcpuの出した手が同じ場合はあいこ
if player_hand == cpu_hand :
return draw
# プレイヤーが「グー」で、CPUが「チョキ」
if player_hand == gu:
if cpu_hand == tyoki:
return win
# プレイヤーが「チョキ」で、CPUが「パー」
if player_hand == tyoki:
if cpu_hand == pa:
return win
# プレイヤーが「パー」で、CPUが「グー」
if player_hand == pa:
if cpu_hand == gu:
return win
「あいこ」「勝利」以外のパターンは負け以外にないため、最後は負けの値を戻り値にする。
# じゃんけんの勝ち負けを計算する関数
func zyanken( player_hand , cpu_hand ):
# プレイヤーとcpuの出した手が同じ場合はあいこ
if player_hand == cpu_hand :
return draw
# プレイヤーが「グー」で、CPUが「チョキ」
if player_hand == gu:
if player_hand == tyoki:
return win
# プレイヤーが「チョキ」で、CPUが「パー」
if player_hand == tyoki:
if player_hand == pa:
return win
# プレイヤーが「パー」で、CPUが「グー」
if player_hand == pa:
if player_hand == gu:
return win
#残りは負けのパターン
return lose
これでじゃんけんを行う zyanken関数を作れました。次は画面を操作するための zyanken_draw関数を作成します。
zyanken_draw関数の引数は player_hand , cpu_hand , result の3つです。
zyanken_draw( player_hand , cpu_hand , result )
じゃんけんの結果を画面上に表示する関数
player_hand:プレイヤーが出した手
cpu_hand :CPUが出した手
result :勝敗の結果を表す値
戻り値 :なし
extends Node2D
# じゃんけんの値
var gu = 0
var tyoki = 1
var pa = 2
# 勝ち負けの値
var win = 0
var lose = 1
var draw = 2
func _ready():
pass
# じゃんけんの勝ち負けを計算する関数
func zyanken( player_hand , cpu_hand ):
--- 省略---
# ----------------追加----------------
# じゃんけんの結果を表す関数
func zyanken_draw( player_hand , cpu_hand , result ):
pass
func _on_Gu_pressed():
pass
func _on_Tyoki_pressed():
pass
func _on_Pa_pressed():
pass
player_hand と cpu_handをそれぞれの「Player」「Cpu」の「frame」に代入します。画像は「グー」「チョキ」「パー」の順番に並んでいるため、それぞれの番号と一致します。
# じゃんけんの結果を表す関数
func zyanken_draw( player_hand , cpu_hand , result ):
# それぞれのframeに代入
get_node("Player").frame = player_hand
get_node("Cpu").frame = cpu_hand
次に「result」を用いて「Label」に「Win」「Lose」「Draw」の文字列を代入します。( " をしっかり入力してください )
# じゃんけんの結果を表す関数
func zyanken_draw( player_hand , cpu_hand , result ):
# それぞれのframeに代入
get_node("Player").frame = player_hand
get_node("Cpu").frame = cpu_hand
# それぞれの勝敗に合わせたテキストを設定する
if result == win:
get_node("Result").text = "Win"
if result == lose:
get_node("Result").text = "Lose"
if result == draw:
get_node("Result").text = "Draw"
これで zyanken_draw関数は完了です。
最後は ボタンを押したときの処理を書いていきます。
「Gu」のボタンを押したときの処理を書きます。まずは player_hand , cpu_hand , result の3つの変数を用意します。
func _on_Gu_pressed():
# プレイヤーの手、CPUの手を表す変数
var player_hand
var cpu_hand
# じゃんけんの勝敗を表す変数
var result
シード値を変えてからplayer_hand に gu を、cpu_hand に0~2の乱数を代入します。
func _on_Gu_pressed():
# プレイヤーの手、CPUの手を表す変数
var player_hand
var cpu_hand
# じゃんけんの勝敗を表す変数
var result
# シード値の変更
randomize()
# じゃんけんの手を代入
player_hand = gu
cpu_hand = randi() % 3
zyanken関数を使って勝敗を result に代入します。その後、zyanken_draw関数で画面をアップデートしていきます。
func _on_Gu_pressed():
# プレイヤーの手、CPUの手を表す変数
var player_hand
var cpu_hand
# じゃんけんの勝敗を表す変数
var result
# シード値の変更
randomize()
# じゃんけんの手を代入
player_hand = gu
cpu_hand = randi() % 3
# じゃんけん勝敗をresultに代入
result = zyanken( player_hand , cpu_hand )
# 画面をアップデート
zyanken_draw( player_hand , cpu_hand , result )
残りの「tyoki」「pa」のボタンを押したときも同様の処理を行います。player_hand に代入する値が違うことに注意してください。
func _on_Tyoki_pressed():
# プレイヤーの手、CPUの手を表す変数
var player_hand
var cpu_hand
# じゃんけんの勝敗を表す変数
var result
# シード値の変更
randomize()
# じゃんけんの手を代入
player_hand = tyoki
cpu_hand = randi() % 3
# じゃんけん勝敗をresultに代入
result = zyanken( player_hand , cpu_hand )
# 画面をアップデート
zyanken_draw( player_hand , cpu_hand , result )
func _on_Pa_pressed():
# プレイヤーの手、CPUの手を表す変数
var player_hand
var cpu_hand
# じゃんけんの勝敗を表す変数
var result
# シード値の変更
randomize()
# じゃんけんの手を代入
player_hand = pa
cpu_hand = randi() % 3
# じゃんけん勝敗をresultに代入
result = zyanken( player_hand , cpu_hand )
# 画面をアップデート
zyanken_draw( player_hand , cpu_hand , result )
これで完成です。実行をしてみましょう。
これでじゃんけんゲームは完成です。
ここまでプログラミングができたら、ミニゲームのようなものは作ることができると思います。
Godotには他にも音をだしたり、タイマーを測ったりするノードもあります。自分ですべて1から作る前に公式ドキュメントを見て、使えそうならガンガン使っていきましょう!
全11章、ここまで本当にお疲れさまでした!!
まだまだ作り足りない場合は公式ドキュメントの「最初のゲーム」がオススメです。おそらく今の読者の実力であればクリアできると思います。
前
この記事が気に入ったらサポートをしてみませんか?