« 2005年12月 | トップページ | 2006年2月 »

2006年1月の記事

2006-01-31

プログラム堕落中

先日から散々苦労してきたUNLHA32.DLLですが……。

よく考えたら、別に誰かに提供するわけでもなく、自分の環境だけで使うんだから、Explzhでも外部呼び出しして処理しておけばよかったんじゃん。orz

まあ、これも勉強ってことで。

| | コメント (0) | トラックバック (1)

2006-01-29

プログラム混迷中

UNLHA32.DLLの使い方がよく分からなくなった。orz

どこかにソースコードが落ちてないかなぁ。はふぅ……。

| | コメント (0) | トラックバック (1)

2006-01-28

プログラム作成中(BlogPet)

きょう、maedaとここでバッチへ処理された!

*このエントリは、BlogPet(ブログペット)の「SnowWhite」が書きました。

|

プログラムでUNLHA32

前回いろいろと失敗したので無理矢理な処理にする。

UnlhaSetOwnerWindowEx64(hWnd, MyArchiverProc, sizeof(EXTRACTINGINFOEX32));
Unlha(hWnd, "u -d1 -n1 -t1 -jm4 -jsb1 -jso1 -jtc1 \"archive.lzh\" \"dir\"", NULL, 0);
UnlhaKillOwnerWindowEx64(hWnd);

// アーカイバプロシージャ
BOOL CALLBACK MyArchiverProc(HWND hWnd, UINT msg, UINT nMode, LPVOID lpEis)
{
    LPEXTRACTINGINFOEX32 lpExInfo;
    char szStr[512];

    lpExInfo = (LPEXTRACTINGINFOEX32)lpEis;

    switch(nMode) {
        case 5:
            // UNLHA32.DLLがファイルをサーチ中であることを表します。
            // 検索にマッチしたファイルのファイル名が得られます。
            break;

        case 3:
            // UNLHA32.DLLが該当書庫の処理を開始することを表します。
            // szSourceFileNameに書庫名が格納されます。
            wsprintf(szStr, "\r\n\r\nCreating archive : %s\r\n\r\n",
                lpExInfo->szSourceFileName);
            Edit_AddString(hEdit, szStr);
            break;

        case 0:
            // UNLHA32.DLLが該当ファイルの処理を開始することを表します。
            break;

        case 1:
            // UNLHA32.DLLが該当ファイルの処理中であることを表します。
          break;

        case 6:
            // UNLHA32.DLLが該当ファイルの格納を終えたことを表します。
            // 圧縮サイズ等はこのメッセージがきた時点で有効となります。
            wsprintf(szStr, "Frozen   ==> %3d%% %s\r\n",
                (int)(lpExInfo->wRatio / 10),
                lpExInfo->wRatio
                ? strrchr(lpExInfo->szSourceFileName, '/') + 1
                : lpExInfo->szSourceFileName);
            Edit_AddString(hEdit, szStr);
            break;

        case 7:
            // UNLHA32.DLLが書庫のチェックを開始することを表します。
            // szSourceFileNameにワークファイル名が格納されます。
            break;

        case 4:
            // UNLHA32.DLLがワークファイルの書き戻しを開始することを表します。
            // szSourceFileNameにワークファイル名が格納されます。
            break;

        case 2:
            // UNLHA32.DLLが処理を終え,lpEisのメモリを開放しようとしていることを表します。
            break;
    }

    return TRUE;    // FALSEを返すと処理中断
}

いろいろと自作関数とかが含まれているが、その辺は脳内補完して欲しい。

圧縮する場合、

  1. nMode=5 で対象ファイル検索。
  2. nMode=3 で対象書庫取得。
  3. nMode=0 で対象ファイル取得。
  4. nMode=1 で対象ファイル処理中。完了するまでこれが続く。
  5. nMode=6 で対象ファイル格納終了。
  6. なぜかここで nMode=1 が来る。
  7. nMode=2 で処理終了。

