結果だけでなく過程も見てください

たい焼きさんの日々の奮闘を綴る日記です。

C++

AutoIt+OpenCVでデスクトップから任意の画像を曖昧検索(テンプレートマッチング)する

AutoItで画像の曖昧検索がしたい UWSCにはchkimgという画像検索関数が標準で用意されていました。また有志の方がchkimgxという画像の曖昧検索を行う外部ライブラリを作成されていたようですが、アップローダーなどでのみ配布されていたようで現在では入手が…

AutoItでDLLを呼び出す方法

つい先日からUWSCでスマホゲーWindows上の作業を自動化していたのですが、 UWSCは最近公式サイトがリンク切れになったり、32-bitのバイナリしかなかったり、VMのゲストOSでの動作がうまくいかなかったりと、 将来的にいろいろ不安なので、AutoItに乗り換えら…

ちょっとしたTCP/IP通信でいろいろテストしたいときのコードテンプレ(Windows/Linux両方ビルド可能!)

タイトル通りです。 テスト用です コピって適当に改造して使いましょう エラー処理は無いに等しいです アドレスはIPv4しか使えません 一部機能が未実装です 2時間くらいでとりあえず上げたものです。徐々に修正していきます(これいつものやつや!)。 ビルド …

自作フリーソフト公開スペース

適宜更新します。あんまり期待しないでください。 Tendon Skill Builder ドラクエXのスキルの自動スキル割り振りアプリです。 各職業の持っているスキルポイントと,割り当てたいスキルに数値を入力するだけで 自動的にどの職業がどのスキルに何ポイント割り…

Valgrindの結果の見方、日本語訳、など役に立つことまとめ

勉強がてらメモ。 適宜更新していこう。うん。 Valgrindって? デバッグやプロファイラなどの複数のツールから構成されるツール群の総称。 メモリリークチェックツールとして有名だと思いますが、 それはValgrindツール群の中のMemcheckというツールによる機…

Linuxでgccを使用して共有ライブラリを作成・使用する方法

C/C++でのお話です。 忘れがちなのでまとめておきます。 備忘録 共有ライブラリ作成時 VC++ではexportする関数毎に__declspec(dllexport)が必要になるが、gccの場合はstaticが付与されていなければ自動的に公開になるため不要 共有ライブラリ(拡張子so)のフ…

たまにしか書かないので、とにかく忘れるC#プログラミング

