コラム

【書籍紹介】「土日で楽しむゲームプログラミング入門」

タイトル:「土日で楽しむゲームプログラミング入門」

【基本情報】
・著者:日経ソフトウエア
・発売日:2020年8月3日
・出版社:日経BP
・ページ数:180ページ
・ISBN:9784296107025
・解説時の版:2020年9月16日 発行
・超初心者へのおすすめ度:★★★

日経BPパソコンベストムックとして発売された雑誌型のムック本です。

過去に出版された「日経ソフトウエア」の一部コーナーで取り上げられた「ゲームに関する内容」がまとめられたものです。

日経ソフトウエアは私の愛読書の一つです。

毎回、新しい発見があり楽しませていただいていますので、その宣伝もかねてご紹介します。

2024年2月現在の直近に修正しました

直近の5号を紹介しましたが、ご覧のようにPythonの関連記事が多いです。

難しい記事も多いですが、初心者でも分かる解説が特集されたりして私個人は大好きです。

その中から、Pythonのゲームに関する記事がまとめられたのが本書です。

内容はこちらにも記載されていますが、180ページ中118ページがPythonを使ったゲームプログラミングです。

おすすめのポイント

私が初心者向けにおススメする点は、

  • スクリプト(コード)がすべて記載されているので、このまま入力すれば実行できる
  • サンプルコードがダウンロードできる(エラーなし!)
  • ポイントごとに解説があって分かりやすい
  • 理屈が分からなくてもとりあえず動く!

が挙げられます。

一部、数学が分からないと説明が理解できない部分があります。

また、リバーシについてはAI(機械学習)の基礎が分かると良いです。

しかし、人工知能に関する知識がなくてもAIのレベルを設定できるゲームプログラミングが可能です。

マイナス点

反対にマイナス点として、

  • 関連する解説はあるが、基礎から順序立てた説明ではない
  • 本当の「AI」ではない(詳しくは後述)

ということで、「超初心者が理解しながらゲームが作れる」という本ではありません。

「とりあえず作りながら仕組みを理解しよう」という本だと思えば正解です。

マイナス点ということではありませんが、第3部で紹介されている「プチコン4」は環境が無い人はできません。

また、「メガドライブで動くゲームを作ろう」は動作環境を用意するのが初心者には大変です。

第4部の「ロボマスターS1」を使ったプログラミングは少しだけPythonを使って紹介していますが、これも本体を持っていない人にはあまり関係ないと思います。

このブログ記事では、主にPythonを使ったゲームプログラミングの内容を紹介しつつ、2022年11月現在に実行する場合の開発環境の注意点についても詳しくご紹介します。

書籍内の開発環境

開発環境については、以下の通り明記されています。

なお、記事によって著者が異なるため、章ごとに環境が異なります。

  • 第1部第1章と第2章
  • OS:Windows10
  • Python:3.7.3
  • ライブラリ:標準ライブラリのみ利用
  • 第2部第1章~第4章
  • OS:記載無し
  • Python:記載無し
  • ライブラリ:Pygame Zero(pgzero)
    関連ライブラリ:numpy、pygame

コーディングに際し、メモ帳でもPythonのIDLEでもなんでもOKですが、私はPyCharmを使っています。

一部の記事では「Anaconda」を導入するよう説明がありま

しかし、初心者の方はAnacondaをインストールするのはやめた方が良いです。

理由は割愛しますが、いろいろと大変になります(笑)

PyCharmをまだ使ったことがないという方は、下の動画をご覧ください。

実際のゲームプレイ動画

本ブログ記事では伝わらない、この書籍のゲームをプレイした動画を用意しました。

実際にどんなゲームが作れるのか?を動作でご紹介しますので、これを見たら作ってみたくなります。きっと。

*あくまでゲームの様子を紹介する動画です

内容と注意点

第1部第1章:PythonでAIと対戦できるリバーシを作ろう~データ構造とUI編~

この章では、Pythonの標準ライブラリである「Tkinter」を使用します。

初めに、リバーシの「ゲームUI(ユーザインタフェース)」を作成する方法が理解できます。

TkinterはPythonでGUIアプリケーションを実装するのに便利なライブラリです。

ここではTkinterを多用するので、デスクトップアプリケーションに興味がある方も参考になると思います。

この時点では、ゲーム開発専用のライブラリは使いません。

インストールなどの作業がいらないという点は初心者に嬉しい点ですね。

2次元リストを理解していないと「何をやっているかワカラナイ」という状態かと思います。

しかし、とりあえず動かすだけなら理解は不要です。

リバーシゲームのスクリプト実行時
スクリプトの実行例

この章はゲームの構造を理解する基本となります。

そのため、CPは「空いているところにランダムに配置するだけ」という仕組みです。

実際に対戦してみるとCPには簡単に勝てるので、ゲームとしては物足りないでしょう。