という順番でメッセージが飛んでくる。言うまでもないと思うが、7.が来るまで3.~6.が繰り返される。

ちなみに、このプロシージャを使うためには、コマンド・スイッチとして「-n1 -jsb1」を指定しなければならないようだ。あと、私の環境では UnlhaKillOwnerWindowEx64 が必ず失敗する。その辺がまだ未解明だが、とりあえず動く。まだまだ調査の余地があるだろう。

| | コメント (0) | トラックバック (1)

2006-01-26

プログラムでへぇ連発中

プログラムの作成で、不明点をネットで検索すると、結構いろんなことがわかる。以前は本だけで何とかしようとして挫折したのだが、これは便利だ。

というわけで、今回得た知識。エディットコントロールでは「禁則処理」が働いて、単語区切りでしか改行が行われない。それを解消する方法。

// ウィンドウプロシージャ
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
    static HWND hEdit;

    switch (msg) {
        case WM_CREATE:
            hEdit = MyCreateEdit(hWnd);
            Edit_SetWordBreakProc(hEdit, MyEditWordBreakProc);
            break;

        case WM_CLOSE:
            if(MessageBox(hWnd, "終了してもよろしいですか", "確認",
                MB_YESNO | MB_ICONQUESTION) == IDYES) {
                DestroyWindow(hEdit);
            }
            break;

        case WM_DESTROY:
            PostQuitMessage(0);
            break;

        default:
            return DefWindowProc(hWnd, msg, wp, lp);
    }

    return 0L;
}

// ワードブレークプロシージャ
int CALLBACK MyEditWordBreakProc(LPTSTR lpch, int ichCurrent, int cch, int code)
{
    return 0;
}

ウィンドウプロシージャ部分はいろんなものをすっ飛ばしているので、自分で補完しておくこと。

ちなみに、このコードはNT系のWindowsでしか使えないらしい(つまり、Win95、98、Meではうまく行かない? 該当環境がないので未確認)。あと、ワードブレークプロシージャもcodeごとに切り分ける方がいいのだが、とりあえず省略(このままでも一応動くし)。詳しくはMSDNライブラリを参照のこと。

| | コメント (0) | トラックバック (0)

2006-01-25

プログラム悩み中

先日から作成中のプログラム、思いつきでいろいろと機能を追加しているため、どんどんスパゲティに……orz

それはそれとして、どうしても解決できない問題が発生。UNLHA32.DLLを使って圧縮中、表示されているダイアログボックスの〔中断〕ボタンを押すとアプリケーションが異常終了してしまう。どうやらNT系Windowsで発生する有名な問題らしい。
ググってみても、「問題が起こるのでダイアログボックスを表示しないようにした」とか「この問題を解決した」としか書いてねぇ。orz
そのやり方が知りたいのに。o...rz

うぅん、変な機能を付けるのはやめて、単独で動くようにするか?

| | コメント (0) | トラックバック (1)

今日は通院の日

今日は通院の日。

調子は相変わらず。ゲームで他人とコミュニケーションを取ることが回復に繋がるらしい。
セディール10×1、トレドミン25×2、テグレトール×1。トレドミンが増えた。どーでもいいが、テグレトールが飲みにくい。

岡山県立図書館

それにしても、ここのラインナップは侮れんな。

紀伊國屋書店クレド岡山店。

今日はここまで。

| | コメント (0) | トラックバック (0)

2006-01-22

OGA例会

今日はOGA例会でした。
やったゲームは

  • ワールド・タンク・バトル
  • ダイナマイト
  • HICTAS
  • 迷宮コンクエスト
  • クク
  • KATZeNJAMMeR BLUeS
  • Knatsch
  • CAMISSIMO

