ピクセルチェイサーゲーム
コンポーネントと消耗品
> ![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 |
アプリとオンラインサービス
> ![]() |
|
このプロジェクトについて
私はかつてゲーム開発者でしたが、モバイルゲーム開発の聖杯の1つは、究極の「ワンタップ」ゲームを作ることです。
マイクロコントローラー、ボタン、および何らかの形の視覚的フィードバックを使用して、すばらしいワンクリックの「物理」ゲームを作成できるかどうかを確認したかったのです。
PIXEL CHASERのご紹介!
かなり簡単なビルドなので、すぐに始めましょう!
どの部品が必要ですか? <図>

次のものが必要です:
- Arduino Nano(または2つの使用可能なIOピンを備えた任意のマイクロコントローラー)
- RGB「NeoPixel」リングまたはストリップ
- モーメンタリボタン
- 10k抵抗
- ブレッドボード
- ワイヤー
ステップ1
ブレッドボードの一方の端にNanoを配置し、端にUSBコネクタを配置します。
<図>
ステップ2
ブレッドボードのもう一方の端、できるだけ端に近づけて、簡単にアクセスできるようにボタンを配置します。
<図>
ステップ3
ボタンの片側とブレッドボードのGNDレールの間に10kの抵抗を追加します。これは、ボタンのデフォルトのLOW状態になります。マイクロコントローラやその他のコンポーネントに損傷を与える可能性があるため、ボタンを押したときにVCCとGNDが短絡しないように抵抗を使用しています。
<図>
ステップ4
ボタンの反対側からのジャンパー線をVCCレールに接続します。ボタンを押すと、ボタンが高くなります。
<図>
ステップ5
ボタンのGND側からNanoのD3にジャンパー線を接続します。 D3を読んで、ボタンの状態を判断します。
<図>
ステップ6
RGBストリップ/リングをブレッドボードに配線します。 NanoのVCCワイヤをVCC電源レールに接続し、GNDワイヤをGND電源レールに接続し、DI(データ入力)ワイヤをD4に接続します。 D4でピクセルを制御します。
<図>
ステップ7
Nanoの5VピンからVCC電源レールにジャンパー線を接続してから、NanoのGNDピンからGND電源レールにジャンパー線を接続します。
<図>
ステップ8
コードをアップロードして再生してください!
<図>
このプロジェクトを楽しんでいただけたでしょうか。
このような楽しいプロジェクトは、私のYouTubeチャンネルで見つけることができます。
フォローミー:
http://twitter.com/unexpectedmaker
https://www.facebook.com/unexpectedmaker/
https://www.instagram.com/unexpectedmaker/
https://www.patreon.com/unexpectedmaker
https://www.tindie.com/stores/seonr/
コード
- ピクセルチェイサーゲーム-Arduinoコード
ピクセルチェイサーゲーム-Arduinoコード Arduino
このコードをArduinoに追加し、ビルド手順に従ってください!/ * ---------------------------------- -----------------------------------------ピクセルチェイサーゲーム-v1.0.0-24 / 03 / 2019.AUTHOR / LICENSE:Created by Seon Rozenblum [email protected] 2016 License:GNU GPL v3 http://www.gnu.org/licenses/gpl-3.0.htmlLINKS:Blog:unexpectedmaker.comYOUTUBE:youtube .com / c / unexpectedmakerDISCLAIMER:このソフトウェアは「現状有姿」で提供され、技術サポートはなく、明示または黙示を問わず、あらゆる目的での有用性について保証されません。目的:このコントローラーは、リフローマスターで実行されるソフトウェアです。予期しないメーカーによって製造されたトースターオーブンコントローラーHISTORY:24/03/2019 v1.0.0-初期リリース注:これは進行中の作業です...------------------- -------------------------------------------------- ------ * ///これらのライブラリはライブラリマネージャーからインストールする必要があります#include#include "OneButton.h "//ストリップが接続されているGPIOは何ですか#definePIXELPIN 4 //ストリップ内のNeoPixelsの数#defineNUMPIXELS 24 //ボタンが接続されているGPIOは何ですか?#define BUTTON_TAP 3 //デフォルトのlowOneButtonを使用してボタンを初期化しますbuttonTAP(BUTTON_TAP、false); //ピクセルストリップを初期化Adafruit_NeoPixelpixels =Adafruit_NeoPixel(NUMPIXELS、PIXELPIN、NEO_GRB + NEO_KHZ800); //一連の変数intplayerIndex =-1; int playerIndexTrail =-1; int playerDirection =1; float nextMove =0; float currentPlayerSpeed =150; unsigned long countdown =0; intenemyIndex =-1; int coinIndex =-1; int score =0; int bestScore =0; int lastScore =0; bool gameOver =false; void setup() {//ボタンピンを入力pinMode(BUTTON_TAP、INPUT);にします//クリック関数をボタンにアタッチしますbuttonTAP.attachClick(singleClick); buttonTAP.attachLongPressStart(longClick); //ストリップを初期化し、明るさを20%pixels.begin();に設定します。 pixel.setBrightness(20); //プレーヤーが表示されて移動を開始する前に2秒のカウントダウンを設定しますcountdown =millis()+ 2000;} void loop(){//すべてのサイクルでボタンの状態をチェックする必要がありますbuttonTAP.tick(); //ゲームがゲームオーバー状態の場合、(gameOver)return;の場合はループを早期に終了します。 //レベルのピクセル表示状態を設定します//これは敵の位置とコインの位置を設定しますSetLevel(); //プレーヤーの準備が整うまで1秒待ちますif(countdown> millis()){pixels.show();戻る; } //すべてのプレーヤーの表示、移動、およびゲームロジックはここにありますDisplayPlayer(); //これにより、更新されたピクセルカラーがハードウェアに送信されます。 pixel.show();} //レベルをクリアし、すべてのピクセルをblackvoid ClearLevel(){for(int i =0; i =0)pixels.setPixelColor(playerIndexTrail、pixels.Color(0、0、0)); if(playerIndex> =0){pixels.setPixelColor(playerIndex、pixels.Color(0、100、0)); playerIndexTrail =playerIndex; } //プレーヤーを現在の方向に移動しますplayerIndex + =playerDirection; //プレーヤーをストリップの端でラップしますif(playerIndex <0)playerIndex =NUMPIXELS-1; else if(playerIndex ==NUMPIXELS)playerIndex =0; pixel.setPixelColor(playerIndex、pixels.Color(0、255、0)); //プレーヤーはコインを打ちましたか? //もしそうなら、スコアを上げ、コインと敵の位置をリセットし、レベルをクリアします//次のループSetLevel()は敵とコインをリセットします//コインがヒットするたびにプレイヤーの速度も上がりますif(playerIndex ==coinIndex) {enemyIndex =-1; coinIndex =-1;スコア++; currentPlayerSpeed =Constraint(currentPlayerSpeed-10、50、150); ClearLevel(); pixel.setPixelColor(playerIndex、pixels.Color(0、255、0)); } //プレイヤーは敵を攻撃しましたか? //最後/最高のスコアを設定し、ゲームオーバーを呼び出しますif(playerIndex ==enemyIndex){lastScore =score; if(スコア> =bestScore)bestScore =スコア;ゲームオーバー(); gameOver =true;敵のインデックス=-1; coinIndex =-1; playerIndex =-1; }}} //シングルボタンclickvoidsingleClick(){//プレーヤーが表示されるまで入力なしif(countdown> millis())return; //プレーヤーの方向を切り替えますplayerDirection =-playerDirection;} //長いボタンclickvoidlongClick(){//ゲームオーバー状態を切り替えます//ゲームオーバーの場合はゲームを開始し、そうでない場合は進行中のゲームをキャンセルしますgameOver =!gameOver; if(gameOver){enemyIndex =-1; coinIndex =-1; playerIndex =-1; currentPlayerSpeed =150; ClearLevel(); } else {ClearLevel();スコア=0; currentPlayerSpeed =150;カウントダウン=ミリ秒()+ 2000; }}
製造プロセス