【ゲーム制作】勉強始めて約3週間の初心者がEカードゲーム作ってみた #4

ユクサス

こんにちは、ユクサスです!

 前回は、作った関数を紹介しました。今回からは、ゲームの流れのコードについて紹介していこうと思います!

↓【ゲーム制作】勉強始めて約3週間の初心者がEカードゲーム作ってみた まとめはこちらから

あわせて読みたい
【ゲーム制作】勉強始めて約3週間の初心者がEカードゲーム作ってみた まとめ こんにちは、ユクサスです!  このページは、【ゲーム制作】勉強始めて約3週間の初心者がEカードゲーム作ってみた のまとめページです。  このシリーズもそこそこの回...

 前回と同じく、使用言語は『Python』で、『Google Colaboratory』でコードの作成・実行しました。それぞれに関する記事も書いてるのでよろしければどうぞ!

↓コードを書くのに使用した環境『Google Colaboratory』はこちら

あわせて読みたい
【初心者必見!】グーグルコラボラトリーのメリットと使い方まで紹介しちゃいます! こんにちは、ユクサスです!  前々回の記事、初心者ブロガーの初級プログラミング#3では、Progateレッスン3で習った内容について書きました。そしてレッスン3の最後で...

↓使用したプログラミング言語『Python』についてはこちら

あわせて読みたい
Pythonって何?初心者目線でPythonでできることを紹介! こんにちは、ユクサスです! いざ、「プログラミングを始めよう!」、と思っても一体何から始めればいいか悩んでいませんか? プログラミングを始めるのに、最初に決め...

↓このゲームを作るまでに学習した内容はこちら

ユクサス

3週間もあれば余裕で習得できるよ!笑

あわせて読みたい
初心者ブロガーの初級プログラミングシリーズ まとめ このページは、『初心者ブロガーの初級プログラミング』シリーズのまとめページです!  今はまだ記事数が少ないですが、後々記事が多くなった時のために先にまとめペー...

 それでは、行きましょう!

目次

ゲームコードの概要

 まず最初にゲームコードの概要を改めて紹介します!

  1. 辞書として、数字を『キー』、カードを『値』として『皇帝デッキ』と『奴隷デッキ』を作成
  2. 出されたカードを『引数』とし、勝敗を『戻り値』として返す 『関数』 の作成
  3. ゲームの流れをコード

 前回は2の「出されたカードを『引数』とし、勝敗を『戻り値』として返す 『関数』 の作成」の説明を行いました。今回は、3の「ゲームの流れ」について話していきます!

ゲームの流れ

 では、まずゲームの流れをもう少し細かく見ていきましょう。

  1. ゲームモード(対人戦・CPU戦)の選択
  2. 使用デッキ(皇帝デッキ・奴隷デッキ)の選択
  3. 勝敗が決まるまで、カードを出し続ける
  4. 勝敗が決まったら終了する

 ゲームの流れは大体こんな感じです。今回は3の「勝敗が決まるまで、カードを出し続ける」の中の第1回戦までを紹介していこうと思います。

 モード選択〜第1回戦

 まずはコードを見ていきましょう。

 これは、CPU戦モードのプレイヤーが皇帝デッキを使用するときの第1回までのコードです。

ユクサス

次に、説明を入れていくよ!

ユクサス

初期値や自作関数の説明は以前の記事で解説してます!

あわせて読みたい
【ゲーム制作】勉強始めて約3週間の初心者がEカードゲーム作ってみた まとめ こんにちは、ユクサスです!  このページは、【ゲーム制作】勉強始めて約3週間の初心者がEカードゲーム作ってみた のまとめページです。  このシリーズもそこそこの回...

CPUの出す手順

 ここでは、randomモジュールを使ってCPUの出すカードの手順を決めています。先に、1〜5の数字を毎回ランダムに並び替えて、それをリストとして保存しています。

ユクサス

実は、CPUが毎回違う手順でカードを出すようにするまで悩みました…

 勉強を始めて3週間の私には、「1〜5までの数字を毎回ランダムにとり、しかも一度出た数を使わないようにする」というのはなかなか大変でした。今なら、いろいろ方法を思いつきますが、当時の私が思いついたのはこの方法です。

アイデア

  • 各回でCPU戦で、1〜5の数字をランダムで被らないようにとる

