投稿
けい kei0baisoku
プチコンに慣れた人でも意外と知らない機能とか書き方を結構見かけるので、私がこれまでに見かけたものと見つけたものをまとめてみました。 後半はマニアックなものも多いですが、前半ははじめての人も覚えておいた方が良いものが多いです。 一点注意。(※)のマークが付いているものは、仕様だと確認が取れていないものです。多分大丈夫じゃないかという意見も多いですが、プチコンの更新で挙動が変わったりする可能性もゼロではないので、使うときには一応気を付けましょう。
23そうだね
プレイ済み
返信[1]
親投稿
けい kei0baisoku
【基本操作編】 ・エディットかダイレクトモードの画面でSTARTを押すと、スロット0が実行される ・コピーとカットは、何も選択していなければその行全体が対象になる ・LかRを押しながらDELボタンを押すと、行削除になる ・LかRを押しながら左右キーかアナログパッドの上下で、行の先頭と末尾にジャンプする ・LかRを押しながら上下キーかアナログパッドの左右で、1ページずつスクロールする ・LかRを押しながらアナログパッドの上下で、プログラム全体の1行目と最終行にジャンプする (ジャンプ系は全部、選択しながらでも可) ・何もない場所でヘルプを呼び出した時は、スライドパッドの右でページを送ると簡易命令表が見られる ・最後に実行したプログラムの変数や関数は生きており、ダイレクトモードからPRINTや関数呼び出しができる。次に何かのプログラムを実行すると消える。
3そうだね
プレイ済み
返信[2]
親投稿
けい kei0baisoku
・プチコン立ち上げ時にLかRを押しているか、ロゴが出ている時に押すと、エディット画面にジャンプする 【プログラムの書き方編】 ・(※)文字列にも、LENだけでなく配列の添字指定で1文字を取り出せる。 MOJI$="あいうえお": ? MOJI$[2] ・(※)文字列にもINCが使える MOJI$="あいうえお": INC MOJI$, "かきく" ・関数に対するCALL命令のような感じで、変数にVAR("X")でアクセスできる。 X=1.5: VAR("X")=3.14: ? VAR("X") ・CALLやCHKCALL命令は、プチコンではじめから用意されている命令に対しても使える。
2そうだね
プレイ済み
返信[3]
親投稿
けい kei0baisoku
・(※)関数や命令に与える引数は、任意の場所を省略できる。但し、省略されると受けとる側でエラーになるものも多い。ユーザ定義命令でも省略出来るが、省略されたか否かを関数内で判別する方法がないので、活用のしかたがない。 LOCATE X,Y: LOCATE ,25 【たぶんバグ編】 ・DEFで定義した引数の型と、呼び出す側の引数の型は、一致していなくても特にエラーにならない。実行時には呼び出した側の型の変数としてそのまま処理される。DEF内での使い方で矛盾が出なければそのまま正常に実行される。矛盾があるとその時点でエラーになるが、場合によってはプチコンの挙動が怪しくなる。 DEF FUNC X# ? X# END FUNC "あいうえお" 以上です。
1そうだね
プレイ済み
返信[4]
親投稿
けいさんのプログラムを見て気づいた事で、MID$で長さが実際の文字列より長くてもエラーにはならないってのもありますよね。前に先頭の1文字を削るときに丁寧に、 S$="TEST" T$=RIGHT(S$, LEN(S$)-1) みたいにしていたんですが、けいさんが、 T$=MID$(S$,1,255) みたいな記述をしていたのをみて、そういえば丁寧に指定しなくてもそこはエラーにならないから、長さが実際の文字列より十分長い値を指定しておけば切り出せるんだなって思いました。
1そうだね
プレイ済み
返信[5]
親投稿
けい kei0baisoku
>でんぺんさん そう言えばそんなのもありましたね。 ほかの言語だと暗黙で「足りない場合は元の文字列まで」って仕様なので、てっきり普通かと思ってました……… 合ってるのも違ってるのも含めて、思い込んでる前提知識が結構ある気がします。
1そうだね
プレイ済み
返信[6]
親投稿
そうですね〜。僕も色んな言語をやってたんで、その辺りは言語によってOKだったりNGだったりした事もあったような気がしたんで、基本的には丁寧に指定してしまっていたところもあります。またスタートINDEXをマイナスにすれば後ろから数えることになる言語もありますしね。(プチコンはNGでしたが)
1そうだね
プレイ済み
返信[7]
親投稿
けい kei0baisoku
そうそう、最初はRIGHT$(FN$,-11)の方を試してダメだったんでした。 ゲームでも機械でも可能な操作は取りあえず一通り試してみるタチなので、裏技とかバグとか人より多く見つける事が多いです………
1そうだね
プレイ済み
返信[8]
親投稿
VAR()は知りませんでした。
2そうだね
プレイ済み
返信[9]
親投稿
けい kei0baisoku
ほかの投稿のコメントの中でどなたか(てらこやさんだったかな?)がアドバイスされてるのを見て知りました。 かなりウルトラQな印象の使い方ですが、スマイルツールのマップエディタで使われていたのでまず大丈夫だろうと、私も今活用させてもらってます(^O^)
1そうだね
プレイ済み
返信[10]
親投稿
けい kei0baisoku
あ、一つ思い出しましたので追加を。 スプライトとBGの絵のうち、アルファベットや数字を表すものは全て「文字コード=定義番号」になっています。 なのでこんな風にまとめられます。 DISP$ = FORMAT$("%DPT",SCORE) SPCHR 0,ASC(DISP$[0]) SPCHR 1,ASC(DISP$[1]) : (以下略) 数日前のコアさんの投稿を拝見して知りました。
1そうだね
プレイ済み
返信[11]
親投稿
あのあと、しらべてみたら、CHKVAR()と言う関数があるのに気がつきました。VARのヘルプ記載漏れだと思います。
1そうだね
プレイ済み
返信[12]
親投稿
かつみ opoQsn
文字列変数は配列変数としてみなされるんですね。
1そうだね
プレイ済み
返信[13]
親投稿
けい kei0baisoku
>コータさん CHKVARは私も少し前に気付きました。ユーザ定義関数も変数も、名前をキーにした動的な管理になっているみたいですね。 >かつみさん そうですね。原理的には「文字列=文字の配列」なので私は違和感は無いのですが、BASICから入った人だと混乱させるかもしれませんね。
3そうだね
プレイ済み
返信[14]
親投稿
この結果が府に落ちる人は、使ってもいいと思います。私は、ちょつといやな感じがします。
1そうだね
プレイ済み
返信[15]
親投稿
もやしもどき Pseudomoyashi
ちなみに文字列は単純に添字でアクセスできるだけでなく、PUSH,POP,SHIFT,UNSHIFT,COPYのような配列用の命令を使うこともできたりしますね。 (文字列[添字]への代入もそうですが)参照先を直接変更しちゃうので文字列操作的にはあまりよろしくないですが。
1そうだね
プレイ済み
返信[16]
親投稿
けい kei0baisoku
>コータさん これは………………(°ω°) 一応丁寧に追って全部仕組みは理解できましたが、私は使いたくはないですね。参照なのか値なのかがパッと見て分からない書き方だと、きっと自分もあとで分からなくなります。 一文字読み取りくらいなら差し支えないかなと思っていますが。
2そうだね
プレイ済み
返信[17]
親投稿
けい kei0baisoku
>もやしもどきさん そう言えば、文字列全体の一括代入以外は公式に手順を提供してないですね。 PUSH,POPやCOPYなんかは特に、末尾のヌル文字どうなるんだろうとか不安も感じます。
1そうだね
プレイ済み
返信[18]
親投稿
Oskar oskar_liebig
こんなところのようです。詳細説明は略。 ・3号の文字列変数は、基本的に文字列オブジェクトの参照 ・代入文はシャローコピーで、代入後に[]やSHIFTなどで一方の中身を部分的に変更すると他方でもその変更が見える   A$="HOGE":B$=A$:A$[0]="M":A$[1]="URI":? A$,B$   MURIGE MURIGE ・一方を別文字列で置き換えれば分離する("+"の文字列結合も別文字列を作る)   A$="HOGE":B$=A$:A$=A$+"?":A$[2]="":? A$,B$   HOE? HOGE ・この辺はまだ粗がありそうで、例えば自己代入(普通は不要だけど)の動作が変   A$="HOGE":A$=A$:? A$ ⇒何も表示されず ある所で上の例を報告したら、こんな実験例が挙がってきました。   DIM A[1]:A=A:? A[0] ⇒異常終了
2そうだね
プレイ済み
返信[19]
親投稿
けい kei0baisoku
>Oskarさん 情報いろいろありがとうございます!(^O^) 自分で色々検証してみようかと思っていたので大変助かります。 丁度今作ってるゲームである情報を文字列管理していて、処理の前にコピーを取ってから行おうとしていました。 ただの代入によるコピーが深いコピーでないのなら変えないとダメかなと思っていたのですが、[]による直接上書きさえしなければ問題無さそうですね。 あと、配列の代入の方はこの投稿の14個あとに、丁度おにぎりさんが投稿をあげられてます。そっちも気になります。
1そうだね
プレイ済み
返信[20]
親投稿
けい kei0baisoku
追記です。 配列への操作、添字利用以外に次のも参照先が直接書き変わりました。 COPY,PUSH,POP,SHIFT,UNSHIFT 関数の仕様から考えると確かにそうですね……… ちなみにLEFT()とかMID()で切り出して上書き代入は、影響しませんでした。(引数に渡した文字列は壊されない)
1そうだね
プレイ済み
返信[21]
親投稿
ish owlis1
こんなのは、既に出ていますでしょうか VAR STR$ STR$=".1" STR$=STR$(3)+STR$ ? STR$ VAR LEN LEN=LEN(STR$)+1 ?LEN 標準関数(命令)は予約語と思い込んでいたので、少し焦りました。
1そうだね
プレイ済み
返信[22]
親投稿
けい kei0baisoku
>ishさん 関数名と変数名が別々に管理されているようなのでもしやと思っていましたが……… 自分で試そうとは思いませんでした(´ω`) ついでに、ユーザ定義の関数と変数も同名が使えることを確認できました。つまり X=FUNC(FUNC) こうなります(・ω・)
1そうだね
プレイ済み
返信[23]
親投稿
VAR()があるならEVALもほしいなぁ
0そうだね
プレイ済み
返信[24]
親投稿
けい kei0baisoku
>あまさと しおんさん 私は今まで使うことがほとんど無かったのですが、あると色々出来そうですねー(´ω`) 推察してるプチコンの仕組みから、実現は意外と障害もないのではと思ってますが、あったらあったで初心者向けのBASICからは離れていきそうでもありますね………
0そうだね
プレイ済み
返信[25]
親投稿
CALLがあるので、プチコンでプチコンを作れるかもしれません。そこまで、しなくても、簡易版のインタプリタを組み込んだ方が作りやすいソフトがあるかもしれません。例えば、関数電卓とか。 VAR()は、データをファイルに読み書きするとき、変数名とデータをセットで扱えば、プログラムが簡単になりそうな気がしています。
0そうだね
プレイ済み
返信[26]
親投稿
けい kei0baisoku
>コータさん 変数名とデータのセット、とてもいいですね!(^O^) VALもFORMATもあるし、共通ルーチン1つ作ればゲームのセーブロードがかなり楽に作れそうです。 私が今作っているものは特殊に自己保存しようとしてますが、普通にセーブさせる時には使ってみたいですね。 プチコンでプチコンは、文字列解釈も比較的楽だしデフォルト命令もCALLで呼べるし出来るだろうなーという気はしますが、私はやろうとは思わないですね………(^^;
1そうだね
プレイ済み