Archiverse Internet Archive
投稿のみ 投稿と返信
前のページ(最近)
15 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25154
次のページ(過去)
返信[6]
親投稿
おちゃめ ochame_nako
0.2.0を飛ばして一気に1.0.0とは想定GUYです。 実は「永遠に1.0.0にならないのでは」と思っていました(笑)
1そうだね
プレイ済み
返信[10]
親投稿
おちゃめ ochame_nako
一部訂正 × IF A THEN ?"ABC"を?"ABC"*Aにする      ↓ ○ IF A THEN ?"ABC"を?"ABC"*!!Aにする ○の方でも完全置き換えではないのは?"ABC"*!!AというのはIF A THEN ?"ABC" ELSE ? の置き換えだからです。(Aが0の時もPRINT自体は実行されてカーソル位置が変わり改行されたりする) これと同じくIF A THEN BEEP 3はBEEP 3,,!!A*99に不完全置き換えが可能です。
3そうだね
プレイ済み
返信[9]
親投稿
おちゃめ ochame_nako
というわけで、実際の使用を見て短縮例を書いていきましたが、当然ながらこんなのはほんのごく一部です。(書き出したらキリがない) まだまだ無数の短縮法が存在しますが、これ以外のものは私が過去に作ったQSPを見て貰うのが一番です。 もちろん他の方が作ったQSP、OSPには私が使用していない短縮法が用いられたりする場合もあるのでそれも参考になると思います。 個人的には「何のために短縮するのか」が重要だと思います。コードゴルフであれば短縮することに意義がありますが、QSPを作る場合にはそうではないと私は考えます。(下記リンク先参照) https://miiverse.nintendo.net/posts/AYMHAAADAAB2V0erQWuGiw 長くなりましたが、私は以上のような感じですね。
2そうだね
プレイ済み
返信[8]
親投稿
おちゃめ ochame_nako
3つ目はPETIT PAINT QSPです。 https://miiverse.nintendo.net/posts/AYIHAAAEAAArVRTsk6CEtg このプログラムはSIMPLE PAINT QSPと同じくお絵かきツールですが、こちらは単色ということで一見劣って見えますが、円形ブラシというアドバンテージがあります。 というわけで、このPETIT PAINT QSPの最大のリスト短縮ポイントは塗りつぶし円です。 GCIRCLE M,N,R,8 GPAINT M,N,C,8 GCIRCLE M,N,R,C これは普通に自前で作った塗りつぶし円と比べて数分の1~数10分の1のサイズとなります。(この方法を用いずに単にGCIRCLEをGPAINTで塗りつぶすだけでは塗り漏らしが出てしまう) さらに円描画によってペンのカーソルも表現できています。(これが非常に使いやすい)
2そうだね
プレイ済み
返信[7]
親投稿
おちゃめ ochame_nako
2つ目は連射計測QSPです。 https://miiverse.nintendo.net/posts/AYIHAAAEAAASVZKc070TUA 注目すべきはGFILL 50,40,350,Y,-75E5の部分です。 定数リテラル#Yが使われていますが、128、256、512という値が欲しい場合には定数リテラル#Y、#L、#Rを使うことで1文字短縮可能です。ただし、命令の末尾の引数ではコロンが必要になるため短縮には繋がりません。 あと、色コードは白を-1とするというのは良く使用されますが、-256で黄色、そして指数を使うことで特定色の近似色が表現可能です。-73E5は緑がかったグレーですが、モノクロ液晶の背景っぽい色にしたかったけどRGB(144,156,96)とするよりも10文字も短縮できています。
2そうだね
プレイ済み
返信[6]
親投稿
おちゃめ ochame_nako
というわけで、実際の短縮例を見ていきます。 1つ目はSIMPLE PAINT QSPです。 https://miiverse.nintendo.net/posts/AYMHAAACAAADVHkuvFo95w このプログラムはQSPでありながらカラー対応、擬似筆圧対応というお絵かきツールです。 このプログラムは限界まで短縮されているだけあってリスト短縮は随所で行われていますが、目立つ短縮ポイントといえばON GOTOの多用です。 これによってIF~THEN~ELSEやWHILE~WENDを使うよりもリスト短縮が可能です。
2そうだね
プレイ済み
返信[5]
親投稿
おちゃめ ochame_nako
QSPを作る場合には「実際は異なるけど大体同じような動作のもの」も結構リスト短縮として用いられます。(これは厳密に言えば短縮ではないのですが) 例えばAボタン入力待ちなどがこれに相当します。 Aボタン入力待ちはREPEAT:WAIT:UNTIL BUTTON(2)==#Aと記述できますが、QSPではDIALOG""やLINPUT A$などが良く使われます。これによって何と20文字以上が短縮です。 実際にプログラムを作る場合は仕様が満たせるのであればどんな方法を用いても問題ないので「完全置き換え」を考える必要はないです。
3そうだね
プレイ済み
返信[4]
親投稿
おちゃめ ochame_nako
短縮方法は非常にたくさんあるためそれだけで本が1冊書けるレベルとなります。 実際、私もQSPで同人誌を2冊作りました。 リスト短縮もA==0を!Aにするなどの無条件で単純置き換えが可能なものだけではなくIF A THEN ?"ABC"を?"ABC"*Aにするなどの特別な条件下でのみ置き換えが可能なものもあります。むしろ、後者の方が圧倒的に多いです。 例えばMID$(A$,X,1)はA$[X]に無条件で置き換えができそうですが、実は置き換えができるのはXが範囲外に出ないということが前提となります。 スペース、コロンの省略、引数の省略などは地味ですが多用が可能なリスト短縮法です。
4そうだね
プレイ済み
返信[4]
親投稿
おちゃめ ochame_nako
プチコン3号の文字列変数は内部では配列で処理しています。 そのため普通の文字列変数であっても配列変数のようにA$[2]でA$の3文字目を取得できたりして便利なのですが、配列の「参照型」という特性をそのまま受け継いでいます。 解決策としてはすでに書かれている通りです。
2そうだね
プレイ済み
返信[10]
親投稿
おちゃめ ochame_nako
とはいえ個人的には「難しくても例として初心者に提示する」ということは大きな意味を持つと思っています。 初心者が理解するのは難しいものは提示しないというのもありですが、その場合は一歩先で躓く恐れがあります。(初心者講座を読んだけど次にどうしたら良いか分からない初心者も多い) 私の入門講座に初心者には難しいものが含まれているのは「中級者を目指すため」ではありますが、その前に初心者の疑問は「難しいから(初心者には不要だから)」といって初心者講座からは省かれがちなものにこそ解決策が多く含まれているためです。 しかし、(やりたいことを難しい方法で実現よりも)簡単な方法で解決できる(やりたいことを概ね実現できる)ならばそちらの方が初心者にとってはベターではないかと思います。
0そうだね
プレイ済み
返信[9]
親投稿
おちゃめ ochame_nako
スライドパッドによる無段階移動そのものは十字ボタンによる8方向移動よりは簡単ですが、そのサンプルに含まれる「パッドの向きによってキャラの向きを変える処理」は初心者には難しいと思います。 この時点で論理式の説明をしていないならば方向を示す4つのIF文は IF SY>SX && SY>-SX THEN SPCHR 0,508 のように論理式を使わない記述にした方が初心者が理解しやすいと思います。(&&が掛け算で置き換えられるのは論理演算の仕組みを知らないと難しい) さらに言うならば向きを変える処理は初心者向けならば IF SY>0.5 THEN SPCHR 0,508 とやっても良いと思うしこれで問題があると感じてからようやく私が提示したような方法を採れば良いように思います。 ちなみに後者の方法はnobuさんは何か問題点を感じますか?
0そうだね
プレイ済み
返信[8]
親投稿
おちゃめ ochame_nako
プチコン3号はグローバル変数がスロットごとに別物として扱われるためスロットを跨いだプログラムを作る場合にはたんじぇさんが書かれているような方法でプログラムを動作させるスロットのグローバル変数に読み込ませる必要があります。 まだ書かれていない方法としては全スロット共通の変数(みたいなもの)としてCLIPBOARDがあるのでこれをうまく活用するという方法もあります。 ただし、扱えるのが文字列変数のみなので数値はSTR$を使って文字列に変換する必要があります。この際に大きな値や小数値は丸め処理が行われるため私が作ったPSTR$関数などを使用して誤差ゼロで数値を文字列に変換しなくてはなりません。 扱うのが文字列であれば丸め誤差は発生しないので難しく考える必要はありません。
4そうだね
プレイ済み
返信[14]
親投稿
おちゃめ ochame_nako
今回の夏コミの新刊は原稿書き、編集、印刷、製本を1日で行っているため覚え書きを書いただけの内容ですからね。 時間があればイラストをふんだんに使いたいところですが大抵コミケ前は忙しいので時間が取れないのです。(早めにやれというツッコミはありそうだけど)
0そうだね
プレイ済み
返信[19]
親投稿
おちゃめ ochame_nako
こういちさんへ EXECは実行するたびにコンパイルを行うため処理的には非常に無駄なのですが、QSPなどの文字数制限プログラムで無限ループを作りたい場合には有用なテクニックだと思います。
3そうだね
プレイ済み
返信[4]
親投稿
おちゃめ ochame_nako
さすがにその応用編は難易度が上がりすぎのような気がします。 今までの回の流れから考えてコメントを見ても恐らく理解できないのではないでしょうか? もちろん、図解してしっかり説明すれば可能だと思うので「あくまでそのプログラムだけ」では理解が難しいというだけです。 そひさんへ スライドパッドのトピックスは私が見た時には閉じられていましたが、SX、SYではなくSX*12、SY*12とかにするのは単に「SX、SYが1以下の小さい値だから」というだけなんですよね。 私の入門講座でも「遅いので適量掛けてください」という感じの説明をしています。
0そうだね
プレイ済み
返信[30]
親投稿
おちゃめ ochame_nako
N×Sということは、そ○さんがn○buさんに(物理的に)突っ込まれるんですか?それは楽しそうですね。 それにしても、mohさんもそひさんも「お○○○界」に足を踏み入れたみたいですね。良いことです、
2そうだね
プレイ済み
返信[19]
親投稿
おちゃめ ochame_nako
そひさんへ 変態が逮捕されちゃう(誰が変態とは言ってない)
0そうだね
プレイ済み
返信[44]
親投稿
おちゃめ ochame_nako
ツララさんへ そういったトラブル発生こそ初心者には体験して欲しいですよね。 トラブルによって経験値が上がると思うので私は「失敗を恐れずにどんどんやる」というのを初心者に強く推しています。 ところで、今回って何を理解する回でしたっけ? それによってこの回で何をすべきかが変わってきますね。
0そうだね
プレイ済み
返信[15]
親投稿
おちゃめ ochame_nako
こういちさん、MIKIさんへ EXECのスタックは一定量以上積まれないようになっているみたいですね。 実際に検証プログラムを作ってみたところ同じスロットを複数回実行したらそこでスタックがクリアされる感じです。 したがって、縦横無尽にEXECで他スロットに跳びまくるプログラムは元の場所に戻れる保証はできないですね。
4そうだね
プレイ済み
返信[47]
親投稿
おちゃめ ochame_nako
挫折するポイントは人それぞれですがnobuさん自身も経験しているように最初は挫折ポイントだらけです。 私はプチコンを始めた時点でBASIC歴が四半世紀あったため特に挫折はなく新たに覚えなければならないことが大量にあった程度です。しかし、プチコン3号でプログラミングを始めたnobuさんならばまだ記憶に新しいので「本当の初心者の気持ち」を理解できるはずです。 「初心者のため」とか考えずに「自分はここで挫折しかけたからこの部分はじっくり説明しておこう」という感じで自分の経験を活かすことでnobuさんらしい講座になるのではないかと私は思います。
0そうだね
プレイ済み