マイコンArduinoを使って電光掲示板を作る。
続き
今回はゲームらしく難易度が上がって行くプログラムに書き換えていきます。
難易度を上げるにはまず思い付くのは速度を上げる。
もう一つはラケットを小さくするです。
今回はこの2つを実装していきます。
実装と言っても数行追加しただけです。
// slx_5024
byte address[ ] = {5, 4, 3, 2}; // アドレスは扱いやすい様に配列で持つ
int pos = 0;
int count = 0;
int x_pos = 0;
int y_pos = 0;
boolean x_dir = false;
boolean y_dir = false;
int speed = 10;
int racket_pos = 12;
int racket_size = 8;
void setup() {
for (int i = 0; i < 11; i++) {
pinMode(i, OUTPUT); // 各ピンの設定 全てアウトプット
pinMode(11, INPUT_PULLUP);
pinMode(12, INPUT_PULLUP);
}
digitalWrite(0,LOW); // SE L 自動でRAM切り替わり // A/BB書換えを使うのでHをセット
digitalWrite(1,LOW); // A/BB 書き込み用RAM選択 // その他は全てLをセット
digitalWrite(6,LOW); // GREEN 緑データ
digitalWrite(7,LOW); // CLK クロック
digitalWrite(8,LOW); // WE 書き込み信号 Hで書き込み
digitalWrite(9,LOW); // RED 赤データ
digitalWrite(10,LOW); // ALE アドレスラッチ Hで有効
}
void loop() {
for (int i = 0; i < 16; i++) { // アドレス0~15
for (int j = 0; j < sizeof(address); j++)
if ((i & 0x1 << j) != 0) // address[0]~address[3]にビットをセット
digitalWrite(address[j], HIGH);
else
digitalWrite(address[j], LOW);
for (int k = 0;k < 32;k++) {
if (k == x_pos && i == y_pos)
digitalWrite(9,HIGH); // RED 赤データ // データのセット
else
digitalWrite(9,LOW); // RED 赤データ // データのセット
if (i == 15) {
if (k < racket_size + racket_pos && k >= racket_pos)
digitalWrite(9,HIGH); // RED 赤データ // データのセット
}
clock(); // クロック
}
write_ale_we(); // 書き込み操作 関数にまとめて有る
}
count++;
if (count > speed) {
count = 0;
pos++;
if (pos > 15) {
pos = 0;
}
// ボールの位置 x軸
if (!x_dir)
x_pos++;
else
x_pos--;
if (x_pos > 30) {
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;
speed--;
if (speed < 5) { // 5を小さくすると更に難しくなる
speed = 5; // 5を小さくすると更に難しくなる
racket_size--;
if (racket_size < 4) // 4を小さくすると更に難しくなる
racket_size = 4; // 4を小さくすると更に難しくなる
}
}
// ラケットの位置
if (digitalRead(11) == 0)
if (racket_pos > 0)
racket_pos--;
if (digitalRead(12) == 0)
if (racket_pos < 32 - racket_size)
racket_pos++;
}
}
void write_ale_we() {
digitalWrite(10,HIGH); // ALE アドレスラッチ Hで有効
digitalWrite(8,HIGH); // WE 書き込み信号 Hで書き込み
digitalWrite(8,LOW); // WE 書き込み信号 Hで書き込み
digitalWrite(10,LOW); // ALE アドレスラッチ Hで有効
}
void clock() {
digitalWrite(7,HIGH); // クロック
digitalWrite(7,LOW); // クロック
}
void clock_n(int n) {
for (int i = 0;i < n;i++)
clock();
}
太字の部分を追加
テニスゲームで遊んでいる様子
分かり易く進めたつもりですが如何でしたか?
少して手を加えるだけでブロック崩しにも出来そうです。
挑戦して見て下さい。
ゲームは今回で区切りを付けて次回からは文字の表示に移りたいと思います。
では、また。