#99 Article 931 Posted at 1995/10/16 07:10:38 by えす (MAP2303) [A.ML1]

Subject: Re: Re: ML1で質問です。 /930 /929

>結果的には、rensareadの中では画面下をつっきてしまい、と連鎖終了を取ら
>ないでexitしていました。連鎖がうまく取れないと110を次の長さに取得して
>しまうので長さがおかしくなる以外にも、それに伴いEOD(長さ16000(+1))を取
>れなくなり、帰ってこなくなる場合もあるようでした。

  ぽんっ☆
  あぁそういうことですね。

|procedure datatype.rensaread(xy : word; color : word);
|    if (xy > 15999) then
|      exit;

  ここでexitしちゃってるから、連鎖を終了まで読んでないんですね。
  どうもありがとうございました。
  一人で考えてるとよく分かんないもんですね。

  ついでですのでデコード部の完成版を上げときましょう。
  このart.の最後に付けます。

>ちなみに下記の10色対応ディスプレイドライバ(笑)で表示しただけです(^^;
>      write(pixel[xy]);

  初め意味分かんなかったです(^^;
  これなら、
|      write(char( ord(pixel[xy]>9)*7+pixel[xy]+48 ));
  で多色でもばっちり(笑) 
# 試行してないけど:-p
  ・・・ん? なんかいきなりXPM変換ができそうだ(笑)

>見た感じ1passで処理しているようでかわってて面白いです。

  かわってる・・・んでしょうか(^^;
  人様のソースは拝見したことないのでなんとも言えませんが;

>ML1は幾分トリッキーな所がある(--;

  苦労しました。。。


  はい、ソースです。
  前回の分から手続きrensareadだけ変えたので、そこだけです。
--------------------------------------------------------------------------
procedure datatype.rensaread(xy : word; color : word);

  function puyopuyo:shortint; { すまん、名前が思い付かなかった(^^; }
  var
    dx : shortint;
  begin
    if (bitread(1) = 0) then begin
      dx := 0;
    end else begin
      case (bitread(2)) of
        0 : dx := +1;
        1 : dx := -1;
        2 : dx := -127;
        3 : begin
          if (bitread(1) = 0) then
            dx := +2
          else
            dx := -2;
        end;
      end;
    end;
    puyopuyo := dx;
  end;

var
  dx : shortint;
begin
  repeat
    if (xy > 15999) then begin
      while (puyopuyo <> -127) do;
      exit;
    end else
      dx := puyopuyo;

    if (dx <> -127) then
      pixel[xy + dx] := color;
    inc(xy,160+dx);
  until (dx = -127);
end;
--------------------------------------------------------------------------

                          えす