ワールド・タンク・バトル
ミニチュアの戦車(ワールド・タンク・ミュージアムの奴だと思う)を用いてシミュレーションを行うカードゲーム。
ドイツ戦車軍とその他の戦車軍とに分かれて勝負した。私はその他の軍の一員で、小隊に所属する戦車はT-34/75が3両、JS-2S(通称スターリン戦車)が1両という布陣。敵味方入り乱れて、泥沼のような戦闘が続く中、何故か私の小隊の周りは静かで、しかも正面にいた敵小隊の主力戦車がヤーボで自滅(撃破力、防御力とも高かったので助かった)、残ったⅢ型突撃砲もT-34/75のクリティカルで撃破(T-34/75は撃破力が低く、Ⅲ型突撃砲は防御力が高かったにも関わらず)。我が小隊はT-34/75を1両失っただけ。全軍で7対6で勝利した。
ルールがとても分かりやすく、戦車のことをよく知らない私でも楽しめた。次にやるときは「萌えよ!戦車学校」でも読んで勉強しておこう。

ダイナマイト
手札からカードを出し、20秒からカウントダウン、0秒にしてしまったプレイヤーが負けとなる。
単純であるが故に熱くなるゲーム。時間つぶしに最適。

HICTAS(ヒクタス)
手札からカードを出し、駒を進めたり戻したりしてゴールを目指す。駒がゴールに到達した時点で、手札が0枚のプレイヤーが勝利する。ただし、ゴールに到達していないのに手札が0枚になると、ペナルティとして手札が増やされてしまう。また、負けたプレイヤーは、ゴールした時点の手札に応じたチップを勝者に渡さなければならない。3ゲーム行い、最終的にチップの枚数が多いものが勝者となる。
「チキン」と言われながらも堅実なプレイを心がけたが、それがあだになってあと一歩のところで勝利を逃してしまった。

迷宮コンクエスト
キャラクターカード、アイテムカードを使って迷宮を「探索」、あるいは他のプレイヤーの領土に「侵略」し、領土を獲得、発展させていくという「迷宮経営」カードゲーム。
カードの引きが悪く、なかなかキャラクターカードが出ず、探索も侵略も発展も出来ない。最終局面で何とか高得点の領土を獲得したものの、6人中5位だった。

クク
左隣のプレイヤーと手札を交換し、その手札の得点を比較して、最低のプレイヤーが脱落していく。最後まで勝ち残ったものがチップを得、最終的にチップの枚数の多いものが勝利するというカードゲーム。
カードの引きが悪い上に、両隣のプレイヤーの陰謀(!?)により負けが込む。しかし、何とか5人中3位になる。

KATZeNJAMMeR BLUeS(カッツェンジャマー・ブルース)
ジャズバンドのメンバーを競り落とし、カルテットを結成すると得点を得るというカードゲーム。ただし、ワイルドカードとして使用できるジョーカーを使用した枚数に応じて得点がマイナスされる。
ジョーカーを多用してカルテットを結成していった結果、得点がマイナス1点になり、5人中最下位になった。

Knatsch(ナッシュ)
騎士となり、城を獲得したり決闘したりするカードゲーム。6個のダイスを振り、ゾロ目の数に応じて成功度が変わるので、ダイスを振るのにも力がこもる。

  • 城を4枚獲得する。
  • 城を3枚獲得し、国王への反逆を成功させる。
  • 城を2枚獲得し、決闘に3回勝利する。

のいずれかの勝利条件を満たしたものが勝利する。
ダイス運が悪く、なかなか城の獲得も、決闘の勝利も出来ず、他のプレイヤーが勝利条件を満たしていくのを見つめることしかできなかった。このゲーム、6の目は「はずれ」で判定から除外されるのだが、何故か6を連発してしまったのだ。「アリアンロッドならクリティカルなのに」と口惜しがったが、仕方がない。

CAMISSIMO(カミシモ)
一人目のプレイヤーが出したカードよりも数字の小さいか大きいカードを二人目のプレイヤーが出し、大きいならさらに大きい数字のカードを出していって8を目指し、小さいならさらに小さい数字のカードを出していって1を目指すというカードゲーム。その結果、手札が無くなったプレイヤーの勝利となる。
どうも他のプレイヤーの顔色を読むのが苦手なせいか、負けが込む。5人中4位。

今回もなかなか楽しかった。
次回は2月5日。

帰りにBOARDWALK岡山店に寄る。

「BESM」はGuardians Of Orderというカナダのゲーム会社が作ったカードゲーム。前からちょっと気になっていたので、翻訳してみようと思う。ちなみに「ANIME」と銘打たれているが、特定のアニメのことではなく、「日本製アニメーション風の」という意味のようだ。なお、Guardians Of Orderという会社、「スレイヤーズ」や「ウテナ」、「ヘルシング」、「トライガン」、「ふしぎ遊戯」などのゲームを出している。

岡山一番街弘栄堂書店。

長谷川裕一の「すごい科学」シリーズの第3弾。

追記:「萌えよ!戦車学校」、どうやら評判が良かったらしく、第2弾が出る模様。

| | コメント (0) | トラックバック (0)

2006-01-21

プログラム作成中

バッチ処理を行うのに、これまではperlを使っていたのだが、ちょっと物足りなくなってきたので、復習を兼ねてCで組むことにした。最近県立図書館で下記の本を借りていたのはそのせい。

粂井 康孝著: 猫でもわかるWindowsプログラミング 第2版猫でもわかるWindowsプログラミング 第2版
粂井 康孝著
税込価格 : \2,940 (本体 : \2,800)
出版 : ソフトバンクパブリッシング
サイズ : A5判 / 438p
ISBN : 4-7973-2848-7
発行年月 : 2004.10

アスキー書籍編集部編: Win32 API オフィシャルリファレンス 改訂3版 グラフィック/GUI編Win32 API オフィシャルリファレンス 改訂3版
グラフィック/GUI編

アスキー書籍編集部編
税込価格 : \5,460 (本体 : \5,200)
出版 : アスキー
サイズ : B5判 / 771p
ISBN : 4-7561-3748-2
発行年月 : 2001.4

アスキー書籍編集部編: Win32 API オフィシャルリファレンス 改訂3版 Windowsサービス/ネットワーク編Win32 API オフィシャルリファレンス 改訂3版
Windowsサービス/ネットワーク編

アスキー書籍編集部編
税込価格 : \5,460 (本体 : \5,200)
出版 : アスキー
サイズ : B5判 / 757p
ISBN : 4-7561-3749-0
発行年月 : 2001.4

いずれも良書なのでお薦め。

開発環境としてはBorland C++ Compilerがあれば、Windowsプログラムには十分。さらにBCC Developer、BCCFormがあれば、開発がとても楽になる。ただし、BCCには関数の説明が含まれていないので、上記のような本が必要となるので注意。

しかし、久しぶりにCのコーディングをしたら、思い切りスパゲティなソースコードになってしまったよ。orz
しかし、汎用的に使えそうなソースも出来たので、すこしばかり後悔公開してみる。

// エディットコントロール文字列追加関数
int Edit_AddString(HWND hEdit, LPCTSTR lpstr)
{
    int nLineCount, nLineIndex, nLineLength;

    nLineCount = Edit_GetLineCount(hEdit);
    nLineIndex = Edit_LineIndex(hEdit, nLineCount - 1);
    if(nLineIndex < 0)
        return -1;
    nLineLength = Edit_LineLength(hEdit, nLineIndex);
    Edit_SetSel(hEdit, nLineIndex + nLineLength,
            nLineIndex + nLineLength);
    Edit_ReplaceSel(hEdit, lpstr);

    return 0;
}

// 選択解除関数
void Edit_SelectRelease(HWND hEdit)
{
    int nStart, nEnd;

    SendMessage(hEdit, EM_GETSEL, (WPARAM)&nStart, (LPARAM)&nEnd);
    Edit_SetSel(hEdit, nEnd, nEnd);

    return;
}

