Archiverse Internet Archive
投稿のみ 投稿と返信
前のページ(最近)
136 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56154
次のページ(過去)
返信[8]
親投稿
おちゃめ ochame_nako
だにえるさんへ 一般的な書き方ではREPEAT~UNTILが最速ですが、最速の書き方では実はGOTOが最速です。 「GOTOはあくまで分岐命令でありループ命令ではない」となればほぼあらゆる条件下でREPEAT~UNTILが最速になります。 ちなみに私がオススメしたいAボタン待ちプログラムはこれです。 REPEAT  WAIT UNTIL BUTTON(2)==#A ですね。 VSYNCは前回のVSYNCからの経過時間待つ命令なので場合によってはVSYNCがキャンセルされAボタンを押すまで待ってくれず誤動作の可能性があります。 開始時にRUN+Aボタンでスタートする等の特定条件下のみに起こることですが。
1そうだね
プレイ済み
返信[7]
親投稿
おちゃめ ochame_nako
(続き) WHILE~WENDとREPEAT~UNTILは条件付きのループを作りやすいです。 WHILE~WENDは入り口チェックであるためループ開始時に条件を満たしてないと1回もループ内を実行せずスキップされますがREPEAT~UNTILは出口チェックであるため最低1回はループ内を実行します。 ただし、WHILE 1~WENDと記述してBREAKで抜ければループ内を確実に実行させることは可能なのでそこまで入り口、出口に拘らなくても良いです。 使い分けるのが難しければどれか1つを確実に使えるようになれば問題ありません。 個人的にオススメはWHILE~WENDです。 「FOR~NEXT的な用途、REPEAT~UNTIL的な用途に対応可能」「タイプしやすい」かつ「速度もそこそこ速い」ためです。
1そうだね
プレイ済み
返信[6]
親投稿
おちゃめ ochame_nako
(続き) GOTOの一番のメリットはジャンプ先が自由ということです。 それは逆に言えばGOTOとラベルが1対1で対応しなくても問題ないためスパゲッティになりやすいとか視認性も悪くなるというデメリットにもつながっています。(他のループ命令では開始命令と終了命令が1対1で対応している) FOR~NEXTは一定回数繰り返すプログラムや特定の変数の値を一定ずつ変化させるプログラムを作りやすいです。 必ずカウンタ変数が必要なのでそれが必要のない場合はWHILE~WENDかREPEAT~UNTILを選んだ方がベターです。(他のループ命令はカウンター変数無しでもループ可能なので単にループを繰り返すだけならば上記の中でFOR~NEXTとの差はさらに開く)
3そうだね
プレイ済み
返信[5]
親投稿
おちゃめ ochame_nako
New3DS LLを使ってループにかかる時間を計測してみました。  ☆計測条件☆ ・1000万回ちょうどでループが終了する ・プログラムは最速となる書き方で記述 ・ループプログラムはプログラムスロット0の先頭に記述 ・MILLISECを用いて3回計測してその真ん中の時間を採用 GOTO@ラベル 5395ms FOR~NEXT 6696ms WHILE~WEND 5881ms REPEAT~UNTIL 5419ms というわけで速度だけを見ればGOTOが最速です。(±20msくらいの誤差はある) しかし、これは微々たる差でありこの速度差が重要になることはほとんどないため速度よりも自分の用途に合ったものを選択すると良いでしょう。
1そうだね
プレイ済み
返信[2]
親投稿
おちゃめ ochame_nako
(続き) ・大作プログラムを作る 1つのプログラムスロットだけではサイズの限界がありますが、それを4つ使えば大作が可能になります。 実行中に別スロットへのロードも可能なので複数スロットがあることによってSDカードの上限サイズのプログラムを作ることが可能になります。 これらはあくまで一例で工夫次第では無限の活用方法があります。
3そうだね
プレイ済み
返信[1]
親投稿
おちゃめ ochame_nako
プチコンBIGにはプログラムスロットと呼ばれる編集画面を4つ備えていますが、それには理由があります。 ・プログラムの制作が楽になる 複数のファイルを開けるので以前自分が作ったプログラム、他の人が作ったプログラムを参考にしながらプログラミングができるため非常に効率が高いです。(もし複数開けなければリストを覚えるか紙に書き出すしかなくなる) ・ライブラリとして活用 プチコンBIGではDEF命令によって自作の関数や命令を作ることが可能ですが、それを別のスロットに置くことで本体プログラム+拡張プログラムみたいな使い方が可能になります。 ・データ用として活用 自分が作ったプログラムでRPGならばマップデータ、テキストエディタならばテキスト(文章)を別スロットに置くといった感じで本体プログラム+データとしての使い方が可能になります。 読み出しだけではなく書き出しも可能です。
4そうだね
プレイ済み
返信[19]
親投稿
おちゃめ ochame_nako
(続き) では、それをどうやって実現するかが難しいところですが、「(マンツーマンによるアドバイスでない限りは)誰に向けて書いたものか」を明確にすることが必要になると思います。 これができてない講座というのは案外多いです。 理解を促進するのは興味関心だと思いますが、「誰に向けたものか」が明確にならないと「その人が興味を惹くもの」を書くことはできません。 したがって、平易な技術解説と初心者向け講座は似て非なる物なのです。 だからこそ初心者向け講座を書くのは難しいし、初心者向け講座を書くこと自体が自分自身にとっても勉強になると考えています。
0そうだね
プレイ済み
返信[18]
親投稿
おちゃめ ochame_nako
(続き) 「(どんなに経験があろうと)分からないものは分からない」というのは当たり前のことですが、その辺は「配列変数って何?」とか言っている初心者と何ら変わりはありません。 したがって、今も「心の中では初心者」です。 つまり、「初心者」の定義そのものが難しいということです。 技術的に難易度が低いものを扱っているのが初心者講座と思いがちですが、実はそうではなく難易度が低いものを「分からない立場」で「分かるように」書いているもの(さらに言えば「分かる」を「できる」に変えるもの)が本当の初心者講座だと私は考えています。
0そうだね
プレイ済み
返信[17]
親投稿
おちゃめ ochame_nako
(続き) 初心者にゼロから分かるように解説していったらDEFだけで余裕で本1冊書けるくらいの内容になってしまいますのでMiiverseで講座を書くならば、ある程度「自分が伝えたいこと(≒初心者に理解して欲しいこと)」を選択しない限りは無理ですね。 ちなみに私は基本的に説明書も攻略本も見ないでプレイするタイプなのでひたすら試行錯誤で行っています。 新しい関数があればこれは引数が整数型なのか実数型なのか有効範囲はどの程度なのか、戻り値はどうなのかなどを調べてそれから作り始めます。
0そうだね
プレイ済み
返信[16]
親投稿
おちゃめ ochame_nako
たんじぇさんへ 私は20年以上前から雑誌やWeb等で初心者向け講座を書いていますが、未だに「(絶対的な)正解」というものが見つからないし、そんなものはないと思っています。 人によって経験や理解度が異なるため「初心者」と漠然に考えるのではなく「どのような初心者か」というのを考えてから記述するというのが初心者講座には必要であると私は考えます。 今回の私の内容は「BUTTON関数を使ったプログラムはある程度作れるけどDEFは(知識として)知っているもののあまり使いこなせていない」という初心者をターゲットにしています。 極めて限定的に思えるかもしれませんが、これに当てはまる人は結構多いのではないかと思います。
0そうだね
プレイ済み
返信[21]
親投稿
おちゃめ ochame_nako
なお、小数値を整数型変数に代入すると強制的に整数化されますが、それは単純に小数部分を無視するだけなので難しく考える必要は全くありません。 A%=1.4 → .4を無視して1が代入される A%=-2.7 →.7を無視して-2が代入される これは、あまさとしおんさんが言っている「絶対値が小さくなるように丸める」(数直線で考えると0に近い方の整数を選択する)というのと同じです。 実数型と整数型は処理によって使い分けても良いのですが、慣れないうちは(%を付けない)実数型を使って必要に感じたら(%を付ける)整数型を使うというのが分かりやすくて良いかと思います。
1そうだね
プレイ済み
返信[20]
親投稿
おちゃめ ochame_nako
あまさとしおんさんが書かれているようにプログラムの先頭にOPTION DEFINTを付けて数値変数のデフォルト(標準設定)を整数型にして小数計算が必要な変数のみA#のように「#」を付けるというのは昔からよく使われている高速化の常套手段ですね。 OPTION DEFINTを使用時はA%のように「%」を付けなくても整数型として認識されます。(もちろん、A%と記述しても問題はない) プチコン3号ではデフォルトで小数が扱える実数型となっており、「A#」のように「#」を付けなくても小数が扱えるようになっています。 その反面で(メモリ消費が抑えられて少し速度が上がる)整数型の変数を使用するためには実数型と区別するために「%」を付ける必要があるというだけです。 ちなみに整数型で扱える数はマイナス21億3748万3648からプラス21億3748万3647の間の整数です。
1そうだね
プレイ済み
返信[5]
親投稿
おちゃめ ochame_nako
ちなみにSPSET以外の部分はこの表示されている範囲内のプログラムにおいてはプチコン3号で問題はなく動作すると思います。 ただし、プチコン3号は上画面の解像度が400x240、プチコンmkIIは256x192であるためSPOFSによる表示位置は本来の意図とは異なる場所になっている可能性があることには注意が必要です。(mkIIにおいてはSPSET 0,128,170は概ね中央の下端になる)
2そうだね
プレイ済み
返信[4]
親投稿
おちゃめ ochame_nako
SPSETの書式を見る限りこれはプチコン3号用ではなくプチコンmkII用プログラムですね。 プチコン3号はmkIIとある程度の互換性はありますが、変更されている部分も非常に多くありSPSETの書式は完全に変わったので互換性がありません。 それに、あらかじめ用意されているスプライト用のキャラもmkIIと3号では全く異なります。 ちなみにプチコン3号ではツララさんが書いている書式の他に SPSET 管理番号,定義番号 と簡略化した書式も選択が可能です。 管理番号は0~511(ただし、標準設定では0~255)が選択でき定義番号はスマイルツールからSPDEFを選択してその中にある自機に相応しいと自分で思うキャラの番号を入れてください。 例えばスイカのキャラ(0006)を管理番号0で表示したい場合は、SPSET 0,6とすれば良いです。
3そうだね
プレイ済み
返信[12]
親投稿
おちゃめ ochame_nako
プログラミング上達のコツは「自分が作りたいものを作る」ということです。 お絵かきプログラムに興味があれば上記のプログラムをベースに自分だけのお絵かきソフトを作るというのもすごく上達に繋がります。 学校の勉強とか仕事とかでないのならば自分が好きなこと興味があることをどんどんやりましょう。 アクションゲームが好きならばアクションゲーム作成、RPGが好きならばRPG作成をすれば良いです。 ただし、一朝一夕に作れるようになるわけではありません。地道に経験値を稼ぎ自分自身をレベルアップする必要があるでしょう。 自分が作りたいものを自分で作れるようになったらプログラミングは非常に楽しくなりますよ!
1そうだね
プレイ済み
返信[11]
親投稿
おちゃめ ochame_nako
参考になるプログラム、(今の自分にとっては)参考にならないプログラムがあるためプログラムの選択も重要です。 私がよく公開しているQSP等の文字数制限付きプログラムは初心者の参考になりませんが、自サイトの入門講座では初心者向けのサンプルを多数用意しています。 というわけで、初心者向けの「超簡易お絵かきプログラム」 XSCREEN 2 DISPLAY 1 GPAGE 1,1 COL=#WHITE WHILE 1  PX=X:PY=Y  TOUCH OUT T,X,Y  IF T>1 THEN GLINE PX,PY,X,Y,COL  VSYNC WEND これで、下画面にペンを使ってお絵かきが可能です。消したい場合はACLSとしてください。 超基本的な機能しかないため「色を変える機能」「消しゴム機能」など自分が欲しい機能を付けることが勉強になります。
0そうだね
プレイ済み
返信[13]
親投稿
おちゃめ ochame_nako
「GOSUBではなくDEFによる自作関数をオススメ」という内容のトピックスにするならばまずはGOSUBで作っておいてそれと同じものをDEFで作ってDEFのメリットを具体的に提示することが重要でしょうね。 初心者のためにあらためて書いておくとDEFによる自作関数(自作命令)もGOSUBも「よく使う処理を1つにまとめたもの」にすぎません。 ただし、DEFとGOSUBはお互いにメリットがあります。 GOSUBのメリットは初心者にとって覚えることが少ない(GOTOの延長として考えることができる)というのが最大のメリットでしょう。 DEFはローカル変数が使える、引数や戻り値を記述することで関数への値の受け渡しが楽などがあります。
0そうだね
プレイ済み
返信[12]
親投稿
おちゃめ ochame_nako
たんじぇさんへ どうもありがとうございます。 長くなるため私が省いた項目もありますが、まとめるとそんな感じで間違いはないと思います。 最初に箇条書きを行いそれについて説明しても初心者は「そうなんだ・・・」という程度の理解しか得られないため私の文章は興味を惹く内容、需要を考えてBUTTON(2)の代用関数を作ることから始めました。 BUTTON関数ならば初心者でも良く使うし「BUTTON(2)は押した瞬間を取得できる」というのはヘルプを見ればすぐに分かることですが、「実際は60fps以外では正常動作しない」というのはどこにも書いてないことであり、これをきっかけにすれば「DEFなんて難しそう」ではなく「DEFを使えば便利なんだ」という考えに変わるのではないかと考えたわけです。
0そうだね
プレイ済み
返信[21]
親投稿
おちゃめ ochame_nako
なぜ、32bitで表示できるようにしないかというと速度とメモリの問題があるからだと思います。 プチコンmkIIのGRPは256色でしたからそれでも同時表示可能な色数は128倍に増えています。(表示可能な階調数でいえばR、G、Bが5、6、5であるためプチコン3号よりプチコンmkIIの方がGの階調数で優れているけどこれはアルファチャンネルがないため) それならば指定も16bit値にした方が良いと考えるかもしれませんが、16進数に変換した場合に見た目でR、G、Bが分からず2進数で変換して5桁ずつ見て判断するしかないため分かりづらいし、馴染みがない数字になるため指定の段階で32bit値で設定を可能にしているのだと思います。(一般的にはR、G、Bを各8bitでアルファチャンネルを加えた32bitカラーが使われているため32bitでの色表現は馴染み深い数字というのが一番の理由だと思う)
1そうだね
プレイ済み
返信[12]
親投稿
おちゃめ ochame_nako
しんしんさんへ ファンクションキー画面で入力処理を作るのは簡単にできます。 しかし、FINPUT A$という書式で作るのが非常に困難なのでA$=FINPUT$()とかINPUT"A$"とかに妥協しそうな感じです。 引数に使っている変数の「変数名」を取得できればVAR関数と自作SLOT関数を併用して実現が可能になるのですが。(変数の「型」ならば自作SUFFIX関数で取得可能) 結構好評だったためINPUT系の命令+数種類の新命令を加えたファンクションキーライブラリの新バージョンを近いうちに作って公開する予定です。
0そうだね
プレイ済み