0>1のように、不等号を使った数式のことを、不等式といいます。それに対し、1+1=2のような式は、等式といいます。ただし、プチコンでは、等式を表す場合、1+1==2のように、=を2つ書きます。
さて、不等式にせよ等式にせよ、数式ですから、数で答えが得られます。ただし、得られる答えはたった2通り、その不等式(等式)が正しければ1、間違っていれば0になります。
次のように、正しい(間違っている)不等式(等式)をPRINTして、得られる答えを確かめてみてください。
?0>1
?0<1
?1+1==2
?1+1==3
1そうだね プレイ済み
スプライトをタッチできるようにするには、新たに次のような処理が必要で、そのためには、()内の命令を使います。
・今まで上画面に表示させていたものを、下画面に表示させる
(XSCREEN, DISPLAY)
・タッチペンの位置情報取得
(TOUCH OUT)
・タッチペンとスプライトの衝突判定
(SPCOL, SPHITRC)
0そうだね プレイ済み
「1+1」「3*4」「10/5」・・・これらはみんな数式です。数式と言うのは、答えが数で得られる式のことです。
でんぺんさんが「IF 式 THEN」と書かれている中の「式」とは数式のことであり、IF文は「IF 数式 THEN 処理A ELSE 処理B」と表されます。そして、この数式の答えが0のとき、ELSEの後ろの処理Bを実行し、0でないときは、THENの後ろの処理Aを実行します。
さて、1+1などは数式であると申しましたが、その答えを表示させるのに、PRINT(?)を使って、「PRINT 1+1」とか「?3*4」とか入力しますよね?
実は「0>1」と言うのも立派な数式です、数式である証拠に「?0>1」と入力すると、数で答えが得られます。試しにやってみてください。何て表示されましたか? もしこれはIFの数式の中にあれば、処理Aと処理B、どちらが実行されますか?
0そうだね プレイ済み
プログラムを実際に試していませんが、それだと常に@2の方、つまりNew3DSと判定されます。
IF HARDWARE<=0 THEN ・・・
とすべきかと。
6そうだね プレイ済み
スプライトをどのように動かしたいのかがよく分かりませんが、例えば添付のようなものは参考になりますか?
0そうだね プレイ済み
あ、間違えました!
先ほどのプログラム、18行目は
SWAP DS[I],DS[RND(30-I)+I]
が正しいです。恐縮です。
1そうだね プレイ済み
10×3の計30のマス目のうち、例えば最上列の10マスにスプライトを並べて、マス目ごとシャッフルすれば、スプライトが重ならない配置が実現できそうです。この場合、スプライトが重なることによる再配置を考えなくて済むので、処理時間的にも無駄がありません。
このようなアルゴリズムを、フィッシャー・イェーツ(Fisher-Yates)のアルゴリズムと言いまして、例えば添付のように実行します。
同じ目的を達成するために、実にいろいろなやり方を選択できるのが、プチコンプログラミングの面白いところですね。
1そうだね プレイ済み
DX[I]は、そのままDP配列の添字(そえじ)になりますが、配列の添字にマイナスを指定するのはNGです。Out of range(範囲外)エラーになりませんでしたか?
DX[I]が表示座標だとしても、マイナスを指定する理由が分からず、恐縮ですが・・・
なるべく、ごごちーさんの意図を汲んだ形でプログラムを作ってみましたので、添付をご参照ください。
0そうだね プレイ済み
今気がつきましたが、これは、10×3のマスの中に、DMX+1個(6個?)のスプライトを配置する、ということですよね?
だとすると、自分で言っといて何ですが、SPHITSPを使うのはあまりかしこいやりかたではなさそうです。
多分、最初にやろうとしていたように、10×3の2次元配列を使って、スプライトのあるなしを管理して、既にスプライトが置いてあれば再配置する、とやるのが筋です。
じゃあなぜ最初そうしようとしていたのにできなかったか、ですが、スプライトの座標を(0,0)~(9,2)のマス目で管理するのか、実際の表示座標で管理するのかが混同されているような気がします。
1そうだね プレイ済み
既にお気づきであれば、入れ違いで恐縮ですが、添付していただいたプログラムには、次のようなツッコミどころがあります。
1.スプライトの衝突を判定したら、@FURIに戻って繰り返そうとしているようですが、そのたびにSPSETを実行しているのがよくないです。SPSETは、指定管理番号のスプライトを初期化します。SPSET直後のスプライトの初期位置は(0,0)、すなわち左上になります。
2.@FURIループの中では、スプライトの位置をランダムに変えて、スプライト同士の重なりがあるかないかを確かめなければならないのに、SPOFSでは固定座標(-16,-16)を指定してしまっています。
つまり、SPSETでスプライトの座標が(0,0)になり、直後のSPOFSで(-16,-16)になる、これを延々と繰り返しているようです。
0そうだね プレイ済み
そうです。SPCOL と SPHITSP を使って、スプライトの重なりを判定します。
やってみて分からなかったら、添付を参考にしてみてください。添付は、64個のスプライトを1個ずつランダムに配置しますが、その際、既に置いたスプライトと重なってたら、重ならなくなるまで再配置を繰り返します。
・・・と言っても、プチコンは処理が速いので、再配置を含めて一瞬で終わりますけどね。
1そうだね プレイ済み
0~31は「制御コード」と言うヤツで、指定は無効になるんじゃなかったでしたっけ?
0そうだね プレイ済み
"ニンテンドウスイッチ" is the correct katakana spelling of "Nintendo Switch".
I wish you had also highlighted "ツ".
In this case, "ツ" should be a little bit smaller than the others.
2そうだね 未プレイ
まぁでも、諦めずに原因を追究しましょう。
まず、下画面に「ファイルが見つかりません」とか表示されませんでしたか?
もし表示されたとすれば、実際、マップデータファイルがないので、作る必要があります。
ファイルは確実にあるはずなのに、この表示が出るなら、ファイルの置き場所が正しくないと思われます。もし、プログラムをコマンドモードからRUNするなら、マップデータファイルは、現在の作業用プロジェクトの中に入れておく必要があります。
「ファイルが見つかりません」の表示が出ないなら、マップデータファイル自体は存在していますが、中身が空っぽだと思われます。
マップデータファイルは全部で4つ(ファイル名の末尾がL0~L3)ありますので、今一度、これら全部のLOADを試してみてください。
1そうだね プレイ済み
How did you draw rain?
I guess this rain is drawn on one of BG layers. If so, set Z coordinate of rain BG layer with BGOFS smaller than that of player sprite.
0そうだね 未プレイ
だいぶお困りのようですね。
まぁだまされたと思って、次のことをやってみてください。
・3行目、DIM D[0] の後ろについているカンマを消す。
・4行目を BGSCREEN 0,64,64 としてください。
・6行目を BGLOAD 0,D としてください。
本当にだましてたらすみません。
1そうだね プレイ済み