投稿
nobu divine-creator
不思議だ…!特に何も間違えてないはずなのに、SPDEF0に定義したSPだけが正しく表示されない状態になったと思ったら、何度かそのまま繰り返しプレイしてみたら、正しく表示されるようになった…! 一旦、終了してから再び起動し直したら、また同じエラーに…!SPの位置がおかしいのだから、普通ならSPOFSがおかしいはずなのだけれど、その数値は間違えていない…!ズレて表示される原因が何か分かれば解決なのでしょうけど、特に思い当たらない…。プログラムを書き換えなくても自然に直るっていうのも変な話で、これって夏のミステリーでしょうか?
4そうだね
プレイ済み
返信[1]
親投稿
nobu divine-creator
SPの番号を変数で代入しているのが原因なら、番号違いのSPが表示されたりするはずだけど、違うSPが表示されているわけじゃないし、大きさは正しく変わっているし、位置がズレる理由は無さそうだけど…? タイトル画面で表示されるSPをランダムで表示されるように変更したのだけれど、それはその後に隠しているから影響は無いはずで…、選択肢を選ぶ所を大幅に改良してから発生した現象だから、それが原因っぽいけれど、改めて確認してみても、特に間違いらしき箇所は見当たらない…。 そもそも、繰り返し操作していると正常になるって、どういうこと?選択の組み合わせによって正しくなるとかなら、条件文のミスだろうけど、同じ組み合わせでも正しくなるって、不可思議だ…!
0そうだね
プレイ済み
返信[2]
親投稿
イカ ikasan1830
引数省略バグとか引っかかってるかもですね。 TOUCH OUT,,, みたいに一番最後を省略すると動作がおかしくなるバグ
0そうだね
プレイ済み
返信[3]
親投稿
nobu divine-creator
なるほどΣ(゚Д゚)! ENDIFを使わない場合も、それに該当するってことですか? 例え、省略できるパターンの場合でも、ENDIFを使っておいたほうが良いですか?
0そうだね
プレイ済み
返信[4]
親投稿
イカ ikasan1830
TOUCH OUT,,BUG みたいな感じで使わない変数ぶっこむと良いと思います
0そうだね
プレイ済み
返信[5]
親投稿
nobu divine-creator
ちなみに、TOUCH OUTは全く使用していないので、他の何かが原因かと思われます…。 テストプレイを繰り返してみないと、まだ他の問題があるのかも分かりませんが、この現象の前にも「ボタン選択で選んだ先に表示されるはずの選択肢が飛ばされてしまう…」ということがありました!そして、その問題はWAIT 10を置くことで解決しました♪(でも、WAIT 1では止まらず無視されてしまっていました…。) 予想外のエラーというのが、思っていた以上に多いみたいですねΣ(゚Д゚)!今までそんなに複雑なプログラムを作っていなかったし、今回の作品が初の本格的なプログラムって感じなので、エラーと修正を繰り返してます…。
0そうだね
プレイ済み
返信[6]
親投稿
けい kei0baisoku
ちょっと規模が大きくなってくると、 「九割がた出来た!(`∀´)」 と思ってから終わりまでに調整やバグ対応で全体の九割の時間がかかります。
1そうだね
プレイ済み
返信[7]
親投稿
nobu divine-creator
変数に0を代入するとおかしくなる…というわけじゃないですよね? でもやはり、起動してすぐはSPDEF0のSPだけが変な(全く設定していない)位置に表示され、何度かプレイしていると正しい位置になるのですが、それと同時に選んでいないはずのスカートが表示されるようになる…という訳の分からん結果に…Σ(゚Д゚)?! 同じ現象が起きるってことは、偶然じゃないですよね?!でも、その結果にヒントがある…ってことですか?
0そうだね
プレイ済み
返信[8]
親投稿
nobu divine-creator
あれ?相変わらず、最初に起動した際には同じエラーになるけれど、正常な位置に一度でも表示されるようになると、その後はずっと正しい位置に…! しかも、選んでいないパーツが出るようなエラーは発生しない状態に…!プログラムは何も書き換えていないのに?ただ、複数回プレイして、別の組み合わせを選んでいただけなのに…? ところで、ランダムにSPを表示する方法って、どんなものがありますか?RND(整数)だと0~最大値になってしまい、途中の数字だけを選ぶことはできないじゃないですか?任意の範囲を指定して、ランダムにするにはどうすれば良いのでしょうか?
0そうだね
プレイ済み
返信[9]
親投稿
ナツキ natukin1978
> 任意の範囲を指定して、ランダムに 開始の値 + RND(任意の範囲) など…… 頻繁に使うなら関数にすると良いかも。
0そうだね
プレイ済み
返信[10]
親投稿
MIKI ifconfig
10 から 15 の範囲を選ぶには rnd(15-10+1)+10 とします。 15-10+1 = 6 というのは {10,11,12,13,14,15} ぜんぶで 6 個 rnd(6) で 0 から 5 が出るのでそれに 10 足して 10 から 15 a から bなら rnd(b-a+1)+a
0そうだね
プレイ済み
返信[11]
親投稿
イカ ikasan1830
プログラムの最初にACLSを入れてないので前回の結果が残ってるとか、 バグだと仮定してスマブに連絡を入れるか、 あんまり不可解な動きをするなら公開キー添えてスマブに連絡した方が良いと思います
1そうだね
プレイ済み
返信[12]
親投稿
nobu divine-creator
ナツキさん+みき★さん=ナツみき★さん、ありがとうございます♪(キしか共通していない…w。) 御陰様でランダムな範囲指定の仕方が分かりましたー♪ 数学が苦手なため、-1や+1をする意味を正確には理解できませんが、そういうものだと理解しておきます!
0そうだね
プレイ済み
返信[13]
親投稿
nobu divine-creator
プログラムの一番最初にはACLSを使っているのですが、プログラムの最後から最初に戻る時には、ACLSの後の位置に戻ります。 けれど、一番最初に選んだ時にエラーになるので、ACLSが関わるエラーではないはずです!繰り返しプレイした場合も、全く同じ条件なので、ACLSを通らずに直っています。 そうですね…もう少し変えたい所がありますので、一通り書き換えてみて、それでもそのエラーが改善されない場合は、みき★さん(←?!)に苦情をお伝えします♪(←苦情を言う相手が違う!スンマセン!てへっ♪)
0そうだね
プレイ済み
返信[14]
親投稿
MIKI ifconfig
そうやってシステムを疑ってみるけど、結局は自分のバグだったってことを何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も繰り返して、だんだんプログラマは謙虚になっていきます。 プログラムが意図通りに動かないのは自分のせい、だから、普段から襟を正してバグを呼び込まないようなストイックなコードを書くようになります。禁欲的で保守的で求道者のよう。 で、たまーにホントにシステムのバグを引いたりすると、謙虚さの反動でとてつもない呪いの言葉の数々が大スターマインのように炸裂してしまいます。
2そうだね
プレイ済み
返信[15]
親投稿
nobu divine-creator
まだ、プログラムの基本的なこともよく分かっていないため、バグを呼び込まないような書き方というものが正しく分かっておりません…orz。 システムのバグかの見極め方が分からないので、漠然とした印象だけですが、予想外のエラーが発生しているみたいです…。 SPの位置が間違って表示される問題については、対策としてSPOFSを別の場所にもう一つ置くことで、謎のズレを解消することはできました♪(でも、本来は一つで良いはずなのですけど…?) また、イカさんのアドバイスを基に、最後にSPCLRで消去してから最初に戻るように変更してみました!でもまだ、タイトルのSPが時々表示されない問題と、選んだ物と違うSPが表示される問題は残っています…。 これらは、位置の問題のように必ず発生するという訳ではなく、今のところ偶然っぽい感じになっています…。特にタイトルのほうは、全く表示されない時があるのは変です!
0そうだね
プレイ済み
返信[16]
親投稿
nobu divine-creator
タイトル画面では、ランダムに変わったSPが表示される仕組みですけど、今回は範囲指定を使わず、単純な書き方で行っているので、基本的には正常に表示されていますし、全く表示されない…という状態にはならないはずです!それでも、表示されない場合があるというのは、何のせいでしょう?WAITやVSYNCの使い方のせいでしょうか?
0そうだね
プレイ済み
返信[17]
親投稿
ナツキ natukin1978
イカさんが言われた通り、スマイルブームに連絡した方が良いかも。 出来れば、その予想外のエラーが再現する部分を抜き出して、報告したら捗ると思います。
0そうだね
プレイ済み
返信[18]
親投稿
nobu divine-creator
そうですね♪みき★さんが仰る通り、私自身の見落としが無いか?確認を繰り返しても解決できない場合には、バグかもしれない事例としてメーカーに報告しようと思います。 ただ、メーカーに問い合わせる前に、みき★さんにテストプレイをお願いするという手段も有効かもしれません。熟練プログラマーならば、初心者では気付けない問題点を発見可能であると思われますし、みき★さんが解決不能な問題であるなら、プチコン本体のバグであることが判明するでしょう?! ちなみに、WAIT 1で無視された箇所は、WAIT 10で読み込まれるように変わりましたが、それと同様にWAITの無い箇所にWAITを追加することで、解決できる可能性はありますかね?
0そうだね
プレイ済み
返信[19]
親投稿
MIKI ifconfig
テストプレイするのは構いませんが、私自身スプライト関連はあまり詳しくないので、解決に役立てるかどうかは不明です。その点はご承知置きください。
0そうだね
プレイ済み
返信[20]
親投稿
nobu divine-creator
えーっΣ(゚Д゚)?!そーなのですか(?_?)??衝撃の事実ですね…。 おちゃめさん&みき★さんのイメージとしては、プチコンマスターという感じで、殆どオールマイティーなプログラマーだと勝手に思い込んでいました…!苦手なプログラムというのもあるのですね…。 でも、たぶん大丈夫だと思います♪初心者が作った簡単な構造のプログラムですので、難しい部分は特に無いと思います! じゃあ、何でそんなに簡単なプログラムでエラーになるんだ?と思われるでしょうけど、だからこそ奇妙なんですよね? 複雑なプログラムなら、エラーの原因も発見しづらいでしょうけど、簡単なプログラムのはずなのに謎のエラーになるので、夏のミステリーって感じに…。
0そうだね
プレイ済み
返信[21]
親投稿
nobu divine-creator
うわーっ!超恥ずかしい事実が…(>_<)! 見落としていたエラーの原因を発見しました…グハッ!…。 それを修正したら、いくつかの問題は解決できました♪ しかし、まだ少しエラーが残っているので、他にも見落としている原因があるのでしょう…。
2そうだね
プレイ済み
返信[22]
親投稿
MIKI ifconfig
お疲れ様です!! 謙虚への階段を一歩昇りましたね。 バグるのはごく当然のことなので別に恥ずかしくはないですよ。
2そうだね
プレイ済み
返信[23]
親投稿
nobu divine-creator
いえ、原因が原因だけに恥ずかしいというので合っています…。ヒントはいっぱいあったのに、気付けなかった間抜けさが…。 それに、まだ全てが解決していませんし、恐らくSPOFSのズレは説明が付かない不思議な現象なので、最終的にはバグらしき現象として報告が必要になりそうです。その解決法から原因が分かる人がいるのかもしれませんけど、それは一旦公開可能な形になった後で、確認していただけば良いと思います。
0そうだね
プレイ済み
返信[24]
親投稿
バグだと思ったものが自分のミスだったと言うことは凄く多いですね〜。なのでシステムのバグだと疑う場合は、その部分をどんどんシンプルにしていき、バグしか出ない状態にまでシェイプアップする必要がありますね。 難しい部分がなくても初心者になればなるほど見落としや勘違いは増えるので、簡単なバグってことはないと思いますよ。得てして簡単なミスの方が上級者のプログラマーも犯しやすいところがあります。そういうミスは判明したときにガッカリしますが、それも経験だと思うし、そういう経験が積みかさなかってミスが減っていくところもありますしね。
3そうだね
プレイ済み
返信[25]
親投稿
MIKI ifconfig
でんぺんさんがいいこと言った~!! そうです、システムのバグであることを示すなら、 誰もが再現できる最小のコードを提示するのが最善なんですね。(自然科学の手法と同じですね) バグレポートには 症状、バージョン、環境、深刻度、再現方法 などを漏れなく書くことで伝わりやすい、対応し易いといったメリットがあります。 初心者がシステムバグを引きやすいというのは確かにあって、 経験者なら「常識として」こんなコードは書かないよねってコードを書くことができる、あるいはシステムを実装した者が想定もしてなかった使い方を思いつくことができる、そういうすごい能力を持っているんです。
1そうだね
プレイ済み
返信[26]
親投稿
nobu divine-creator
う~ん…確かに、でんぺんさんの仰ることは理解できますが、今回表示されている位置を指定したSPOFSは存在していないんですよね…。 その間違えて表示される位置を指定したSPOFSがあるなら、それが影響しているって分かるのですけど、何もその位置に表示するものが無いので、何でだろう?ってなっています…。 しかも、おかしな位置になるのはSPDEF 0のSPのみで、それ以外は正しい位置に…。SPOFS 変数に0を代入した場合のみ発生しています…!
0そうだね
プレイ済み
返信[27]
親投稿
正確な事は分からないですがプログラムが提示されない以上はどんなに考えても推測の域から出ませんし、公開できる状態になってから考えた方がいいかもですね〜。 個人的にはシステムの不具合である可能性はかなり低いと考えますが、その推測もなんとも言えない部分もありますし、見てみない事には分からないのが本音ですね〜
1そうだね
プレイ済み
返信[28]
親投稿
ナツキ natukin1978
スプライトの管理番号0を使った場合に再現するという事でしょうか?試しに全く違う番号を割り当ててみるとか……
0そうだね
プレイ済み
返信[29]
親投稿
nobu divine-creator
とりあえず、SPOFSの問題は置いといて、別のエラーの原因らしいことが分かりました|д゚)! それは、変数に代入した数字が最初に戻っても有効なままなせいであるようです!ということは、最後の所で変数をリセットすれば良いみたいですけど、それはどうしたら良いのでしょうか? 自分で考えてみた案としては、最後に別の数字を変数に代入するようにして、透明なSPを選ぶようにしてしまえば、最初に戻っても影響が残らないという感じですけど、それで良いのでしょうか?それとも、他の方法のほうが良いですかね?
0そうだね
プレイ済み
返信[30]
親投稿
OPTION STRICTって使ってますか? もし使ってないなら使うようにして変数は必ず宣言するようにした方がいいかもしれません。始めはちょっと面倒に感じると思いますが最終的にはデバッグの労力が減るのでいいと思いますよ。 で、変数のリセットですが、通常は始めに使う変数は初期化するようにします。なのでプログラムの頭で初期化するか、もしくは初期化するためのサブルーチンを作ってリセットしたいタイミングで呼び出すとかするのがいいんじゃないかなって思います。
1そうだね
プレイ済み
返信[31]
親投稿
ナツキ natukin1978
つまり、当初の問題だったSPDEF0は関係ない? 変数の件は、実現できるなら自分の都合の良い方法で良いのでは?と思います。
0そうだね
プレイ済み
返信[32]
親投稿
nobu divine-creator
ナツキさん、いくつか存在していたエラーの内の一つには、SPDEFは関係ないようです♪(関係しているのは、変数に0を代入した場合に起こるエラーだけです!もっとも、0を代入したせいか?は不明ですけど…。) でんぺんさん、変数はVARで定義して使っていますが、その上にOPTION STRICTを置いたほうが、より良いですか? それと、プログラムの頭で初期化というのは、ACLSとは別に必要ということでしょうか? リセットするサブルーチンという案は良いと思いますが、何度も使う必要性は無さそうなので、最後に一回リセットしてから戻るという方法で問題なければ、今回はその方法を使うので良いと思っています。(何回も使うプログラムの場合には、サブルーチン化がベストですね♪)
0そうだね
プレイ済み
返信[33]
親投稿
OPTIONはプログラムの先頭につけておくといいです。そうすると多分、エラーが出るようになると思いますが、それは宣言をつけたり逆に外したり(二重定義の場合)して直します。 ACLSはグラフィック定義や画面などを初期化してくれますが変数は初期化しないので、変数は自分で別途初期化する必要があります。 サブルーチン化するかどうかはケースバイケースですー
0そうだね
プレイ済み
返信[34]
親投稿
nobu divine-creator
何と!最強かと思われていたACLSに、そのような弱点(?)があったとは…! 変数は意外な伏兵だったのですね…!恐るべし! OPTION付けたら、いくつかVARに入っていなかった変数が見つかり、救助しました♪ I「遭難してから数日間、誰も来なかったのですが、ようやく助けがきました♪」 X「腹減ったー!」 Y「喉乾いたー!」 OPTION「元気な遭難者だな…。」
0そうだね
プレイ済み
返信[35]
親投稿
けい kei0baisoku
おお、大半は自己解決したようで良かったです。 「システムやライブラリのバグに違いないと憤っていたら単なる自分のうっかりミスだった」なんて、自分も自分の周りでもよくある話ですから、そこまで気にする事はないですよ。 ちなみに「なぜうまくいかない」という台詞を使ってる人ほどうっかりミスの率が高いという法則を最近見つけました。活用してみて下さい。 あと保険として自分のバグだとは1ミリも微塵も思ってなくとも、一応頭に「多分ただの私のミスだと思うのですが」と付けておくと、謙虚さが増す上にホントに自分のミスだった時も恥ずかしさが軽減されてグーです(^ω-)
0そうだね
プレイ済み
返信[36]
親投稿
ACLSは描画設定をBASIC起動時の状態に戻す命令ですからね〜。変数は対象外ですね。 ACLSのヘルプを見てみるといいと思います。例のEND以降の命令が実行されるイメージなので、わかりやすいと思います。 OPTION STRICTつけると今後の変数名絡みのバグに気づきやすくなるので良い感じになると思いますね。 けいさんも言うようにほんとうっかりや見落としミスは多い部類なので気にすることはないと思いますね。ただ同じミスを繰り返さないためにも自分を疑うというのは鉄則というか、僕はおかしいと思ったことの99%は自分のミスだと思っています。 なのでシステムの不具合の可能性は低いと直感しているところもありますが、本当にシステムが悪いと思っても保険をかけておくのはいいですね (^^;
0そうだね
プレイ済み
返信[37]
親投稿
nobu divine-creator
いよいよ以前から考えていた複数スロットの活用法に挑んでみましたが、初挑戦なため基本的な仕組みも正しく理解できていません…。 それでも何とか、別スロットへの移動が可能になりました♪ しかし、スロット0を最初に起動すれば問題ないのですけど、スロット1や2のプログラムから起動すると、エラーになってしまいます…。 もちろん、スロット0から始めるのが基本なので、このままでも良いのですけど、理想を言えば別のスロットのプログラムから起動しても良いという方式にしたいと思っています♪ スロット1や2に読み込むプログラムをプレイヤーが最初に選んでもエラーにならないようにする方式は可能でしょうか?
0そうだね
プレイ済み
返信[38]
親投稿
nobu divine-creator
次の投稿にて同じ質問をしてみた結果、すぐに実現するのは大変そうなので、今回は見送ることにしました! 起動に使うプログラムを固定すれば、各スロット間の移動も可能になりましたし、マルチな起動方式は今回使わないことにします!
0そうだね
プレイ済み