コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
Bunzo ◆HsAxFaeHQrUC
2019/8/5 15:29
質問
敵を逆方向から出現させる方法が思いつかない…
買うだけ買ってずっと遊ぶ専門だった私ですが、ようやくプログラムを書いてみようと決心。
ネット上に公開されている講座をほぼ丸写しという形で打ち込み、右からランダムな速度とタイミングで現れる敵をジャンプで躱すゲームプログラムを作る事が出来ました。
折角なので一定時間経過後に雰囲気を変えようと思い、
「30秒経過時点でBGMと背景色を変える」という事には成功したのですが、
「30秒経過時点で左からも敵を出現させる」という事の表現をどうしたものか、悩んで詰まってしまいました。

元プログラムはDIM命令でEX,EY,ESと配列変数を指定し、それぞれ敵のX座標、Y座標、移動速度の管理に充てています。
同時に敵の最大数を管理する変数EMXを指定し、これをEMX=FLOOR(CNT/500)
IF EMX>7 THEN EMX=7
FOR I=0 TO EMX
とする事で、時間経過に伴って出現数を増やし、また7体までに留めているご様子です。

…という事までは解るのですが、これに30秒経過後に逆方向から敵を出現させようと考えると、どうしていいかが分からなくなります。
EX,EY,ESをそのまま引用して負の数値にするだけでは全部が左から流れるようになるだけだろうし、文法エラーも発生してしまったので間違いだと言うのは解りますが、どうすればいいのかがわかりません。
左から出てくる敵用に新しく関数を用意するべきなのでしょうか?
分かりにくい質問で申し訳ありませんが、ご助力いただければ幸いです。

コメント

アバター
Bunzo 2019/8/5 17:47 ◆HsAxFaeHQrUC
皆様、お返事ありがとうございます!

>初心者様
ありがとうございます。取り急ぎ申請してます。発行されたらお知らせさせていただきます。

>あんちもん様
その通りです!そちらの講座のプログラムがほぼそのままです。

>RU-RA様
失礼しました。3号で書いてます。

>高原のな様、あきと様
そうですよね、EX,EY,ESはそういう意味なのだろうと考えているのですが、BGM変更や背景変更に使った(うまくいった)
IF (CNT/60)==30 THEN 〜という構文に正負を逆転させたものを入力してみてもエラーになって動かなかったんです。
これでは左右どちらかからの出現方向が変わるだけで同時に双方にならなさそう…
と思い、RND(1)で乱数を生成して変数を作り、その変数が1の場合のみ左から…みたいな事をしようとしたのですが、それもエラーになり、何が悪いのかよくわからなくなって纏めてボツにしてしまいました。
アバター
Bunzo 2019/8/5 18:19 ◆HsAxFaeHQrUC
公開キーが発行されました。
8B34K34J になります。
アバター
あきと 2019/8/5 21:57 ◆qGd5dQw2g3a2
RND(1)は0しか出現しないですね。
R=RND() MOD 1
と同じような挙動ですから。
RND(2)とすべきでしょう
アバター
シロ 2019/8/5 22:29 ◆g0oUAxBiWqcj
ムーンウォークになるけど多分こんな感じ。
アバター
Bunzo 2019/8/5 22:29 ◆HsAxFaeHQrUC
>あきとさん
マジですか、お恥ずかしい…勘違いしてました
アバター
Bunzo 2019/8/5 22:39 ◆HsAxFaeHQrUC
>シロさん
おお、まさにこの挙動です・・・!ありがとうございます。
すみません、少し理解が出来ないのですが、76行目のAND以降はどういう判定になってるのでしょう?
RND(2)で0か1の乱数を出している、までは解るのですが、その乱数をどう判定してTHEN以降に繋がっているのかがプログラムを読んでも理解が追い付かない…
アバター
シロ 2019/8/5 22:48 ◆g0oUAxBiWqcj
76から79を適当に訳すと

もし 30秒以上 そして 乱数が1なら

敵移動速度が-1-乱数
敵位置を-15


かな
アバター
Bunzo 2019/8/5 22:50 ◆HsAxFaeHQrUC
>シロさん
あれ、これだけで乱数が1なら、って意味になるんですか…なるほ、ど?
アバター
シロ 2019/8/5 22:59 ◆g0oUAxBiWqcj
RAD(2)の結果は0か1出ます。
次に
IF 0 THEN XXX
の時はXXXは実行されません。

IF 1 THEN XXX
の時はXXXは実行されます(実は0以外なら実行される)。

なので0や1の所にRAD(2)を入れると実行されたりされなかったりします。
アバター
RU-RA 2019/8/5 23:21 ◆WXDJqyOv9yBK
ワースゴイナー(棒)
もう解決しちゃったり?
私の出番、無し!?
アバター
Bunzo 2019/8/7 0:26 ◆HsAxFaeHQrUC
>初心者さん
ダウンロードさせていただきました。なるほど、方向を変数で管理するのですね…
なるほどとは言ったもの、分かったような分からないような…
プログラムしっかり読ませていただきます。

