投稿
nobu divine-creator
プログラム初心者が、初心者ならではの視点で気付いた素朴な疑問を書き込む場所にしました! 今後、こちらにコメントを書いていくので、回答を書き込んでいただけたら嬉しいです♪ 気付く度に追記していくので、時々思い出してくださると助かります♪
8そうだね
プレイ済み
返信[1]
親投稿
nobu divine-creator
誰かによって作られたプログラムをEDITモードで拝見しますと、左端から入力されている場合とスペース(空白)がある場合とがあります! 何らかの意図でそうされているのだろうというのは分かりますけど、その理由は全く分かりません…! 同様に、プログラムの途中にスペースがある場合も見られますけど、それも同じ理由なのでしょうか?
0そうだね
プレイ済み
返信[2]
親投稿
こうやま kouyama1967
 左端にスペースを開けるのは「カラム」と言って、プログラムを読む易くするためです。例えば @A FOR I=0 TO 9 SPSET I,0 NEXT RETURN @A FOR I=0 TO 9 SPSET I,0 NEXT RETURN  どっちが判り易いですか?
0そうだね
プレイ済み
返信[3]
親投稿
otta777 otta777a
プチコン3号の命令にはFOR~NEXT、WHILE~WEND、REPEAT~ UNTIL、IF~THEN~ELSE~ENDIFなど対で使う命令が有り どの命令がどの命令と対になっているかを分かりやすくすると プログラムが読みやすかったり、解析しやすかったりします。 REM文でコメントを付けてどことどこが対になっているかを記述する 方法もあります。それ以外にも字下げという命令の前に空白を 入れる方法があります。 どの命令とどの命令が対になっているかを見やすくするために 考えられた記述方法です。BASIC以外のプログラミング言語でも この方法は広く使われています。
1そうだね
プレイ済み
返信[4]
親投稿
nobu divine-creator
読みやすくするため…というのは何となく分かるのですが、何行かまとめてずらしている場合もあり、それはそのかたまりがずれていたほうが読みやすいと思われたということですかね…? また、途中にスペースがあるのも読みやすさのためだけですか?(スペースが1つ分だったり2つ分だったりするのですけど…。) あと、改行キーがあるだけの行も読みやすくするためですか?
0そうだね
プレイ済み
返信[5]
親投稿
nobu divine-creator
otta777さんの仰る「対になる命令」が、まとめてずらしてある場合というわけですね♪
0そうだね
プレイ済み
返信[6]
親投稿
こうやま kouyama1967
 例えば大人が仕事で使う、VisualBASIC(ビジュアルベーシック、通称ブイビー)などでは、カラムは4文字ずつや8文字ずつ開けるのが、のぞましいルールとされています。  開けない場合、後からプログラムをしらべたり改造するのが難しく、喜ばれません。プチコン3号でカラムを開けて改行すると、開けた位置のまま改行するのは、これを考えての事です。  もちろんプチコンは趣味ですから、見た目の美しさや管理しやすさを考えて開ける人も、できるだけ詰めたり面倒くさいという理由で開けない人もいます。
1そうだね
プレイ済み
返信[7]
親投稿
otta777 otta777a
>nobuさん 複数のスペースがまとめて入っているのは対になる命令が複数 使用されていた場合にどの命令がどの命令の対なのかを 分かりやすくする目的があります。 CLS FOR I=1 TO 9 PRINT I;"のだん" FOR J=1 TO 9 PRINT I;"×";J;"=";I*J NEXT WHILE BUTTON(2)!=0:WEND PRINT NEXT END
1そうだね
プレイ済み
返信[8]
親投稿
otta777 otta777a
途中にスペースが1個だったり2個だったりする場合があるとの ことですが位置合わせのためにあえて空白を入れている場合が 考えられます。 改行だけの行があるのは処理の区切りが分かりやすいように するために入れる方がいますね。 【1】桁合わせ無し LOCATE 3,2:COLOR 15:PRINT "AAA" LOCATE 15,21:COLOR 2:PRINT "BBB" 【2】桁合わせ有り LOCATE 3, 2:COLOR 15:PRINT "AAA" LOCATE 15,21:COLOR 2:PRINT "BBB" INPUT "COMMAND:";CMD
1そうだね
プレイ済み
返信[9]
親投稿
otta777 otta777a
スクリーンショットの方が分かりやすいかな?桁あわせをした方が見やすく感じませんか?
3そうだね
プレイ済み
返信[10]
親投稿
nobu divine-creator
つまり、空白や改行は見やすさのための工夫で、プログラム的には影響が無いということですね♪ ただ、説明書に「命令の区切りにスペースを入力しなければならないことがある」と書かれているのですが、入力しなくても良い場合と入力しなければならない場合とがあるということですよね? その違いは、どう覚えたら良いのでしょうか?
1そうだね
プレイ済み
返信[11]
親投稿
けい kei0baisoku
初めての方がどのようなところに詰まるのか知りたいので、大変参考になります。 詳しい説明は既に他の方がして下さっていますね。 ニュアンス的な方向で表すなら、文章の区切れで点や丸をつけたり、大きく変わる文章から改行して段落を分けたりするのと同じ目的です。
2そうだね
プレイ済み
返信[12]
親投稿
otta777 otta777a
>nobuさん 空白や改行はBASICがプログラムを解析するときに僅かですが 時間がかかるだけでプログラムの処理内容に影響はしません。 同じ内容の本を空きページが紛れ込んでいる本と空きページが無い 本を最初から最後まで読むのにどちらが早く読めるか考えれば 分かりやすいでしょうか?
1そうだね
プレイ済み
返信[13]
親投稿
otta777 otta777a
>nobuさん スペースで区切らないと全体が変数名なのか命令と変数名なのか判別できません。変数名に使えない記号の(),@¨等を命令のあとに続けて書く場合はスペースを省略できます。
1そうだね
プレイ済み
返信[14]
親投稿
nobu divine-creator
なるほど!そうですね♪PRINTAとPRINT Aでは読み間違えますね! でも、PRINT2とPRINT 2では数字だから平気なような…?けれど、説明書では、BEEP2はダメでBEEP 2が正しいと書かれていて、何故でしょうか? ご説明の通りに、省略できる場合以外は命令の後にスペースを必ず入れるようにすれば良いのでしょうか?
0そうだね
プレイ済み
返信[15]
親投稿
nobu divine-creator
けいさんへ 私の視点は、一般的な初心者の視点と異なるような気がしますので、あまり参考にはなれないかもしれません…w。 でも、ある意味これまでにない意見や考え方を知る機会となるかもしれません♪ それが何らかの良い効果となれば幸いです♪(少なくとも、何かしらの役には立つかと存じます…きっと…たぶん…もしかすると…LOL!)
0そうだね
プレイ済み
返信[16]
親投稿
otta777 otta777a
>nobuさん 変数名の規則はアルファベット、数字とアンダーバーが使用可能で 数字から始まらない事となっています。 つまりPRINT2は変数名と判別されます。 スクリーンショットに貼った以外にもパラメーターを省略して 命令の直後にカンマを記述する場合はスペースを省略可能です。 【例】 LOCATE,5 関数の後に命令などを記述する場合はかっこで区切りが 分かるためスペースが省略可能です。 【例】 IF BUTTON(0)THEN END プチコン3号ではプログラム容量も十分ありますし横画面も広く 行の折り返し機能もあるので可読性を犠牲にしてスペースを 詰める必要はあまり感じません。
1そうだね
プレイ済み
返信[17]
親投稿
otta777 otta777a
他の方のプログラムを見てコロンが省略可能なことが分かりました。 【例】 FOR I=0TO 20A$=CHR$(32+I)NEXT 数字や記号の後に命令や変数名を記述する場合はスペースや コロンを省略しても判別が付くため省略できるようです。 20A$という変数が使用できるわけでは無いのでこのような 省略の仕方は人間が誤読する原因になることもあります。 プログラム作成者の考え方にもよりますがコロンはどうしても 省略したいという状況で無い限りは省略しない方がいいと 自分は考えます。
1そうだね
プレイ済み
返信[18]
親投稿
こうやま kouyama1967
 一番昔のホビーコンピュータ用BASIC(ビル・ゲイツやスティーブ・ジョブズがそういうのを自分で作っていた頃です)は間を開けず、たとえば「FORI=0TO7…」などと書けました。  日本ではNECのPC-8801(現在使われているWindows用パソコンに割と近い機能も、88のあたりから入り始めました)で初めて、「FOR I=0 TO 7…」などと間を開けないと、エラーが出るようになりました。ちなみにWHILE~WENDも88が初搭載です。  上のほうで書いたVB(ブイビー)では、間を詰めて書いても、パソコンが自動的に間隔を開けてくれるようになっています。