// コピー可能不可能判定関数
BOOL Edit_IsCopyAvailable(HWND hEdit)
{
    int nStart, nEnd;

    SendMessage(hEdit, EM_GETSEL, (WPARAM)&nStart, (LPARAM)&nEnd);

    if(nStart == nEnd)
        return FALSE;
    else
        return TRUE;
}

// 選択可能不可能判定関数
BOOL Edit_IsSelectAvailable(HWND hEdit)
{
    if(Edit_GetTextLength(hEdit))
        return TRUE;
    else
        return FALSE;
}

hEdit」はエディットコントロールのウィンドウハンドル。エディットコントロール用のマクロを使用しているので、windowsx.hのインクルードが必須となる。EM_GETSELを使ったマクロもあるのだが、オーバーフローを起こす可能性があるので用いていない(詳細はwindowsx.hのEdit_GetSelを参照)。

なお、一応動作確認はしてあるが、使用の際は自己責任でよろしく。

| | コメント (0) | トラックバック (0)

広島に行ってきました

水曜日のこと。

母「青春18きっぷが手に入ったんだけど、あんた出かけない?」
私「いいけど」
母「ちなみに、期限は20日だから」
私「ちょっと待て

というわけで、翌日出かけることになったのでした、まる。

8:38瀬戸駅発。車両はサハ213-4。
8:55岡山駅着。
まあ、このあたりは普通。

少し時間があるので、岡山駅構内のコンビニで菓子類を購入。

9:14岡山駅発。快速シティライナー、車両はモハ114-2022。
「快速」と付いているが、広島駅近辺を除けば各駅停車の列車。というわけで、早速眠りに落ちる。目が覚めたのは福山駅。

11:55広島駅着。
早速駅前で広島電鉄の車両を撮影。

IMG_0123 IMG_0124 IMG_0126 IMG_0127 IMG_0128

広電の車両はバリエーションが多く、見ているだけでも楽しい。

お昼を回ったので、駅ビルの中にあるお好み焼き屋、「お好み焼 老松」に入る。「老松スペシャル」(1,200円)がお薦めだというので、それを頼む。結構美味しい。その上、かなりのボリュームなので、おなかが一杯になる。

食事を終えたので、早速「電車1日乗車カード」(600円)を購入し、電車に乗り込む。車両は3807B。
岡電と違い、乗客は多い。市民に愛されている路線なんだなぁ。うらやましい限り。

それにしても、怪しい乗客だっただろう。電車とすれ違うたびにキョロキョロし、メモを取っているんだもの。しかしながら、珍しい電車を見ると思わず興奮してしまうのだから仕方がない。さすがに車内から写真を撮れるほどの根性はなかったが。

約1時間後、広電宮島口に到着。一応厳島神社の大鳥居を撮ろうと思ったのだが……。

IMG_0129 ちっちゃいよッ!?

ぐはぁ、望遠レンズを持って行けば良かった。orz
サムネイルじゃ絶対に見えない。o...rz

時間もないので、引き返そうとホームに行くと……。

IMG_0130
ぐぐぐ、GREEN MOVERじゃないですか! 周囲には他の乗客もいない、乗務員もいない。というわけで、撮影開始。

IMG_0131 IMG_0136

まだ乗客も乗務員も来ない。よし、次は車内だ!

IMG_0137 IMG_0138
ぐは、ちょっと暗いかな?

運転台だって撮っちゃうよ?

IMG_0139 IMG_0140

調子に乗ってたら、他のお客さんが乗ってきたので、撮影終了。堪能させていただきました。

広電宮島口から原爆ドーム前へ。車両は上のGREEN MOVER、5005A。
広島に来たんだから、とりあえずこれは撮っておかないと。

IMG_0143

あと、これ。

IMG_0145

がんばれ、広島カープ! 別に広島ファンというわけじゃないんだけどね。

