Bishamon for DXライブラリ

BishamonのDXライブラリ用ラッパーが完成したので公開する。Bishamonの導入を検討している人も参考にしてほしい。 尚、使用にはDirectX9用のBishamonSDKが必須となる。ソースコードのライセンスはこちら※ 基本的に2D用(3Dエフェクトは使用可) ※ Windows Vi…

ソーシャルゲームが嫌いなワケ

ぼくはソーシャルゲーム*1のことを良く思ってない。でも、漠然とそう思いつつその理由が分からない人は少なからずいるようで、それ故に黙認してる人も一定数いるようだ。 とりあえず自分の考えを整理する意味も込めて、見解を述べたいと思う。あくまで個人的…

ランキングシステム

先日、ランキングシステムを搭載したFlashゲームを制作した。→ドリルナ 明らかにランキングシステムは誰もが作り使ってるはずなのだが、そのサンプルコードがどこにも見当たらないのは困った。よってぼくはPHPを一から勉強して幾千幾万と書かれたであろう車…

.csvを読み込む

.csvとはコンマ","区切りのドキュメントのことであり、Excelなどで表として編集できるので敵データやアイテムのデータの管理にとても優れたファイル形式である。 データの読み込み方法は幾つかあるが、基本的にはカンマをプログラム側で抽出し、前後の文章を…

Photoshop Style

Photoshopスタイル機能の一例。 いずれも左のシェイプが元であり、スタイル一つで右のようになる。キーはベベル・エンボスとパターンオーバーレイだろうか。特にパターンは元グラフィックを全く違ったものに変貌させる。 本記事ではPhotoshopのスタイル機能…

メッセージボックス

