LEDルーレットゲーム
コンポーネントと消耗品
> |
| × | 9 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要なツールとマシン
|
アプリとオンラインサービス
> |
|
このプロジェクトについて
ビデオ:
概要
ずっと前から、一人で遊べるシンプルで楽しいゲームを作りたいと思っていました。非常にシンプルで、ArduinoNanoを1つだけ実行できます。 LEDルーレットです。ゲームの目的は、赤と黄色のLEDを避けて、緑のLEDで停止することです。遊びやすく、作りやすいようです。
<図>
ステップ1
まず、Fusion 360でデバイスを設計することから始めました。前面プレートには、9個のLED、6個の赤、2個の黄色、1個の緑が含まれるように設計しました。また、下部にタクトスイッチを入れるスペースを作りました。次に、Millright CNCルーターを使用して、設計した部分を切り取りました。
<図> <図> <図>
ステップ2
ゲームの仕組みは次のようになります。ライトは2つのエッジの間を前後に「移動」し、ボタンを押すたびに停止します。すぐに反応するように、割り込みを使用しました。各LEDは、循環する配列内のインデックスに対応します。現在のLEDインデックスも独自の変数を取得します。難易度に応じて、各ステップの間に遅延もあります。起動時に、ユーザーはボタンを押して難易度を選択し、LEDが変化するたびに遅延を減らします。正しいLEDが点灯したら、ユーザーはダブルクリックしてロックすることができます。
ステップ3 <図>
合板の部分に素敵な仕上げと丸みを加えるために、サンドペーパーを使用しました。その後、ホットグルーを使ってピースを固定しました。
結論 <図>
今、私が簡単なゲームをプレイしたい気分になっているときはいつでも、外出先であろうと、画面から離れるだけであろうと、このデバイスは私に素晴らしい休息を与えてくれます。また、各LEDを緑色から一定のポイントだけ離して、最後にポイントを最も少なく獲得した人が勝つようにすることで、マルチプレイヤーにすることもできます。
コード
- コード
コード C / C ++
/ *ピン2〜10を使用TTBOUNCEライブラリは次の場所で入手できます:https://github.com/TOLDOTECHNIK/TTBOUNCE * /#includeint delay_time =0; const uint8_t led_array [9] ={ 4,3,5,6,7,8,9,10,11}; constuint8_tボタン=2; uint8_t難易度=0; uint8_t current_led =0; bool dir_flag =true; // trueは右に、falseは左に行くbool game_ended =false; bool is_win =false; bool is_finished_selecting =false; TTBOUNCE b =TTBOUNCE(button); void doubleClick(){Serial.println( "double click"); is_finished_selecting =true; delay_time =floor(500 /(difficulty + 1)); //式:delay(in ms)=500 /(difficulty + 1)Serial.println( "difficulty:" + String(delay_time));スイープ();} void click(){Serial.print( "Click |"); digitalWrite(led_array [difficulty]、LOW);難易度++; if(difficulty> 8){難易度=0; } digitalWrite(led_array [difficulty]、HIGH); Serial.println( "難易度:" + String(difficulty)); delay(100);} void setup(){Serial.begin(9600); b.attachDoubleClick(doubleClick); b.attachClick(クリック); b.setActiveLow(); b.enablePullup(); for(int i =0; i <9; i ++){pinMode(led_array [i]、OUTPUT); } 掃く();脈();難易度=0; digitalWrite(led_array [difficulty]、HIGH); while(!is_finished_selecting){b.update(); } b.update(); pinMode(button、INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(button)、button_pressed、FALLING); delay(1000);} void loop(){if(game_ended ==false){move_led(); delay(delay_time); } else if(game_ended){Serial.println(game_ended); Serial.println( "ゲームオーバー"); if(is_win){Serial.println( "あなたが勝った"); for(int i =0; i <5; i ++){pulse(); delay(100); } } 掃く(); game_ended =false; is_win =false; delay(2000); }} void move_led(){digitalWrite(led_array [current_led]、LOW); if(current_led ==8){dir_flag =false; current_led- =1; } else if(current_led ==0){dir_flag =true; current_led + =1; } else if(dir_flag){current_led + =1; } else if(!dir_flag){current_led- =1; } digitalWrite(led_array [current_led]、HIGH);} void pulse(){for(int i =0; i <9; i ++){digitalWrite(led_array [i]、HIGH); } delay(100); for(int i =0; i <9; i ++){digitalWrite(led_array [i]、LOW); }} void swap(){for(int i =0; i <9; i ++){digitalWrite(led_array [i]、HIGH); delay(50); digitalWrite(led_array [i]、LOW); } for(int i =8; i> =0; i-){digitalWrite(led_array [i]、HIGH); delay(50); digitalWrite(led_array [i]、LOW); }} void button_pressed(){Serial.println( "ボタンがLEDで押されました:" + String(current_led)); game_ended =true; if(current_led ==4){is_win =true; } else if(current_led!=4){is_win =false; } current_led =0; delay(500);}
回路図
製造プロセス