工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

MAX72XXLEDマトリックスディスプレイ小惑星ゲーム

コンポーネントと消耗品

>
Arduino Mega 2560
× 1
Maxim Integrated MAXREFDES99#MAX7219ディスプレイドライバーシールド
× 1
SparkFunプッシュボタンスイッチ12mm
× 2
ブザー
× 1
ブレッドボード(汎用)
× 1

このプロジェクトについて

これは、MAX72XX LED-Matrixをディスプレイとして、2つのマイクロスイッチをボタンとして、アクティブブザーを効果音として使用するシンプルなゲームです。

あなたはスターシップであり、落下する小惑星との接触を避ける必要があります。ゲームは時間の経過とともに速くなります。最後に、あなたがどれだけ長く生き残ったかを示すスコアが表示されます。

コード

  • 小惑星のゲームコード
小惑星ゲームコード Arduino
 / ********************************************** ***********これはMAX72XXLED-Matrixを使用したシンプルなゲームです。 *あなたはスターシップであり、*小惑星の落下との接触を避ける必要があります。 * *(c)2018byJoshuaWeßner** * ************************************** ***************** /// EberhardFahleによるLedControl //参照:http://wayoda.github.io/LedControl/#include "LedControl.h" / *今すぐ動作させるにはLedControlが必要です。 *****これらのピン番号はおそらくハードウェアでは機能しません*****ピン12はDataInに接続されていますピン11はCLKに接続されていますピン10はLOADに接続されていますMAX72XXは1つだけです。 * / LedControl lc =LedControl(12,11,10,1); / ********************************* ******************************グローバル変数* / / *表示の更新間の遅延* / unsigned long delaytime =1000; / *スコアを表示する* / String scoreString; int score; int 100s; String scoreStr; String scoreArr [] ={""、 ""、 ""}; / *制御用のマイクロスイッチ* / int pinLeft =2; int pinRight =3; volatile unsigned long buttonPressed; int buttonDelay =150; //連絡先のバウンスを処理するbouncevolatilebool gameOver =false; / *ゲームの「リズム」、imミリ秒* / int tick; int tickCounter =1; / *タイムスタンプ* / unsigned long now; / *表示* / int ship; / *初期出荷位置* / int columns [] ={0,0,0,0,0,0,0,0}; // 8列、すべてのintは行1-8.int randomInt; / ********************************* ******************************セットアップ* / void setup(){/ *初期化* / gameOver =false;数百=0; scoreArr [0] =""; scoreArr [1] =""; scoreArr [2] ="";スコア=0;ティック=300; tickCounter =1;船=3;今=ミリ秒(); buttonPressed =millis(); randomSeed(analogRead(15)); //より良い乱数for(int i =0; i <8; i ++)columns [i] =0; //デバッグ//Serial.begin(9600); // Serial.print(columns [0]); / * MAX72XXは起動時に省電力モードになっているため、ウェイクアップ呼び出しを行う必要があります* / lc.shutdown(0、false); / *明るさを中程度の値に設定します* / lc.setIntensity(0,1); / *表示をクリアします* / lc.clearDisplay(0); pinMode(pinLeft、INPUT_PULLUP); pinMode(pinRight、INPUT_PULLUP); / *割り込みにボタンを押すボタンを接続します* / attachInterrupt(digitalPinToInterrupt(pinLeft)、left、FALLING); attachInterrupt(digitalPinToInterrupt(pinRight)、right、FALLING); } / ************************************************ ***************ハンドルの左ボタンの押下* / void left(){if(millis()-buttonPressed> buttonDelay)//スイッチの接点バウンスの処理{if(ship!=0)輸送する -;それ以外の場合、出荷=7; lc.clearDisplay(0); buttonPressed =millis(); } //ゲームオーバー後、ボタンを押すとゲームが再開されますif(gameOver ==true){gameOver =false;設定(); }} / *********************************************** ****************右ボタンの押下を処理する* / void right(){if(millis()-buttonPressed> buttonDelay)//スイッチの接点バウンスを処理する{if(ship!=7 )ship ++;それ以外の場合、ship =0; lc.clearDisplay(0); buttonPressed =millis(); } //ゲームオーバー後、ボタンを押すとゲームが再開されますif(gameOver ==true){gameOver =false;設定(); }} / *********************************************** ****************ループ* / void loop(){if(millis()-now> tick){//すべてのティックを実行//スコアは次のとおりです:生き残ったティック数スコア++;今=ミリ秒(); if(tickCounter ==1){// 4番目ごとのティック//時間の経過とともにゲームを高速化するtick =tick / 1.02; //列をランダムに選択randomInt =random(0、8); //列に小惑星が存在しない場合は、行1に小惑星を作成します。if(columns [randomInt] ==0){columns [randomInt] =1; }} if(tickCounter!=4)tickCounter ++;それ以外の場合、tickCounter =1; //すべての列に対して実行for(int i =0; i <8; i ++){if(columns [i] ==10)//表示されていないときに小惑星を削除するcolumns [i] =0; if(columns [i]!=0)//小惑星を落下させるcolumns [i] ++; } lc.clearDisplay(0); } / *表示への書き込み* / // ship lc.setLed(0、7、ship、true); //小惑星for(int i =0; i <8; i ++){if(columns [i]> 0)lc.setLed(0、columns [i] -2、i、true); lc.setLed(0、columns [i] -3、i、true); } //船と小惑星の衝突を検出if(columns [ship] ==10またはcolumns [ship] ==9){lc.clearDisplay(0); //爆発をアニメートするfor(int i =0; i <4; i ++){lc.setLed(0,7、ship + i、true); lc.setLed(0,7、ship-i、true); lc.setLed(0,7-i、ship + i、true); lc.setLed(0,7-i、ship-i、true); lc.setLed(0,7-1.5 * i、ship、true); //爆発音unsignedlong time =millis(); int randomSound =1000; while(millis()-時間<=250){randomSound--;トーン(9、ランダム(ランダムサウンド、1000)); //別のサウンドのrandom()のパラメータを変更します} lc.clearDisplay(0); noTone(9); } delay(500); / *スコアを表示します* / scoreStr =String(score); //スコアから1桁を取得しますintscoreArr [0] =scoreStr.charAt(0); scoreArr [1] =scoreStr.charAt(1); scoreArr [2] =scoreStr.charAt(2); //マトリックスは最大2桁(最大99)しか表示できませんif(score <100){for(int i =0; i <2; i ++){if(scoreArr [i] =="0")draw0( 1 + i * 4); if(scoreArr [i] =="1")draw1(1 + i * 4); if(scoreArr [i] =="2")draw2(1 + i * 4); if(scoreArr [i] =="3")draw3(1 + i * 4); if(scoreArr [i] =="4")draw4(1 + i * 4); if(scoreArr [i] =="5")draw5(1 + i * 4); if(scoreArr [i] =="6")draw6(1 + i * 4); if(scoreArr [i] =="7")draw7(1 + i * 4); if(scoreArr [i] =="8")draw8(1 + i * 4); if(scoreArr [i] =="9")draw9(1 + i * 4); }} //スコアが100より大きい場合、スコアの最後の2桁のみを表示しますelse {for(int i =1; i <3; i ++){if(scoreArr [i] =="0")draw0(1+( i-1)* 4); if(scoreArr [i] =="1")draw1(1+(i-1)* 4); if(scoreArr [i] =="2")draw2(1+(i-1)* 4); if(scoreArr [i] =="3")draw3(1+(i-1)* 4); if(scoreArr [i] =="4")draw4(1+(i-1)* 4); if(scoreArr [i] =="5")draw5(1+(i-1)* 4); if(scoreArr [i] =="6")draw6(1+(i-1)* 4); if(scoreArr [i] =="7")draw7(1+(i-1)* 4); if(scoreArr [i] =="8")draw8(1+(i-1)* 4); if(scoreArr [i] =="9")draw9(1+(i-1)* 4); } //スコアの最初の桁( "100")はドットとして表示されます:100ごとに1つのドット。 for(int i =1; i <10; i ++){if(scoreArr [0] ==String(i))百=i; } for(int i =1; i <=数百; i ++){lc.setLed(0,0、i-1、true); lc.setLed(0,1、i-1、true); delay(200); }} gameOver =true; while(gameOver ==true){//ボタンが押されるのを待つ以外に何もしない}}} ///////////////////////////スコア桁///////////////////////////////////////// void draw1(int position){ lc.setColumn(0,0 + position、B00001000); lc.setColumn(0,1 + position、B00011111); } void draw2(int position){lc.setColumn(0,0 + position、B00010111); lc.setColumn(0,1 + position、B00010101); lc.setColumn(0,2 + position、B00011101); } void draw3(int position){lc.setColumn(0,0 + position、B00010001); lc.setColumn(0,1 + position、B00010101); lc.setColumn(0,2 + position、B00011111); } void draw4(int position){lc.setColumn(0,0 + position、B00011100); lc.setColumn(0,1 + position、B00000100); lc.setColumn(0,2 + position、B00011111); } void draw5(int position){lc.setColumn(0,0 + position、B00011101); lc.setColumn(0,1 + position、B00010101); lc.setColumn(0,2 + position、B00010111); } void draw6(int position){lc.setColumn(0,0 + position、B00011111); lc.setColumn(0,1 + position、B00010101); lc.setColumn(0,2 + position、B00010111); } void draw7(int position){lc.setColumn(0,0 + position、B00010000); lc.setColumn(0,1 + position、B00010011); lc.setColumn(0,2 + position、B00011100); } void draw8(int position){lc.setColumn(0,0 + position、B00011111); lc.setColumn(0,1 + position、B00010101); lc.setColumn(0,2 + position、B00011111); } void draw9(int position){lc.setColumn(0,0 + position、B00011101); lc.setColumn(0,1 + position、B00010101); lc.setColumn(0,2 + position、B00011111); } void draw0(int position){lc.setColumn(0,0 + position、B00011111); lc.setColumn(0,1 + position、B00010001); lc.setColumn(0,2 + position、B00011111); } 

回路図


製造プロセス

  1. チェス
  2. ピンボール
  3. フットボール
  4. ArduinoPongゲーム-OLEDディスプレイ
  5. DIY 37LEDルーレットゲーム
  6. MAX7219を搭載した24x16マトリックスのArduinoPongゲーム
  7. 自家製16x8マトリックス上のArduinoNanoTetr​​isゲーム
  8. ジョイスティックゲーム
  9. LEDマトリックス+モーションセンサードアディスプレイ[ArduinoHoliday]
  10. 音による8倍のLED照明
  11. Arduino Quadruped