>シロさん
なるほど、IF命令の仕様みたいなものでしょうか。

>RU-RAさん
皆様凄いですよねー。
でもプログラムは一つでも多く知りたいです。
アバター
高原のな 2019/8/7 5:56 ◆bY8RViwvoODw
細かい話になってしまいますが、個人的に思うプログラムのわかりやすさと「IF文の仕様みたいなもの」について書いたので、余力があればお読みください。
RND(2)をそのままANDで繋ぐのはまだ大丈夫なんですが、RNDの引数を3以上にした時に「ちょっと驚く挙動」をすることがあるのできちんと条件式を書いた方がわかりやすいと思います。(今回の場合は「RND(2)」→「RND(2)==1」など)

RNDの引数を3以上に設定した時に「ちょっと驚く挙動」となる原因は、まず等号・不等号演算の結果はTRUE(=1)かFALSE(=0)で返すのですが、そこにたとえば2とAND(プチコンではこのANDはビット演算を行う)をとると0になってしまうということがあります。

実は、シロさんが先におっしゃったように、プチコンのIF文は0かそれ以外かで判断分岐をしますから2は単体ではTRUEと扱われるのですが、ANDをとるとそこが変化してしまう場合があって、かつて私は混乱した……これが「わかりやすい」とした理由です。
アバター
ジプッチャ 2019/8/7 6:12 ◆tkYhkmSxSAam
↑それ!私も昔凄く悩んでました。
ANDと&&、ORと¦¦って紛らわしいですよね。
アバター
高原のな 2019/8/7 7:27 ◆bY8RViwvoODw
>ジプッチャさん
ANDと&&、ORと||って完全に役割が異なっているので、きちんと区別しながら覚えると良いかもしれません。ビット演算したいときはAND・OR、条件式判定だけの時は&&・||と完全に切り分けてしまうのも一つの手です。

&&と||の挙動は、どちらの演算子も必ず左辺から順に判定していって、
&&はある辺で0(=FALSE)が登場したらそこで判定を打ち切って0(=FALSE)を返し、最後まで0以外(=TRUE)が登場したら1(=TRUE)を返します。
||はある辺で0以外(=TRUE)が登場したらそこで判定を打ち切って1(=TRUE)を返し、最後まで0(=FALSE)が登場したら0(=FALSE)を返します。
要するにちょっと賢いANDとORです。代わりにビット演算機能はありません。

話が逸れますが、&&と||は他の言語だとこの性質を生かしてnullチェックをしながらデータの判定をすることに使ったりしますね。C言語の系統の言語だとプチコンと同じように&&と||ですが、VBとかVBAだとAndAlso、OrElseというおなまえになります。
プチコンだとSPUSEDのチェックをしながらSPVARの条件式を調べたりできます。あとはビット演算じゃないANDやORをするときに左辺は軽い処理、右辺が重い処理を置いて&&、||を使うというテクニックもあります。
アバター
Bunzo 2019/8/7 21:05 ◆HsAxFaeHQrUC
よ、良くわからねぇ…ビット演算まで話が絡まるとさっぱりだ…

とりあえず「RND(2)」→「RND(2)==1」とした方がより間違いが起こりにくい、という事でしょうか。

個人的にこのゲームに手を加えたいと思ってる点はあるのですが、どうすればそれが実現出来るか分からなくなってます。

とりあえず左からも敵が出現するように出来たのはとてもうれしいのですが、ムーンウォーク状態を解決しようとプログラムを書き込んでみたら透明な敵に突然体当たりされたり、ムーンウォークどころか凍ったまま滑ってきたり、それどころか自キャラが敵グラフィックになったり。
バグだらけだぜ!
単純にSPANIM命令を付ければいいってものでもないみたいですね…
アバター
シロ 2019/8/7 23:13 ◆g0oUAxBiWqcj
横反転するならこんな感じかな。昨日のANDはミスだった、それ以外も適当に修正。
アバター
Bunzo 2019/8/10 22:08 ◆HsAxFaeHQrUC
>シロさん

ん?
ん???

もしかして反転させるには画像を負の値でどうこう…ではなくて、もしかして反転してるスプライト画像を指定しないといけない…?
アバター
シロ 2019/8/10 23:18 ◆g0oUAxBiWqcj
マイナスが何か分からないけど、初期設定でアトリビュート使って反転SPが登録されてるので(というか元の1006と1007の方が反転絵か)それを使いました。SPANIMを使うならこれぐらいしか思いつかなかった。工夫が必要かもだが、自キャラも反転できそう。
アバター
高原のな 2019/8/11 9:02 ◆bY8RViwvoODw
画像の左右反転ですが、(プチコン3号ではスケーリングで負の値を指定できないので、)すでに左右反転している画像を指定しないとできないですね。

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -