プログラム実験部屋 |
ここではいろいろ試しに作ったプログラムなどを置いていきます。 今までやったことのないジャンルや、通常のソフトとしては役に立たないもの(ミニデモっていうかエフェクト)を置いていきます。 現在置いてあるもの その1−ミニエフェクトGALAXY その2−電子シミュレーション その3−花火シミュレーション その4−OpenGLによる立体視用3D物体描画 その5−VB風言語→Javaクラスファイルなコンパイラ その6−VBでSTL風サンプル その7−GPUでPSG音源風 |
VC#講座 |
Visual C#向けのプログラムネタを置いています。 現在置いてあるもの その1−麻雀点数計算サンプル その2−AVIファイル生成サンプル |
その1−色加減演算サンプル[★★★◎◎] |
VBで色加減演算をしたサンプルです。 実際は擬似半透明処理とかは色加減演算でなくBitBltでもできますが、一応色加減演算したい人に。 今までGetPixel&SetPixelを使ったちょっとインチキ版が置いてあったんですが(^^;)、雑誌にここのサイトの紹介で「色加減演算などのサンプルが・・・・」などと 書かれてしまい、適当な作りのものを公開するわけにいかなくなったので DIBSection版です(^^;) |
ダウンロードする 約18KB |
使用APIリスト− BitBlt、GetTickCount、CreateDIBSection、RtlMoveMemory、SelectObject、DeleteObject |
その2−一人で輪唱[★★★] |
SoundToolsを利用したサンプルです。 DirectSoundをVBから使っています。 このサンプルはSoundTools正式版に含まれているため、削除しました。。 |
SoundToolsのページ |
その3−ウインドウ変形サンプル[★★★◎◎] |
VBでウインドウ変形をしたサンプルです。 Win32では四角以外の形のウインドウを作ることが出来ます。 Naotodoさんに聞かれた質問です。 私のソフトでは「JoyBoard Standard」で使われていました。 まさに時計ソフトを作るのに適した技術な気も(^^;) |
ダウンロードする 約16KB |
使用APIリスト− CreateEllipticRgn、CreateRoundRectRgn、CreatePolygonRgn、SetWindowRgn、 CombineRgn、DeleteObject。 |
その4−分数の約分、最大公約数の算出サンプル[★◎] |
最大公約数をユークリッドの互除法で計算するサンプルです。 渋谷さんに頂いた質問です。 7桁の整数同士でも、VB4でさえ一瞬で計算可能です。 最も互除法はΟ(n)で計算できるんですけどね・・・ 前回ULしたものにはバグが発見されたので・・・ |
ダウンロードする 約6KB |
その5−ソーティングサンプル[★★◎◎] |
大量の数字の羅列を2つの方法で順に並べ替えるサンプルです。 りおうさんに頂いた質問です。 VB4版とVB5版が付いているので速度の違いを計るとか・・・。 MicroSoftのページに、より高等なソート(シェルソート等)方法が書いてあったような・・・ バブルソートとシェルソートのみ・・・ |
ダウンロードする 約11KB |
その6−AddressOfサンプル[★★★] |
VB5で追加された新機能、AddressOf演算子のサンプルです。 どうせなら役にたつ物をと言うことでマルチメディアタイマーのサンプルです。 VB5の新機能を利用しているのでサンプルコードはVB5以降でしか利用できません。 WindowsXP + VB6の環境ではうまく動作しなかったという報告も入っていますので、注意して利用してください。 |
ダウンロードする 約6KB |
使用APIリスト− timeBeginPeriod、timeEndPeriod、timeSetEvent、timeKillEvent、Sleep、 timeGetTime。 |
その7−リストビューのディレクトリ表示サンプル[★★★◎◎] |
リストビューコントロールでエクスプローラ風のディレクトリ表示を行います。 めちゃめちゃ遅い!なんかいいメッセージとかないの?LB_DIRみたいな!。 サンプルコードはVB5 Pro以上でしか利用できませんが、添え付けEXEはランタイムさえあれば実行可能です。 |
ダウンロードする 約11KB |
使用APIリスト− GetWindowsDirectory。 |
その8−かっこいい?ロゴ表示サンプル[★★◎◎◎] |
ゲームソフトのタイトルなどで使われるロゴ表示のサンプルです。 全部で12種類の表示があります。 要は考え方なので、DelphiでもC++でも使えるはずです。 |
ダウンロードする 約12KB |
使用APIリスト− BitBlt、StretchBlt。 |
その9−BMP2色保存サンプル[★★◎◎◎] |
VBのSavePicture命令は便利なのですが、フルカラー保存しかできません。 ここでは、モノクロ保存をVBのOpen、Putなどの命令で行っています。 |
ダウンロードする 約7KB |
使用APIリスト− GetPixel。 |
その10−シミュレーションゲーム風移動処理サンプル[★★◎◎◎] |
いわゆる戦術型ゲームで必要となる「現在の移動力で動ける範囲をしらべる」 ことと、「最短経路の探索」のサンプルです。 アルゴリズムの説明が分かりにくいようだったので、少し補足を付け加えました。 戦術型シミュレーションゲームを作りたい場合は見てみよう! |
ダウンロードする 約23KB |
その11−3D描画サンプル[★★★◎◎◎◎] |
無理矢理な3D描画のサンプルです。 VBで行列でなく3D座標用の構造体を作って3D物体の描画を実現しています。 ただし、ソースを理解するにはある程度の数学力(高校程度?)が必要だと思います。 |
ダウンロードする 約10KB |
使用APIリスト− BitBlt、Polygon。 |
その12−DIBセクションサンプル v1.2[★★★★◎◎◎] |
DIBセクションのサンプルです。 BitBltと、自作スプライトコードの速度差がわかる・・・ ただし、VB5のネイティブコンパイラを使わないと使い物にならない遅さ・・・ コメントがなく、わかりにくいですが高速モノクロ版を追加しました。 低速テクスチャー版の高速化版(^^;)も添え付けしました。 |
ダウンロードする 約44KB |
使用APIリスト− CreateDIBSection、SelectObject、DeleteObject、BitBlt、GetTickCount、 RtlFillMemory、RtlMoveMemory、RtlZeroMemory。 |
その13−3DワイヤーフレームエンジンFPolyClsサンプル[★★★◎◎◎◎] |
無理矢理な3D描画エンジンFPolyClsのサンプルです。 はっきり言って他人が使うことを考えてません(^^;) デモでコマが回ります。 |
ダウンロードする 約20KB |
使用APIリスト− BitBlt、LineTo、MoveToEx、CreatePen、SelectObject、DeleteObject、 CreateCompatibleDC、CreateCompatibleBitmap、DeleteDC、GetTickCount。 |
その14−1行テキスト取得サンプル[★★★★] |
複数行テキストボックスから、現在の行のテキストだけを取得するサンプルです。 メッセージについて知識がある人むけですね。 |
ダウンロードする 約5KB |
使用APIリスト− SendMessage。 使用メッセージリスト− EM_LINEFROMCHAR、EM_GETLINE。 |
その15−バッファ内のWAVテンポ変更サンプル[★★★◎◎] |
WAVファイルをByte型変数に読み込んで、テンポを変えて再生するサンプルです。 Long型変数をByte型変数4つに分解したり、Byte型変数4つからLong型変数を作るやり方を知っていると楽ですね。 |
ダウンロードする 約11KB |
使用APIリスト− sndPlaySound。 |
その16−10進法→2進法、16進法変換サンプル[★◎] |
名前の通りのサンプルです。 16進法についてはVBの標準機能で簡単に変換が行えるため、実際に必要なのは 2進法関連だけかも知れませんが・・・・ 10進法→2進法、16進法と、その逆を行う4つの関数をつけてあります。 |
ダウンロードする 約6KB |
その17−EXEやDLLからのアイコン抽出ソフト Icon Abstracter v1.0(訂正版) (アイコン取得・利用のみ)[★★◎◎](アイコン保存)[★★★★◎◎◎◎] |
名前の通りのソフトです。なかなか使えるかもということで名前が「ソフト」です。 EXEからのアイコンの取得についての質問ということで作ったのですが、それだけ だと1、2のAPIで解決してしまい、ここの講座の主旨にふさわしくないので(^^;) 保存機能をつけました。 保存機能もEXEからのバイナリ直抜き出しでなく、APIをいろいろ使ってアイコン ハンドルから保存する方法を取っているので応用が利くかも知れません。 (アイコン取得よりもこっちの機能の方が力入ってる(^^;)) 異様にコメント部分が軽いですが気にしないでください(^^;)。 なぜかドライブ選択コンボボックスが非稼動状態になってたのの訂正版です。 |
ダウンロードする 約23KB |
使用APIリスト− ExtractIcon、DrawIcon、GetObject、GetIconInfo、SelectObject、DeleteDC、 DeleteObject、CreateCompatibleDC、CreateDIBSection、GetBitmapBits、 RtlZeroMemory、RtlMoveMemory。 |
その18−レジストリデータ取得サンプル[★★★◎] |
名前の通りのサンプルです。 今回はただのレジストリのデータ取得だけのうえに再利用し難いです。 ただ、Windowsのインストール時に入力されたユーザー名・会社名を得るという ものなので、バージョン情報を少しカッコつけたいときに使えるかも知れません。 質問を受けての作成なので用途が絞られています。 |
ダウンロードする 約7KB |
使用APIリスト− (コード内ではalias引数で名前を変えて使用しています) RegCloseKey、RegOpenKey、RegQueryValueEx。 |
その19−ファイルドロップサンプル[★★★◎◎] |
通常VBではサポートされていないプログラム実行中のエクスプローラ等からのファイルのドラッグ&
ドロップのサンプルです。 コードはさほど複雑では無いんですが、今回はAddressOfによるメッセージフックを 行っているため、デバッグがやりにくいです。 バグがあったので修正しました。 |
ダウンロードする 約9KB |
使用APIリスト− DragAcceptFiles、DragFinish、DragQueryFile、SetWindowLong、CallWindowProc。 使用メッセージリスト− WM_DROPFILES。 |
その20−ドラム回転サンプル[★◎◎] |
名前の通りのサンプルです。 スロットマシンなどのドラムを再現します。 あらかじめ一連の画像データをフォームのロード時に用意するというもっとも単純だと思われる方法を使っています。 (04/07/08) 境目の描画をのりしろを使う方法と分割して描画する方法を両方載せました。 |
ダウンロードする 約12KB |
その21−256色BMP保存サンプル[★★★★◎◎◎] |
今まで何度か質問を受けた内容のサンプルです。 やっぱり「VB講座」を名乗ってる以上これははずせないでしょう(^^;) VBのSavePictureでの色数は画面の色数に依存するため、常に256色保存を 行う事はできませんでした。 そこで、常に256色保存を行うモジュールを作りました。 関数の形で公開するので、手軽に再利用できます。 ただし、すべてのピクセルに関して色数をカウントするため、ネイティブ コンパイルを使わないとかなり時間がかかります。 VCでDLLにしようかなぁ・・・ また、このサンプルは256色以上あるときには保存を行いません。 減色のサンプルではないので。 確実に256色以下しか使っていない時のみ保存できます。 |
ダウンロードする 約14KB |
使用APIリスト− GetObject、SelectObject、DeleteDC、DeleteObject、CreateCompatibleDC、 CreateDIBSection、RtlMoveMemory、BitBlt。 |
その22−MIDファイル基本データ取得サンプル[★★★◎◎] |
旧「MIDファイルタイトル取得サンプル」の改良版です。 MIDファイルからフォーマット、トラック数、分解能、タイトルを抜き出す サンプルです。 SToolsのMTSetLoopTop関数を使うときに便利かもしれません。 タイトルは最初の3KBまでしか探しませんが、たいていはトラックの初めに トラック名があるため、ほとんど時間はかかりません。 タイトルが無い曲でも3KBで打ち切るため、P-Codeでも0.2秒ぐらい(推定) で探し出します。 関数の形になっているため、使いやすいかと思います。 APIは一切使っていません。 |
ダウンロードする 約11KB |
その23−動作環境取得サンプル[★◎] |
非常に単純なサンプルです。 コードがEXEで動いているかVB下で動いているかチェックするための物です。 関数を使って簡単に再利用できます。 2分ぐらいで作ったので受験には影響ないです(^^;) |
ダウンロードする 約3KB |
その24−ごみ箱への移動サンプル[★★★◎] |
名前の通りファイルをごみ箱へ移すサンプルです。 とはいえ単一のAPIで行えるため、ここの主旨と少しずれるんですが・・・ あくまでAPIでなくごみ箱に関わるサンプルということでカンベンしてください(^^;) |
ダウンロードする 約9KB |
使用APIリスト− SHFileOperation |
その25−追尾ミサイルサンプル[★★◎◎◎] |
シューティングゲームで必須な自機を追いかけるミサイルのサンプルです。 昔ながらの追尾法から加速する方法、角度を変化させる方法も紹介しています。 速度ベクトルの表示などもするため、視覚的にわかりやすくなっています。 角度のみ変化による追尾について、ベクトル演算を用いて3Dに適用できるかたちのものを追加しました。 |
ダウンロードする 約14KB |
使用APIリスト− BitBlt、GetTickTime |
その26−アプリ間データ取得サンプル[★★★◎] |
(考えたら作ったの7月の終わりだなぁ) OLE、ActiveXと次々に出てくる技術によって忘れられていますが、Win3.1時代から使われたアプリ間データ交換技術のDDEを使うサンプルです。 と言ってもコードはほとんど書いてなく、ほとんどプロパティ設定だけで済んでます。 ただ、取得されるデータを持つEXEもDDEが扱えるようにプロパティを組んでおかなくては行けないですが。。。 |
ダウンロードする 約9KB |
その27−キー名取得サンプル[★★★◎] |
押したキーの名前を取得するサンプルです。 キーのメッセージから得られる走査コードから名前をAPIで取り出すため、簡単なメッセージフックをしています。 いや、JoyBoardに組みこもうと思ってるんだけど。 |
ダウンロードする 約7KB |
その28−コンソールアプリサンプル[★★★◎] |
VBでMS-DOSプロンプト用のコンソールアプリを作成します。 簡単な文字列の入出力をサポートしています。 |
ダウンロードする 約10KB |
その29−EXEサイズ取得サンプル[★★◎◎] |
EXEのファイルのサイズを取得するものです。 何をするものかというと、本来あるべきEXEのサイズを返すだけです・・・ だた、EXEに強引にファイルを詰め込むなどできるため、(EXEのサイズがわかればどこから取り出せばいいかわかるでしょ?)「EXEに組み込めるアドベンチャーゲーム作成ソフト」とかにはピッタシかも。 |
ダウンロードする 約6KB |
その30−簡易ドラッグサンプル[★◎] |
シェイプコントロールをドラッグするような操作をコーディングするサンプルです。 特に高度な技術を用いたものではありませんが・・・ 質問を受けて作成したものです。 |
ダウンロードする 約5KB |
その31−CRC取得サンプル[★◎◎◎] |
最近ファイルチェックによく使われるCRCの計算をします。 CRC32、CRC16の両方を計算できます。 関数の形になっているので、計算方法に興味がなくても大丈夫ですね。 (2005/03) McAfee社のウイルススキャンを利用している場合、04/09/12〜05/03/17まで配布していたLZHファイル内のcalccrc.exeにFakeLogin-Bというウイルスが混入されていると診断されてしまいます。 定義ファイル4438〜4441ではこの現象が確認され、4446では確認されませんでした。 他社のウイルスチェックをかけてもウイルス混入とは判断されず、FakeLogin-B特有の動作も見られないためおそらくウイルススキャンの誤認識と思われます。 しかし、ウイルススキャンの動作するPCではファイルのダウンロードに失敗する可能性があるため、calccrc.exeを配布ファイルに含めないことにしました。 calccrc.exeは付属のC言語のソースからgccでコンパイルすることで作成できます。 (2006/02) v1.3→v1.4 除算を整数化・変数の型変更で2.5倍程度に高速化。 (2004/09) v1.2→v1.3 ファイルサイズが0の時エラーが発生するのを修正。 (2004/01) v1.1→v1.2 CRC16計算のバグを修正。C言語版も多項式のミス、テキストモード処理していたバグを修正。 (2003/11) v1.0→v1.1 3割ほど高速化。また、C言語版の比較的理論に則ったパブリックドメインのプログラムを転載、実行ファイルを含んでいます。 |
ダウンロードする 約47KB |
その32−画像サイズ取得サンプル[★★◎◎◎] |
BMP、GIF、JPEG、PNGに対して画像のサイズを取得するサンプルです。 実際にイメージのロードは行わないため、そこそこの早さにはなっていると思いますが・・・ PNGは通常のVBの機能だけでは全く操作できないので役に立つかも? ミニミニソフト側のHTML Listで使うために作ったんですけどね・・・ GIFのBPPの計算法が間違っていたので修正。ソースも改良。 JPEGでSOF1以外のヘッダを利用している場合にも対応。 |
ダウンロードする 約13KB |
その33−数式解析サンプル[★★◎◎◎◎] |
文字列を数式とみなして計算するサンプルです。 そこまで高速ではないですが、何万回も計算するので無ければまぁ使い物にはなると思います。 字句解析などがちょっと強引ですが。 (2006/03) v1.1→v1.2 int関数が使えなくなっていたのを修正。 多変数関数利用時に計算順がおかしくなったのを修正。 デバッグ用の関数ToStringを追加。 (2006/03) v1.0→v1.1 キャッシュ処理高速化。 WSHのScripting.Dictionaryを利用し、変数の代入・取得の高速化。 多変数関数のサポート、及び多変数関数の例としてmin・maxの追加。 |
ダウンロードする 約35KB |
その34−動的配列取得サンプル[★★★◎◎] |
VBの動的配列が初期化済みかどうか及び次元数を調べるサンプルです。 ちょっとした解析結果に関しても書いてあるのでC言語などやっていてポインタに関する知識があれば中身も理解できると思います。 そうでない人もReDim済みかどうかを調べるのには十分使いやすい形にはしたつもりです。 (2006/02) WinXPでうまく動かない問題を修正。 |
ダウンロードする 約10KB |
その35−2円の交点取得サンプル[★◎◎◎] |
名前の通りです。 余弦定理を利用して2円の交点を求めます。 関節が1つだけある場合に、例えば手の先端と肩の位置からひじの位置を求めたいと言うような場合に。 インバースキネマティクスのほんのさわりみたいな感じです。 |
ダウンロードする 約10KB |
その36−IDE内ホイール機能追加アドインサンプル[★★★★◎◎] |
VBのコードペインをホイール付きマウスのホイールでスクロールするアドインです。 使用するにはアドインを作成できる環境(VB5及びVB6、いずれもPro版以上必須)である 必要があります。 内部的にはプロセス内のメッセージフックを行い、ホイールの回転をチェックしています。 |
ダウンロードする 約6KB |
その37−エクスプローラ風ファイルリストボックスサンプル[★★★◎◎] |
エクスプローラの右側で「詳細」の時と同じような表示のファイルリストボックスです。 ソースコード(.ctl)の形で配布するのでOCXにする必要はありません。 ただし、VB5 Pro版以上でないと使用できません。(VB6でもPro以上なら大丈夫だと思います。) |
ダウンロードする 約25KB |
その39−CODEC使用によるmp3デコードサンプル[★★★★◎◎] |
acmStream系のAPIを用いてCodecを通したMP3のデコード・再生を行います。 MP3のCodecがない環境だと動きません。 (多分Windows98以上なら大丈夫です。) |
ダウンロードする 約29KB |
その40−実行時のフルカラーアイコン設定サンプル[★★◎] |
(少なくともVB5では)実行時にLoadPicture(256色以上のアイコン)で得られる画像は16色にされてしまうようです。 そこで、APIを使って多色のアイコンをウインドウのアイコンに指定します。 小ネタと言うことでプログラム量はごくわずかです。 |
ダウンロードする 約6KB |
その41−ベジェ曲線の長さ計算およびオフセット曲線描画サンプル[★★◎◎◎◎] |
ベジェ曲線の長さを簡単な数値積分によって求めます。 また、ベジェ曲線から一定距離を持つ曲線(オフセット曲線)の近似および厳密な描画を行います。 |
ダウンロードする 約17KB |
その42−VBで簡易正規表現サンプル[★★★◎◎◎] |
自力で簡単な正規表現のマッチングをやっています。 速度的には恐らく遅いですし、perl等の様にマッチ部分を取り出すことなどは出来ず単にマッチするかしないかを返すだけです。 気まぐれな戯れ言の06/04/15の記事と連携しています。 |
ダウンロードする 約25KB |
その43−IEのコンテキストメニュー拡張サンプル[★★★★◎] |
IEを右クリックしたときのメニューに項目を追加し、VBのActiveX DLLと連携するサンプルです。 利用するにはVB5 Pro版以上が必要です。(VB6は動作未確認) その他、JavaScriptやVBScriptだけで動作するものもついています。 気まぐれな戯れ言の03/11/25の記事と連携しています。 |
ダウンロードする 約5KB |
その44−VBでLL(1)構文解析サンプル[★★★★◎◎] |
自力で簡単なLL(1)文法の構文解析をやっています。 文法及び解析対象の文章を入力すると、LL(1)文法の構文解析表と解析結果を出力します。 気まぐれな戯れ言の記事で解説。 (2007/09) CreateFollowで、全非終端記号のFOLLOWに文末記号$を加えてしまっていたのを、開始記号のFOLLOWだけに修正。 |
ダウンロードする 約25KB |
その45−文字のアウトライン応用サンプル[★★★★◎◎◎] |
文字のアウトラインを取得して輪郭を変化させたりするサンプルです。 気まぐれな戯れ言の03/12/05の記事と連携しています。 (2006/05) WindowsXPでフォント変更が効かない問題を修正。 (2005/11) WindowsXPでうまく動作しない問題を修正。 |
ダウンロードする 約24KB |
その46−多角形交差判定サンプル[★★◎◎◎] |
2次元上で多角形同士が交差しているかどうかを判定するサンプルです。 気まぐれな戯れ言の04/05/18・04/05/28の記事と連携しています。 |
ダウンロードする 約24KB |
その47−VBからのOpenGL利用サンプル[★★◎◎] |
VBからOpenGLを利用するサンプルです。 ライティングやテクスチャなど、基本的なところを一通り。 気まぐれな戯れ言の04/06/15の記事と連携しています。 EXEファイルの実行時は必要ないですが、ソースファイルからの実行の場合OpenGL Type Libraryが必要です。 Programming OpenGL with Visual Basicでダウンロードできますが、 再配布自由ということでこちらにも置いておきます。 OpenGL Type Library v1.2 約192KB |
ダウンロードする 約87KB |
その48−多関節触手もどきサンプル[★◎◎] |
質問への対応で作成。 単純な多関節サンプル。シューティングゲームアルゴリズムマニアックスとは違う実装です。 |
ダウンロードする 約7KB |
その49−ファイルのプロパティ表示サンプル[★★★◎] |
エクスプローラの右クリックから表示できる、ファイルやフォルダのプロパティウインドウをVBから表示します。 なお、普通に表示するとプロパティウインドウは非同期に動作する上に、呼び出し元終了と同時にウインドウが閉じてしまいます。 そこで、VB+APIで無理やりプロパティウインドウが閉じるのを待ちます。 |
ダウンロードする 約7KB |