Cursesでゲームのフレームワークを作成
最近はポリゴンでドットを模した「2D風の3Dゲーム」をあちこちで見かけるようになりました。
そんなポリゴンドットゲーを初めて見た時は「凄い事を考えつくなぁ~! 発想の転換だ。」なんて思っていたのですが、徐々に二番煎じ三番煎じの作品を見ると、「ただただハードのパワーで画面だけが3Dな、レトロなゲーム…」なんて思うようになって来ました。
そして、それらを見る度に、「それだったらコナミさんがNintendo DSでドラキュラ作っているように、単純な2Dテクスチャでマップチップの綺麗な画面のゲームを作って欲しいかも…」なんて思ったりもします。
加えて、最近のアニソンなどでもピコピコ音をやたらと使っているのもよく聞くので、主旋律は現在の音源を使っているものの、バックグランドでPSG系のみを使ったりすると、やたらと耳障りなローテクに聞こえてきます。
(私は「PSG + FM + PCM」でゲームミュージック=ピコピコテクノ派なので、特にイラッとします)
そんな気分がここのところ高ぶっていたので、「だったら『"古い技術を使って"、"もっと古いもの"を作る方がクール!』なんじゃねーのか?」と思い、原点回帰をする事にしてみました。

ゲームで遊ぶのも楽しいけど、作るのもかなり楽しいです♪
そんなポリゴンドットゲーを初めて見た時は「凄い事を考えつくなぁ~! 発想の転換だ。」なんて思っていたのですが、徐々に二番煎じ三番煎じの作品を見ると、「ただただハードのパワーで画面だけが3Dな、レトロなゲーム…」なんて思うようになって来ました。
そして、それらを見る度に、「それだったらコナミさんがNintendo DSでドラキュラ作っているように、単純な2Dテクスチャでマップチップの綺麗な画面のゲームを作って欲しいかも…」なんて思ったりもします。
加えて、最近のアニソンなどでもピコピコ音をやたらと使っているのもよく聞くので、主旋律は現在の音源を使っているものの、バックグランドでPSG系のみを使ったりすると、やたらと耳障りなローテクに聞こえてきます。
(私は「PSG + FM + PCM」でゲームミュージック=ピコピコテクノ派なので、特にイラッとします)
そんな気分がここのところ高ぶっていたので、「だったら『"古い技術を使って"、"もっと古いもの"を作る方がクール!』なんじゃねーのか?」と思い、原点回帰をする事にしてみました。