1そうだね
プレイ済み
返信[19]
親投稿
けい kei0baisoku
>nobuさん ありがとうございます(^O^) 少数派であっても、広く色々な人の考えを知ることがまず大切だと思います。 ちなみに、この「インデントや空行が分からない」というのは比較的メジャーな質問だと思いますよ(^O^)
0そうだね
プレイ済み
返信[20]
親投稿
nobu divine-creator
これってメジャーな質問だったのですか?(私としては、普通の人は疑問に思わないような細かい点かと思ったのですが…。) 他のコミュニティで、他の人が気にしないような細かい指摘をしては、スルーしてください…と言われることが多かったため、これも細か過ぎる疑問かと思ってしまいました…。 とりあえず、1つの疑問が解決できて良かったです♪
0そうだね
プレイ済み
返信[21]
親投稿
けい kei0baisoku
そうですね。最近他のところでも似た話題があった気がするのと、覚えたての人だとなぜインデントやスペースがあったりなかったりするのか分からないはずです。 大抵の人は気にせず、詰めて書きますね。 で、しばらくしてからインデントの便利さに気付くか指摘されて使い始めます。 細かいところを気にするというのは、プログラムに向いてるのかも知れませんよ(^O^)
0そうだね
プレイ済み
返信[22]
親投稿
nobu divine-creator
私が気になる細かい点は、主に言葉や表現などについてなので、記号や数字の羅列に対しては拒否反応が…(>_<)。 プログラムには向いていないと思います…。(関数とか聞くと、逃げ出したくなるので…w。)
0そうだね
プレイ済み
返信[23]
親投稿
けい kei0baisoku
ああ、数字の拒否反応(^O^) LAMPさんも全く同じことを言ってました。確かにそれでプログラム挑戦するのは大変だとは思います。 私は幸い数字は苦でないですが、実は絵を描くのが苦痛です。多分、こんな感じなんだろうなーと想像してます。
1そうだね
プレイ済み
返信[24]
親投稿
otta777 otta777a
>こうやまさん 昔のBASICは変数名の文字数が1~2文字という制限があったため 命令と変数名をくっつけて書いてもそんな長い変数名は処理 できない為命令と変数名と判別されるんですよね。 例 FORI=1TO5 FORIという変数は処理できない為FOR命令と変数Iと判別可能 変数の文字数の制限が緩くなって命令と変数名をくっつけて 記述した場合に全体が変数名と編別されるようなりました。 命令語を含む変数名を使用できない仕様ならくっつけて書いても 判別できますが変数名の命名の自由度が下がり可読性も落ちる ためメリットよりデメリットが大きくそのような仕様にならなかった のだと思います。
0そうだね
プレイ済み
返信[25]
親投稿
スー thanks_0u0
加減乗除以外の数学は一体何の役に立つのかよくわかっていない、英語のサイトなど1段落たりとも読む気にならない、あまつさえ他人のコードも全然読まない不勉強な私ですが、プログラムはコンピュータさんと対話するための言葉だと思えるので意外に続いています(´ω`) PRINT"こんにちは"、って入れたらコンピュータさんが挨拶してくれますし、TALK"こんにちわ"、って入れると喋ってくれます。 この2つの命令だけでも、ちょっとしたお話を表示して読み上げてくれる、というプログラムが出来ますし、難しいことはとりあえず後回しにして、コンピュータさんと遊んでみるのも良いかもしれません( ´ ▽ ` )ノ 辛い勉強はしなくても、今できること、を楽しめるようになればきっと少しずつ理解が進むと思います。私はそんな感じでした。 質問回答ではなくてごめんなさい。
1そうだね
プレイ済み
返信[26]
親投稿
nobu divine-creator
スーさんへ 質問の回答でなくても、貴重なご意見はありがたいです♪ 入力して動いてくれれば良いのですが、ただエラーと表示されたり無反応だったりすると、どうしたら良いのだろう?となりませんか? そういう場合は、Miiverseで聞けば良いというのは分かりますけど、目の前のコンピュータはヒントも教えてくれないので、悲しいです…(>_<)。
0そうだね
プレイ済み
返信[27]
親投稿
スー thanks_0u0
実はコンピュータさんはヒントをちゃんと教えてくれていて、エラーが出た場合「エラーの内容 プログラム何番の:何行目か」って感じで教えてくれています。 例えば、「Syntax error in 0:3」ならコンピュータさんは「プログラム0番の3行目に文法のエラーがあるよ」と言っています。行数は当てにならないかもですけれど(´=ω=`) 無反応の場合、コンピュータさんは「ちゃんと言われたことやりましたけど?」って思っている場合が殆どだと思います。 コンピュータさんは融通も気も全く利かなくて、真面目だけが取り柄です(だからこそ思った通りにいかない場合はお願いの仕方が悪い、と思えるのですけれど)。 例えば、計算をしても、「表示して」とお願いしないと結果を教えてくれなかったりします。その辺りはコンピュータさんの癖なので、miiverseで癖を知っている方に聞くのが良いと思います(´ω`)
1そうだね
プレイ済み
返信[28]
親投稿
nobu divine-creator
正確に申し上げると以前から気になっていた疑問ですけど、新たな疑問が複数あるので、それらを1つずつ解決していきたいと思います! まずは、ACLSとCLSの違いがよく分かりません…!ほとんど同じ効果のように思えるのですが、その微妙な違いは何なのでしょうか?
0そうだね
プレイ済み
返信[29]
親投稿
スー thanks_0u0
ACLSとCLSは実は結構違いますよー( ´ ▽ ` )ノ CLSは「文字だけを消す」命令で、絵やキャラクターなどは消去出来ません。 ですがACLSは全部消してしまいます。文字も絵もキャラクターも背景も消して、画面の設定やキャラクターの定義まで元に戻します。 実はACLSは沢山の命令をセットでやってもらうための命令で、CLSもその中の一部に入っています。ACLSと打って?ボタンを押すと、何の命令のセットなのかが詳しく見られます。 使い方としては、ACLSは最初に一度だけ書いておくと、前に実行したプログラムが画面に残っている場合にお掃除してくれて、CLSはプログラム中に文字を書き換えたりするときに画面をお掃除してくれる感じです。
1そうだね
プレイ済み
返信[30]
親投稿
nobu divine-creator
凄く分かりやすい解説ありがとうございました♪ CLSは文字だけを消す…って、衝撃的でした!(←クリアスクリーンじゃないじゃん…って、ツッコミたくなりましたw♪)
1そうだね
プレイ済み
返信[31]
親投稿
こうやま kouyama1967
 凄く昔のマイコンにはCLSがなく、PRINT CHR$(12)をやっていました。CLSは多分日立のベーシックマスターレベル3からだと思います。  初代プチコンにもCLSやGCLSはありましたが、新しいプログラムを実行する時、CLSをしても画面表示などがいろいろ残ってしまう問題点が明らかになりました。  そこでプチコンmkIIからはACLS(All CLear Screen)が追加されました。  プチコン3号も当初はACLSが無かったんですが、東京ゲームショウの体験版でACLSが無い事にとまどいが多発し、急きょACLSが実装されました。
0そうだね
プレイ済み
返信[32]
親投稿
スー thanks_0u0
CLSとACLSにそんな歴史が…!横からですけれど、ひとつ賢くなった気分です。ありがとうございます( ´ ▽ ` )ノ
0そうだね
プレイ済み
返信[33]
親投稿
nobu divine-creator
こうやまさん…、まさかそのような秘密があったとは吃驚ですΣ(゚Д゚)! それって、プログラミングに詳しい方々でもご存知ないかもしれないほどの情報ですね!
0そうだね
プレイ済み
返信[34]
親投稿
nobu divine-creator
文字に関しても複数の疑問があるのですけど、表示される文字の大きさを変えることはできますか? プログラムを入力する際には、今のままでも問題ありませんが、プログラムを実行する際に、現在(デフォルト)よりも少し大きめのサイズに表示できたほうが見やすいと思いました! その方法が無ければ仕方ないですけど、あるならば文字のサイズを変更できるようにしたいです♪ それと、できれば漢字を使いたいのですが、何だか特定の条件下でのみ使えるそうですね…。 説明書を読んでみても、そのことについてよく分からないのですが、タイトルや本文で漢字を使用する良い方法はありますでしょうか?
0そうだね
プレイ済み
返信[35]
親投稿
otta777 otta777a
コンソール文字の大きさは固定です。大きく文字を表示する方法は BGを利用する方法があります。キャラクターコードの&H20~&H5F の文字が16ドット×16ドットのフォントで定義されています。 この方法では数字、アルファベット大文字、一部の記号のみしか 表示できません。 もう一つはBGFリソースを利用する方法です。 上画面、下画面、スプライト、BGで利用していないグラフィック ページの2か3にフォントのグラフィックを読み込んでおいて 8ドット×8ドットのフォントデーターをGSPOIT関数でドットの有り、 無しの情報を読んで任意の倍率でGFILLで描写する方法です。 表示に時間が掛かることとキャラクターコードからフォントが 描かれている位置を特定する方法が複雑なのが難点ですがほ ぼ全てのキャラクターが3倍以上の倍率で表示可能です。
0そうだね
プレイ済み
返信[36]
親投稿
otta777 otta777a
上画面に漢字を表示する機能は標準では対応していません。 unicodeというダイアログボックスで漢字を表示するために 指定するキャラクターコードは上画面では白い四角に×マークの 文字に置き換えられてしまうためです。8ドット×8ドットでは充分な 可読性のある文字が表示できないとスマイルブーム社が判断した 為だと思います。 有る方がフリー素材の7ドット×7ドットの美咲フォントのデーターと それを表示するプログラムを公開して下さったため、プチコン3号でも 漢字混じりの表示ができるようになりました。利用方法は同梱 されているサンプルプログラムを参照することになると思います。 自分も興味は有るんですが、まだこちらのプログラムの仕様は 把握していないためこの程度のことしか分かりません。
0そうだね
プレイ済み
返信[37]
親投稿
スー thanks_0u0
otta777さんのおっしゃるように、文字を大きくするのは、なかなか複雑な手順が必要になります(u_u) 他の代替手段には、自分で文字のグラフィックを描いて、GCOPYやスプライトとして表示する方法や、四角や三角などの記号文字を組み合わせて大きな文字にする方法があります( ´ ▽ ` )ノ 他の方のタイトルを見ていると、記号の組み合わせで文字を作る方法でも、なかなか見栄えの良いタイトルが作れるみたいです。
0そうだね
プレイ済み
返信[38]
親投稿
けい kei0baisoku
詳しくはotta777さんとスーさんのおっしゃってる通りですが、かなり高度な話も多いです。初心者の人向けに結論だけ抜き出しますと、 ・文字大きく→ストレートにはできない ・漢字→DIALOGという命令 ・タイトルで漢字→記号を並べてアスキーアート です。 多分、一番下のタイトルを描く方法だけ今のnobuさんが作るものに取り入れられます。PRINTという命令とLOCATEという命令で、位置を指定しながら■や▲や線などの記号を並べて、結果的に大きな字に見えるように出来ます。(要はアスキーアートです)
0そうだね
プレイ済み
返信[39]
親投稿
nobu divine-creator
otta777さん、専門的な詳しい情報をありがとうございました♪ スーさん、補足情報をありがとうございました♪ けいさん、初心者向きのまとめをありがとうございました♪ 皆さんのおかげで、自分にできそうなことから、最終的な目標までの概要が分かりました! ただ、アスキーアートすら未経験で、難しいと感じるため、現状で可能なことは無さそうです…。 格好いいタイトルには憧れますが、余裕の無い状態では、後回しにせざるをえないって感じです…。
0そうだね
プレイ済み
返信[40]
親投稿
けい kei0baisoku
そうですね。書き忘れてましたが、必要最低限のところだけ作っていき、クオリティアップは形ができあがってから行うというのは、進め方のセオリーです。 妥協ではなく、それがベターと思います。 なぜなら、はじめからあれもこれも詰め込もうとすると、山が大きすぎて途中で挫折する可能性が高いのです………(´з`) 結果的にやるにしても、まず最低限のゴールまで突き進んだ方が圧倒的にやりやすいです。
1そうだね
プレイ済み
返信[41]
親投稿
nobu divine-creator
時すでに遅し…かもしれません…!(説明書などを参考にして、分かったところから入力し始めたら、何だか凄い状態になりかけてしまいました…!) 詰め込み過ぎに近い状態になってしまっているかもしれません…!(それでも、まだそんなに多くの行を使ってはいませんが…。)
0そうだね
プレイ済み
返信[42]
親投稿
けい kei0baisoku
初めてなのですから、誰がやってもすっきり綺麗には難しいと思います(^O^) 本番兼練習だと思って、試行錯誤しながら頑張って見てください(^O^)
0そうだね
プレイ済み
返信[43]
親投稿
nobu divine-creator
今度はラベルについての疑問なのですが、公式の命令一覧表に「ラベルにラベル文字列は使えない」という記述が多く見られますけど、「ラベルには任意の文字が使える」と説明書で読みました…。これは、一体どういうことなのでしょうか? ラベルとラベル文字列の違い(?)というか、関連性(?)がよく分かっていません…。 この質問自体が分かりづらい気もしますけど、何とか回答が可能な方がおりましたら、こちらにコメントをよろしくお願い致します…!
0そうだね
プレイ済み
返信[44]
親投稿
けい kei0baisoku
それは恐らく、命令表の日本語の分かりづらさが原因ですね。 命令表の、具体的にどの記述か一例を出した方が伝わりやすいかも知れません。
0そうだね
プレイ済み
返信[45]
親投稿
otta777 otta777a
ラベルにラベル文字列は使えないというのはGOTOやGOSUBで 指定する飛び先のラベルは文字列でも指定できるけど 飛び先を示すラベルはラベル文字列を指定することはできない という事ではないでしょうか? JMP$="@SUB" GOTO JMP$ はOKでも JMP$ PRINT JMP$ のようなことはできないと言うことではないかと思います。
1そうだね
プレイ済み
返信[46]
親投稿
otta777 otta777a
ラベルに使用できる文字については数字、アルファベット、 アンダーバーのみでアルファベットは大文字小文字は区別 されません。 ピリオドは文字の色がラベル名と同じ色になりますが、プログラムを 実行するとSyntax errorになります。
1そうだね
プレイ済み
返信[47]
親投稿
nobu divine-creator
「GOTOジャンプ先ラベル名」のラベル名は「アットマークから始まる任意の英数字」と説明書に書かれています!(⇒それは自由に考えた英数字で良いという意味になります!) それに対して、「ON~GOTO(GOSUB)」や「IF~THENなど」の時は、「ラベルにラベル文字列は使えない」と命令表に書かれています! その「使えないという場合の意味」が分からなかったのです…!
0そうだね
プレイ済み
返信[48]
親投稿
スー thanks_0u0
ややこしいですけれど、ラベル名は、@AAA、のように直接ラベルを指定するもので、ラベル文字列は、"@AAA"、のようにラベル名を文字列にして指定するものだと思います(´ω`) ですので、GOSUB "@AAA"、は良いけど、ON B GOSUB "@AAA","@BBB"、はいけません、と言うことだと思います。ラベル文字列はotta777さんの上の例のような文字列変数でも大丈夫です。 ちなみに、ラベル文字列を使う理由は、文字列を加工することでジャンプ先が変更できて便利、という理由が多いかな、と思いますので、慣れないうちは普通にラベルを指定するだけで十分だと思います(*´∨`*)ノ
1そうだね
プレイ済み
返信[49]
親投稿
けい kei0baisoku
理解しました。結論としてはまず、「使えない」のはIFとONの、2つの命令限定の話です。基本的にほかは使えるようです。 で、何が使えないのかと言いますと、ここで変数が関わってきます。 ラベルは例えば @LABEL ですが、これを文字列変数にいれて使うこともできます。 (例) GOTO @LABEL S$="@LABEL" GOTO S$ どちらのGOTOも全く同じになります。 ほとんどの命令はこの2パターンのどちらでも使えるのですが、例外的に、変数を介す方が使えない命令があります。それがIFとONです。
1そうだね
プレイ済み
返信[50]
親投稿
nobu divine-creator
分かりやすい解説ありがとうございました♪ ラベルとラベル文字列の微妙な違いが何とか分かりました!
0そうだね
プレイ済み
返信[51]
親投稿
けい kei0baisoku
あっ!すみません! 私勘違いしてました! 変数は関係無いです。スーさんのいう通り、ダブルクォートで囲んだタイプが使えるか否かです。
0そうだね
プレイ済み
返信[52]
親投稿
otta777 otta777a
IF~THENでラベル文字列が使えないのはGOTOを省略した 場合です。IF~THEN GOTO ラベル文字列は問題無く 使用できます。 ON~GOTO(GOSUB)でラベル文字列が使えないのは ラベル文字列で変数を使用すれば飛び先を変更できるのに わざわざ変数の値で飛び先を複数指定するのは内部的な 処理が煩雑になるため非対応としていると考えられます。 元々ON~系の命令はGOTOやGOSUBの飛び先が変数を指定 できない仕様のBASICでIF文を羅列せずに記述するための 命令でした。
1そうだね
プレイ済み
返信[53]
親投稿
nobu divine-creator
otta777さんのプロフィールに、プチコン3号はまだまだ手探りで使い方を覚えている最中…と書かれておりますが、すでに充分ご理解されているみたいですね…♪ そのおかげで、凄く深い知識を得られ、大変ありがたいです♪
0そうだね
プレイ済み
返信[54]
親投稿
otta777 otta777a
>nobuさん BASIC自体は長く使ってるんでそこそこ経験があるんですが プチコン3号はスプライト、BG、ユーザ定義命令、関数が使える などと独自仕様が満載なんでそのあたりはまだまだ勉強中 なんですよ。自分も他の方の疑問や質問を見て気付かされる ことが有るんで勉強させて頂いています。
1そうだね
プレイ済み
返信[55]
親投稿
nobu divine-creator
素朴な疑問なのですが、「PRINTは?で代用可能」というのは覚えましたけど、何故そうなのでしょうか? 「?」は不明な事を表すイメージが強いのに、「文字を表示する命令」になっているって、少し奇妙な感じがしますね…。 それに、「疑問文の?」と間違えそうになりませんか?
0そうだね
プレイ済み
返信[56]
親投稿
otta777 otta777a
自分もPRINTは?で代用可能と教えられた世代なので詳しい理由は 分かりません。 昔のコンピュータはスプライト、BG、グラッフィックも搭載されて おらず画面表示はPRINT位しか手段がありませんでした。 そのためPRINT命令は頻繁に使う命令だったので入力文字数を 減らすために一文字の記号の?に置き換えたのだと思います。 プチコン以外のBASICですと?を入力してもLISTを表示すると PRINTに書き直されるものが多いです。
1そうだね
プレイ済み
返信[57]
親投稿
こうやま kouyama1967
 昔のBASICでは「?」と入力すると「PRINT」に置き換わりました。実はプチコンでは「?」を実装する予定は無かったものの、開発した方が隠しコマンドとして入れたのがそのままになって、PRINTに置き換わらず「?」のままになったそうです。  また注釈文も、昔はREM(Remark=「ふたたび記す」の意味)と書きましたが、NECのPC-8001から「'」も使えるようになり(これはREMには置き換わらない)、現代の高級言語ではどれも「'」です。  最後に代入もA=1とかでなく、昔は「LET A=1」でした。
