本著人人為我,我為人人的態度,希望能幫助到和我一樣的菜鳥:P
材料清單:Arduino uno一塊
MAX7219點陣模塊一個
普通按鈕2個
1K電阻2個
杜邦線若干
好了,我先上一個視頻吧
- #include <Sprite.h>
- #include <Matrix.h>
- #include <MsTimer2.h>
- Matrix myGame = Matrix(8,9,10,1);//
- int x = 3;//球拍在x方向的位置
- int y = 0;//球拍在y方向的位置
- int x1;//球出現的x方向位置
- int y1 = 0;//球出現的y方向位置
- Sprite qiupai = Sprite(
- 2,2,
- B11,
- B11
- );//球拍的圖案
- Sprite quxiao = Sprite(
- 7,8,
- B0000000,
- B0000000,
- B0000000,
- B0000000,
- B0000000,
- B0000000,
- B0000000,
- B0000000
- );//取消所有圖案
- Sprite quxiaoqiupai = Sprite(
- 7,1,
- B0000000
- );//取消球拍圖案
- Sprite qiu = Sprite(
- 1,1,
- B1
- );//球的圖案
- Sprite XX = Sprite(
- 7,6,
- B0000000,
- B0100010,
- B0010100,
- B0001000,
- B0010100,
- B0100010
- );//失敗后的圖案
- void setup()
- {
- myGame.clear();//清楚,重啟
- myGame.setBrightness(4);//設置顯示亮度
- myGame.write(3,7,qiupai);//初始化顯示球拍
- randomSeed(analogRead(0));//隨機初始化球的位置
- x1 = random(1,7);//設置隨機范圍
- pinMode(2,OUTPUT);//定義2號引腳為輸出模式
- pinMode(3,OUTPUT);//定義3號引腳為輸出模式
- MsTimer2::set(10,flash);//設置定時器中斷,中斷函數為flash
- MsTimer2::start();//啟動定時器中斷
- }
- void loop()
- {
- myGame.write(x1,y1,qiu);//顯示球
- delay(100);//球降落的速度延時100ms
- y1 ++;//球的y軸不斷增加,表示球一步步降落
- if(y1 == 8)//如果球降到最底部
- {
- if((x1 == x)||(x1 == x + 1))//此時,如果球的位置與球拍的位置是重合的,表示接球成功
- {
- randomSeed(analogRead(0));//系統重新隨機安排另一個球
- x1 = random(1,7);//設置隨機范圍
- y1 = 0;//球首先出現在最高點
- }
- else//否沒有接到球
- {
- for(int i = 0;i < 6;i ++)//閃爍顯示X,代表剛剛任務失敗
- {
- myGame.write(1,0,XX);//顯示X
- delay(500);
- myGame.write(1,0,quxiao);//隱藏
- delay(500);
- }
- randomSeed(analogRead(0));//過了6秒后,系統游戲重新開始,球隨機回到起點
- x1 = random(1,7);
- y1 = 0;
- }
- }
- myGame.write(1,0,quxiao);//關閉顯示,消除重影
- }
- void flash() //中斷處理函數,主要處理,按鍵隨時按下時,球拍能及時響應
- {
- if(digitalRead(3) == HIGH)//如果右邊被按下,球拍往右走
- {
- delay(200);//
- x ++;//橫坐標,自加1
- if(x == 6)//如果加到最右邊時
- {
- x = 5;//限定最右達到第5格
- }
- while(digitalRead(3) == HIGH)//等待按鍵松開
- {
-
- }
- }
- if(digitalRead(2) == HIGH)//如果左邊被按下,球拍往左邊走
- {
- delay(200);
- x --;//橫坐標,自減1
- if(x == 0)//如果減到最左邊時
- {
- x = 1;//限定最左邊能做能到達第一格
- }
- while(digitalRead(2) == HIGH)//等待按鍵松開
- {
-
- }
- }
- myGame.write(x,7,qiupai);//顯示球拍
- delay(100);
- myGame.write(1,7,quxiaoqiupai);//消除重影
- delay(100);
- }
復制代碼
|