段階的学習!がちょっと面白そうだったので作成。
こうしたテクニックはショートプログラムでも利用できそうです。#const global BLOCK_SIZE 24
#const global BLOCK_COLOR_MAX 8
#const TETRIMINO_TYPE_MAX 7
#module
//
// 指定した色でブロックを描く
#deffunc draw_block int x, int y, int c
hsvcolor 191 * c / BLOCK_COLOR_MAX, 255, 255
boxf BLOCK_SIZE * x, BLOCK_SIZE * y, BLOCK_SIZE * ( x + 1 ) - 2, BLOCK_SIZE * ( y + 1 ) - 2
return
//
// テトリミノを描く
#deffunc draw_tetrimino int tetrimino_pattern, int block_color, int _x, int _y
repeat 4
y = _y + cnt
_cnt = cnt
repeat 4
x = _x + cnt
if tetrimino_pattern >> ( _cnt * 4 + cnt ) & 1 {
draw_block x, y, block_color
}
loop
loop
return
#global
// テトリミノパターンの準備
dim tetrimino_pattern, 4, TETRIMINO_TYPE_MAX
tetrimino_pattern( 0, 0 ) = $0033, $0033, $0033, $0033 // □
tetrimino_pattern( 0, 1 ) = $2222, $00F0, $2222, $00F0 // |
tetrimino_pattern( 0, 2 ) = $0232, $0072, $0262, $0270 // ┤
tetrimino_pattern( 0, 3 ) = $0036, $0231, $0036, $0231 // s
tetrimino_pattern( 0, 4 ) = $0063, $0132, $0063, $0132 // z
tetrimino_pattern( 0, 5 ) = $0047, $0322, $0071, $0113 // ┘
tetrimino_pattern( 0, 6 ) = $0017, $0223, $0074, $0311 // └
tetrimino_rotation = 0
tetrimino_type = 0
game_speed = 30
need_to_draw = 1
title "←・→でテトリミノの種類を変更"
*main
gosub *calc
gosub *draw
wait 2
goto *main
*calc
stick keys
v = ( keys >> 2 & 1 ) - ( keys & 1 )
if v {
// テトリミノの種類を変更
need_to_draw = 1
tetrimino_type += v
if tetrimino_type < 0 {
tetrimino_type = TETRIMINO_TYPE_MAX - 1
} else : if tetrimino_type >= TETRIMINO_TYPE_MAX {
tetrimino_type = 0
}
}
count++
if count == game_speed {
// テトリミノの回転
count = 0
need_to_draw = 1
tetrimino_rotation = ( tetrimino_rotation + 1 ) & 3
}
return
*draw
if need_to_draw {
need_to_draw = 0
redraw 0
color : boxf
draw_tetrimino tetrimino_pattern( tetrimino_rotation, tetrimino_type ), tetrimino_type, 0, 0
redraw 1
}
return
2007年8月11日土曜日
テトリミノを表示する
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