1そうだね
プレイ済み
返信[58]
親投稿
nobu divine-creator
otta777さん&こうやまさん、ありがとうございました♪ PRINTと?については理解できました! ところで、文字列変数というのは、どういう目的で使用するのでしょうか? 文字列を足して表示できるということは理解しましたが、それならPRINTで文字列変数と同じ内容を表示するのと変わらない気がしてしまうのですけど…変数ならではの使い方があるのでしょうか?
0そうだね
プレイ済み
返信[59]
親投稿
otta777 otta777a
もし文字列変数が使えず文字列定数しか扱えないとすると 名称などを扱おうとしたときに非常に煩雑なプログラムが 必要になります。 A$に教科名を代入してPRINT A$で表示する部分も Aに教科名に対応する数字を代入して IF A==1 THEN PRINT "こくご ” IF A==2 THEN PRINT ”さんすう” IF A==3 THEN PRINT "りか  ” IF A==4 THEN PRINT "しゃかい" としなくては表示できなくなります。 文字を扱う必要がある場合に簡潔に表記するためには 文字列変数は必要な機能でした。
1そうだね
プレイ済み
返信[60]
親投稿
nobu divine-creator
文字表記についての別の疑問ですが、PRINTは文字を表示する時に使い、INPUTは文字の入力を求める時に使いますね! では、表示した文字(選択肢)を選ばせる時には、何をどのように使えば良いのでしょうか?
0そうだね
プレイ済み
返信[61]
親投稿
otta777 otta777a
方法はいくつかあります。一番簡単なのがINPUT命令で文字列に 対応する数字を入力させる方法です。 PRINT "1.こくご 2.さんすう 3.りか 4.しゃかい" INPUT ”きょうかめいは”;A 他にはドラクエのように十字ボタンで矢印を上下してAボタンで する方法です。(続く)
1そうだね
プレイ済み
返信[62]
親投稿
otta777 otta777
サブマシンから投稿します。あらかじめ文字配列変数に選択内容を代入して十字ボタンでカーソルを移動してAボタンで決定します。
1そうだね
プレイ済み
返信[63]
親投稿
nobu divine-creator
十字ボタンでカーソルを移動してAボタンで決定させるには、これほどのプログラムになるのですね!(初心者がこれを可能になるには、どれほどの時間がかかるのでしょうね…。) 徐々にプログラムの入力法を学習していますが、やはり大変ですね…。 とりあえず、簡単な方法を使用したいと思います!
0そうだね
プレイ済み
返信[64]
親投稿
スー thanks_0u0
今は読んでもピンと来ないかもしれませんけれど、ヒントになるかもしれませんし、otta777さんのプログラムの日本語訳?を書いてみますね。きっとそのうち分かりますよ♪( ´▽`) 画面の初期化 項目名を入れる箱=A$の準備 実際に使う項目名をA$に入れる カーソル位置を入れる箱=Aの初期化 FORで位置を変えながらA$に入っている項目名4つを表示 ボタンループの開始、Aボタンが押されていたらループやめる ボタンの取得=BU、前のカーソル位置=OAを今のカーソル位置=Aに 上ボタンが押されていたら今のカーソルを上に 下ボタンが押されていたら今のカーソルを下に 前のカーソル位置に空白を表示、今のカーソル位置に指マークを表示 VSYNC ループの始めに戻る 選択された文字=B$にカーソル位置の項目名=A$[A]を入れる 結果文の表示 END
2そうだね
プレイ済み
返信[65]
親投稿
nobu divine-creator
otta777さん&スーさん、ありがとうございました♪ 今は何が何だか分からない状態ですが、後で復習したいと思います! それと、表示させた文字を消したい時は、どのような命令を入力したら良いのでしょうか? 画面全体を消さずに、入力して表示させた数字のみを消したいのですが、部分消去の命令の仕方が分かりません…。
0そうだね
プレイ済み
返信[66]
親投稿
otta777 otta777a
表示している文字を消すということは空白で上書きをすれば OKです。簡単に消すなら空白の文字列を文字を表示している 位置に表示します。CLSをしたときと同じように消す場合は CHR$(0)の文字列を表示して下さい。 見た目は同じなんですがCHKCHR関数で調べたときに空白だと 32が返ってきます。
1そうだね
プレイ済み
返信[67]
親投稿
nobu divine-creator
otta777さんに教えていただいた方法を試してみましたが、何故か上手くいきませんでした…!(恐らく私の理解力不足で、入力の仕方を間違えてしまったからだと思われます…。) ただ、それを行っている際に、今回のプログラムでは分岐させないほうが良いと気付いてしまったので、今すぐに選択肢による分岐方法を習得しなくても何とかなるようになりました!(近いうちに学ばなければなりませんが、とりあえずは後回しにしたいと思います!) また、文字を部分的に消す方法も失敗してしまいましたが、こちらも全体を消すほうが都合が良いと分かったので、同様に後日改めて習得したいと思いました!(せっかく教えていただいたのに、活かせなくて済みませんでした…!)
0そうだね
プレイ済み
返信[68]
親投稿
nobu divine-creator
それよりも今すぐに知りたいのが、ENTERキーまたはAボタンを押した時だけループするという分岐方法です! すでにループする場所の指定とボタンが押されなかった時に終了するというプログラムは入力済みですが、ボタンが押された時だけループするという命令の仕方がよく分かりません…。 「指定したボタンが押された時だけ」という条件付けの仕方を知りたいのです!よろしくお願い致します!
0そうだね
プレイ済み
返信[69]
親投稿
otta777 otta777a
これは何らかの入力待ちをしている状態でAボタンだけまたは ENTERキーだけを押したときだけループということでいいの でしょうか? @1 IN$="":BT=0 WHILE INKEY$()!="" OR BUTTON(0)!=0:WEND WHILE IN$=="" AND BT==0 IN$=INKEY$():BT=BUTTON(0):VSYNC WEND IF IN$==CHR$(13) OR BT==16 THEN GOTO @1 END キーとボタンが何らかの入力をされるまでWHILEでループをして 押されたキーがENTERだけかAボタンだけだった場合は@1に ジャンプします。 それ以外はループを抜けます。
1そうだね
プレイ済み
返信[70]
親投稿
nobu divine-creator
済みませんが、またもや疑問が残る展開になってしまいました…! ENTERキーを押した時は上手くいくのですけど、Aボタンを押した時は1回で戻らず、2回押さないと戻りませんでした…。(ただ、これはENTERを押してくださいというメッセージを表記することで解決できるとも言えます♪) それよりも問題なのは、何も押さなかった時に自動的に終了せずに、そのままになってしまうことです…。 STARTボタンを押すようにメッセージを表記することで、一応クリアできますが、できれば何も押さないで待っていると、終了のメッセージが出て終わるという仕様にしたいので、どこかを書き換えれば良いのは分かりますけど、どこをどう変えたら良いか分かりません…。(教えていただいたプログラムを、どのように考えられたのかが全く理解できておりません…(>_<)!)
0そうだね
プレイ済み
返信[71]
親投稿
スー thanks_0u0
確認したわけではないのですが、otta777さんのプログラムを間違いなく打ち込めば、ENTERとAボタンが同じような処理になっているので、Aボタンは1回押せばループするような気がしますよー。何か変えている場合、その部分で挙動が違っているのかもしれません。 ボタンやキーを取得するには、WHILEなどのループで毎フレームチェックしてあげる必要があるので、nobuさんのやりたい処理かどうかはわかりませんけれど、とりあえずメインループとは別にボタン取得ループを回して「AボタンかENTERキーを押したらメインループに戻る」「一定時間経ったら終了する」という2つの条件を入れてみたらどうかな、と思いました(´ω`)
1そうだね
プレイ済み
返信[72]
親投稿
スー thanks_0u0
多分これで、何かの処理の後、10秒待って、その間にAかENTERで戻る、ということが出来ると思います♪( ´▽`) 私の理解力が足りなくてnobuさんのやりたい処理と違っていたり、よくわからなったら、また質問してくださいませ。 @START 〜何かの処理 LOCATE 0,0 ?"10びょう いないに AかENTERで もどる" FOR I=0TO 599 '60フレームが1びょう BT=BUTTON(0):KY$=INKEY$() IF BT==16||KY$==CHR$(13)THEN GOTO @START VSYNC NEXT LOCATE 0,0 ?"ボタンが おされなかったので しゅうりょう します" END
1そうだね
プレイ済み
返信[73]
親投稿
スー thanks_0u0
あ、BASICでは、ループが完結しないまま終わるのはあまり良くない、という話もありますので、気になる場合はこのように変えてくださいませ。 @START 何かの処理〜メッセージ FLG=0 FOR I=0TO 599 BT=BUTTON(0):KY$=INKEY$() IF BT==16||KY$==CHR$(13)THEN FLG=1:I=600 ENDIF VSYNC NEXT IF FLG==1THEN GOTO @START メッセージ END I=600は、Iが599までならループをするFORを、強制的に抜けてしまうための処理です。また、IF BT==16||〜、の縦棒は、プチコンだと真ん中に切れ目の入った縦棒になります。 余談ですけれど、少し変えるとFLGの代わりにIをそのまま使ったりも出来ますよ( ´ ▽ ` )ノ
1そうだね
プレイ済み
返信[74]
親投稿
otta777 otta777a
私が記述したプログラムではボタンもキーも押されていないと 押されるまで入力待ちをしています。これがnobuさんの 望んでいた処理とは違っていたようですね。 「キーやボタンを押していない場合」と「Aボタン以外のボタンを 押した場合」と「ENTERキー以外のキーを押した場合」の処理は プログラム終了とするのでしたら WHILE IN$=="" AND BT==0 WEND を削除して下さい。
0そうだね
プレイ済み
返信[75]
親投稿
nobu divine-creator
重ね重ね済みません…!スーさんのプログラムを入力してみようとしたところ、「Iに似た縦棒」がどのキーなのか分からず、「真ん中が空いている縦棒」が一つなのか二つなのかが分からず、正しく入力ができませんでした…! otta777さんが追記されたように、二つの行を削除してみましたら、何故か正しいボタンを押しているのに終了へ進んでしまいました…! 私が最初のプログラムから変更したのは、アットマーク1をLOOPに変えて、自分が戻したい箇所にアットマークLOOPを置いていることだけで、あとは全てそのまま入力したのですけど、それでも問題になってしまうのでしょうか?
0そうだね
プレイ済み
返信[76]
親投稿
nobu divine-creator
それとですね…、少しだけ方式を変更して、何も押されなければそのまま待ち、STARTボタンが押された時だけ終了へ進む…という方式にするには、どのようにしたら良いでしょうか? この方式のほうが、より良いと気付きました!
0そうだね
プレイ済み
返信[77]
親投稿
otta777 otta777a
>nobuさん 正しいボタンを押しても終了してしまうということは IN$=INKEY$():BT=BUTTON(0):VSYNC か IF IN$==CHR$(13) OR BT==16 THEN GOTO @1 の部分が上手く動作していないように感じます。 プログラム編集中のスクリーンショットは貼れますか? スーさんのプログラムで使われている|の記号はキーボードの Aの左の記号です。
0そうだね
プレイ済み
返信[78]
親投稿
スー thanks_0u0
縦棒は、キーボードの「A」の左にある変な縦棒を2本、です♪( ´▽`) わかりにくい書き方をしてしまってごめんなさい。そして、BUTTON(0)をBUTTON(1)にしないとすごい速度でループしてしまいます(u_u) 先ほどotta777さんの最初に書いたプログラムを確認してみたのですけれど、きちんとループしていますよー。 私の書いたものは、一定時間内にボタンが押されたらループ、一定時間放っておくと終了、という処理で、otta777さんのものは、AボタンかENTERが押されたらループ、それ以外のボタンで終了、という処理になっています。 ちなみに、プチコンではSTARTボタンは強制終了(中断)に使うので、特になにもプログラムしなくても終了します(´ω`)
1そうだね
プレイ済み
返信[79]
親投稿
nobu divine-creator
スーさんの「真ん中が空いている縦棒」の位置は分かっていたのですけど、それを二つ入力するのかどうかが分からなかったのです…。(二つに見えるのですけど、棒が分かれていることを示しているのか、同じ記号を二つ入力するのかで迷いました…。) それと、FORのすぐ後はアルファベットのIですか?それとも、縦棒の記号ですか?(縦棒の記号ならば、どこにあるのでしょうか?) ただし、この質問のプログラムは今回使用しないので、知識として覚えておくだけですが…。
0そうだね
プレイ済み
返信[80]
親投稿
スー thanks_0u0
FORのあとは、アルファベットのiですー。これはFORのループ条件の判定に使う変数、っていう意味なので、例えば、 FOR CNT=0 TO 599 〜 NEXT でもバッチリ動きます( ´ ▽ ` )ノ
1そうだね
プレイ済み
返信[81]
親投稿
nobu divine-creator
STARTボタンを押した後に、何かを表示したりというのは不可能なのですね!分かりました♪ それなら、現在の状態で何も変更しなくて良いということになりました! 今回使用しなかったプログラムは、別の作品で必要になると思いますので、その時に詳しく学びたいと思います! お二人ともありがとうございました(^▽^)♪
1そうだね
プレイ済み
返信[82]
親投稿
スー thanks_0u0
ちなみに、otta777さんのプログラムから指定の2行を削除すると、ボタン取得ループがなくなってしまうので「その一瞬に押されているかどうか」での判定になってしまいます。 なので、正しいボタンを押していても、タイミングが違うと終わってしまうのだと思います。
1そうだね
プレイ済み
返信[83]
親投稿
nobu divine-creator
WAITの待ち時間も短過ぎたり長過ぎたりと、何度も試して調節しましたが、入力も早過ぎたり遅過ぎたりすると上手くいかないのですね…! その辺も、やはり慣れが必要なのですね♪
0そうだね
プレイ済み
返信[84]
親投稿
nobu divine-creator
それにしても今回、お二人のプログラムを拝見して、似たような処理をするのに書き方が色々とあり、それを初心者が身に付けるにはどうしたら良いのかということが、苦手意識の克服のカギになりそうだと感じました! けれど、今回は苦手意識を増してしまった気がします…。(何でこのようなプログラムになるのか殆ど理解ができませんでした…。)
1そうだね
プレイ済み
返信[85]
親投稿
けい kei0baisoku
nobuさんのコメントを読んで、プログラムをはじめ覚えるのが大変なのが、正解じゃないと動かない癖に正解がないからじゃないかなぁと、ふと思いました。 覚え方の好みは人によって違うみたいですが、 ・分からなくても取り合えずどんどん試して経験量で段々理解する ・理解は重視せず参考にできるものをそのまま取り入れていく ・分かるまでは手を出さず、必ず理解してから次へ進む。 のようなタイプが多いでかね。 私が色んな人を見た印象ですと、一つ目の体当たりタイプが成長は一番早いです。が、それを面と向かって勧めたら「いやだ。完璧に理解してから次へいく」と拒否られました(^O^) 好みとか向き不向きもあるので、人間は枠にはめられないですね。
2そうだね
プレイ済み
返信[86]
親投稿
スー thanks_0u0
英語や日本語で同じような事柄を表すのにも色々な言い方があるようなものですので、あまり難しく考えなくても大丈夫ですよー(´=ω=`) 何故このようなプログラムになるか、っていうのは個人個人の発想の違いがあるのですけれど、私の場合「AボタンかENTERが押されていたらループ、何も押さなかったら自動で終了」を「一定時間の間にAボタンかENTERが押されていたらループ、そうならなければ終了」に直して、「一定時間待つ間に」「ボタンとキーを取得して」「取得したのがAボタンかENTERなら」「ループにもどる」「プログラムがその先に進めば終了」と分解してから、BASICの命令に翻訳したような感じです。 初めは知っている命令が少ないので分解が難しいですけれど、BASICにどんな命令があるかがわかってくるにつれて、「こう分解すれば作れそう」っていうのもわかってくるのですよー♪( ´▽`)
2そうだね
プレイ済み
返信[87]
親投稿
スー thanks_0u0
「こういうときはどういう処理にしたら良いですか?」って聞いてしまうと、どうしてもプログラムの塊がもそっと返ってきちゃうのですよね(´=ω=`) その中には知らない命令やわからない考え方がたくさん入っているので、パッと見て「これは何っ!?」って混乱してしまうのもよくわかります(u_u) 命令命令について小さなプログラムで確認していくと混乱はちょっと少ないかなって思います。例えば下のものは、Aボタンだけが押されているとメッセージを出す、というプログラムです。きっとさっきのよりはわかりやすいかと…! ACLS WHILE 1 BT=BUTTON(0) CLS:LOCATE 0,0 IF BT==16THEN ?"いまAボタンだけを おしています" VSYNC 1 WEND
1そうだね
プレイ済み
返信[88]
親投稿
nobu divine-creator
そうですね♪正しく入力しないとエラーになってしまうのに、意外と細かいことを気にしなくても正しく認識されるという矛盾しているような感じが謎ですね…! そして、体当たりタイプが一番早いのは当然ですね♪確かに、失敗を繰り返すうちに諦めてしまう危険性があります(挫折してしまいやすくもあります)が、誰かに尋ねて教えてもらえれば、一番理解が早いと思います! じっくり理解してから進むタイプは、進みが遅い代わりに挫折は少ないですね♪ 参考にできるものを取り入れていくタイプは、一見早そうですが、実は一番理解度が低いです!お手本のおかげで進みが早いですけど、理解が追い付いていないため、応用力がありません! 今回私が教わったプログラムをそのまま入力したというのがそのパターンで、同じプログラムを自分では考えられない状態です…!それでは、実力がほとんどアップしていないダメな状態です…(>_<)!
1そうだね
プレイ済み
返信[89]
親投稿
けい kei0baisoku
くっきりどれかに分かれたりはっきり○×がつくものでもなく、バランスの問題かなと思います。 あと、私の印象ですがnobuさんは一番下のように、まず理解しようとするタイプに感じます。外からのものをそのまま使う人は「なぜこうなっているのか?」といった疑問をあまり持たないし、あえて質問したりもしないです。 プログラムって、理解して自分のものにしないと使えないのはその通りなのですが、しかしベテランにならないと理解できないようなものもはじめのうちから使う必要がある、いわゆる「分からなくても使えればいい」ものもたくさんあって、この辺の判断がなかなか難しいのかもしれません。
3そうだね
プレイ済み
返信[90]
親投稿
nobu divine-creator
数字を扱う時に、カンマ(,)を付けたほうが見やすくなると思いましたが、3桁毎に自動的に付くようにすることはできますか? 操作をする人が自由に数字を入力するのに合わせてカンマ(,)が付くというのは、初心者には難し過ぎる気がしますけど、可能ならば付けたいところです…! あまりに高度な技術が必要であるなら、今回は諦めたほうが無難かもしれません…。
0そうだね
プレイ済み
返信[91]
親投稿
otta777 otta777
それらしい動作をするプログラムを作ってみましたか難しいでしょうか?
0そうだね
プレイ済み
返信[92]
親投稿
otta777 otta777a
入力した数字のみを入力記憶用文字列に結合していって 表示をするときは入力記憶用文字列を右側から1文字ずつ 表示用文字列に結合をして3文字ごとにカンマも結合する ことで3桁ごとにカンマが付いた表示にしています。
1そうだね
プレイ済み
返信[93]
親投稿
nobu divine-creator
1行目と14行目の四角い記号をプログラム中に使用することがあるのですねΣ(゚Д゚)!(これはそのまま入力すれば良いのでしょうか?) とりあえず、これから入力して動かしてみます!
0そうだね
プレイ済み
返信[94]
親投稿
otta777 otta777a
文字を入力する位置を示す記号でカーソルといいます。 今回は自分の趣味で市松模様の四角にしましたが表示だけ なので同じキャラなら他のキャラでも問題無いです。
1そうだね
プレイ済み
返信[95]
親投稿
nobu divine-creator
otta777さんのカンマ表示プログラムを試してみた結果、それ単独では正常に動作するものの、自分のプログラムに組み込むと上手くいかず、色々と試行錯誤を繰り返しましたが、最終的に今回は諦めることにしました…。(そんなに大きな桁の計算をするためのものではないので、カンマ無しでも良いかと思ったからです。) 同様に、数字をたくさん入力して右端に達すると、左端に表示されるようになりますが、これもそれほど大きな桁の計算をしない限りは問題ないので、そのまま放置でも良いと思いますが、使用する桁数を制限する命令はどのような感じになるのでしょうか?
0そうだね
プレイ済み