紙屋町西から広島駅へ。車両は814。

16:22広島駅発。快速シティライナー。車両はクハ111-812。

17:28三原駅着。ここで乗り換え。

17:37三原駅発。車両はモハ116-34。疲れたので眠りに落ちる。倉敷あたりで目が覚める。

19:05岡山駅着。

いやぁ、楽しかった。というわけで、使った青春18きっぷと広電の電車1日乗車券を撮影。

IMG_0146

| | コメント (2) | トラックバック (0)

今日は通院の日(BlogPet)

今日、テグ................................................................................................................................................................................................................................................................................................................................................................................................................
だって♪

*このエントリは、BlogPet(ブログペット)の「SnowWhite」が書きました。

|

2006-01-14

終焉の時

asahi.com:40年の歴史終える - マイタウン岡山

ちょっ、マヂですか!?

岡山松竹が閉館するらしい。ここの映画館はガンダムシリーズの映画を上映するので、よく利用させていただいていたのだが……。

てか、今度やる「機動戦士ZガンダムIII 星の鼓動は愛」はどこで観ればいいんだろう?

| | コメント (0) | トラックバック (0)

今日は通院の日(BlogPet)

ほんとうは、maedaは
私がよく行く殆ど死んでいる殿のところでバナーが公開されていたので、特に深いチラシも...
とか考えてたよ。

*このエントリは、BlogPet(ブログペット)の「SnowWhite」が書きました。

|

2006-01-11

殆ど死んでいる

以前買った殆ど死んでいる殿の同人誌、「水銀燈推参!!」と「I need siesta...」がとらのあなで再販されたらしい。

が、しかし!

なんと即日完売してしまったらしい。すげぇな。

| | コメント (0) | トラックバック (0)

今日は通院の日

今日は通院の日。

調子は相変わらず。
セディール10×1、トレドミン25×1、テグレトール×1。

岡山県立図書館

紀伊國屋書店クレド岡山店。

ゲーマーズ岡山店。

BOARDWALK岡山店。

  • ゲーマーズフィールド

店長の話では、最近アメリカのゲーム業界でも「Big Eyes, Small Mouth」が流行っているらしい。下記は関連サイト。

| | コメント (0) | トラックバック (0)

2006-01-10

ローゼンメイデン携帯ストラップ

ローゼンメイデンの携帯ストラップが発売されたらしいのだが、アキバBlogさんの記事を見て驚愕した。

ローゼンメイデン携帯ストラップ、蒼星石には「オレのよめ」

実装版の蒼星石と雛苺と真紅かよ! しかも水銀燈はペン銀燈かよ!

写真では隠れてしまっているが、翠星石は実装石になってるんじゃなかろうか。
#写真を表示していないのは、geekさんが実装石を翠星石と認識できなかったからじゃないかな?

それにしても、実装石ペン銀燈ってけっこう認知されてるんですなぁ。

| | コメント (0) | トラックバック (1)

2006-01-07

今日は通院の日(BlogPet)

昨日、maedaが
SnowWhiteは、ネットで大きいメイドとかチラシやマッサージなどをヒットしたか...
とか言ってた?

*このエントリは、BlogPet(ブログペット)の「SnowWhite」が書きました。

|

2006-01-04

面白いサイトを見つけた

ふと思い付いて、「新幹線 擬人化」でググってみたら、こんなサイトがヒットした。

鉄道擬人化「Rail-G Station」 Rail-G Station

おもしれー!!

こーゆーセンスって大好きっス。

| | コメント (0) | トラックバック (0)

2006-01-01

新年明けましておめでとうございます

旧年中は大変お世話になりました。
新年もよろしくお願いいたします。

というわけで、頑張って描いた犬の絵……なんですが……。

犬っぽい何か

トラックボールで描くのはこれが限界です。_| ̄|●

| | コメント (6) | トラックバック (0)

« 2005年12月 | トップページ | 2006年2月 »