void errorBox(const char *InputMessage,...) { int len; char buf[256]; va_list ap; va_start(ap,InputMessage); len = vsprintf_s(buf,256,InputMessage,ap); va_end(ap); if(len != EOF) MessageBox(GetMainWindowHandle(),buf,"Error",MB_OK | MB_ICON…

我が家のゲームレシピ

拙ゲームサークルいるからぼでのゲーム制作工程を述べる。 くれぐれも真似しないように。 企画 まず、ゲームを作るには企画が必要である。アイデアが思いついた者はゲームの概要を纏めたイラスト入りの企画書を提出し、プレゼンを行う。企画書はA4一枚に纏め…

ワンハンド・マニピュレーション

コンシューマの場合、入力装置はほとんどの場合選択の余地が無い。十字キーと数個のボタンを併せ持った、所謂ゲームコントローラーである。しかし、PCゲームでは幾つかの入力形態が用意されており、開発者はそのうち一つを選んでゲームを作ることとなる。デ…

マシなUIを作る(Incubator編)

第九回全日本学生ゲーム開発者連合にて講演を行いました。資料を貼っておきます。 資料はこちらから

関数で数値を動かす

多忙で大分長く空きました。すみません。ゲーム製作において、数値というものは欠かせない。キャラクターの位置、吹っ飛びパワー、ダメージの計算、経験値テーブル。それらは何千個もの配列を使えば一切の数学的要素を排除したまま構築できるが、流石にそん…

はじめてのプレス

前回の記事に関連して。プレス業者(印刷所)に制作したゲームソフトのプレスを頼む時の留意点など。 プレスの流れ まず、メール或いは専用フォームでプレス依頼を出す。この時、詳細事項も共に添付する。専用のpdfに色々と書く必要がある所もある。 そして…

ゲームを作った後に

苦労してゲームを作った!その後どうするの?というお話。 主な頒布ルート 作品を世間一般に公開し有料無料で配布することを、同人では「頒布」という。主な頒布ルートとして、以下のようなものが挙げられる。 イベント頒布 委託販売 DL販売 ネット配布

DrawExRotaGraph

DXライブラリ用描画関数ラッパー。 基本的にはDrawRotaGraphと同じだが、縦と横の拡大率を別々に指定可能。 typedef struct VECTOR2D{ double x,y; } VECTOR2D; /* DrawExRotaGraph */ void DrawExRotaGraph(double ex, double ey, double xScale, double yS…

マシなUIを作る(メニュー編)

見よ、このカッコイイメニュー画面を。これだけで一体これからどんな冒険が待ち構えているのか、ワクワクしてしまう。 ……はずがない。 メニュー画面をいかにかっこよくするか、というのはアマチュアゲーム製作者にとって大きな課題の一つである。この記事で…

麻雀和了り判定

麻雀の和了判定のアルゴリズムを説明する。探せばあちらこちらに転がっているが、より実践的なものをここでは扱う。何箇所かはここやここを参考にしているため、あわせて参照されたし。 下準備 まず、前提として牌の情報を以下のような形で持ち、std::listあ…

締め切りに間に合わない時

締め切り。多くのゲームクリエーターにとっての天敵であり、生涯克服することはできないであろう宿敵。強敵と書いて「とも」と呼ぶ、なんてことはない。奴らはただ無慈悲に、我々を叩きのめすのみである。 締め切り前に一所懸命作業を行うことを(一所懸命な…

演算子のオーバーロード

C++を語る上で欠かせないのが、オーバーロードという概念である。オーバーロードとは上書きという意味で、C++ではあらゆる要素を上書きして使うことができる。 C++では、演算子もオーバーロードすることができる。演算子とは、+だの-だの%だの算術記号や()だ…

マウスとパッドとキーボード

入力の利便性は、ゲームの命である。 いかに面白いゲームでも、キーコンフィグが固定されていたり、PADが使えなかったりすれば、時にプレイヤーは遊びそのものを諦めてしまう。特にアクションゲームや格闘ゲームなど、緻密な操作がゲームそのものに大きな影…

数値を画像で表示

スコアやタイムなど、ゲームに欠かせない「数値」。表示をフォントに頼ってしまうのは簡単だが、どうにも見た目が美しくない。ならば予め数字の画像を作り、画像で表示してあげれば良い。 描画に関わる箇所なため、サンプルはDXライブラリで実装している。適…

ポリモーフィズム

デザインパターンより、ポリモーフィズム。 デザインパターンについてはそれについて書いてあるサイトやら本やらが山ほどあるのでそれを読めばいいと思う。簡単に言えば将棋やチェスでいう定石。ポリモーフィズムとはプログラミング言語の型システムの性質を…

座標の移動とイージング

主観的な記事が続いたのでちゃんとしたプログラミングの話でも。非初心者向け。 文字や画像を左から右に移動させるとき、一番簡単なのは等速直線運動なのだが、なんとも味気ない。 dx = 3; x += dx; そこで使うのがイージング。イージングとは速度に重みを持…

ゲームの種類と製作難易度

昨日の記事で「STGは本当に簡単なのか?」という質問を貰ったのでついでに色んなゲーム種類と製作難易度(とその理由)を述べる。尚、主観と偏見にまみれてる上に個人製作が前提なのであまり役に立たないと思う。(これはおかしい、というコメントを頂ければ…

ゲームを製作するまで

プログラムの基礎の基礎は習ったけど、これをどう転用すればゲームが作れるのか分からない。また、簡単なゲームを作ったけどその後どうすればいいのか良く分からない。そんな人向けの記事。 ちなみに、ゲームの作り方を教えるわけではなし。どこにでも載って…

当たり判定

こんなものはどこにでも載ってるが。 int IsInRect(int in_x,int in_y,RECT _rect) { return (in_x>_rect.left&&in_x<_rect.right&&in_y>_rect.top&&in_y</_rect.right&&in_y>

チュートリアル

チュートリアル。ゲームのやり方をプレイヤーに教えるために必要不可欠なゲームの導入部分である。 そしてそれは多くの場合製作者にとって苦痛であり、またプレイヤーにとっても苦痛である。なんだかおかしいぞ。 以前同人ソフト制作者たちがチュートリアル…

va_listの使い方

va_listというものがある。これを使うとprintfのような、いくつでも値を関数呼び出しの括弧の中に入れられるような関数が作れる。 int CheckWhichEver(int maxnum,int val,...) { va_list ap; va_start(ap,val); for (int i=0;i

DIGIT_マクロ

ごく単純なdefineマクロ。入れた数値の桁数が出てくる。 #define DIGIT_(a) ((int)log10((double)(a))+1) DIGIT_(51245) = 5。 aに構造体とか入れると大変なことになるんじゃないかな。

DXライブラリのススメ

DXライブラリは、DirectXやWin32APIをラップしたなかなか便利なゲーム用ライブラリである。 http://homepage2.nifty.com/natupaji/DxLib/index.html これを用いると、煩雑なDirectXの仕様だの入力の取得だのを気にすることなく、ごく単純なC言語だけでWindow…

点滅マクロ

inline int BLINK_(int timer,int base,double spd) { return abs((int)(timer*spd)%base*2-base); } 使い方: timerに現在のカウント baseに最大上昇値 spdにスピード while(true) { timer++; Opacity = BLINK_(timer,30,1); } これでOpacityには0〜30の値…

ゲームは愛と覚悟

「ゲームを製作する上で大切なのは何ですか?」 というのは初心者の定番の質問だ。質問するのは簡単だが、答えるのは難しい。何故ならゲーム製作者たちにも、それが何なのか良く分かっていない。強いて言うなら「全部」だが、そんな答えを彼は求めていない。…

ライセンス

このブログに載っているソースコードのライセンスについて。 許諾不要、商用利用可能、改変可能 自己責任 一切責任は負いません。 ソースコード自体を配布する際は著作権表示が必要 (C) 2013 EIKI` All rights reserved. を適当にコメントで書く。 ソースコ…