Arduinoでじゃんけんゲームを作る

Arduino

様々な機能を覚えたので、それを使ったゲームを作ってみましょう。と言いたいところですが、ゲームを作るうえで必要な知識がいくつかあるのでそれから学んでいきます。

条件分岐処理

○○の場合はA、××の場合はBといった処理をしたい場合に使います。

int a = 1;
int b = 1;

if (a == b) //aとbを比較
{
    //aとbが等しい時の処理
}
else
{
    //aとbが等しくない時の処理
}

コード例ではaには1、bにも1が代入されており、aとbを比較しています。結果等しいので、aとbが等しい時の処理が実行されます。

比較演算子

二つの値を比較する際に使用する記号のことです。 例えば、等しいかどうかを比較する場合は「==」、大きいかどうかを比較する場合は「>」などを使います。

演算子意味
==a == baとbは等しい
!=a != baとbは異なる
<a < baはbより小さい
>a > baはbより大きい
<=a <= baはb以下
>=a >= baはb以上

乱数

ランダムの整数を得ることができます。

random(0, 9);

コード例の場合は0~8までの整数をランダムに得ることができます。

じゃんけんゲームを作る

これまでに習った内容を使ってゲームを作っていきます。

穴埋め問題にしているので、#の部分を書き換えていきましょう。

#include <Wire.h>
#include <FaBoLCDmini_AQM0802A.h>

#define LED_PIN 13
#define SW1_PIN 5

FaBoLCDmini_AQM0802A lcd; // LCDライブラリを初期化

long randNumber;

void setup() {
  ####################### // 乱数の種をセット

  lcd.begin(); // LCDを初期化
  pinMode(SW1_PIN, INPUT_PULLUP); // スイッチ1を準備
}

void loop() {
  // スイッチ1が押されるまで何もしない
  if (########################) return;

  // 1~3の乱数を発生させる
  randNumber = ################

  // 1: グー、2: チョキー、3: パーをLCDに表示する
  lcd.clear();
  delay(500); // 少し時間が経ったら表示

  if (##############) {
    lcd.print("Gu-");
  } else if (###############) {
    lcd.print("Choki-");
  } else if (###############) {
    lcd.print("Pa-");
  }
}

スイッチはdigitalRead()、乱数はrandom()、じゃんけんの手をランダムに出す仕組みはif文やswitch文で実装してみてください。

乱数の種をセットする際に使われるmillis()ですが、Arduinoがプログラムの実行を開始した時から現在までの時間を返します。これでランダム性が担保されています。

#include <Wire.h>
#include <FaBoLCDmini_AQM0802A.h>

#define LED_PIN 13
#define SW1_PIN 5

FaBoLCDmini_AQM0802A lcd; // LCDライブラリを初期化
long randNumber;

void setup() {
  Serial.begin(9600);
  randomSeed(analogRead(0)); // 乱数の種をセット
  lcd.begin(); // LCDを初期化
  pinMode(SW1_PIN, INPUT_PULLUP); // スイッチ1を準備
}

void loop() {
  // スイッチ1が押されるまで何もしない
  if (digitalRead(SW1_PIN) == HIGH) return;
  // 1~3の乱数を発生させる
  randNumber = random(1, 4);
  // 1: グー、2: チョキー、3: パーをLCDに表示する
  lcd.clear();
  delay(500); // 少し時間が経ったら表示
  if (randNumber == 1) {
    lcd.print("Gu-");
  } else if (randNumber == 2) {
    lcd.print("Choki-");
  } else if (randNumber == 3) {
    lcd.print("Pa-");
  }
}