【最大10000ポイント】当たる!!質問投稿キャンペーン!

あるパズルゲームのプログラムに、例えば

DATA'-4;BIO,2'-3;CIO,4,&-4;BAQ,3,(-5;BIG,6,&-;BOIQ,6

とか

DATAACOQ35&,15

なんてものがあります。面ごとに、グラフィックの配置や条件を変えてるんだと思いますが、もう何が何だかさっぱりです。

このDATA文の1行前に、READ文があります。
あとRESTOREというのがありますが、これも関係ありますかね?
1行前をそのまま書きます。

ONR/R1 RESTORE900,910,920,930,940,950,960:FORI=0TO4:READZ$,G:KK$=KK$+CHR$(ASC(LEFT$(Z$,E))+61)NEXTRETURN

  • 画像を添付する (ファイルサイズ:10MB以内、ファイル形式:JPG/GIF/PNG)
  • 今の自分の気分スタンプを選ぼう!
あと4000文字

A 回答 (2件)

POKE文の質問が締め切られていて投稿できなかったので


ついでにこっちに投稿します

>おお!そうやってプロはメモリを節約するんですね!!すごいです!
プログラムのテクニックでは無いです
ファミコンのハードウェアがそういう仕様になってるんです

>3は2進数に直すと11~
ファミコンは8bitゲーム機なので2進数に治す場合は基本的に八桁で揃えます
11では無く00000011となります
前の回答で載せたOBJ(スプライト)の解説のページに「第3バイト アトリビュート」の所にBitってありますよね
この後の数字は8bit2進数の桁の位置を表します
artooさんへの回答のお礼で触れている位置というのもこの桁の位置のことです
Bit2~4は0になっていますがこのように書かれている桁は必ず0にしなければなりません
1と書かれていた場合は同様に必ず1にしなければなりません
X方向反転無し、Y方向反転無し、優先順位BG画面より手前、パレットコード3の場合
00011ではなく00000011とするのが正しいです

>配色番号は、0〜3(これを2桁の2進数に変換するんですかね?
Bit0~1で指定しているのは配色番号ではなくパレットコードです
ファミコンのスプライトは1枚で3色表示できます(透明色を除く)
しかし64枚あるスプライトに一色一色自由に指定できるのでは無く
配色番号が示す64通りの色から選んだ3色+透明色を1セットにしたパレットで指定します
スプライト用にはパレットコード0~3の4つのパレットが用意されていてこの中から選択します
    • good
    • 0

>あとRESTOREというのがありますが、これも関係ありますかね?


RESTOREという命令はREAD文で読み込むデータをどこから読み始めるかを行番号で指定する命令です
前に「ONR/R1」と付いているので正確にはON RESTOREという命令ですね
R÷R1の計算結果によってRESTOREの後に列挙された行番号のどれが選択されるか変わります

READZ$,G
文字列と数値を順番に一つづつ読み込み文字列を文字型変数Z$に数値を数値型変数G似代入します
ですのでDATA文の後に続くデータはコンマで区切られて「文字列,数値,文字列,数値,…」と続くはず
しかし「DATA'-4;BIO,2'-3;CIO,4,&-4;BAQ,3,(-5;BIG,6,&-;BOIQ,6」だと「'-4;BIO」「2'-3;CIO」と文字列が続くので数値型変数Gに代入できなくてエラーになるはず
多分データに誤りがあるんじゃないかな
おそらく7文字の文字列,数値という並びが正しいのだと思うのだけど

KK$=KK$+CHR$(ASC(LEFT$(Z$,E))+61)
CHR$(ASC(LEFT$(Z$,E))+61)を処理した結果得られた文字をKK$に代入されている文字列の最後に追加するということなんだけど
ASC(LEFT$(Z$,E))+61これがよくわからない

前の質問でも貼ったけど↓のページBG GRAPHICの後の横線の下から命令表が載ってる
http://www43.tok2.com/home/cmpslv/Famic/Fambas.htm

ASC(文字列)
 文字列の最初の1文字目をキャラクタコードの数値に変換
 ヌルストリングの場合0になる

LEFT$(文字列,n)
 文字列…31文字まで
 n………文字列から取り出す長さ
 
 文字列の左端からn文字まで取得
 nが文字列より大きい場合は文字列全て
 nが0      の場合はヌルストリング
とある

あと↓こことか
https://fbr.azurewebsites.net/reference.html#leftd

LEFT$

LEFT$(string, length)

string...検索する元の文字列
length...取り出す文字数

検索する元の文字列の中の左から取り出す文字数分を返す関数。

10 A$=LEFT$("ABCDE", 3)
20 PRINT A$
結果:ABC
とある

Z$に「あいうえおかき」変数Eに3が代入されているとすると
LEFT$(Z$,E)のけっかは「あいう」
ASC(あいう)は最初の1文字の「あ」のキャラクターコードになる
でも何文字取り出されようと最初の1文字目は「あ」で変わらないので変数Eの値が0以外は同じ結果になると思うんだよなぁ…なんでこんな事してるんだろ
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このカテゴリの人気Q&Aランキング