マイコンArduinoを使って電光掲示板を作る。
続き
今回はゲームのプログラムを作って行きます。
最初にまだスイッチの動作確認をしていないので簡単な確認用プログラムを作りました。
入力のテスト用プログラム
int x_num = -1;
int y_num = -1;
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);
}
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 (i == y_num && j == x_num)
digitalWrite(2,HIGH);
digitalWrite(4,HIGH);
digitalWrite(4,LOW);
}
digitalWrite(5,HIGH);
digitalWrite(5,LOW);
}
digitalWrite(6,HIGH);
digitalWrite(6,LOW);
x_num = -1;
y_num = -1;
if (digitalRead(7) == 0) { // 左上のボタン
x_num = 0;
y_num = 0;
}
if (digitalRead(8) == 0) { // 右上のボタン
x_num = 15;
y_num = 0;
}
if (digitalRead(9) == 0) { // 左下のボタン
x_num = 0;
y_num = 15;
}
if (digitalRead(10) == 0) { // 右下のボタン
x_num = 15;
y_num = 15;
}
}
テストの様子
次はもう3回目になりますがテニスを作って行きます。
今回のプログラム
int count = 0;
int x_pos = 0;
int y_pos = 0;
boolean x_dir = false;
boolean y_dir = false;
int racket_pos = 5; // ラケットの位置
int racket_size = 6; // ラケットのサイズ
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);
}
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 (j == x_pos && i == y_pos)
digitalWrite(2,HIGH);
// ラケットを描く
if (i == 15) { // 1番下の16段目
if (racket_pos <= j && j < racket_size + racket_pos)
digitalWrite(2,HIGH);
}
digitalWrite(4,HIGH);
digitalWrite(4,LOW);
}
digitalWrite(5,HIGH);
digitalWrite(5,LOW);
}
digitalWrite(6,HIGH);
digitalWrite(6,LOW);
count++;
if (count > 10) {
count = 0;
// ボールの位置 x軸
if (!x_dir)
x_pos++;
else
x_pos--;
if (x_pos > 14) {
x_dir = true;
}
if (x_pos < 1) {
x_dir = false;
}
// ボールの位置 y軸
if (!y_dir)
y_pos++;
else
y_pos--;
if (y_pos == 14 && x_pos < racket_size + racket_pos && x_pos >= racket_pos) {
y_dir = true;
}
if (y_pos < 1) {
y_dir = false;
}
if (digitalRead(7) == 0) { // サーブ
x_pos = 0;
y_pos = 0;
}
if (digitalRead(8) == 0) { // サーブ
x_pos = 15;
y_pos = 0;
x_dir = true;
}
// ラケットの位置
if (digitalRead(9) == 0)
if (racket_pos > 0)
racket_pos--; // 左へ移動
if (digitalRead(10) == 0)
if (racket_pos < 16 - racket_size)
racket_pos++; // 右へ移動
}
}
前回のテニスをベースに少し書き替えて
あっさりと動いてしまいました。
今回はゲーム機と言うことなので音は必須だと思います。
そこで次回は音が出る様に改造していきます。
では、また。