タイトル通り、備忘録です。随時追加系記事です。 ソースコードもしくはURLを中心に書いていきます。 値型と参照型、キーワードref/out これについては一度理解すれば忘れなさそうですが、念のため。 値型 int等のプリミティブな型、Size,Color等の構造体(st…

プログラミング言語(主にC/C++)の文法でなかなか覚えにくいもの備忘録

メンバ関数ポインタの配列とコール方法 以下のようなクラスとメンバ関数があったとします。 class CTest { public: int print ( int nCount ){ ... } int print2( int nCount ){ ... } }; メンバ関数ポインタの配列定義、関数の代入は以下のようになります。…

可変引数を利用してVSのデバッグ出力ウィンドウやウィンドウボックス等でデバッグメッセージを出す方法

皆さんC/C++でデバッグメッセージを出したいときはどうしているでしょうか?コンソールプログラムの場合はprintfやcoutで済ましている人もいるのではないでしょうか。ではコンソールプログラムからWin32などのコンソールがないプログラムにした場合どうしま…

C++標準のregex_search(正規表現)の動作と使用方法

Visual Studio 2010あたり(C++11の機能)からC++標準で正規表現が使えるようになってます。 (以前はboostを使う必要がありました)regex_searchを使って、文字列全体から複数回マッチさせるにはどうしたらいいのか?ネットを巡回していて、なぜか以下のことを…

ファイル内容を確実に出力するための方法についてのお勉強

お勉強シリーズ第一弾ッ! (1回しかやらなさそう臭がハンパないですね) 日々勉強した結果を、複数回に分けて記載・修正して本エントリを完成させます。(2回更新しました)※ご注意※ 本エントリは未完成です。内容に誤りがある可能性がありますのでご注意くだ…

if文を使わずに、配列内の値が0以外の要素だけ、指定された値に上書きする方法

昔からある、ビット演算の魔術と呼ばれるような計算についでです。 有識者にとっては常識だと思うのですが、慣れていない自分の備忘録として残しておきます。タイトルのような処理を素直に書く場合は、通常以下のようにif文を使って条件を判定します。 // 要…

STLコンテナから特定の条件を持つ要素を削除する方法いろいろ

久しぶりにC++でジェネリックなコードを書くことになりました。 備忘録として整理しておこうと思います。今回はlistコンテナを中心に扱います。 (1)listにそのまま値が入っている場合 こういう状態のとき。 list<int> nList; nList.push_back(1); nList.push_b</int>…

DirectXのテクスチャをファイルからではなくオンメモリからロードする

DirectXでは、以下の方法でテクスチャをファイルからロードできます。 static const char* TEXFILE = "C:\\temp\\tex.dds"; IDirect3DDevice9* pDevice; // 各自作成しておいてね IDirect3DTexture9* pTexture = NULL; : D3DXCreateTextureFromFileEx( pDev…

VisualStudioでC/C++ビルド時,stdio.hやkernel32.libなど基本的なモジュールが見つからないときの対処法

※2016/12/16全面刷新 ※私の認識に誤りがあり,どうやらVisualStudioのincludeやlibのパス設定方法がまずかったようです。 ※またパス展開用のマクロ名が,古いVisualStudioのもの(つまり移行時に発生しやすい?)だった場合も ※問題が起きる気がします。。。 …

VisualStudio2010でboostをビルドする

いいかげんOSと開発環境が古くなってきたので、 新しい環境に移行することにしました。 項目 移行元 移行先 OS WinXP(32-bit) Win7(64-bit) VisualStudio 2005 2010 VisualStudioのバージョンアップに伴い、各種ライブラリも再ビルドする必要があります。 今…

小数の計算にはfloat型よりもdouble型を使おう(C/C++)

ゲームプログラミングでのお話です。ゲームプログラミングでは、通常キャラクターの速度や座標を小数で保持します。DirectXでは、これらの値を保持するためのベクトルクラスが定義されています。 D3DXVECTOR3などのクラスです。このクラスはx,y,zのメンバ変…

DirectXで円形ワイプエフェクト

言葉でどう表現していいかわからないのでタイトル名が正しいかわからないのですが、 要は下の図のようなエフェクトの作り方を説明します。実際のゲームで使われているのは、スーパーマリオワールドのゴール後とか、 スーファミのゼルダの伝説でダンジョンか…

実践的な衝突判定(AABB編)

自作ゲームに組み込んでいる衝突判定について、整理も兼ねてご紹介します。 説明を簡単にするために2D空間で説明します。 バウンディングボリューム バウンディングボリュームについては、容易に判定可能で実用的ということで 各軸に平行な四角形(以下の図の…

関数ポインタについてまとめてみました

たまにしか使わないので、備忘録としてまとめておきました。 非メンバ関数の関数ポインタ 戻り値の型がint、引数がfloatとdoubleの関数の場合。 サンプル関数 int sample( float f, double lf ) { : return 0; } 宣言 int (*pFunc)(float, double); 代入・…

暗号化等が施されたLuaファイルの読み込み方法

今回はファイル読み込みのお話です。暗号化の話ではないのであしからず。通常Luaファイルの読み込みは、以下の関数やマクロを使用して行います。 luaL_loadfile(L, filename) luaL_dofile(L, filename)テキストで書かれたLuaファイルをロードする場合は上記…

Lua/Luabind/コルーチンの使い方まとめ その2

前回の続きです。今回は「コマンド実行」部分です。 コマンドとは? ここで言う「コマンド」とは以下のような1命令のことと定義します。 ・プレイヤーを移動させる ・所持金を増やす ・アイテムを増やす ・効果音を鳴らす ・ゲームのフラグ(変数)を操作する…

Lua/Luabind/コルーチンの使い方まとめ その1

最近、自作ゲームのスクリプトをLuaにシコシコ移植しています。そんなわけで今回は移植作業中に得た知識を備忘録も兼ねてまとめておきます。バインドにLuabindを使ってます。 LuaやLuabindのセットアップについては前の記事を参考にしてください。●C++で組み…

luabindをビルドする方法

ちょっと説明する順番が前後しますが、 今回はluabindのビルド方法を紹介します。LuaとC/C++をそのまま連携すると、いちいちグルー関数(C/C++とLuaの橋渡しをするための関数) を定義しなければならず、数が多くなってくると大変です。luabindを使えば、メン…

C++のゲームに組み込みスクリプト(Lua)を使用する その2

今回はC++から最低限のLuaのコードを実行してみます。 本格的に連携する前準備と言ったところです。使用するコンパイラはVisual Studio 2005 Professionalです。プロジェクトでリンクするライブラリに「lua5.1.lib」を 追加してから以下を行ってください。も…

C++で組み込みスクリプト(Lua)を使用する その1

最新版は5.1.4です。 ここではまず、ShiftJIS対応版の5.1.4を自作します。 5.1.3のShiftJIS版があるので、それを流用します。 ShiftJIS対応版5.1.4のコンパイルは以下のサイトで解説しています。 http://d.hatena.ne.jp/nao_19/20091128/luainsjis 5.1.4のソ…

Cで文字列両端にあるダブルクォテーションを除去する方法

シンプルに以下の方法で実現できるんです。 const char target[] = "\"beer\"" char dest[10]; strcpy( dest, strtok( target, "\"" ) ); targetとdestの出力結果です。 target="beer" dest=beer 動作原理は、デリミタが終端文字('\0')になり さらにstrtokで…

C++では定数はヘッダではなくソースファイルに書こう

特定の意味をもつリターンコード等の固定値は ある程度1つのヘッダに集中して定義すると思います。 例えば、C言語ではマクロ変数を使用して以下のように定義します。 人によってはC++でも以下のように定義するかもしれません。 #define RETCODE_SUCCESS (0)…

3D空間に2Dオブジェクトを描画するときにy座標だけ1ドット下にずれる(4)

さてさて。 今まで何回か題名の話を書いてきましたが、 結局なにをやりたいかっていうと、 テクスチャを貼り付けた板ポリゴンがズレなく ドットがつぶれることなく(UV値を正しく算出する)描画することでした。 で、色々調べたり聞いたりしたところ 1つのイメ…

3D空間に2Dオブジェクトを描画するときにy座標だけ1ドット下にずれる(3)

すごく画面端にドットを打ちたい──! という希望とは裏腹に思った通りに ドットが打てない日が続いてます。こんばんわ。 前回800x600や1024x768にすれば丸め誤差の問題は 解消できるとか言いましたがウソです=□●_ 実際やってみましたが、結果は変わらず。 …