Archiverse Internet Archive
まーくん MARK6502
日本
誕生日非公開
ゲームの腕前初心者
利用したゲーム機ニンテンドー3DS
フレンド0/100
フォロー3
フォロワー3
投稿数3
そうだね数37
取得日時

ゼルダの伝説大好きです。 今は、プチコン3号にハマってます。

投稿のみ 投稿と返信
前のページ(最近)
1 2 3
次のページ(過去)
返信[2]
親投稿
まーくん MARK6502
それから、今のプログラムだとボタンが押されても押されていなくてもPRINT "1"は実行されてしまいますね。
0そうだね
プレイ済み
返信[1]
親投稿
まーくん MARK6502
このプログラムだと、GOTO文を使わなくても良いですね。 B=BUTTON() IF B AND 32 THEN PRINT "1" と同じになります。 BUTTON()命令の()の中はbit番号ではありません。
0そうだね
プレイ済み
返信[3]
親投稿
まーくん MARK6502
回答が遅くなりました。 IF文で各々の領域が重なっていることを判定するのは考えていただくとして、SPRITEの衝突を検出する手順を簡単に書いておきます。 9行目の下に SPCOL 0,0,0,16,16,1 と言うように、勇者のSPRITEに対する衝突範囲の定義をしておきます。 WHILEループの最後に、 IF SPHITSP(0,1) THEN @SENTO と言うように記述してやると、SPRITE 0と1が衝突検出されると@SENTOに制御が移ります。
1そうだね
プレイ済み
返信[1]
親投稿
まーくん MARK6502
衝突判定ですね。 ミイラがスプライト1、勇者がスプライト0の様ですが、 一つは、各々の位置を変数で持つことになると思うので、その位置にスプライトのサイズ分のエリア同士が重なったかどうかをプログラムで判断する方法。 もう一つは、SPHITというスプライトの判定命令を使う方法があります。 それをWHILEループの移動処理の中に入れることになります。 またプログラムでは毎回スプライトの位置を読みだして書き換えていますが、SPANIMでスプライトの自動移動をしなければ、座標は変わらないので、読みださずに、セットだけしてやればよいです。
1そうだね
プレイ済み
返信[1]
親投稿
まーくん MARK6502
他の人が作ったプログラムを改造するには、読んで意味を理解しなければなりません。 これって、すごく勉強になります。 プログラムを作ったことがない人は、プチコン3号を前にして何をしていいかがわからない状況になってしまうことがほとんどですが、動いているプログラムを読むことで、自分のやりたいことを実現するためには、どのように書けばいいのかというのが判ってきます。 そうやってプログラムの知識の引き出しをたくさん作ると、自分がやりたいことを自分の力で書けるようになってきます。
1そうだね
プレイ済み
返信[3]
親投稿
まーくん MARK6502
私もパソコン凌明期世代なので、BASIC懐かし~世代です。 ひぶくろさんのおっしゃる通り、パソコン買っても、まともなゲームソフトすら売られていない時代、パソコンで何かをするためには、自分でプログラムを組んで楽しむという楽しみ方が主流でした。 それをしようとするためには嫌でもBASICや機械語を覚えるしかなかったですね。 今はインターネットで簡単に情報収集できるので、BASICの基本的な事柄なら、Tiny Basicで検索すると、プチコンのBASICによく似たBASICの初心者向けの解説情報が結構見つかります。
0そうだね
プレイ済み
返信[2]
親投稿
まーくん MARK6502
このプログラムは動画を見て凄いと思いました。 これほどの動きのあるプログラムが携帯ゲーム機上のBASIC言語だけで書けてしまうとコンピューターの処理能力の進歩にも驚きです。 このようなプログラムが出てきてくれるお陰で、プチコン3号が持っているポテンシャルの凄さも見えてくるので楽しいですね。
4そうだね
プレイ済み
返信[5]
親投稿
まーくん MARK6502
補足ですが、アニメーションの指定に"UV"を指定していますが、 指定を"I"にして、496番~499番のパターンを指定すると、判りやすいと思います。 SPSET 2,496 SPANIM 2,"I",7,496,7,497,7,498,7,499,0 XとYの話は、右に移動するのが目的のようなので、プログラムでは、 X=X+5 SPOFS 2,X,Y と書けば、プログラムの処理と実際の動きの意味が一致するので、見やすくなると思います。 実際に5ドットずつ移動していると、動いている間のアニメーションは殆ど見えないようですが。
0そうだね
プレイ済み
返信[3]
親投稿
まーくん MARK6502
プログラムリストを見ると、ラベル@AAAが有りますが、そこに戻ってループするように書かれていないので、最後の行にGOTO @AAAが要りますね。 それと、確かにSPANIMがループの中にあるので、ループ毎にアニメーションが初期化されてしまいます。 また、SPSET命令がないので、ACLSで初期化するとスプライトは表示されなくなります。 ループの外にSPSET命令が必要ですね。 右矢印が押されたときに変数Yを増やして縦(Y方向)に動かそうとしているように見えますが、SPOFSのパラメータをX,YではなくY,Xと書いているので、横(X方向)に動いちゃいますね。
0そうだね
プレイ済み
返信[1]
親投稿
まーくん MARK6502
小文字の「っ」なら、下の[SEL]ボタンの上にあります。
0そうだね
プレイ済み
返信[53]
親投稿
まーくん MARK6502
そうですね。複数の作品を作られているようなので、だんだん知識も深まってきているのではないかと思います。 配列変数の理解は、この先ステップアップしていく上で避けては通れない物です。 ミーバースは外部リンクを貼っちゃ行けないんでしたっけ? Googleで「Tiny Basic 配列」等のキーワードで検索すれば、入門レベルの解説ページがいくつか見つかると思いますので、それを見ていただくのも手かと思います。 なお、検索結果にVisualBasicのサイトも出てくると思いますが、言語の仕様がかなり違うので、混乱するので、今はそちらは見ない方が良いと思います。
1そうだね
プレイ済み
返信[48]
親投稿
まーくん MARK6502
けいさんの立てたスレッドだったのに、普通の質問スレッドの流れのつもりでコメントしてしまいました。(^◇^;)
0そうだね
プレイ済み
返信[44]
親投稿
まーくん MARK6502
変数宣言についての続きです。 ご存じかも知れませんが、変数宣言ですが、プチコン3号では、プログラムの先頭で、「OPTION STRICT」を指定することで、宣言していない変数は実行時(厳密には実行前ですが)にエラーとなるように設定が出来ます。 BASICでは、配列以外の変数は宣言しなくても使えるという緩い仕様になっていますが、これをあえて、厳密にチェックするように指定する物です。 これを指定しておくことで、変数名の綴りの間違いによるバグを防ぐことが出来ます。 プログラムが大きくなり、使用している変数が多くなってくると、かなり効果がありますので、私は常に指定するようにしています。 また、こちらはポリシー的な話になりますが、配列変数はDIM、通常変数はVARとして宣言するようにしています。
1そうだね
プレイ済み
返信[43]
親投稿
まーくん MARK6502
LAMPさん DIMとVARは同じ扱いで良さそうですね。 DIMはdimension(=次元)の略のようで、配列の1次元、2次元という、多次元の変数という意味の宣言と考えられます。 一方、VARはvariable(=変数)そのものの意味と思います。 プチコン3号ではこの両方が宣言で使用できるので、配列変数はDIM、通常変数はVARで宣言するのが作法のような気がします。 ちなみに、マイクロソフトのVisualBasicでは、すべての変数宣言をDIMで行うという仕様になっています。
1そうだね
プレイ済み
返信[1]
親投稿
まーくん MARK6502
mkIIから3号になって、いろいろ変わっているところがあります。 SPRITE系の命令もかなり変わっています。 詳細は、スマイルブームのホームページにある、mkIIと3号の各々の命令表を比較してみるのが良いと思います。 そこで不明であれば、どんなアニメーションを使いたいのかを書いて貰えれば、回答が付けやすいと思います。
0そうだね
プレイ済み
返信[1]
親投稿
まーくん MARK6502
PRINT文による書式指定はありませんが、文字列関数のFORMAT$を使ってください。書式の指定はC言語のprintfに似ています。 詳細は命令表を参照ください。
0そうだね
プレイ済み
返信[1]
親投稿
まーくん MARK6502
INPUT文とINKEY$は一緒に使う物ではなく、用途によって使い分けて使うことになります。 INPUT文は、文字列を入力してリターンが押されたら、入力された文字列が指定した変数(この場合R$)に返ってきます。 入力終了まで戻ってきません。 INKEY$は、その瞬間にキーが押されていればそのキーの文字が、押されていなければ空文字("")が返ってきます。なので入力があっても1文字しか返ってきません。 R$に文字列(この場合”かがみもち”というような。)を入力したいのであれば、INKEY$ではなく、INPUT文を使うことになります。
0そうだね
プレイ済み
返信[1]
親投稿
まーくん MARK6502
どのようなコードになっているのかが判りませんが、変数の計算結果をプリントして確認しているのなら、一緒に計算に使っている変数もプリントするようにすれば、何故そのような結果になるのかが判ると思います。 減算しているつもりでも、減算している変数の値がマイナスになっていれば、結果は加算になっちゃいますし。
0そうだね
プレイ済み
返信[6]
親投稿
まーくん MARK6502
面白そうなので、1分間のMAINCNTの差分を3DSLLで計測してみました。 TIME$変数の分の桁が変化する間隔を1分として。その間のカウント差分を継続して出してみました。 結果、3585カウントか3600カウントのどちらかが出てくるという状況。3586~3599が出てくることはなし。 250msの停滞が有ったり、無かったり、は何なんでしょうね。 ガベッジコレクションが動いたりしてるとか? 余談ですが、ビデオ映像では、白黒映像のプログレッシブ30fps、インタレース60fps映像を、NTSC方式でカラー化した際の制約で、プログレッシブ29.97fps、インタレース59.94fpsとなっているそうですが、それとは関係なさそうな話ですね。
2そうだね
プレイ済み
返信[4]
親投稿
まーくん MARK6502
ありがとうございます。 PCからのアクセスがサーバーエラーで、返事が遅くなりました。 そうですね。目安と考えておくのが良いですね。 長時間の時間計測であれば、秒以下の精度が必要になるケースも余りないと思うので、TIME$を使えば良い。 秒以下だと、反射神経や短時間の時間成績測定に使う等が考えられますが、ゲームですので絶対的な精度は余り重要ではなく、同じプログラム、バージョン、マシン環境で大きくばらつかなければ支障は無いと思います。 念のため、画面上にスプライトを多数表示して、処理落ちを発生させた状態で、MAINCNTの進みに影響がないか確認してみましたが、ほぼ60カウント/1秒でカウントが進むことは確認できました。 希望としては、システムクロックと同期したシステム起動後からのミリ秒数を取れるシステム変数が欲しいところです。
0そうだね
プレイ済み