プログラミング

麻雀和了り判定

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

演算子のオーバーロード

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

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

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

数値を画像で表示

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

ポリモーフィズム

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

座標の移動とイージング

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

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

(2018/06/20)リメイクしました。以下をどうぞ。 eiki.hatenablog.jp 昨日の記事で「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の値…