RWIを使って迷路を描画してみます。
迷路作成の初期値を設定
%let n = 37;
%let init = 1234; |
n ・・・ 迷路のマスの数。(必ず奇数を設定する事)
init ・・・ 迷路の壁と床を決めるために生成する乱数のシード値
初期値を変えるたびに異なる迷路を作ることが出来ます。
迷路の壁と床を乱数で決める
data DT1;
*** 全マス目分の配列を定義 ; array AR(&n, &n) ; *** 最初から壁にする部分を2に設定 ; do y=1 to &n; do x=1 to &n; if x in (1,&n) or y in (1,&n) or mod(x*y,2)=1 then AR(x,y)=2; else AR(x,y)=1; end; end; *** 乱数を生成して壁の位置を決める ; *** 壁の位置 1:上、2:下、3:右、4:左 ; call streaminit(&init); do y=3 to &n-2 by 2; do x=3 to &n-2 by 2; *** 1段目は上下左右の壁の乱数を生成 ; if y=3 then do; * 左のマスが壁だったら上下右のみの壁の乱数を生成 ; if AR(x-1,y)=2 then RAND = ceil(rand('uniform')*3); else RAND = ceil(rand('uniform')*4); end; *** 2段目以降は下左右の壁の乱数を生成 ; if y^=3 then do; * 左のマスが壁だったら下右のみの壁の乱数を生成 ; if AR(x-1,y)=2 then RAND = ceil(rand('uniform')*2)+1; else RAND = ceil(rand('uniform')*3)+1; end; if RAND=1 then AR(x,y-1)=2; * 上 ; if RAND=2 then AR(x,y+1)=2; * 下 ; if RAND=3 then AR(x+1,y)=2; * 右 ; if RAND=4 then AR(x-1,y)=2; * 左 ; end; end; run; |
RWIで迷路描画
・SAS9.4より前のバージョンでは、以下の箇所を変えてみてください。
1) format_cellメソッドの「style_attr」を「overrides」に置き換える。
2) SAS9.2ではプログラム先頭に「ods html file="出力パス\ファイル名.html";」、最後に「ods html close;」と書く。
1) format_cellメソッドの「style_attr」を「overrides」に置き換える。
2) SAS9.2ではプログラム先頭に「ods html file="出力パス\ファイル名.html";」、最後に「ods html close;」と書く。
data _NULL_;
length VAR1 $5.; set DT1; array AR(&n, &n); dcl odsout ob(); ob.table_start(); do y=1 to &n; ob.row_start(); do x=1 to &n; *** 壁と床を描画 ; VAR1=""; if (x=2 and y=2) or (x=&n-1 and y=&n-1) then VAR1="☆"; ob.format_cell(data:VAR1, style_attr: "background=" || choosec(AR(x,y),"white","black") || " height=0.4cm width=0.4cm"); end; ob.row_end(); end; ob.table_end(); run; |
0 件のコメント:
コメントを投稿