极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15159|回复: 0

尝试用MAX7219点阵模块做了个小游戏

[复制链接]
发表于 2017-7-24 11:29:51 | 显示全部楼层 |阅读模式
本帖最后由 小华盛顿 于 2017-7-24 11:54 编辑

本着人人为我,我为人人的态度,在极客工坊学了很多东西,第一次出来发帖也算支持下极客工坊吧,希望能帮助到和我一样的菜鸟
材料清单:Arduino uno一块
                MAX7219点阵模块一个
                普通按钮2个
                1K电阻2个
                杜邦线若干
好了,我先上一个视频吧


代码如下
  1. #include <Sprite.h>
  2. #include <Matrix.h>
  3. #include <MsTimer2.h>

  4. Matrix myGame = Matrix(8,9,10,1);//
  5. int x = 3;//球拍在x方向的位置
  6. int y = 0;//球拍在y方向的位置
  7. int x1;//球出现的x方向位置
  8. int y1 = 0;//球出现的y方向位置


  9. Sprite qiupai = Sprite(
  10.          2,2,
  11.          B11,
  12.          B11
  13. );//球拍的图案
  14. Sprite quxiao = Sprite(
  15.          7,8,
  16.          B0000000,
  17.          B0000000,
  18.          B0000000,
  19.          B0000000,
  20.          B0000000,
  21.          B0000000,
  22.          B0000000,
  23.          B0000000

  24. );//取消所有图案
  25. Sprite quxiaoqiupai = Sprite(
  26.          7,1,
  27.          B0000000

  28. );//取消球拍图案
  29. Sprite qiu = Sprite(
  30.          1,1,
  31.          B1
  32. );//球的图案

  33. Sprite XX = Sprite(
  34.         7,6,
  35.          B0000000,
  36.          B0100010,
  37.          B0010100,
  38.          B0001000,
  39.          B0010100,
  40.          B0100010
  41. );//失败后的图案



  42. void setup()
  43. {
  44.   myGame.clear();//清楚,重启
  45.   myGame.setBrightness(4);//设置显示亮度
  46.   myGame.write(3,7,qiupai);//初始化显示球拍
  47.   randomSeed(analogRead(0));//随机初始化球的位置
  48.   x1 = random(1,7);//设置随机范围
  49.   pinMode(2,OUTPUT);//定义2号引脚为输出模式
  50.   pinMode(3,OUTPUT);//定义3号引脚为输出模式
  51.   MsTimer2::set(10,flash);//设置定时器中断,中断函数为flash
  52.   MsTimer2::start();//启动定时器中断
  53. }

  54. void loop()
  55. {  
  56.    myGame.write(x1,y1,qiu);//显示球
  57.    delay(100);//球降落的速度延时100ms
  58.    y1 ++;//球的y轴不断增加,表示球一步步降落
  59.    if(y1 == 8)//如果球降到最底部
  60.    {
  61.       if((x1 == x)||(x1 == x + 1))//此时,如果球的位置与球拍的位置是重合的,表示接球成功
  62.       {
  63.         randomSeed(analogRead(0));//系统重新随机安排另一个球
  64.         x1 = random(1,7);//设置随机范围
  65.         y1 = 0;//球首先出现在最高点
  66.       }
  67.       else//否没有接到球
  68.       {
  69.         for(int i = 0;i < 6;i ++)//闪烁显示X,代表刚刚任务失败
  70.         {
  71.           myGame.write(1,0,XX);//显示X
  72.           delay(500);
  73.           myGame.write(1,0,quxiao);//隐藏
  74.           delay(500);
  75.         }
  76.         randomSeed(analogRead(0));//过了6秒后,系统游戏重新开始,球随机回到起点
  77.         x1 = random(1,7);
  78.         y1 = 0;
  79.       }
  80.    }
  81.    myGame.write(1,0,quxiao);//关闭显示,消除重影
  82. }

  83. void flash() //中断处理函数,主要处理,按键随时按下时,球拍能及时响应
  84. {                        
  85.   if(digitalRead(3) == HIGH)//如果右边被按下,球拍往右走
  86.   {
  87.     delay(200);//
  88.     x ++;//横坐标,自加1
  89.     if(x == 6)//如果加到最右边时
  90.     {
  91.       x = 5;//限定最右达到第5格
  92.     }
  93.     while(digitalRead(3) == HIGH)//等待按键松开
  94.     {
  95.       
  96.     }
  97.   }
  98.   if(digitalRead(2) == HIGH)//如果左边被按下,球拍往左边走
  99.   {
  100.     delay(200);
  101.     x --;//横坐标,自减1
  102.     if(x == 0)//如果减到最左边时
  103.     {
  104.       x = 1;//限定最左边能做能到达第一格
  105.     }
  106.     while(digitalRead(2) == HIGH)//等待按键松开
  107.     {
  108.       
  109.     }
  110.   }
  111.   myGame.write(x,7,qiupai);//显示球拍
  112.   delay(100);
  113.   myGame.write(1,7,quxiaoqiupai);//消除重影
  114.   delay(100);
  115. }

复制代码



当然这个作品还有很多需要完善的地方,还请各位大神多多指教下。谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-25 10:21 , Processed in 0.039053 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表