マイコンArduinoを使って電光掲示板を作る。

マイコン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;
  }
}

テストの様子


www.youtube.com

 

次はもう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++;         // 右へ移動
  }
}

前回のテニスをベースに少し書き替えて


www.youtube.com

あっさりと動いてしまいました。

 

今回はゲーム機と言うことなので音は必須だと思います。

 

そこで次回は音が出る様に改造していきます。

 

では、また。

 

mckeechan.hatenadiary.com