Archiverse Internet Archive
投稿のみ 投稿と返信
前のページ(最近)
186 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106154
次のページ(過去)
返信[5]
親投稿
おちゃめ ochame_nako
もう1つ最後に書いておくとスロット番号を省略してVAR("A")と記述した場合には基本的に動作しているスロットのグローバル変数を取得しますが、自作関数内でVARを使用した際にそのグローバル変数と同じ名前のローカル変数があった場合にはローカル変数が取得されます。 しかし、スロット0で動作しているならばVAR("0:A")のようにスロット番号を付けていれば同名のローカル変数があってもちゃんとグローバル変数が取得できます。 スロット0で動作させるとは限らないのでスロット番号が分からなくてはいけません。(そうでないとローカル変数の変数名をグローバル変数と被らない名前にしておく必要がある) そこで今回作った関数が役立つわけです。 また自作関数内では基本的にはローカルラベルのみ対応となるのですが、このSLOT関数を使えばそのプログラムのグローバルラベルを参照することが可能になります。
1そうだね
プレイ済み
返信[4]
親投稿
おちゃめ ochame_nako
ここまではすべて右辺値の話ですが、VARは左辺値にもなります。 例えばA=B+Cという式があった場合にはB+Cが右辺値でAが左辺値です。 右辺値は自由な式を記述でき左辺値は代入する変数を記述します。 例えばVAR("1:A")=7とするとスロット1のグローバル変数Aに7を代入します。 実行しているのがスロット1以外であればそのスロットのグローバル変数Aの値は変化しません。 今回のSLOT関数はこれを利用しています。
0そうだね
プレイ済み
返信[3]
親投稿
おちゃめ ochame_nako
プチコン3号は自作関数内でのみ参照可能なローカル変数の他にプログラム全体で参照可能なグローバル変数があります。 実はグローバル変数もスロットごとに異なる存在となっていてVAR("A")では現在動作しているスロットの変数Aが取得できるだけです。 他のスロットを参照しようとするならばVAR("1:A")のようにスロット番号を付ける必要があります。 その際はその変数が存在してなかったり実体化してなかったらエラーとなるため事前にCHKVER("1:A")で取得可能かをチェックしておくと良いでしょう。
0そうだね
プレイ済み
返信[2]
親投稿
おちゃめ ochame_nako
知らない人もいると思うのでVARについて少し解説しておきます。 VARは基本的にはDIMと同等であり、変数の宣言に使用します。 しかし、VARはDIMとは異なり関数の側面を持っています。 例えばVAR("A")とすれば変数Aの値を取得できます。 これに何のメリットがあるかとうと参照する変数を動的に変化させることができるということです。 動的に変化というのを初心者でも分かるように言えば配列変数A[]はA[0]。A[1]と添え字内を定数で指定しなくてもA[B]のように変数で指定するのと同じようなことが配列変数ではない普通の変数において行えて添え字が変数名に置き換わったものと考えると分かりやすいと思います。
1そうだね
プレイ済み
返信[1]
親投稿
おちゃめ ochame_nako
原理を簡単に説明すると指定したスロットのグローバル変数_SLOTに初期値1を入れてその後に変数_SLOTの値を0にした後に指定したスロット番号の_SLOTが0に変わっていればその指定したスロット番号が現在実行しているスロット番号となるわけです。 例えばスロット2で動作している場合はI=2の段階で_SLOTの値が1から0に変わるためそれを利用して判定しています。 すでに何人かがプログラムスロットを取得する関数を作っていますが、今回の方法ならばBACKTRACEを使った方法のように使用できる場面が限られることもなく他のスロットにグローバル変数_SLOTが実体化した状態で存在していたとしても正しく判定することが可能になります。 公開キー【 AEE3E8NV 】、ファイル名「SLOT」
0そうだね
プレイ済み
プレイ日記
おちゃめ ochame_nako
VARが左辺値にもなることを利用して現在動作しているプログラムスロットを取得するSLOT関数を作ってみました。
22そうだね
プレイ済み
返信[9]
親投稿
おちゃめ ochame_nako
ABS()は絶対値を返す関数で端的に言えば数値から符号を除いた値(-99ならば99)を返すわけですが、もしもプチコン3号にABS()関数が無くてもDEFを使えば作ることができます。 DEF ABS(A) IF A<0 THEN A=-A RETURN A END これはGOSUB~RETURNを使って似たようなことはできます。 @ABS IF A<0 THEN A=-A RETURN しかし、使用する前に変数Aに代入処理をしないといけないし変数Aを他所で使うことができないという問題があります。 自作関数内ではローカル変数が使えるためこの問題は起きません。
1そうだね
プレイ済み
返信[8]
親投稿
おちゃめ ochame_nako
DEFはレミファ、DECはレミド、DEGはレミソ ・・・という冗談はおいといて DEFは端的に言えばこんな命令や関数が欲しいなと思ったものを(プチコン3号でできる範囲内であれば)作ることができる命令です。 define(定義する)の略ですね。 私はプチコン3号が発売された日にNew3DSと旧3DSを判別する関数を作りましたし変数の型を判別する関数、スリープしたかどうかを判別する関数、1000分の1秒単位のタイマー関数など多数の命令、関数を作りました。 DEFは覚えておくと様々な用途に使える非常に便利な命令です。
1そうだね
プレイ済み
返信[3]
親投稿
おちゃめ ochame_nako
これがどんなソフトかはすでに発表済みのPETIT PAINT QSPを見て下さい。 https://miiverse.nintendo.net/posts/AYIHAAAEAAArVRTsk6CEtg
0そうだね
プレイ済み
返信[2]
親投稿
おちゃめ ochame_nako
せっかく作ったもののすでに単体発表しているものと同一のものを搭載しても面白くないし別のアイデアがあるのでこれはボツにして1から作り直そうと思います。
0そうだね
プレイ済み
返信[1]
親投稿
おちゃめ ochame_nako
これを動作させるには近日公開の簡易関数電卓QSP ver.2.0が必要です。 基本的にはすでに発表されている「PETIT PAINT QSP ver.1.1」と同一のものです。 ライブラリに含まれているGMODE命令(GMODE 1下画面でタッチやグラフィックが使えるように設定できGMODE 0だと上画面設定になる)やタッチのTCH命令を使うことで大幅なリスト短縮が可能であるためCOMMON DEFによる関数定義やYボタンでシステムに戻る処理を加えても何とかQSPに収まるかと思ったけど完全に甘かったです。 そのままの状態ではどうしても1行収まらなかったけどリストを再度見直すと限界だと思われたver.1.1のリストはさらに10数文字短縮できたためそれで何とかギリギリQSPに収めることができました。(ラストの改行は画面外だけど)
0そうだね
プレイ済み
プレイ日記
おちゃめ ochame_nako
お絵描きソフト「PETIT PAINT QSP」を簡易関数電卓QSP ver.2.0対応ソフトとして作り直してみました。
5そうだね
プレイ済み
返信[6]
親投稿
おちゃめ ochame_nako
れいさんへ ニュートン法による求解ならばQSPでも作れそうなので今作っている簡易関数電卓QSP用のお絵かきソフトができ次第作ってみようと思います。
0そうだね
プレイ済み
返信[12]
親投稿
おちゃめ ochame_nako
これは私が経験した昔話ですが、私がプログラミングを始めた80年代初頭はまだインターネットという便利なものはなくプログラムに関する知識のほとんどはベーマガなどの雑誌によって得ていました。 今ならばMiiverseで質問すればすぐに返答がありますが、当時は分からないことを質問しようにも雑誌の質問コーナーだと数ヶ月待ちがデフォでした。 そういう状況だったので「とにかく自分でいろいろ試す」というやり方が身に付きました。 今はネットが身近な存在ですが、やはり自分の経験こそが上達には欠かせないと思います。 今はほとんどのことがネットで検索可能なので分からない部分をすぐに質問するのではなく事前に検索していればその間に分からない部分を整理できるのでオススメです。 プログラミングには正解という上達法はありません。 私のサイトの入門講座も私がベターと感じている方法を書いているにすぎません。
3そうだね
プレイ済み
返信[11]
親投稿
おちゃめ ochame_nako
頭の中で考えるだけでは理解するのは難しいでしょう。 雑誌掲載のプログラム、Web上にあるプログラムを実際に入力するのが第一歩です。 そして、それを改造しながらその改造による動作の変化を見ることでプログラムの処理を体感することが可能です。(トライアンドエラーが重要) ゼロから作り出すというのも上達には欠かせませんが、日本語の単語や文法を知らない状態で会話するようなものなので最初は改造によって自作のための知識を身につけると良いです。 マニュアルは分からない部分だけ参照すれば良いのでこれを全部覚えようとするのはあまりオススメできません。 幸いにしてプログラムを改造をしてもプチコンが起動しなくなるということはないため思う存分改造しまくってください。 プログラミングというのは非常に楽しい行為です。 身構えずに興味あることから少しずつ試していけば良いと思います。
1そうだね
プレイ済み
返信[30]
親投稿
おちゃめ ochame_nako
上記のプログラムでGの値(0.1)やVXの初速(-5)を変えるとジャンプの高さや速度が変わります。 正解はないため自分のイメージに合った数値を選択してください。 注意する点としては1つはZEXさんが書かれているようにジャンプや落下の速度が速すぎると正常に判定ができない場合があるという点と重力加速度を小数にした場合には誤差が発生してしまうし頂点でぴったり速度0になってないために正しく元の位置に戻るとは限りません。 そのためこのプログラムではIF Y>224 THEN Y=224のようにしてつじつまを合わせるようにしています。
2そうだね
プレイ済み
返信[29]
親投稿
おちゃめ ochame_nako
こんな感じのプログラムになります
1そうだね
プレイ済み
返信[28]
親投稿
おちゃめ ochame_nako
ジャンプはフラグを使えば簡単に実現できます。 フラグ変数をFとするとF=0かつAボタンを押した瞬間にY方向の速度(VY)を設定しF=1にします。 F=1の時はY方向の速度(VY)を重力加速度(G)の分だけ変化させます。 すると一定の地点をすぎると今度は落下をし始めます。 そのまま放っておくと地面を通り過ぎるため地面にたどり着いたらFの値を0にすれば着地です。 仕組みそのものはこのように単純ですが、自分のイメージしたようなジャンプができるように数値を調整する必要があります。
1そうだね
プレイ済み
返信[23]
親投稿
おちゃめ ochame_nako
5について書いておくとプチコン3号ではスプライト用のGRPは1つしか設定できないため2つ同時に使用することはできません。 デフォルトではGRP4がスプライト用GRPとなっています。(2枚のGRPをスプライト用に同時には使えないけど交互の使用ならば可能なのでシーンごとにスプライトの使い分けをするというのであればこれで問題ない) 2ページではなく2データという意味であれば合計でGRP1枚に収まる量のデータであれば可能です。 その際はGLOAD、GSAVE命令やGCOPY命令を使う必要があります。
1そうだね
プレイ済み
返信[5]
親投稿
おちゃめ ochame_nako
○○した後に××するという処理を行うためには「○○した」という情報を別の変数に入れておくやり方がポピュラーです。 これは一般的にはフラグ処理と言われていてキャラがジャンプするときなど様々な用途に活用できます。 フラグ変数をFとするとBボタンを押したらFの値を1にして、Xボタンを押した場合、かつ、Fの値が1の時にBEEPを鳴らすようにするだけです。 再び、Bボタン、Xボタンを順番に押したらBEEPが鳴るようにするためには鳴らした後フラグをクリア(F=0)する必要があります。
1そうだね
プレイ済み