りょうのゲーム塾 -20ページ目

りょうのゲーム塾

再開、準備中。

それではプログラムの追加・変更を行います。

変更はプログラムの大まかなブロック単位で説明していきます。
変更箇所は色変え表示されています。







りょうのゲーム塾-001

システム部分の変更です。

この変更は前々回のVSYNCのための変更を行っています。

またプログラムコードは前々回のコードを簡略化してあります。





りょうのゲーム塾-002


ライブラリの変更です。

今回タスクの変数にSFという配列変数が追加されています。

SFはステータスフラグという意味です。

タスクのステータス(状態)を保持するフラグです。


フラグについては過去ブログのコンピュータの扱い値のなかで説明した

2進数や論理演算についての記事を参考にしてください。


またフラグ処理の基本については一度説明します。


このコードの変更はタスク(配列)変数SFを宣言する部分と

今までタスク変数Xの値を-1にしていましたが

ここではタスク(配列)変数SFの値を0にしています。


今までXの値を-1にしていたのはキャラクタを表示するかしないか

その判断のためにXを-1にしていました。

同じ事をタスク変数SFで行うのでXに-1を代入する必要はありません。




りょうのゲーム塾-003

新たに当たり判定を行うサブルーチンHITCHKを追加します。


サブルーチンSETOBJの変更はステータスフラグのセットです。

このフラグのセットについても後ほど説明します。

今回行ってるのはキャラクタを表示するフラグをセットして表示するように変更しています。


サブルーチンDISPOBJの変更点はステータスフラグのキャラクタ表示フラグをチェックして

もし非表示の場合には表示するプログラムをスキップしています。


最後のカラー文は単純にカラーをデフォルト状態に戻していなかったので

追加してあります。





りょうのゲーム塾-004

最後にこの当たり判定の簡単なチェックを行うために

プレイヤのプログラムを変更しています。


プレイヤのボタン入力の状態からプレイヤの進む方向の位置をXとYに代入し

当たり判定します。

もし当たっていれば移動処理を行いません。




入力が終わったらゲームをスタートしてください。

今回は敵との当たり判定がまだ不完全なので敵のすりぬけを起こして今いますが、

移動していないターゲット(色点滅しているキャラ)には当たり判定をし重なりません。




それでは最初にこのままではゲームにならないので
少しずつゲームに近づけていきましょう。

今現在の動作は。。。

①プレイヤはボタン操作でマップの通路を移動できます。
②エネミは一定のアルゴリズムで移動しています。
③ターゲットはその場で点滅しています。

最初にゲームのクリア目的として
ターゲットうぃプレイヤがすべて消すというルールにしましょう。
そうすれば邪魔な敵を避けながらターゲットをすべて消せばゲーム終了です。

この当たり判定は今後も使うかもしれないのでライブラリに追加してみましょう。


■当たり判定のサブルーチンの雛型
当たり判定のサブルーチンを考えましょう。
ここでいう当たりとはプレイヤが移動する方向にターゲットがいるかどうかを
判断すればいいのです。
ターゲットの位置はタスク変数のX()とY()に代入されています。

当たりを判定するにはプレイヤが進む位置(ここでは変数X,Yを使いましょう)が
タスク変数のX()とY()の値と共に等しい時となります。



@HITCHK
FOR I=0 TO MTN-1
IF X(I)!=X GOTO @_NG
IF Y(I)==Y GOTO @_OK
'指定した位置にいない場合
@L_NG
NEXT I
RETURN
'指定した位置にいる場合
@L_OK
RETURN


MTNはタスクの最大数です。
FOR文を使い0番のタスクからMTN-1番までのタスクのX()とY()の値を
チェックしていきます。
このままでは余分な変数Iを使っているのでライブラリで使っている
一時変数_R0に置き換えます。
(今後は最初から一時変数を使います)



■一時変数と置き換えるたもの


@HITCHK
FOR _R0=0 TO MTN-1
IF X(_R0)!=X GOTO @_NG
IF Y(_R0)==Y GOTO @_OK
'指定した位置にいない場合
@L_NG
NEXT _R0
RETURN
'指定した位置にいる場合
@L_OK
RETURN


このサブルーチンは判定の結果を返していません。
これではサブルーチンを呼んだ意味がないので、
結果を返すことにします。
ここでは変数TIDX(タスクインデックスという意味)に
当たったタスクの番号を代入して戻ります。
(なぜかはまだ考えないでください)
当たったタスクが無い時はー1を返します。
タスクの番号は0からMTN-1までです。
現在MTNの値は20になっているので0から19の値になります。
-1は使わない値になります。



■結果を返す


@HITCHK
FOR _R0=0 TO MTN-1
IF X(_R0)!=X GOTO @_NG
IF Y(_R0)==Y GOTO @_OK
'指定した位置にいない場合
@L_NG
NEXT _R0
TIDX=-1:RETURN       ←すべてのタスクOBJと当たっていない時はー1を返す
'指定した位置にいる場合
@L_OK
TIDX=_R0:RETURN ←当たったタスクの番号を返す


さて問題は無いか考えてみましょう。


りょうのゲーム塾

さくらんぼの花が咲き始めました。

今日は天気が良かったので

ミツバチも来てくれたので


さくらんぼの実がなると思います。


昨年の2~3倍ほどの花数があるので

結構、良い感じです。


まだ5分咲き程度なので

今週の週末には満開かもしれません。


これで花見酒でもしますか?

私はマッコリで花見酒でもしようと思います。



さて花が咲いた後今度は葉芽がではじめて

葉っぱがいっぱいになるけど

このとき毛虫の卵をみつけて全部取り除きます。

除草、除虫剤などは一切使わないので

たまごのついた葉っぱを手作業で摘みます。


これが結構大変なんですよね。


そうしないとさくらんぼの収穫時期に毛虫が一杯になり

さされるんですよね。


けど、ほんまに楽しみやぁ~