マイコンArduinoを使って電光掲示板を作る。
続き
テトリスに挑戦の3回目はブロックの落下を作って行きます。
ブロックが一段ずつ落ちていくプログラム
int x_pos = 6;
int y_pos = 0;
int select = 0;
int muki = 0;
int fall_speed_count = 0;
short data_hex[] = {0x2004, 0x2004, 0x2004, 0x2004, 0x2004, 0x2004, 0x2004, 0x2004,
0x2004, 0x2004, 0x2004, 0x2004, 0x2004, 0x2004, 0x2004, 0x3ffc};
short block[7][4] = {{0x0660, 0x0660, 0x0660, 0x0660},
{0x4444, 0x00f0, 0x2222, 0x0f00},
{0x2640, 0x0c60, 0x0264, 0x0630},
{0x4620, 0x0630, 0x0462, 0x0360},
{0x0644, 0x0470, 0x2260, 0x0e20},
{0x0622, 0x0740, 0x4460, 0x02e0},
{0x04e0, 0x0262, 0x0720, 0x4640}};
short disp_hex[16];
void setup() {
// put your setup code here, to run once:
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
fall();
data_make();
disp();
}
void fall(){
fall_speed_count++;
if (fall_speed_count > 100){
fall_speed_count = 0;
y_pos++;
if (y_pos > 15)
y_pos = 0;
}
}
void data_make(){
for (int i = 0;i < 16;i++)
disp_hex[i] = data_hex[i];
for (int i = 0;i < 4;i++)
disp_hex[i + y_pos] |= ((block[select][muki] >> 4 * i) & 0xf) << x_pos ;
}
void disp(){
for (int i = 0;i < 16;i++) {
for (int j = 0;j < 16;j++) {
digitalWrite(2,LOW);
if ((disp_hex[i] & 0x8000 >> j) != 0)
digitalWrite(2,HIGH);
digitalWrite(4,HIGH);
digitalWrite(4,LOW);
}
digitalWrite(5,HIGH);
digitalWrite(5,LOW);
}
digitalWrite(6,HIGH);
digitalWrite(6,LOW);
}
太字が追加部分
ブロックが落ちていく様子
難しいことはしていません。
fall_speed_count を使って100回loop()を回る毎に一段落ちるプログラム
次回はブロックの回転を作って行きます。
では、また。