alt text

今日の目標!

pyxel(ピクセル)をつかってみよう

今回から、pyxelというライブラリを使ったゲーム制作を行っていくよ。インストールする前にちょっとだけ紹介するね。

ゲームエンジンとは

みんなが遊んでるゲームで、起動画面とかで、こういう画面見たことない?
alt text
alt text
実はこれ、「こういう名前のゲーム開発エンジンを使って開発したよ!」ていうマークなんだよね。で、ゲーム開発エンジンって何かってことだけど、簡単に言うと「ゲームに必要な要素が詰まった開発環境」のこと。
例えば、FPS(一人称視点シューティング:自分の目線で銃を撃ったりするやつ)のゲームを作ったときに、シューティングの部分だったり、弾の弾道計算なんかはプログラミングでできるけど、ゲーム用のマップを作ったり、マップに生えている草木なんかのオブジェクトをイチから作っていると、時間がいくらあっても足りないよね。
ゲーム開発エンジンには、そういう細かいところの開発を助けてくれて、メインのプログラミングでの開発に集中しやすくしてくれる効果があるよ。
ゲーム開発エンジンにもいろいろあって、バリバリのきれいな3dグラフィックを扱うのが得意なエンジンや、スマホゲームを開発するのが得意なエンジンなど、いろいろ。大きなゲーム開発会社だと、独自のゲーム開発エンジンを作っているところもあるくらい。

レトロゲーム。2Dゲーム開発エンジン「Pyxel」

そもそもレトロゲームってなんだよ、ていう話だけど、みなさんファミコンとかって聞いたことある?
alt text
ファミリーコンピューターっていって、リッキーが幼稚園くらいにはまだ普通に遊ばれてたゲーム機。遊ばれてたゲームがどんなだったかっていうと
こんなのとか
alt text
こんなのとか
alt text
なんか、全体的に四角いwでも、↑みたいな画像で、ちゃんと車が右奥の方向に進んでるのを表現するのって、すごくない??
ピクセルという単位があって、絵やグラフィックを表すための四角いマスのことで、このピクセルが小さければ小さいほど、きれいなグラフィックが表現できるんだけど、当時はそのピクセルが現代と比べるととっても大きくて、めちゃくちゃ大きい点を使って、いかにキャラクターなどの絵を表現するかと言うのが、すごく難しかったわけ。

ファミコン時代のマリオ
このマリオがもう現在ときたら、
switchのマリオ
こうなっちゃうんだから、すごいよね!

レトロゲームの魅力

リッキーがゲームをしていた頃は、ゲームのグラフィック面での進化がすごくて、グラフィックがきれいなゲーム = 新しいゲーム = 良いゲーム、みたいなところがあった気がする。実際、ファミコンが出て、スーパーファミコンが出て、プレステが1,2、3と出ていくにつれて、ものすごい勢いでグラフィックの技術が進歩していった。ファイナルファンタジー(通称FF)っていうRPGがあるんだけど、リッキーが小学生のときこうだったのが(↓FF5)
FFV
中学生の時プレステ2がでて、こうなったのはマジでぶったまげた(FF10)
ffx

でも、nintendoストアとかsteamとかのゲームストアで、よく昔のゲームのリマスター版が販売されてたりするよね。あと、めちゃくちゃ技術が進歩している中で、マイクラやロブロックスみたいなシンプルなグラフィックのゲームが世界中で流行ったり、アンダーテイルなんていうド直球な2Dゲームが500万本売れたりしてる。
アンダーテイル

これってつまり、ゲームの面白さはグラフィックだけじゃないってこと。ゲームシステムだったり、音楽だったり、演出だったり、いろんな要素が関係しているってこと。アイディア次第ですんごいゲームが作れちゃうってこと。実際昔のゲームをあそんでみると、技術的な制限がある中で超天才的なアイディアとセンスで作ってるのが感じられることがあるよ!ぜひやってみてね