しかし、クラスを定義した「割としっかりした構造のゲーム」を作る体験ができるので、初心者の方にも良い勉強になると思います。

第1部第2章:PythonでAIと対戦できるリバーシを作ろう~AI編~

この章では、第1章をベースにアルゴリズムを活用したAIを実装しています。

ここでは「ミニマックス法」と「アルファベータ法」を用いた処理が使われています。

AIレベルを設定すると、「何手先まで読んで最善の手を打たせるか」が指定できます。

レベルが上がれば上がるほど、処理が重くなるので、若干動き(反応)が遅くなります。

理由は、numpyなどの本格的なAI向けライブラリが使われていないためです。

学習としてはとても良い教材だと思うのでその点は仕方ないと思います。

Pythonの標準ライブラリだけでも「アルゴリズムによってこれだけ強いリバーシAIが作れる!」ということが分かります。

ぜひ楽しんでやってほしいと思います。

リバーシゲームのスクリプト実行時
GUIは前の第1章と同じです

なお、本当の意味で「AI」を期待している方には、少し物足りないかもしれません。

「AI」といえば「機械学習」「深層学習」をイメージする方が多いかもしれません。

このリバーシではアルゴリズムによるAIの実装が行われています。

その点は理解して読み進めましょう。

第2部第1章の準備

この章ではPythonのゲーム開発用ライブラリ「Pygame Zero」を使います。

前述の通り、本には詳しい開発環境が記載されていません。

しかし、本ブログ執筆の時点では以下のバージョンで動作が確認できました。

  • Python:3.7.3、3.9.x、3.10.x、3.11.x
  • numpy:1.21.6(pgzeroと一緒に入る)
  • pgzero:1.2.1
  • pygame:2.1.2(pgzeroと一緒に入る)

以下、初めてpygameを使う方に向けて補足します。

pygameというライブラリと、pygame zeroというライブラリは別のものです。

イメージとして、pygameがマニュアル車、pygame zeroはオートマ車という認識で良いと思います。

「Pygame Zero」をインストールすると、関連するライブラリとして「numpy」と「pygame」がインストールされます

インストール時は順番に注意してください。

pip install pgzero

*pygame zeroをインストールするときの名前は「pgzero」です。

PyCharmでインストールする際、検索ボックスには「pgzero」と入力。

第2部第1章:Pygame Zeroゲームプログラミング入門

この章では、初めに「pygameライブラリの基礎」を習得します。

その後、「ジャンプゲーム」を作る過程で重力加速度を計算する処理を知ることができます。
(自然に落下する際のスピードが段々速くなる処理です。)

ジャンプゲームの実行時
スクリプトの実行例

さらに、「シューティングゲーム」を作りながらゲームの衝突判定の仕組みを理解できます。

敵の弾はランダムではなく、自機に向かってくるので結構しっかりした動作が実現されています。

シューティングゲームの実行時
スクリプトの実行例
シューティングゲームはゲームオーバーも実装
オープニングの他に、ゲームオーバー画面も切り替えられます

単純ですが、本格的な2Dゲームが作れるので面白いです。

ここまでの知識を使って、ファミコンで発売されたゲームは技術的に作れるようになります。
(あくまで「可能」になるという意味です。)

第2部第2章:スポーツゲームを作って遊ぼう~前編「100m走」と「走り幅跳び」を作る~

この章でもPythonのゲーム開発用ライブラリ「Pygame Zero」を使います。

前章と同じく、本には詳しい開発環境が記載されていません。

しかし、本記事の時点では以下のバージョンで動作が確認できました。

  • Python:3.7.3、3.9.x、3.10.x、3.11.x
  • numpy:1.21.6(pgzeroと一緒に入る)
  • pgzero:1.2.1
  • pygame:2.1.2(pgzeroと一緒に入る)

執筆者が同じ方ですが、元記事(日経ソフトウエア)では別の号に掲載された記事なので、pygame zeroについての説明は一部重複しています。

「100m走」と「走り幅跳び」というゲームを作りながら、Pythonのゲームプログラミングを体験します。

キャラクターの画像を2パターン使うことで、走っているようなアニメーションに見える工夫がされています。

100m走の実行例
100m走の実行例
100m走のゴール時
100m走のゴール時の処理結果
走り幅跳びの実行例
走り幅跳びの実行例(操作が難しい!)
走り幅跳びの結果画面
走り幅跳びの結果画面(全然飛べていない、、、)

ここでも重力加速度を計算する処理が使われます。

ジャンプ時の速度計算に三角関数(mathライブラリ)を利用しています。

計算の仕組みは単純化しているので少し現実離れしていますが、構造を理解するという意味では良いサンプルになっていると感じます。

第2部第3章:スポーツゲームを作って遊ぼう~後編「110mハードル走」「ハンマー投げ」「クレー射撃」を作る~

この章は、前の章の続きです。

