マイコンArduinoを使って電光掲示板を作る。
続き
今回は撃破のアクションやサウンド等を作って行きます。
int count = 0;
int x_pos = 0;
int old_x_pos = 0; // ランダムの投下位置が続かない様に追加
int y_pos = 0;
int fort_pos = 7; // 砲台の位置
boolean shot = false; // ビーム発射
int velocity = 0; // 落下速度
boolean hit = false; // 命中
boolean destruction = false; // 破壊
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);
pinMode(7,INPUT_PULLUP);
pinMode(8,INPUT_PULLUP);
pinMode(9,INPUT_PULLUP);
pinMode(10,INPUT_PULLUP);
pinMode(11,OUTPUT);
old_x_pos = x_pos = random(1, 15);
}
void loop() {
// put your main code here, to run repeatedly:
for (int i = 0;i < 16;i++) {
for (int j = 0;j < 16;j++) {
digitalWrite(2,LOW);
// 破壊シーン
if (destruction) {
if (y_pos <= i + 1 && i < y_pos + 2)
if (fort_pos <= j && j < fort_pos + 3) {
digitalWrite(2,HIGH);
hit = false;
}
}
// ビームを描く
else {
if (shot) {
if (x_pos == j) {
if (j == fort_pos + 1 && i > y_pos) {
digitalWrite(2,HIGH);
hit = true;
}
}
else {
if (j == fort_pos + 1) {
digitalWrite(2,HIGH);
hit = false;
}
}
}
}
// 爆弾を描く
if (j == x_pos && i == y_pos)
digitalWrite(2,HIGH);
// 砲身
if (i == 14) { // 1番下の16段目
if (fort_pos + 1 == j)
digitalWrite(2,HIGH);
}
// 砲台
if (i == 15) { // 1番下の16段目
if (fort_pos <= j && j < fort_pos + 3)
digitalWrite(2,HIGH);
}
digitalWrite(4,HIGH);
digitalWrite(4,LOW);
}
digitalWrite(5,HIGH);
digitalWrite(5,LOW);
}
digitalWrite(6,HIGH);
digitalWrite(6,LOW);
digitalWrite(11,LOW);
shot = false;
count++;
if (count > 10) {
count = 0;
if (destruction) { // 破壊
destruction = false;
y_pos = 0;
do {
x_pos = random(1, 15);
} while (x_pos == old_x_pos); // ランダムの投下位置が続かない様に
old_x_pos = x_pos;
}
else
if (hit)
destruction = true;
// 爆弾の位置 y軸
velocity++;
if (velocity > 5) { // 落下速度
velocity = 0;
y_pos++;
if (y_pos > 15) {
y_pos = 0;
do {
x_pos = random(1, 15);
} while (x_pos == old_x_pos); // ランダムの投下位置が続かない様に
old_x_pos = x_pos;
}
}
if (digitalRead(7) == 0) { // 発射
shot = true;
digitalWrite(11,HIGH); // ビーム音
}
if (digitalRead(8) == 0) { // NOP
}
// 砲台の位置
if (digitalRead(9) == 0)
if (fort_pos > 0)
fort_pos--; // 左へ移動
if (digitalRead(10) == 0)
if (fort_pos < 13)
fort_pos++; // 右へ移動
}
}
破壊シーンは■を表示しているだけですが表示パターンを作って爆発風に作ってみることも可能かと思います。
今回のプログラムを実行した様子
次回は自陣に着弾した時のアクションや砲台に被弾した時のアクションを作って行きます。
では、また。