⬇︎

  • 先に、1〜5の順番を決めてリストにする
  • そのリストから順番に数字をとる

 このようにすれば、簡単に「1〜5までの数字を毎回ランダムにとり、しかも一度出た数を使わないようにする」を達成することができます。もちろん、他にもいろいろ方法はあると思います。

ユクサス

この方法を思いついた時は、きたーー!ってなりました笑

ユクサス

詰まっていたところを、ひらめきで突破していくのが
プログラミングの醍醐味の1つかも?

 random.sample()はリストやタプル、文字列などのシーケンスオブジェクトから複数の要素をリストで取得できます。sample()は重複なしで選択し、重複ありにしたい時はchoices()にするとできます。

対戦モードの選択・デッキの選択

 ここでは、対戦モード・デッキを選択するのに「input」を使っています。

input

  • キーボードの入力を受け取ることができる
  • ()内の文字を一緒に表示できる
  • 受け取った入力は全て文字列として扱う
  • 数値にしたい時は、上のようにint()で囲む

↓実際の実行画面

 対戦モードは変数select_modeに、デッキは変数select_sideとし、それぞれの値によってゲームの進行が変わるように場合分けします。

 input()を使用するのに注意をすることは、受け取った入力は全て文字列として扱うということです。今回、入力してほしいのは1と2ですが、ちゃんとint()で囲まないとすぐにエラーになります。

ユクサス

頭ではわかってるのに、何回もint()をつけ忘れてエラーが出ました笑

1回戦結果開示まで

ユクサス

いよいよ、1回戦の解説に入るよ!

 今まで出てきたことを使って、ゲームを進行していきます。まず、print()を使い簡単なナレーションを入れていきます。現在の手札の状態を表示し、プレイヤーにカードを選択させます。選択するときは、先ほどと同様にinput()を用いて入力を受け取ります。

 次に、コンピュータのカードを決めます。あらかじめ、1〜5がランダムに並んでいるリストnumberから順番に取ります。

 リストの要素の番号

 リストから要素を取り出すときは、リスト名[番号]として要素を取ります。しかし、リストの要素は左から順番に番号を0からつけられます

 つまり、要素1を取り出すには、リスト名[0]・要素2を取り出すには、リスト名[1]…、と言うふうにリスト要素の順番と1ずれます

ユクサス

慣れないうちは、とても間違いやすいので要注意!
(私は間違いすぎて、Colaboratoryに何度も怒られてます笑)

 お互いのカードが決定したら、自分で作った関数judge()を使い戻り値をresultに代入します。そして、あらかじめ作っておいた関数openとナレーションを合わせて、結果の開示を行います。

結果による場合分け

 最後にresultの値によって、場合分けしていきます。resultの値については下の通りです。

 今回は最初にCPUが勝った時を場合わけして、print()を使って煽り文句を入れました。苦手な方は、普通に「コンピュータの勝ち!」とかにするといいと思います。

 次に、引き分けの時について場合分けします。実際に使ったカードは捨てるというのを再現したかったので、使用したカードを辞書型のデッキから取り除きます

辞書型の要素の消去

 今回は『del』を使いました。

  • del 辞書名[キー]

 このようにすることで、指定した「キー」とそれに対応する「値」を辞書から消去できます。

ユクサス

del を使って、ゲームのリアルさを出そうとしました!

ユクサス

でも、こうすることによって悲劇が起こります…

最後に

 今回はここで締めようと思います。

 ゲームの流れを説明したので、段々と完成が見えてきました。もちろんここまでくるのに、スラスラできたと言うわけではありません。ちょっと難しいなと思った方がいても、全然おかしくないです。

ユクサス

このブログで一緒に成長していこう!

 次回からは、第2回戦以降のコードの解説をしていきます。「第1回戦ができたなら、簡単じゃね?」っと思った方もいるかもしれませんが、実は悲劇はそこで起こったのです…

 そんなこんなで私がこのゲーム制作で1番大変だったところについても、詳しく解説していきます!

ユクサス

では、また次の記事で!

 ユクサスのアカウントで BlogMap も登録してます!記事を読んで、気に入っていただけたら「購読通知」と「いいね」をポチってもらえると、嬉しいです!ぜひ、お気軽にどうぞ!

BlogMapのページはこちらから⇨https://blogmap.jp/details/4997

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次
閉じる