sprite - みる会図書館


検索対象: 月刊 C MAGAZINE 1992年4月号
6件見つかりました。

1. 月刊 C MAGAZINE 1992年4月号

スプライトケームの完成 2 X68k 活用講座 GCC で学ぶ X68 ゲーム 第 1 0 回 吉野智興 今月もサンプルゲームソース説明の続きです。おもしろく ないリストの説明になってしまいますか , 基礎的なプログ ラムなので投げ出さないで , プログラムをいろいろといじ ってみてください。 敵キャラクタの発生と移動 いわゆるシューティングゲームて、は , 敵 キャラクタの発生位置や動きがそのゲーム の「おもしろさ」を決める重要な要素になっ ています。たとえばアーケードゲームの移 植版てあれば , このふたつの要素の違いが 移植度の優劣を決める判断基準のひとつに なっています。敵キャラクタの発生位置や ゲーム play 上て、の発生時間によって , 「パタ ーン」と「ランダム」に大別てきます。現在の シューティングゲームのほとんどは前者の 「パターン」て、 , ある時間における自機の位 置などによって若干の変化はあるものの , 「覚えていないと死ぬ」というたぐいのもの がほとんどてす。 プログラム上からみれば , 「パターン」タ イプはキャラクタの発生・消滅は経過時間 によるテープルからの拾い出し , 「ランダム」 は読んて、字のごとくて、す。処理上簡単なの は当然「ランダム」なのて、 , 今回のサンプル ( 3 月号に収録した sgame0. c, sprite. c をご 参照ください ) て、は「ランダム発生」にして あります。「ランダム」とはいえ , ただ単に 移動するだけて、はおもしろくもないのて , 敵キャラクタの発生と移動 1 : / * 敵キャラクターの移動処理を行う。もし消去されたら 1 を返す。 2 : static int 3 : 敵移動処理 (Sprite 対象 ) 5 : if (SPD-WORKO ( 対象 ) = = (int) A-type) if (SPD-LIFE ( 対象 ) くの 8 : 9 : SPD_LIFE ( 対象 ) + + ; 10 : if (SPD-LIFE ( 対象 ) = 11 : select—sprite—pcg ( 対象 , 4 ) : 12 : else if (SPD-LIFE ( 対象 ) ー 13 : select—sprite_pcg ( 対象 , 3 ) ; 14 : if (SPD_LIFE ( 対象 ) = の 15 : 16 : delete—sprite ( 対象 ) ; 17 : return 1 ; 19 : else if (SPD-LIFE ( 対象 ) ー 20 : display-sprite ( 対象 , 非表示 ) ; return 0 : 22 : 23 : 24 : 25 : 26 : 28 : 29 : 30 : 32 : 33 : 34 : 35 : 36 : 38 : 39 : 40 : 41 : 42 : List ー 4 ) else SPD_WORK2 ( 対象 ) + + ; if (SPD_WORK2 ( 対象 ) = = 16 ) select—sprite—pcg ( 対象 , 1 ) ; else if (SPD-WORK2 ( 対象 ) = = 32 ) select-sprite—pcg ( 対象 , 2 ) : else if (SPD-WORK2 ( 対象 ) = 48 ) SPD_WORK2 ( 対象 ) = 0 ; select—sprite—pcg ( 対象 , の ; SPD_WORK3 ( 対象 ) + + ; if (SPD-WORK3 ( 対象 ) = 6 ) SPD_WORK3 ( 対象 ) = 0 ; if (SPD-POS-X ( 自機 ) = SPD_POS_X ( 対象 ) ) move—sprite_diff ( 対象 , 0 , 1 ) ; 140 C MAGAZINE 1 2 4

2. 月刊 C MAGAZINE 1992年4月号

X 68 k 活用講座 List 1 移動パターンを 2 種類用意して一応の変化を 見せることにしました。サンプルゲームて、 丸く膨らんだり縮んだりするキャラクタは , 自機の横方向座標を合わせるようにゆっく りと移動します。最初は円盤型て、ミサイル 型に変化するキャラクタは , 自機の横方向 座標がある範囲て一致したら , 変形して突 進するといった移動方法を行います。 List 1 は , 敵キャラクタの発生と移動を行 う関数て、す。関数、、敵移動処理〃ては , Sp rite 型の変数をひとつ受け取って , それを移 動させる関数て、す。 Sprite 型変数は構造体へ のポインタてす。その構造体に敵の種別な どが格納されているのて , 敵のタイプごと に移動させる関数を用意しないて、関数内部 て、個別に処理を行います。なるべく各スプ ライトが持っ個性を上位に出さないてプロ グラムしておけば , 後て、変更や追加する際 に余計な手間が不要になります。 敵の種類はマクロ SPD WORKO( ) て、アク セスて、きるワークに格納してあります。敵 キャラクタは移動するだけてなくアニメー ションもするのて、 , それらの処理ワークと して , マクロ SPD WORKI()—SPD WO RK3 ( ) てアクセスてきるワーク , 敵が自機 の弾て、破壊されたときの爆発パターンを処 理するワークとしてマクロ SPD LIFE ( ) て アクセスするワークを用います。 Table 1 が 敵種別ごとの各ワークの役目てす。 敵タイプ A type ては画面外にはみててい ったん表示を消した後そのスプライトを次 の移動処理て削除するためのフラグ , B ty pe< は SPD WORK3( ) を割り当てているフ ラグがありません。これはこのキャラクタ が 1 ドット単位てしか移動しないのて座標が いちょうに増加しますから , 座標位置てこ のフラグを兼ねることがてきるからてす。 てすが , このコーディングは移動単位を変 更した場合 , 動作がおかしくなるのて危険 なコーディングともいえます。ソースを変 更する場合は留意してください。蛇足てす else if (SPD-POS_X ( 自機 ) > SPD-POS-X ( 対象 ) ) move—sprite_diff ( 対象 , 1 , 1 ) ; else move—sprite_diff ( 対象 , ー 1 , 1 ) ; else move—sprite_diff ( 対象 , 0 , 1 ) ; if (SPD-POS_Y ( 対象 ) = = 273 ) delete—sprite ( 対象 ) ; return 1 ; else if (SPD-POS-Y ( 対象 ) = 272 ) display-sprite ( 対象 , 非表示 ) ; return 0 ; else if (SPD-WORKO ( 対象 ) = (int) B-type) if (SPD_LIFE ( 対象 ) くの SPD_LIFE ( 対象 ) + + ; if (SPD_LIFE ( 対象 ) = select—sprite—pcg ( 対象 , 6 ) ; if (SPD_LIFE ( 対象 ) = の delete—sprite ( 対象 ) : return 1 : else if (SPD-LIFE ( 対象 ) = display-sprite ( 対象 , 非表示 ) ; return 0 ; せ さ 生 発 に 位 ム ダ ン クう ラ行 キ動 敵移 00 4- 0 ^ 0 叮ー 8 0 1 よ 0 ム介 0 -4- L.D ^ 0 っー 8 9 0 1 りなっ 0 4 ′ 0 ^ 0 叮ー 8 9 0 14 りっ 0 4 0 6 叮ー 8 9 0 1 よりなっ 0 4 ′ 0 っー 8 0 1 亠り 00 -4- 0 ^ 0 叮ー 8 0 1 より 00 4 ・ - -0 ^ 0 ー 8 9 0 1 より ^ 0 -414- - ・ -4 -4 4 【 0 L.O ロ 0 ′ 0 戸 0 》′ 0 0 【 0 0 6 6 6 6 6 6 ^ 0 ・ 6 れ 0 6 ワー叮ーーーーっー行ー行ー叮ー叮ー 8 8 8 8 8 8 8 8 8 8 9 9 0 》 0 》 0 》 0 》 9 0 0 0 0 0 0 0 0 0 0 、 1 、 1 ・ 1 1 よ 1 ー - 1 よ 1 よ 1 よ 1 よ 1 よ 1 よ 1 人 1 よ 1 人 1 人 1 よ 1 人 1 よ else if (SPD_WORK2 ( 対象 ) = の if (SPD_POS_X ( 自機 ) = SPD-POS-X ( 対象 ) ) move—sprite_diff ( 対象 , 0 , 2 ) ; else if (SPD-POS-X ( 自機 ) 〉 SPD-POS-X ( 対象 ) ) move—sprite—diff ( 対象 , 1 , 2 ) ; else move—sprite_diff ( 対象 , ー 1 , 2 ) : else if (SPD—WORK2 ( 対象 ) > 4 * 8 ) move—sprite_diff ( 対象 , 0 , 6 ) ; else select-sprite-pcg ( 対象 , ( + + SPD-WORK2 ( 対象 ) ) / 8 ) : if (SPD_WORK2 ( 対象 ) = 0 & & 絶対値 (SPD-POS-X ( 対象 ) , SPD-POS-X ( 自機 ) ) く 8 ) select-sprite-pcg ( 対象 , ( + + SPD ー WORK2 ( 対象 ) ) / 8 ) : if (SPD-POS-Y ( 対象 ) 〉 273 & & SPD-WORK3 ( 対象 ) = 1 ) delete—sprite ( 対象 ) : return 1 ; else if (SPD-POS-Y ( 対象 ) 〉 26 の SPD_WORK3 ( 対象 ) = 1 : display-sprite ( 対象 , 非表示 ) ; return 0 ; X68k 活用講座 141

3. 月刊 C MAGAZINE 1992年4月号

List 1 が , GCC-C はビットテスト命令をけっこう 効果的に使ってくれるのて、 , sprite. h を変更 して 2 値しか取らないフラグワークはビット フィールドを用いるのも適切かもしれませ ん。 また「スピード命」のシューティングて、は , カウンタを定数て、割り算したり掛け算した りする場合は , 2 のべきの数値 2 , 4 , 8 , 16 ・・・を選んて、おくのが適切て、しよう。私の 移植した GCC て、は , 定数て、の掛け算は shif t, add, sub て、実行しますがそれて、も単なる シフトだけて、実行て、きるほうがより高速て、 す。固定的な配列て、多次元の場合は要素数 を 2 のべき数にしておくのも「スピード命」の 場合は効果的て、す。 関数ゞ敵キャラ発生移動〃が , ゲームの メインループから呼ばれる敵キャラ処理の 先頭関数て、す。コメントにあるように ては敵キャラクタの発生時間間隔を変数、、ラ ンク〃て変化させています。、、ランククは敵 キャラ破壊数に連動して変化する変数て、 , たくさん破壊していれば発生頻度が上昇し ます。一般的なシューティングゲームのラ ンク ( これはゲームの難易度が自機のパワー アップなどによって変化することをいうよ うてす ) は , こんな単純なパラメータて、はな いようて、すが , 今回は簡単な処理て、済ませ ています。本格的なシューティング作成を 目指す方は市販のゲームを研究して , この ランクの変動がどのように行われているか を知っておくのもゲーム作成の参考になる かと思います。 話が少しそれましたが , この関数、、敵キ ャラ発生移動クの内部処理はほとんど前回 の自機の発射した弾の処理と同じて、す。た だ , 敵キャラクタは 2 種類あるのて、 , 発生す るキャラクタを乱数て、 2 種類に分けて発生さ せているだけて、す。ほかに目立った違いは , 敵キャラクタのカタサ ( 何発弾を受けたら破 壊されてしまうかを決める値 ) を設定してい るのと , いわゆる「イタイ , イタイ」を表示 static void 114 : 115 : 敵キャラ発生移動 (void) 116 static int 前回時間 : 117 : Sprite 発生キャラ ; 118 : int キャラ数 , 119 : 120 : / * 敵の発生時間間隔をランクに応じて変える * / 121 : if ( 経過時間一前回時間〉 MAX-NUM + 2 ーランク ) 122 : 123 : 前回時間 = 経過時間 ; 124 : 125 : / * 敵の数が現在のランク以下ならキャラを発生させる * / 126 : if ( 敵数くランク ) 127 : 128 : 129 : int 空き ; 130 : Sprite type; 131 : for ( 空き = 0 ; 空きく MAX_NUM; 空き + + ) 132 : if ( 敵 [ 空き ] = 133 : break; 134 : if ( 空き = MAX_NUM) 135 : game-abort ( ”異常発生キャラクタ発生” ) ; 136 : 137 : 敵 [ 空き ] = 発生キャラー 138 : dup—sprite (type = (unsigned) rand ( ) く 0X2000 ? タイプ B : タイプ A); 139 : 140 : / * いい加減なランダム位置に初期化する * / 141 : move-sprite-abs ( 発生キャラ , (rand ( ) % 20 の + 16 , の : 142 : 143 : / * 敵キャラバターンをセレクト * / 144 : select—sprite—pcg ( 発生キャラ , の ; 145 : 146 : / * パレットを選ぶ * / 147 : select—sprite-color ( 発生キャラ , 3 ) : 148 : 149 : / * 表示を行う * / 150 : display-sprite ( 発生キャラ , 表示 ) ; 151 : 152 : / * カタサを設定する。大きくするとカタくなる * / 153 : SPD_REGIST ( 発生キャラ ) = type = = タイプ A ? 2 : 4 ; 154 : 155 : / * 寿命を初期化しておく * / 156 : SPD_LIFE ( 発生キャラ ) = 256 ; 157 : 158 : SPD_WORKO ( 発生キャラ ) ー ニタイプ A ? (int) A_type : (int) B_type; 159 : type ー SPD_WORKI ( 発生キャラ ) = 0 ; 160 : SPD_WORK2 ( 発生キャラ ) = 0 ; 161 : SPD_WORK3 ( 発生キャラ ) = 0 : 162 : 163 : 敵数 + + ; 164 : 165 : 166 : 167 : 168 : 169 : 170 : 171 : 172 : 173 : 174 : 175 : 176 : 177 : 178 : 179 : 180 : 181 : 182 : 183 : 184 : } / * 各敵について移動処理を行う * / for ( キャラ数 = 0 ; キャラ数く MAX_NUM; キャラ数 + + ) Sprite 対象 , if ( 対象 = 敵 [ キャラ数 ] ) if (SPD_WORKI( 対象 )) if (--SPD_WORKI( 対象 ) = = の select—sprite—color ( 対象 , 3 ) ; if ( 敵移動処理 ( 対象 ) ) 敵 [ キャラ数 ] = 0 ; 敵数 142 C MAGAZINE 1992 4

4. 月刊 C MAGAZINE 1992年4月号

X 68 k 活用講座 する弾を受けたときに点減するように見せ るパレット書き換えの処理が追加されてい る点て、す。 当たり判定 List 2 がサンプルゲームの当たり判定を行 う関数群て、す。各スプライトの座標を参照 して当たり判定処理を行っていますが , の処理はかなり手抜きて、す。サンプルゲー ムて、はキャラクタはすべて 16 x 16 ドットの スプライトて構成されていますが , その全 範囲にキャラクタが描かれているわけては ありませんのて、 , 当たり判定範囲を 16 ドッ ト幅にするわけにはいきません。正確を期 した当たり判定を行うためには , 各キャラ クタごとに範囲をキチンと設定しておくべ きて、しよう。このゲームてはそれほど厳密 な判定は行っていませんが , 人間の目はい いかげんてすからそれほど違和感はないと 思います。もっともプロゲーマーの動態視 力をもってすれば「あの判定はいい加減だ」 のレベルかもしれませんが ( 笑い ) 。 当たり判定は , 自機の発射した弾ひとっ ひとっと , 自機自身について行います。関 数ヾ当たり判定〃がその最上位関数てす。 自機の発射した弾のスプライトは Sprite 配列 の弾 [ ] クて管理されているのて , この内 容が非 0 ( スプライトが存在している ) の場合 に当たり判定サプ 0 クを呼び出して当たり 判定を行います。この関数が非 0 を返した場 合は , その弾は画面から消去されているの て 0 〃て初期化してグローバル変数ヾ弾数ク をひとつ減らします。これが関数ヾ当たり 判定クの前半部分てす。後半部分が自機と 敵キャラクタとの当たり判定を行う部分て , 自機と敵キャラクタが接触した場合 , 一定 の時間無敵期間を設けている関係て若干複 雑になっています。 関数当たり判定サプ 0 〃と関数当たり 判定サプ 1 クの処理はほとんど同じになって TabIe 1 敵種別ことの各ワークの役目 敵タイプ A type ( ) 値 > O で通常移動 , 値く 0 だと破壊ノヾターンアニメ SPD LIFE SPÜWORKO ( ) 敵キャラ種別 SPÜWORKI ( ) 当たり判定でノヾレット書き換え時間管理に用いる SPÜWORK2 ( ) アニメーションさせるための時間カウンタ SPD¯WORK3 ( ) 自機の横方向座標に一致移動を行うための時間カウンタ 敵タイプ B type ( ) 値 > 0 で通常移動 , 値く 0 だと破壊バターンアニメ SPD LIFE SPÜWORKO ( ) 敵キャラ種別 SPÜWORKI ( ) 当たり判定でバレット書き換え時間管理に用いる SPÜWORK2 ( ) アニメーション時間カウンタと移動処理変化のフラグを兼ねる SPD-WORK3 ( ) 画面外にはみでた場合のフラグ 当たり判定 1 : / * 弾と敵との当たり判定を行うかなり手抜きかも知れない * / 2 : / * 弾を消去すべき時には 1 を返す 3 : 4 : static int 5 : 当たり判定サブ 0 (Sprite 弾 ) int 敵番号 7 : int 座標 x SPD-POS-X ( 弾 ) ; 8 : int 座標 y = SPD-POS-Y ( 弾 ) ; 9 : 10 : / * 前回当たりになった弾は消去する * / 11 : if (SPD-LIFE ( 弾 ) = 1 ) 12 : 13 : delete—sprite ( 弾 ) ; 14 : return 1 : 15 : 16 : 17 : 19 : 20 : 21 : 22 : 23 : 24 : 25 : 26 : 27 : 28 : 29 : 30 : 31 : 32 : 33 : 34 : 35 : 36 : 38 : 39 : 40 : 42 : 44 : 45 : 46 : 50 : 52 : List for ( 敵番号 = 0 ; 敵番号く MAX-NUM; 敵番号 + + ) Sprite 対象 , if ( ( 対象 = 敵 [ 敵番号 ] ) & & SPD-LIFE ( 対象 ) 〉の int 敵座標 x = SPD-POS-X ( 対象 ) : if ( 絶対値 ( 座標 x , 敵座標 x ) く 1 の int 敵座標 y = SPD-POS-Y ( 対象 ) ; if ( 絶対値 ( 座標 y , 敵座標 y ) く 1 の / * 弾を画面から消す * / display-sprite ( 弾 , 非表示 ) ; SPD_LIFE ( 弾 ) = 1 ; / * 敵キャラの処理 * / SPD_REGIST ( 対象 ) ー if (SPD-REGIST ( 対象 ) くの / * 爆発パターンに変化させる * / if (SPD-WORKO ( 対象 ) = (int) A-type) select—sprite-pcg ( 対象 , 5 ) : else if (SPD-WORKO ( 対象 ) = = (int) B-type) select—sprite—pcg ( 対象 , の ; / * 1 / 6 秒だけ表示させる * / SPD_LIFE ( 対象 ) ニー 12 : スコア + + ; else SPD_WORKI ( 対象 ) = 3 ; select—sprite—color ( 対象 , 2 ) ; X68k 活用講座 143

5. 月刊 C MAGAZINE 1992年4月号

List 2 いますが , 当たり判定を行う対象が自機ス プライトと自機の発射した弾て処理が少し 違うのて分けてあります。処理がほとんど 同じなのて、 , 関数内部て自機の処理と弾の 処理を分割して関数を共用化することもて きますが , 処理スピードを考えて分けてし まいました。このサンプルゲームてはこの 当たり判定の処理がもっとも処理時間を必 要としていますから , 関数が呼び出される つど , 自機についてか弾についてかの処理 を判別するのは得策てはないと考えたから 関数当たり判定サプ 0 〃は , 自機の発射 した弾ひとつについて敵キャラクタとの接 触を判定して処理する関数てす。関数の冒 頭て、前回 , つまり 1 垂直帰線期間前に当たり になっている弾については , スプライトを ートして処理を終了します。何度も出 てきますが , スプライトをワークから消す には必ず 2 段階の処理「表示を消す」「 1 垂直帰 線期間待っ」の手順が必要になります。弾を 当たりて、消去するのにもこの段階を経る必 要があるのて , 当たり判定が 1 垂直帰線期間 について 1 回行われることを利用 ( 前提にな っているともいえます ) してこの段階処理を 行っています。まだ画面上に残っている場 合は , すべての敵キャラクタについて当た り判定を行います。スプライトの画面上の 座標はマクロ SPD POS X( ) , SPD_POS Y ( ) てアクセスて、きます。この座標データ が士 10 ドット範囲内て、「当たり」ということ にしてありますが , 気に入らない人はこの 部分を変更すれば甘くも辛くもてきます。 実際に当たりになったキャラクタの細かな 処理については List 2 のコメントを参照して お詫び C マガジン収録の XGCC て , このサンプル ゲームをコンパイルする場合に , 時々不都 54 : 55 : 56 : ) static int 58 : 59 : 当たり判定サブ 1 (void) 60 : ( 敵番号 int 座標 x SPD-POS-X ( 自機 ) ; int 62 : 座標 y = SPD-POS-Y ( 自機 ) ; int 63 : 当たり int 64 : 65 : ( 敵番号 = 0 ; 敵番号く MAX-NUM; 敵番号 + + ) for 66 : Sprite 対象 , 68 : if ( ( 対象 = 敵 [ 敵番号 ] ) & & SPD-LIFE ( 対象 ) 〉の 69 : 70 : int 敵座標 x = SPD-POS-X ( 対象 ) ; 71 : if ( 絶対値 ( 座標 x , 敵座標 x ) く 1 の 72 : int 敵座標 y = SPD-POS-Y ( 対象 ) : 74 : if ( 絶対値 ( 座標 y , 敵座標 y ) く 1 の 75 : 76 : / * 敵キャラの処理 * / 77 : SPD_REGIST ( 対象 ) ー if (SPD_REGIST ( 対象 ) くの 79 : 80 : / * 爆発パターンに変化させる * / 81 : if (SPD_WORKO ( 対象 ) = (int) A-type) 82 : select—sprite—pcg ( 対象 , 5 ) ; 83 : else if (SPD-WORKO ( 対象 ) = (int) B-type) 84 : select—sprite—pcg ( 対象 , 7 ) : 85 : 86 : / * 1 / 6 秒だけ表示させる * / SPD_LIFE ( 対象 ) = ー 12 ; 88 : スコア + + ; 89 : 90 : 91 : 92 : 93 : 94 : 95 : 96 : 98 : 99 : 100 : return 当たり : 101 : 102 : } 103 : 104 : / * 当たり判定を行う * / static void 105 : 106 : 当たり判定 (void) 107. int 弾数 10Ca1 ; 108 : for ( 弾数 10Ca1 = 0 ; 弾数 10Ca1 く 6 ; 弾数 10Ca1 + + ) 109 : if ( 弾 [ 弾数 10Ca1 ] & & 当たり判定サブ 0 ( 弾 [ 弾数 10Ca1 ] ) ) 110 : 111 : 弾 [ 弾数 10Ca1 ] 112 : 弾数 113 : 114 : 115 : 116 : 117 : 118 : 119 : 120 : 121 : 122 : 123 : 124 : return 0 : else SPD_WORKI ( 対象 ) = 3 ; select_sprite_color ( 対象 当たり ください / * 自機に当たり判定を行う * / if ( やられ自機 ) SPD_LIFE ( やられ自機 ) + + ; if (SPD-LIFE ( やられ自機 ) = = 3 の select—sprite—pcg ( やられ自機 , 4 ) : if (SPD-LIFE ( やられ自機 ) = 6 の select—sprite—pcg ( やられ自機 , 5 ) ; if (SPD-LIFE ( やられ自機 ) = = 12 の 144 C MAGAZINE 1 2 4

6. 月刊 C MAGAZINE 1992年4月号

X 68 k 活用講座 else if (SPD-WORKO ( 自機 ) = 0 & & 当・たり判定サブ 1 ( ) ) ー SPD_REGIST ( 自機 ) ) = = の SPD_WORKO ( 自機 ) = 16 ; select_sprite—color ( 自機 い List 2 125 : 126 : 127 : 128 : 129 : 130 : 131 : 132 : 133 : 134 : 135 : 136 : 137 : 138 : 139 : 140 : 141 : 142 . やられ自機 = dup-sprite ( タイプ A ) ; move—sprite—abs ( やられ自機 , SPD—POS—X ( 自機 ) , select-sprite-pcg ( やられ自機 , 3 ) ; SPD_LIFE ( やられ自機 ) = 0 ; select—sprite—color ( やられ自機 , 3 ) ; display-sprite ( やられ自機 , 表示 ) ; display-sprite ( 自機 , 非表示 ) ; SPD POS_Y ( 自機 ) ) ; 合が発生することが判明しています。原因 はプリプロセッサの漢字処理を行う部分に バグがあったためて、す。現在 NIFTY-Serv e などのパソコン通信て、配布されている XG CC て、はこのバグは直してありますが , C マ ガジンて、は度重なるバージョンアップのた めに差分ファイル自体がかなりの数になっ てしまって最新版を入手するのが困難にな りつつあります。そこて、 , 近々最新バージ ョン一式を再度収録することて、対処したい と考えています。たいへんご迷惑をおかけ しますが , 以上のような経緯になっており ますのてどうかご容赦願います。 また非常に配布要望の多い , X68000 版 g 十十て、すが現在 Ver. 1.40.3 の移植を終え てテストしている状況てす (SX-Window 専 用版も動きだしています ) 。プログラムサイ ズが libg 十十も含めると LHA て圧縮しても ディスク丸々 1 枚と非常に大きいこともあっ て付属ディスク収録はなかなか困難かとも 次回 思っております。 ムが開発・販売されています ( サンプルゲー マシンとは思えないほどのすばらしいゲー を見ていますと , X68000 が 5 年前に作られた は終了てす。それにしても , 最近のゲーム 次回て , サンプルスプライトゲーム説明 ムを動かすと同じ機械が見せているとは思 えないほどミジメてすが ) 。完全に処理速度 は「遅い」範疇に入ったマシンて、すが , 「自力 て、遊べるプログラム」を作れる数少ないマシ ンて、す。この連載が何かの役に立てれば嬉 コラム参考文献 しいのてすが・・ 事だと思います。 みる方には非常におもしろく参考になる記 約されていて , 実際にプログラミングを試 ついてのプログラムのやり方 , 考え方が集 んど不可能でしようが , ゲーム機器一般に ます。かなり古い雑誌ですから入手はほと ロのテレビゲーム進化論」をあげたいと思い フトバンク ) に連載されていた「マニアル浜 すでに廃刊になっていますが「 BEEP / 」 ( ソ 書いてある貴重な記事として , 雑誌自体は グラムする上での基本的なアルゴリズムが 参考書ではありませんが , ゲームをプロ ないのはそのせいでもあるのです。 で , 「参考文献」がまったくといって登場し 扱った本は皆無に近い状況です。この連載 ィックを実際にどうプログラムするのかを しても , いわゆるスプライトや多重グラフ きつづけてきたわけですが , 市販の本を探 すといったかなり無謀とも思える記事を書 ックな内容の C マガジンでスプライトを動か 連載もほば 1 年近くなりました。アカデミ ソフト開発用に最適′ 豊富に揃った C 言語用 ライプラリ。 1 . ニ次元グラフィック・ライフラリー 〔定価 1 万円〕 BASIC 等でお馴染みのウインドウ機能を 持ったニ次元グラフィックライフ、ラリーで す。特長的機能として、上方向の指定・斜 め方向の楕円描画・曲線描画・多角形塗り つぶし・拡大文字描画およびマウスによる 座標入力機能を持っています。 2. 三次元グラフィック・ライフラリー 〔定価 1 万 2 千円〕 平行投影・透視投影機能等、基本的な 3 次 元グラフィック機能を持ったライブラリー です。直線・円・楕円以外に、指定平面上 の多角形塗りつぶしも可能です。また、マ ウスによる座標入力機能も持っています。 レイアウト等のグラフィック画面表示プロ グラム作成に便利です。 X68k 活用講座 145 く資料請求番号 145 〉 ( TEL0720 ー 81 ー 6687 留守番電話 ) 〒 571 大阪府門真市下島町 9 の 16 石川聖昭 さい。 ※電話は対応不可能な場合がありますので御遠慮くだ または直接下記住所まで封書にてこ連絡下さい。 ◎資料請求は「広告資料請求カード」をこ使用するか、 ンプラはマイクロソフト社の登録商標です。 ※ MS - DOS および MS - C 、 MS - DOS マクロアセ ( おそれ入りますが送料はこ負担願います ) こ返送ください。 ☆購入後、使用不適合とわかった場合は一週間以内に お気軽にお申し込みください。 ☆詳しい資料をこ用意致しております。 機種での適合性は確認していません。 (Ver5. 1 ) を使用しています。 PC シリーズの他の - DOS マクロアセンプラ ( Ver2.0 ) 及び MS-C OS は MS-DOS(Ver3. 3A ) 、開発ツールは MS ード、ノーマルモード両タイプを用意しています。 9801 LV で開発、動作確認しています。ハイリゾモ ・上記のライブラリーは NEC の PC -98XA 、 PC- 確認、テスト等はサンプルソフトで簡単に行えます。 言語ソース ) が付いています。具体的な使用方法の ・出荷品には取り扱い説明書及びサンプルソフト (C イプラリーも揃えています。 イバー・引 OS 等を C 言語からコールするためのラ ・その他、グラフィック・マウス・ RS -232C のドラ メニュのマウスクイックが可能です。 リーです。マルチ画面を階層的に表示し、 マルチ画面入力を支援するためのライフ、ラ 〔定価 2 万円〕 4. マルチ画面ライフラリー ( キャラクタータイプ するコード設定等も可能です。 ファンクションキーその他の特殊キーに対 範囲から出ないようにしたりします。また、 より、カーソルを指定位置に配置し、指定 のライフ、ラリーです。パラメータの設定に キーボード入力の煩わしさを解消するため 〔定価 7 千円〕 3. キーボード入力ライフラリー