「ゲームプログラミング」の版間の差分

削除された内容 追加された内容
M編集の要約なし
タグ: ビジュアルエディター モバイル編集 モバイルウェブ編集
Ef3 (トーク | 投稿記録)
UL化、cleanup
タグ: 2017年版ソースエディター
329 行
 
非標準な方法なら、可能です。ビットマップ関連の関数には、画像を1ドットずつ読み取って特定の一色を透過させる機能があるので(Win2000以降なら「TransparentBlt」という関数があります)、そういった関数を利用する方法もあります。ですが、それだと、
:・* 特定の一色が使用不可能になる欠点がある事。また、もしキャラクターの画像内部にその色が使われていると、キャラクターが透過してしまい、ゲーム中での画像バグになっていまう。
:・* わざわざ透過専用の処理を書く必要があり、労力がかなり増える。
:・* PNGなどと違い、画像の国際規格などとしては規格化されてないので、他のアプリでは使い回しが聞かない。
などの欠点があり、大変に不便です。
 
421 行
このように、rand関数の使いかたは間接的であり、いまいち使いづらい。
 
そこでIT業界では対策として、より直接的に乱数の範囲指定のできる等の新機能もある、さまざまな乱数関数が、のちの各種のプログラム言語で追加された。Visual C++ などに採用されている Random関数グループには、名前がrand関数と似ているが、しかし、この新しいRandom関数グループの中には「1以上から7未満の整数値がランダムに欲しい」のような指定が直接的に出来る「Next」命令メソッドがある。
 
Random関数のこの直接指定の機能により、バグの混入率が減る。
 
 
しかし、Visual C++ や Visual C# では、これらの命令クラスやメソッドを使うための予備的な宣言が必要であり、そっちの宣言の手間で、やや不便である。
 
 
でも、現実的に、Windows向けのゲームプログラムでは Visual C++ や Visual C# などを利用せざるを得ない。
 
Visual C++ にある高機能な乱数命令グループクラス Random や、そのRandomグループクラスに属するNext命令メソッドなどを使いたい場合、サイコロのプログラムをつくるだけですら、下記のような数行のコードが必要になる。
 
<syntaxhighlight lang="cpp">
Random^ saikoro1 = gcnew Random();; // Random^ でRandom関数の使用を宣言しなければならない。gcnew はインスタンスをつくるための演算子
int detame; detame = saikoro1->Next(1, 7); // Next 命令メソッドで「〇〇以上△△未満」の乱数を指定できる。「->」はアロー演算子というもの。
saikoro1 = gcnew Random(); // ここでの gcnew は命令をつくるための演算子
int detame; // 出た目
detame = saikoro1->Next(1, 7); // Next 命令で「〇〇以上△△未満」の乱数を指定できる。「->」はアロー演算子というもの。
MessageBox::Show("目" + detame.ToString() + "が出ました");
</syntaxhighlight>
460 ⟶ 458行目:
フォームデザイナによる開発は、頼りにならない。
 
フォームデザイナで、ユーザーコントロールなどを使って、そこから画像書き込みをすれば、おそらくユーザーコントロールが裏画面として扱われるためか、ちらつき自体は解決できる場合があるが、しかしユーザーコントロールの使用仕様上、グローバル変数の共有が困難だったり、アプリ内での終了コマンドが無いなどの欠点がある。特に、グローバル変数の共有が困難な点は、ゲーム性およびゲーム開発効率を致命的に損ない、使い物にならない。
 
また、困ったことに、GUIフォームの「パネル」オブジェクトに、ダブルバッファの機能が無い(もしくは不十分)。「パネル」なら、グローバル変数の共有は比較的に簡易だが、今度はダブルバッファの機能が不十分なのである。
 
一方、GUIフォームの「ピクチャーボックス」オブジェクトでは、関数ブロック内に書ける処理命令は、画像をクリックしたときの処理しか書けない。我々は、クリックしてない時にも画像(静止画だけでなく時には動画)を表示したいし、マウスクリック以外のキーボード操作にも画面を反応させたいのであるから、「ピクチャーボックス」は機能不足である。
 
結局、どのGUIオブジェクトでも、ゲームのような動画を描画できない。だから、Win32 API を使う必要がある。フォームデザイナは使えない。
876 ⟶ 874行目:
 
そして、ともかくイベントのモジュール設計では、
:・* そのイベントモジュールの発動に必要となる最低限のイベント(例: モンスター出現事件が起きる、誘拐事件が起きる、など)
:・* クリアに必要なアイテム(例: 重要トビラの鍵など)をもらうとか、クリアに必要な重要人物を仲間にするとか、
:・* イベントクリア条件となるイベントと(例: ボスを倒す、人質を救出する、クリア到達地点に到達、など)、
:・* それ以外のヒント・誘導などのための付属的なイベント処理、
として役割を分けて組み合わせると、そのモジュールを管理しやすいでしょう。
 
 
上記イベントの種類のうち、イベントモジュールのクリアに最低限必要なのは、
:・* イベントモジュール発動
:・* クリアに必要なアイテム入手など、
:・* 実際にイベントクリア
です。