忍者ドル-LCDゲーム
コンポーネントと消耗品
> ![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 2 | |||
![]() |
| × | 1 | |||
![]() |
| × | 2 | |||
![]() |
| × | 4 | |||
![]() |
| × | 2 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 |
必要なツールとマシン
> ![]() |
|
このプロジェクトについて
これはシンプルなLCDゲームです。私のインスピレーションはGoogleChromeの恐竜ゲームでしたが、さらにいくつかの変更を加えました。ドルの戦士は絶えず動き、障害物を避けて「スター」ポイントを集めるためにジャンプすることができます。障害物を飛び越えた場合は1ポイント、星をキャッチした場合は5ポイントを獲得します。彼はまた、彼の前にある障害物を撃って取り除くことができます。彼がジャンプするかシュートするかを示すLEDダイオードもあります。彼が10、20、または30ポイントを集めると、彼は以前より速く動き始めます。彼が50ポイントを集めると、あなたが勝ちます。障害物にぶつかると負けます。もちろん、これらの境界はコードで簡単に変更できます。また、戦士がジャンプしたり撃ったりしたときに鳴るパッシブブザーと、負けたり勝ったりしたときに特別なメロディーを追加しました。これはここでの私の最初のプロジェクトであり、あなたがそれを気に入ってくれることを願っています。コメントとレビューをください。
ビデオ
接続
LCD(Liquid Crystal Display)モジュールには、下側に16ピンのオスヘッダーがあります。写真のようにこれをブレッドボードに差し込みます。 LCDに電力を供給して制御するすべての電子信号は、このヘッダーを通過します。
これらのピンは(左から右へ):
- GND-電源グランド信号
- VCC-正の電力信号
- V0-コントラスト調整
- RS-レジスタ選択
- R / W-読み取り/書き込み選択
- E-信号を有効にする
- D0-データビット0(ここでは使用されません)
- D1-データビット1(ここでは使用されません)
- D2-データビット2(ここでは使用されません)
- D3-データビット3(ここでは使用されません)
- D4-データビット4
- D5-データビット5
- D6-データビット6
- D7-データビット7
- A-バックライトLEDポジティブ
- K-バックライトLEDネガティブ
ジャンパー線を使用して、Arduinoの5V信号をブレッドボードの上部にある赤い列に接続します。
ジャンパー線を使用して、ArduinoのGND信号をブレッドボードの上部にある青い列に接続します。
- VSSピンをアースに接続します
- VDDピンを5V信号に接続します
- V0ピンからポテンショメータ出力ピンへ
- RSピンからArduinoピン12へ
- 地面へのRWピン
- EピンからArduinoピン11へ
- D4からArudinoピン5
- D5からarduinoピン4
- D6からArduinoピン3
- D7からArduinoピン2へ
- 5V信号へのピン
- GND信号へのKピン
残りのポテンショメータピンを5V信号とGND信号に接続します。
3ピンのピエゾブザーがある場合は、SピンをArduino 7ピンに接続し、「-」ピンをGNDに接続し、残りのピンを5V信号に接続します。 2つのピエゾブザーをピン留めしている場合は、1つのピンをGND信号に接続し、もう1つのピンをArduino7ピンに接続します。
回路図に従ってスイッチボタンを接続します。最初のボタン(ジャンプボタン)はArduinoピン1に接続され、2番目(シュートボタン)はArduinoピン6に接続されます。LEDはボタンによってのみ制御され、Arduinoによっては制御されません。アノードはArduinoに接続されているボタンピンに接続され、カソードはアースに接続されています。
コード
- dollar_warrior
dollar_warrior Arduino
#includeconst int rs =12、en =11、d4 =5、d5 =4、d6 =3、d7 =2; const int buttonPin1 =1; const int buttonPin2 =6; const int buzzer =7; unsigned long pts =0; // set buttonstatesbool buttonState1 =0; bool buttonState2 =0; //障害物の位置のランダム数intrandomNums [6]; //障害物の数のランダム数intrandomNum =0; // ptsintの位置のランダム数randomNums1 [3]; // ptsintの数のランダム数randomNum1 =0; //開始遅延時間。徐々に減少しますunsignedint myDelay =500; //このブール値を作成して、button2が押されているかどうかを確認します。最初のforループで1回押され、itbool temp =0の終わりまで障害物が書き込まれないようにします; //この変数は、射撃中の戦士の位置を格納します。戦士には16の位置があるため、16の位置が存在する可能性があります。inttempI[16]; // iこのブール値を使用して、ポイントがキャッチされているかどうかを確認しますbool temp1 =0; //この変数を使用して、キャッチされたポイントの位置を格納します。最初のforループの1回の反復ですべてのポイントの位置を格納するには、配列である必要があります。 1つの位置だけを格納した場合、「古い」ポイントは新しい反復で戻ってきますint tempI1 [3]; //この変数を使用して、戦士のショット数を取得します。これは、配列の長さでもありますtempIint button2IsPressed =0; LiquidCrystal lcd(rs、en、d4、d5、d6、d7); void setup(){/ / LCDの列と行の数を設定します:lcd.begin(16、2); //ボタンピンモードを設定しますpinMode(buttonPin1、INPUT); pinMode(buttonPin2、INPUT); pinMode(ブザー、出力); lcd.setCursor(4,0); lcd.print( "THE GAME"); lcd.setCursor(2,1); lcd.print( "STARTS IN"); lcd.print( "5"); delay(1000); lcd.setCursor(12,1); lcd.print( "4"); delay(1000); lcd.setCursor(12,1); lcd.print( "3"); delay(1000); lcd.setCursor(12,1); lcd.print( "2"); delay(1000); lcd.setCursor(12,1); lcd.print( "1"); delay(1000); lcd.clear();} void loop(){ここで:randomNum =random(5); for(int i =0; i 9 &&pts <20){lcd.setCursor(14,0); myDelay =400; } else if(pts> 19 &&pts <30){lcd.setCursor(14,0); myDelay =300; } else if(pts> 29 &&pts <50){myDelay =200; lcd.setCursor(14,0); } else if(pts> =50){pts =0; myDelay =500; lcd.clear(); lcd.setCursor(5,0); lcd.print( "VICTORY");トーン(ブザー、262); delay(200);トーン(ブザー、330); delay(200);トーン(ブザー、392); delay(100);トーン(ブザー、330); delay(100);トーン(ブザー、392); delay(100);トーン(ブザー、523); delay(200); noTone(ブザー); delay(3000); lcd.clear();ここに移動します。 } else lcd.setCursor(15,0); lcd.print(pts); buttonState1 =digitalRead(buttonPin1); buttonState2 =digitalRead(buttonPin2); //戦士が撃たなかった、または撃ったがジャンプした場合に障害物を設定するif(!temp){for(int j =0; j randomNums [j]){lcd.setCursor(randomNums [j]、1); lcd.print( "#"); }}} //設定ptsif(!temp1){for(int j =0; j
回路図
game_aUIjA6VZxX.fzz 
製造プロセス