こんにちは、ユクサスです!
前回は、初期値の設置などについて書きました。みてない人はこちらを先に見るのをオススメします!
↓【ゲーム制作】勉強始めて約3週間の初心者がEカードゲーム作ってみた まとめはこちら
今回は、実際に設定した関数について紹介していこうと思います!
前回と同じく、使用言語は『Python』で、『Google Colaboratory』でコードの作成・実行しました。それぞれに関する記事も書いてるのでよろしければどうぞ!
↓コードを書くのに使用した環境『Google Colaboratory』はこちら
↓使用したプログラミング言語『Python』についてはこちら
↓このゲームを作るまでに学習した内容はこちら
3週間もあれば余裕で習得できるよ!笑
ゲームコードの概要
一応、ゲームコードの概要を改めて紹介するよ!
- 辞書として、数字を『キー』、カードを『値』として『皇帝デッキ』と『奴隷デッキ』を作成
- 出されたカードを『引数』とし、勝敗を『戻り値』として返す 『関数』 の作成
- ゲームの流れをコード
1については前回の記事で書いたので、今回は、2にあたる『出されたカードを『引数』とし、勝敗を『戻り値』として返す 『関数』 の作成』を詳しくご紹介していこうと思います!
関数の生成
まずは、今回作った関数を見てみましょう。
今回、生成した関数はこの4つです。関数自体は作ろうと思えばいくらでも作ることは可能です。しかし、勉強を始めてから3週間の私はこの4つが限界でした笑
あまり、効果的なものはないかも…
次に、簡単な説明を入れていくよ!
少し説明を入れてみました。難しい処理は行ってないので、見ただけですぐに理解できる方もいるかもしれません。
では、次に1つずつ詳しくみていきましょう。
処理の遅延
ここでは、処理の遅延を行なっています。
通常コードを実行すると、上から順番に処理されていき、全ての処理が終わるまでノンストップで進んで行きます。
しかし、それだと出すカードを入力してすぐに結果がわかってしまい、カードを出してかた結果の開示までの「ドキドキ」や「余韻」を味わえないと思い、処理の遅延を図る関数を作成しました。なので、このコードは必ずしも必要なコードではないですね笑
具体的な処理の説明としては、timeライブラリのtime.sleep()を用いています。timeライブラリは、前回も紹介した通り、「コードの実行・処理の時間」にかかわります。そして、time.sleep()は、()内に数字を引数として渡すことで、指定した秒数だけ処理を一時停止させることができます。
ただ、毎回time.sleep()を打ち込むのは少し大変だなと思ったので、短い単語のblank()とすることで打ち込む量を減らしたものになってます。
なので、実際にはtime.sleep()という処理をblank()という名前に変えただけの関数です。
必要性はあまりないかな…
勝敗の判定
次は、勝敗を決定する関数です。
ここではEカードゲームのルールに乗っ取って、勝敗を判定させました。Eカードゲームのルールなどについては、#1の方でまとめてあります。
↓【ゲーム制作】勉強始めて約3週間の初心者がEカードゲーム作ってみた #1 はこちら
また、戻り値として返しているのは下のようなものになっています。
引数に皇帝側が出したカードと奴隷側が出したカードを渡すことで、戻り値に勝敗を返すようにしています。
1番組み合わせとして多い、「お互い市民を出して、引き分けになる」という条件をelseでまとめて、残りの処理だけ1つずつ条件分けしていき、勝敗を判定させます。
どういう風に場合分けすれば、コードの量が1番少なるかを考えることで、コードの見やすさなどが大きく変わってくると思います!
今回皇帝デッキと奴隷デッキを辞書型で作ったので、素直に全部の組み合わせで条件分岐させました。
もっといい方法があると思うけど、当時の私は素直に全部場合分けをしました笑
実は、勝敗をこのように条件分岐させて判定させたことによって、悲劇を生むことになります…
その話は、そこの説明のときに詳しく話します。また、今ではもっといい関数の作り方を考えています。これも後ほど紹介する予定です!
結果発表
次にお互いが出したカードを公開する関数を作りました。
出したカードを引数にして、どちらが何を出したかを表示します。
処理自体は簡単ですが、何度も同じ処理が出てきたので、最初にopen()という関数とすることでコードをコンパクトにしようと思い、作成しました。
今改めてこの関数を見たら、後付けで作ったこともあり良くないところがありました。
それは、仮引数を雑に付けていることです!
この関数では、仮引数にAとBを使用しています。でも、AとBはどこか他のどころで出てきたのを覚えてますか?
そうです。丁度一つ前のところで出てきました。
ここでは、Aを‘皇帝の勝ち‘、Bを‘市民の勝ち’ という変数に定義しています。
今回は仮引数として、AとBを用いたのでコードの実行には支障はありませんでした。しかし、雑に変数などを設定していると、予期せぬエラーが起こった時に何が原因か分かりにくくなるので、極力避けるといいと思います!
最後に
今回はここら辺で締めようと思います。
ブログの記事として自分のやってきたことを紹介することで、もちろん制作当時はベストを尽くしてコーディングしていましたが、「ここは良くないな」や「こうすれば良かったな」というのが見えてきました。
ブログの記事を書くという作業で、自分のプログラミングのスキルも向上することができていて、一石二鳥ですね!笑
私のブログを通して、読者の方にそう感じてもらえたら嬉しいです!
次回はゲームの流れについて説明していく予定です!
では、次の記事で会いましょう!
ユクサスのアカウントで BlogMap も登録してます!記事を読んで、気に入っていただけたら「購読通知」と「いいね」をポチってもらえると、嬉しいです!ぜひ、お気軽にどうぞ!
BlogMapのページはこちらから⇨https://blogmap.jp/details/4997
何かわからないことや、質問があればお問合せフォームやコメント、ツイッターからでもどうぞ!
コメント