「110mハードル」「ハンマー投げ」「クレー射撃」を作ります。

この「110mハードル」は前の章の「100m走」に衝突判定処理が追加されます。

110mハードル走の実行例
110mハードル走の実行例
110mハードル走のゴール時
110mハードル走のゴール時

「ハンマー投げ」はハンマーの動きを3次元で計算し、描画を2次元に変換するという面白い処理。

ハンマー投げの実行時
ハンマー投げの実行例、放物線を描いて飛んでいる!

最後の「クレー射撃」は奥行きが工夫されています。

「2Dであるpygame zero」で「3Dを表現する」という処理が面白いです。

クレー射撃の実行例
クレー射撃の実行例、目標物が奥に向かって放物線を描いて飛んでいる!

いずれも、ゲームをプログラミングするための基本的な仕組みや考え方を理解することで、オリジナルのゲームを作る基礎が身につきます。

第2部第4章:100未満で弾幕系シューティングゲームを作る

「100行未満で」とあるように、非常に短いコードで本格的なシューティングゲームを作ることができます。

前の章とは執筆者が違いますが、引き続きpygame zeroを使っています。

弾幕シューティングの実行例
シューティングゲームの実行例
弾幕シューティングのゲームオーバー時
すぐにゲームオーバーになります

初心者向けには基本的な説明が少ないように思いますが、前の章までである程度理解できていれば問題ありません

前述のスポーツゲームよりも三角関数を多用しています。

中学校レベルの数学が苦手な人には少し難しいかもしれません。

それにしても、その昔「グラディウス」「R-TYPE」すらクリアしたことがない私には難しすぎました…。

第2部第5章:Pythonでコスパ最高!プログラミング「ライフゲーム」

この章は、今までとは少しジャンルが違います。

ライフゲームとのことですが、個人的に「ゲーム」として面白さを感じなかったので詳しい説明は省略します。

ごめんなさい。

ライフゲームの実行時
ライフゲームの実行例

ただ、今までとの大きな違いはpygame zeroではなく本家「pygame」を使っている点です。

pygame zeroはオートマ車であると説明しましたが、pygameを使ってみたいという方には参考になると思います。

第2部第6章:Pythonでコスパ最高!プログラミング「群集シミュレーション」

前の章と同じく、この説明も省略します。

ゲームというより、シミュレーションです。

群集シミュレーションの実行時
群集シミュレーションの実行例

興味がある方は、ぜひチャレンジしてください。

留意点①

Pythonのバージョンは各章ごとの環境を用意すれば問題ありませんが、ライブラリのバージョンには要注意です。

ライブラリごとの組み合わせによっては、上手く動作しないことがあります。

特にAIに関するライブラリは日進月歩で、古いライブラリでは動かなかったり推奨されていなかったり…。

とにかく、様々な理由によりエラーが消えないということがあります。

今回の記事に関連して、numpyというライブラリはAI分野で使われることが多いですが、バージョンによって動かないという例が多いライブラリの一つです。

その場合、こちらの記事にコメントを頂くか、フォームにてご連絡いただければ可能な限り対応します。

ぜひご連絡ください。

留意点②

写経でうまくいかない、エラーが出るという場合、サンプルコードが提供されているので安心です。

https://info.nikkeibp.co.jp/media/NSW/atcl/books/072900044/

しかし、サンプルコードを実行する際は以下のようなひと手間がかかります。

①第2部のサンプルコードは拡張子が「txt」になっているので、ダウンロード後に自分で「py」に直す必要があります。

②どのファイルが本のどのスクリプトに対応しているか?が分かりづらいので、それを理解する時間が必要です。

③素材ファイルは一部しか含まれていないので、本を見ながらサイトよりダウンロードする必要があります。

(そしてファイルをimagesフォルダに入れることが必要。)

素材のダウンロードサイトの紹介
https://kenney.nl/assets/platformer-charactersのページ

これはサンプルコードを利用する際の問題ではなく、自分で本を見ながら写経する場合でも必要な作業です。

これらの作業は特別難しいわけではありませんが、パソコンに不慣れな方にはハードルが高いと思われます。

関連記事

まとめ

今回は雑誌「土日で楽しむゲームプログラミング入門」について解説しました。

他にもPythonの書籍を紹介していますので、ぜひこちらのデータベースもご覧ください。

書籍に興味を持って下さった方は、こちらから購入して頂けると嬉しいです。
よろしくお願いいたします。

それでは、ステキなPythonライフを!

Pythonのゲームプログラミングについて詳しく知りたいという方は、こちらの書籍もおススメです。

*一部の書籍は「pygame zero」ではないものが含まれます

(アマゾンアソシエイトリンクとなっています。)

ABOUT ME
papa3
某教育機関で現役の講師をしながら、ブログとYouTubeでプログラミングの情報を発信しています。個人でもウェブアプリケーション開発と運営をしながら本業収入<副業を目指しています!

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です