ゲームで遊ぶのも楽しいけど、作るのもかなり楽しいです♪
ただし、そんな天邪鬼な行動だけでは時間が勿体ないので、幾つか有意義のあること、普段やらないことを考えて行動してみました。
1.誰かしらが勉強になること。
2.自分のリハビリになること。
3.今後(当面)やらないこと。
4.他の人があまりできないこと。
…という事を掲げて、
1.誰かしらが勉強になること。→若手のためになる事。
2.自分のリハビリになること。→LinuxでC++言語。
3.今後(当面)やらないこと。→Cursesライブラリでテキスト画面構成。
4.他の人があまりできないこと。→現在では珍しい(?)超レトロなゲーム作成。
といったプログラミングでもして、若手や将来有望な方たちに話のタネとしてプレゼントしようかな…
と、先週の水曜日位に画策をし、土曜日の休日に徹夜をして、Cursesを用いて、超レトロなゲーム(というかゲームフレームワーク)を作ってみました。
古いエンジニアの方ならご存知だと思いますが、Cursesは「ローグ」で採用されている超レトロなターミナル制御ライブラリです。ローグはスーパーファミコン世代の方以降の方ならご存知の「トルネコの大冒険」がパクったインスパイアしたゲームというとピンとくるかもしれませんw
昔のベーシックマガジンなどでも、この手のテキスト画面の投稿ゲームは多々(相当数)ありましたが、UNIX環境のゲームの投稿は皆無だったような気がします。(マイコンと比較にならない)
1990年代頭でも社会人クラスは研究者が、有名大学の大学生が、EWS or オフコンなどで作れるといった環境でないとできません。
そして今は、誰でもLinuxが無料で手に入り、あまつにはMac OS上にデフォルトで端末エミュレータが載っている時代です。しかし、そんな環境でワザワザテキストゲームプログラムなどは作成しませんw
そこが「ニッチ」という見解です。しかし、それでもまだ少数なりにもいる訳なので、こちらはそこのレベルを更に底上げして、
1.C++言語にて作成。
2.クラス設計はかなり高度に。
3.タスク管理を設計。
4.ステージ制御を設計。
5.擬似スプライトの概念を設計。
6.仮想座標系→テキスト座標系の変換を設計。
7.フレームレート制御も行う。
8.真面目にダブルバッファ方式を採用。
と「出力がテキストなだけで、中身は2Dゲーム全盛期のソレに近い設計」を目指し、その気であれば、そのままJavaでもExcel(VBA)でも行けるように設計しました。(注:もちろんアーキテクチャだけですw)
ということで、ここにソースを置いておきます。
コーディングスタイルは、なんとなく「google C++スタイルガイド」に合わせています。
ソースだけなので、コンパイルする必要があります。
ソースを展開してmakeするだけです。
…「だけです」なんて言っていますが、もちろんGNU C++コンパイラ前提です(私の環境はg++ 4.4.4でした)。
また、Cursesライブラリを使っているので、このライブラリが必要です。私は「yum -install ncurses-devel」でインストールしました。
Windows環境にてcygwinで試してみましたが、こいつはインクルードファイルのパスが違っているようで、「/usr/include/ncurses」にありました。ですので、Makefileのインクルードパスをコンパイルオプションに追記してください。コンパイルが通れば動きました。この事から恐らく同様にMac OSでも動くと思います。
【遊び方】
・実行したら、"p"キーにて実行です。上から落ちてくる石をただただ避けてください。
スコアとか入れていないので、ただただ避けるだけです。(^^;
・プレー中に"p"キーを押すと一時停止です。再度押すと再開です。
・"q"キーにてゲーム終了です。signal処理をしていないんで、Ctrl+Cでも強制終了です。
ゲームは面白くないですが、ゲーム作る人にとって、中身は結構参考になる要素を散りばめているつもりです。
また、これを作って分かったことは、Cursesはキーリピートの制御ができないようなので、このライブラリだけで、アクションゲームやシューティングゲームは厳しいような気がしました。
(この程度のゲームは作れるということで)

タイトル。"p"キーで開始。"q"キーで終了。

プレー画面。上から石が落ちてきます。

ゲームオーバー。画面がキラキラしますw
◇ ◇ ◇
こんなの作ってないで、「Sample Action Game 3D」やプチコンでNDSの何か作るべきだと、脳裏でよぎるのですが、今はそのような気にならないです…
そろそろF田くんに会って、3Dゲームプログラミングの刺激を貰わないとイカンな~。
1.誰かしらが勉強になること。
2.自分のリハビリになること。
3.今後(当面)やらないこと。
4.他の人があまりできないこと。
…という事を掲げて、
1.誰かしらが勉強になること。→若手のためになる事。
2.自分のリハビリになること。→LinuxでC++言語。
3.今後(当面)やらないこと。→Cursesライブラリでテキスト画面構成。
4.他の人があまりできないこと。→現在では珍しい(?)超レトロなゲーム作成。
といったプログラミングでもして、若手や将来有望な方たちに話のタネとしてプレゼントしようかな…
と、先週の水曜日位に画策をし、土曜日の休日に徹夜をして、Cursesを用いて、超レトロなゲーム(というかゲームフレームワーク)を作ってみました。
古いエンジニアの方ならご存知だと思いますが、Cursesは「ローグ」で採用されている超レトロなターミナル制御ライブラリです。ローグはスーパーファミコン世代の方以降の方ならご存知の「トルネコの大冒険」が
昔のベーシックマガジンなどでも、この手のテキスト画面の投稿ゲームは多々(相当数)ありましたが、UNIX環境のゲームの投稿は皆無だったような気がします。(マイコンと比較にならない)
1990年代頭でも社会人クラスは研究者が、有名大学の大学生が、EWS or オフコンなどで作れるといった環境でないとできません。
そして今は、誰でもLinuxが無料で手に入り、あまつにはMac OS上にデフォルトで端末エミュレータが載っている時代です。しかし、そんな環境でワザワザテキストゲームプログラムなどは作成しませんw
そこが「ニッチ」という見解です。しかし、それでもまだ少数なりにもいる訳なので、こちらはそこのレベルを更に底上げして、
1.C++言語にて作成。
2.クラス設計はかなり高度に。
3.タスク管理を設計。
4.ステージ制御を設計。
5.擬似スプライトの概念を設計。
6.仮想座標系→テキスト座標系の変換を設計。
7.フレームレート制御も行う。
8.真面目にダブルバッファ方式を採用。
と「出力がテキストなだけで、中身は2Dゲーム全盛期のソレに近い設計」を目指し、その気であれば、そのままJavaでもExcel(VBA)でも行けるように設計しました。(注:もちろんアーキテクチャだけですw)
ということで、ここにソースを置いておきます。
コーディングスタイルは、なんとなく「google C++スタイルガイド」に合わせています。
ソースだけなので、コンパイルする必要があります。
ソースを展開してmakeするだけです。
…「だけです」なんて言っていますが、もちろんGNU C++コンパイラ前提です(私の環境はg++ 4.4.4でした)。
また、Cursesライブラリを使っているので、このライブラリが必要です。私は「yum -install ncurses-devel」でインストールしました。
Windows環境にてcygwinで試してみましたが、こいつはインクルードファイルのパスが違っているようで、「/usr/include/ncurses」にありました。ですので、Makefileのインクルードパスをコンパイルオプションに追記してください。コンパイルが通れば動きました。この事から恐らく同様にMac OSでも動くと思います。
【遊び方】
・実行したら、"p"キーにて実行です。上から落ちてくる石をただただ避けてください。
スコアとか入れていないので、ただただ避けるだけです。(^^;
・プレー中に"p"キーを押すと一時停止です。再度押すと再開です。
・"q"キーにてゲーム終了です。signal処理をしていないんで、Ctrl+Cでも強制終了です。
ゲームは面白くないですが、ゲーム作る人にとって、中身は結構参考になる要素を散りばめているつもりです。
また、これを作って分かったことは、Cursesはキーリピートの制御ができないようなので、このライブラリだけで、アクションゲームやシューティングゲームは厳しいような気がしました。
(この程度のゲームは作れるということで)

タイトル。"p"キーで開始。"q"キーで終了。

プレー画面。上から石が落ちてきます。

ゲームオーバー。画面がキラキラしますw
こんなの作ってないで、「Sample Action Game 3D」やプチコンでNDSの何か作るべきだと、脳裏でよぎるのですが、今はそのような気にならないです…
そろそろF田くんに会って、3Dゲームプログラミングの刺激を貰わないとイカンな~。
コメント
プログラマーの本領発揮ですね(^^)
半分は後輩君のためって感じなんですけどね。(^^ゞ
現在後輩君は仕事でC++というコンピュータ言語を習得する必要があるので、「どーせ興味を持ってもらうのであれば…」というのが根底にあります。
社会人2年目で且つ20代となると、このようなプログラムの方が興味持ってくれると思ってます。(^^)
特に私の場合は現在の仕事柄、グラフィック関係が一切ない仕事なので、このようなビジュアルに訴えかけるものだと更に興味を持ってもらえるかな…と。
>ベーマガに掲載されていたプログラム
昔はあんなものばっかりだったのに、30年とか過ぎると今の同人のようなレベルですものね。
全くスゴイ進化をする業界です。DOG YEARと言われる所以ですね。私は「逆浦島現象」とか言ったりしますw
IT系で開発の仕事していると、たった1年が3~5年位経過したように感じます。
>バックグランドでPSG系
R30~40のクリエイターが作っているという見解なのですが、なんか「本当のピコピコテクノを余り知らないんじゃないのかな?」とか、
「誰でも分かるピコピコテクノで強調しすぎ」なんて思います。
たしかにPSG系の音源は凄く目立つので面白いのですが、こうなんでもかんでも増えすぎると、批判的な気持ちにしか… うっ。(´・ω・`)
特にPSG音源には色々と思い入れがあるので、結構聴き比べてしまったりするのですが、色々と思ってしまうフシがあります。
(でも評論家でもなんでもないので、ここでは書いたりはしませんが…)
逆にFM音源系(というよりゲームミュージック系)のアニソンBGMをまだ聴いた事無いので、そーいうのがアニソンでかかったら、「おっ!?」とかなりそうですw
>Mac OS de compile
はい、できますよー。それも無料で!
私の仕事のお客様BOSSは1980年代からのMacintosh使いで、Mac OSでバリバリ開発の仕事しています。
独りだけMacなので物凄く浮いていますが…(^^ゞ
そーいうのを見てしまうと、私も久々にMacが欲しくなるんですよね~。
社会人2年目で且つ20代となると、このようなプログラムの方が興味持ってくれると思ってます。(^^)
特に私の場合は現在の仕事柄、グラフィック関係が一切ない仕事なので、このようなビジュアルに訴えかけるものだと更に興味を持ってもらえるかな…と。
>ベーマガに掲載されていたプログラム
昔はあんなものばっかりだったのに、30年とか過ぎると今の同人のようなレベルですものね。
全くスゴイ進化をする業界です。DOG YEARと言われる所以ですね。私は「逆浦島現象」とか言ったりしますw
IT系で開発の仕事していると、たった1年が3~5年位経過したように感じます。
>バックグランドでPSG系
R30~40のクリエイターが作っているという見解なのですが、なんか「本当のピコピコテクノを余り知らないんじゃないのかな?」とか、
「誰でも分かるピコピコテクノで強調しすぎ」なんて思います。
たしかにPSG系の音源は凄く目立つので面白いのですが、こうなんでもかんでも増えすぎると、批判的な気持ちにしか… うっ。(´・ω・`)
特にPSG音源には色々と思い入れがあるので、結構聴き比べてしまったりするのですが、色々と思ってしまうフシがあります。
(でも評論家でもなんでもないので、ここでは書いたりはしませんが…)
逆にFM音源系(というよりゲームミュージック系)のアニソンBGMをまだ聴いた事無いので、そーいうのがアニソンでかかったら、「おっ!?」とかなりそうですw
>Mac OS de compile
はい、できますよー。それも無料で!
私の仕事のお客様BOSSは1980年代からのMacintosh使いで、Mac OSでバリバリ開発の仕事しています。
独りだけMacなので物凄く浮いていますが…(^^ゞ
そーいうのを見てしまうと、私も久々にMacが欲しくなるんですよね~。
コメントの投稿
高校時代に部室のMZ-2000で、同じ物理部員のクラスメートと一緒に、ベーマガに掲載されていたプログラムを一苦労して入力した時の事を思い出します。(^^)
>バックグランドでPSG系
こういうパターンは違和感ありますよね~。
ローテクを思わせるPSG系の音源も、使いどころが悪いとウンザリしてきます(笑)。
ゲームにしろ音楽にしろ、最初は中途半端なローテク風味に斬新さを感じるのかもしれませんが、余りにも数が増えすぎると、もっと究極まで掘り下げるor全く逆の物を求める…といった感じになるのかもしれませんね。
>Mac OS
MacOSXでもこういった作業ができるんですね~(^^)
普段、MacOSXを使っていても、コンパイルとは無縁の生活(笑)ですので、とても勉強になります。