#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;
--------------------------------------------------------------------------
えす