フォト
無料ブログはココログ

« 人材流出 <金や肩書き以外でモチベートする> | トップページ | 僕らのリーダー <リーダーはなるものではなく認められるもの> »

2015年11月10日 (火)

IchigoJam(9) <8x8LEDで8Qeen問題>

IchigoJamだけで8x8マトリクスLEDが表示できるようになった(IchigoJam,(8) <8x8LED>(2015/10/))
BASICではダイナミック表示に必要な処理速度が足りないようで、スクロールさせるだけでもチラつきがある。

 ダイナミック表示+何かの処理ができると簡単なゲームならIchigoJamだけでできるのではないかと考え、8Queen問題を解きながら8x8LEDのダイナミック表示ができるかやってみた。

 8Qeen問題はチェス盤(8x8)の上にQueen(将棋の飛車と角を合わせた動きができる駒)を、互いに進路を邪魔しないように配置する問題だ。これを解くプログラムをFORループで書くとこんな感じだ。→(IchigoJam BASICのFOR/NEXT(2)(2015/04/07))

 FORループの中でLEDの表示(OUT xx)を行うと、処理によってOUT命令の間隔が変わるのでチラつきが激しくなるだろう。

 そこで、考え方を変えて、8Queenを解くルーチンを分割して、メインループ(100行)でLEDの表示を行い、合間に分割したルーチンを順次呼び出す方式にした。

1 '8Queen for IchigoJam 
2 'Oct. 2015/Yoshi
3 GOSUB 1000

100 'Main loop
100 N=(N+1)&7: OUT (N<<8)|[N]: GOSUB P: GOTO 100

200 IF [I]=X GOTO 420 ELSE GOTO 410
210 IF [I]=X>>(Y-I) GOTO 420 ELSE GOTO 410
220 IF [I]=X<<(Y-I) GOTO 420 ELSE GOTO 410
230 'CHK OK
230 I=I+1: IF I<Y GOTO 400 ELSE GOTO 410
240 X=1: I=0: GOTO 410
250 Y=Y+1: [Y]=X: IF Y=8 GOTO 430 ELSE GOTO 400
260 'CHK NG
260 X=X<<1: IF X=#100 [Y]=0: Y=Y-1: X=[Y]: RETURN ELSE GOTO 410
270 [Y]=X: I=0: GOTO 400

400 P=200: RETURN
410 P=P+10: RETURN
420 P=260: RETURN
430 P=430: IF BTN()=1 Y=7: GOTO 420 ELSE RETURN

900 'Print table
900 PRINT
910 FOR J=0 TO 7
920  FOR K=0 TO 7
930   IF [J]&(1<<K)=0 ?" "; ELSE ?"Q";
940   ?"|";
950  NEXT: ?
960 NEXT
970 RETURN

1000 'Initialize
1000 OUT 8,0: OUT 9,0: OUT 10,0: OUT 11,0
1010 VIDEO 0: CLV
1020 [0]=1
1030 Y=0: X=1: I=0: N=0: R=0: P=250
1100 RETURN
list

 8Queenを解くルーチン(200行~270行)は、駒を置こうとする座標(X,Y) 既に置いた駒が進路にあるかを調べている行(I)、置けるか置けないかの判定(R)によって処理が決まるので、X,Y,I,Rを保存してあれば処理を分割することが可能だ。

 メインループ(100行目)の(GOSUB P)で分割している処理を順次呼び出す。分割された処理からRETURNする前に、次に呼び出す行番号を更新している。

Ichigo8x88q千石の袋はフィルタ代わり(^^;
リンク先に(Ichigo8x88Q.avi (2,031KB)) サイト外に接続します


« 人材流出 <金や肩書き以外でモチベートする> | トップページ | 僕らのリーダー <リーダーはなるものではなく認められるもの> »

CPUボード」カテゴリの記事

IchigoJam」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/577514/62635126

この記事へのトラックバック一覧です: IchigoJam(9) <8x8LEDで8Qeen問題>:

« 人材流出 <金や肩書き以外でモチベートする> | トップページ | 僕らのリーダー <リーダーはなるものではなく認められるもの> »