ゲームクリエイターの桜井政博さんが運営しているYoutubeチャンネルで、ゲーム制作の話やスマブラなどの制作秘話みたいな情報がもりだくさん!とっても面白い話が聞けるチャンネルなので、ぜひ見てみてね!
桜井政博のゲームを作るには(https://www.youtube.com/@sora_sakurai_jp)

Pyxelとは

「かんたんに・楽しく」ゲーム開発ができるように作られた、2Dゲーム開発専用のライブラリがpyxel.シンプルなpythonコードでアイディアをゲームに実装できるようになっている。
コーディング以外でも、ドット絵(レトロゲーム用の絵)を描けるツールが用意されていたり
ドット絵
レトロゲーム風音楽を作成できるツールがあったり
サウンドエディタ
いろいろ便利な機能がついている!

早速インストールしてみよう

ライブラリのインストールは、ライブラリのところに書いてあるので、忘れちゃった人は確認してみよう。
まずは、vscode内にプロジェクトディレクトリを作成しよう。今回は最初pyxelの練習用のディレクトリだから、pyxel_trainingという名前のディレクトリを作成するよ。

mkdir pyxel_training

ターミナルを開いて、まずは作成したディレクトリに移動しよう。

cd pyxel_training

そしたら、pipコマンドを使って、pyxelをインストール!

pip install pyxel

こんな感じの表示が出たらインストール成功.
pip install
これで、pyxel_trainingディレクトリ内で、pyxelを使えるようになった!

では、実際にライブラリをimportして使ってみよう!

黒い画面を出してみよう

pyxel_traininigディレクトリの中に、pythonファイルを作成するよ。はじめてpyxelを実行するので、first_pyxel.pyとしよう。

touch first_pyxel.py

まずはとにもかくにも、ゲームの画面(枠)を出すコードを、そのまま打ち込んでみよう。

import pyxel

pyxel.init(160, 120, title="pyxel training")
pyxel.show()

実行してみて黒い画面が表示されたらOK!
pyxel黒画面

3行しかないので、それぞれに書かれていることを整理してみよう。

とりあえず画面を表示できたけど、まだ画面内に何かを表示する処理を書いてないので、真っ黒な画面が出ているだけ。

pyxelでお絵かきしよう

pyxelには線を引いたり、四角や三角などの図形を描いたりする関数が用意されているから、早速使ってお絵かきしていこう!

と言いたいところだけど、その前にちょっと説明しときたいことがあるからちょっと待って!

前置きが長くなったので、そろそろpyxelでお絵かきしようか!
まず手始めに、直線を描画(びょうが)してみようか!(画面上に出すことを、描画といいます)
画面を表示したあとに線を引いても、その線は反映されないので、線を引く関数はshow()関数の前に書くよ!

import pyxel

pyxel.init(160, 120, title="pyxel training")

# (10, 20)の座標から(80, 20)まで,赤色(8番)の線を引く
pyxel.line(10, 20, 80, 20, 8)

pyxel.show()


実行するとこんな感じ!
alt text

線を引く以外にも、描画をする関数がたくさんあるよ!コードにコメントと一緒に書いておくから、試してみたい関数を書いてみよう。引数をアレンジして、色を変えたり、サイズを変更したりしてみよう。

import pyxel

pyxel.init(160, 120, title="pyxel training")

# 線を引く:(始点のx, 始点のy, 終点のx, 終点のy, 色番号 )
pyxel.line(10, 20, 80, 20, 8)

# 点をうつ:(x, y, 色番号)
pyxel.pset(10, 10, 7)

# 円を描画(中心のx, 中心のy, 半径, 色番号)
pyxel.circ(20, 50, 10, 11)

# 円の枠(円周)を描画:(中心のx, 中心のy, 半径, 色番号)
pyxel.circb(50, 50, 10, 11)

# 四角を描画:(左上のx, 左上のy, 幅, 高さ, 色番号)
pyxel.rect(10, 80, 20, 10, 13)

# 四角の枠を描画:(左上のx, 左上のy, 幅, 高さ, 色番号)
pyxel.rectb(40, 80, 20, 10, 13)

# 三角形を描画:(点1のx, 点1のy, 点2のx, 点2のy, 点3のx, 点3のy, 色番号)
pyxel.tri(80, 40, 80, 60, 100, 60, 15)

# 三角形の枠を描画:(点1のx, 点1のy, 点2のx, 点2のy, 点3のx, 点3のy, 色番号)
pyxel.trib(120, 40, 120, 60, 140, 60, 15)

pyxel.show()

図形

ちなみに、英語で
line = ライン:線
circle = サークル:円
rectangle = レクタングル:長方形
triangle = トライアングル:三角形
pyxelの関数名はこれらを短縮したもので、枠線の関数にbがついているのは、border(境界線・枠線)のb。

練習①

以下の条件で描画してみよう。必要な計算はすべてpythonで計算する(自分で計算しない)こと。

画面の端から10ずつ離れたところから、画面の中心に向かって線を引く

ヒント

変数を活用しよう

練習②

以下の図形を描画してみよう

中心に20x20の正方形の枠を書いて、そこから2ピクセルずつ大きい正方形を5つ描く

ヒント

おんなじことの繰り返し・・・ということは?