查看: 3297|回复: 8

[其他] [游戏]8*8点阵图构造的躲避方块游戏

[复制链接]

该用户从未签到

发表于 2018-7-17 22:50 | 显示全部楼层 |阅读模式
本帖最后由 a1274206989 于 2018-7-18 14:02 编辑

视频地址:https://www.bilibili.com/video/av27070548

爱剪辑-我的视频_20180718135939.JPG



高中生初学者第一次玩单片机,用8*8制作了一个游戏,参考了众多帖子终于做出了这个躲避障碍物的游戏。。。。

想指教还有什么改进的地方。


[mw_shl_code=cpp,true]int L[]={A1,A2,A3,A4,9,10,11,12};
int H[]={1,2,3,4,5,6,7,8,9};
int zuo=A5;
int you=13;
int shu=0;
int v=0;
unsigned char me[8][8]=
{
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
};
unsigned char one[8][8]=
{
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
};

unsigned char zuizhong[8][8]=
{
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
};
unsigned char GG[8][8]=
{
0,0,0,0,0,0,0,0,
0,1,0,0,0,0,1,0,
0,0,1,0,0,1,0,0,
0,0,0,1,1,0,0,0,
0,0,0,1,1,0,0,0,
0,0,1,0,0,1,0,0,
0,1,0,0,0,0,1,0,
0,0,0,0,0,0,0,0,
};

void setup() {
  // put your setup code here, to run once:
  randomSeed(analogRead(A1));
  for(int i=0;i<8;i++){
    pinMode(L,OUTPUT);
    pinMode(H,OUTPUT);
  }

}
void loop() {
  int xunhuan=0;
  int i=0;
  int j=0;
  int time=0;
  int t=0;
  int d=0;
  // put your main code here, to run repeatedly:
  digitalWrite(you,HIGH);
  digitalWrite(zuo,HIGH);
  while( xunhuan==0 ) {
    if ((digitalRead(you)) == (LOW)){shu=shu+1;}
    if ((digitalRead(zuo)) == (LOW)){shu=shu-1;}
    if (shu>6){shu=6;} if (shu<0){shu=0;}
    //清空数组
     for (i=0;i<2;i++){
       for (j=0;j<8;j++){
         one[j][i+6]=0;
       }
     }
     //me[shu][6]=1;me[shu][7]=1;me[shu+1][6]=1;me[shu+1][7]=1;//确定目前位置
     one[shu][6]=1;one[shu][7]=1;one[shu+1][6]=1;one[shu+1][7]=1;
     chonghe();
     show(zuizhong);
     delay(1);
   
   
    time=time+1;t=t+1;
    //移动障碍物
    if(t>1){
      t=0;
      for (i=7;i>-1;i--){
        for (j=0;j<8;j++){
          if (i!=7){ me[j][i+1]=me[j];}
          me[j]=0;
        }
      }
    }
   
    if (time>10){
      time=0;
      //清空上行
      for (i=0;i<2;i++){
       for (j=0;j<8;j++){
         me[j]=0;
       }
     }
      
      //生成障碍物
      d=random(1,5);
      d=(d-1)*2;
      me[d][0]=1;me[d][1]=1;me[d+1][0]=1;me[d+1][1]=1;
      
      d=random(1,5);
      d=(d-1)*2;
      me[d][0]=1;me[d][1]=1;me[d+1][0]=1;me[d+1][1]=1;
      
    }
}

  //Serial.println(shu);
  
}

void chonghe(){
  int m=0;
  int n=0;
  for (m=0;m<8;m++){
    for (n=0;n<8;n++){
      zuizhong[m][n]=0;
      if(me[m][n]==1){zuizhong[m][n]=1;}
      if(one[m][n]==1){
        zuizhong[m][n]=1;
        if(one[m][n]=me[m][n]){v=0;show(GG);}
      }
    }
  }
  
  


}
void show(unsigned char dat[8][8]){
  int sudu=12;
  v=v+1;
  if (v>50){sudu=11;}
  if (v>100){sudu=10;}
  if (v>300){sudu=9;}
  if (v>400){sudu=8;}
  if (v>600){sudu=7;}
  if (v>800){sudu=6;}
  if (v>1000){sudu=5;}
  if (v>3000){sudu=4;}
  if (v>5000){sudu=3;}
  for(int z=0;z<sudu;z++){
  
  for(int k=0;k<8;k++){
    digitalWrite(H[k],LOW);
   
    for(int l=0;l<8;l++){
      digitalWrite(L[l],dat[k][l]);
    }
    delay(1);
    Clear();
  }
  
  }
}

void Clear(){
  for(int p=0;p<8;p++){
    digitalWrite(L[p],LOW);
    digitalWrite(H[p],HIGH);
  }
}
[/mw_shl_code]



  • TA的每日心情
    慵懒
    2020-4-16 15:21
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2018-10-7 12:55 | 显示全部楼层
    已经不错了。
    不过,挑个刺,最好变量名用英文,拼音容易出现歧义。
  • TA的每日心情
    开心
    2020-8-19 08:39
  • 签到天数: 818 天

    [LV.10]以坛为家III

    发表于 2018-7-18 09:17 | 显示全部楼层
    首先 你的代码定义是否可以规范点  其次 代码逻辑也可以优化

    该用户从未签到

     楼主| 发表于 2018-7-18 13:55 | 显示全部楼层
    单片机菜鸟 发表于 2018-7-18 09:17
    首先 你的代码定义是否可以规范点  其次 代码逻辑也可以优化

    哈哈,我也是这么觉得,毕竟第一个用C语言语法写出的。。。感觉思维欠妥啥的。

    该用户从未签到

    发表于 2018-10-6 15:19 来自手机 | 显示全部楼层
    [mw_shl_code=cpp,true]int L[]={A1,A2,A3,A4,9,10,11,12}这句是什么意思啊?

    该用户从未签到

    发表于 2018-10-6 15:21 来自手机 | 显示全部楼层
    void show(unsigned char dat[8][8]){   int sudu=12;   v=v+1;   if (v>50){sudu=11;}   if (v>100){sudu=10;}   if (v>300){sudu=9;}   if (v>400){sudu=8;}   if (v>600){sudu=7;}   if (v>800){sudu=6;}   if (v>1000){sudu=5;}   if (v>3000){sudu=4;}   if (v>5000){sudu=3;}   for(int z=0;z<sudu;z++){这一串要达到的目的是?
  • TA的每日心情
    开心
    2018-12-25 22:13
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2018-10-6 17:42 | 显示全部楼层
    真不错,回头试试。

    该用户从未签到

    发表于 2019-10-9 14:29 | 显示全部楼层
    大佬,请问有没有连接图,参考一下
  • TA的每日心情
    开心
    2020-9-19 02:38
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2020-9-16 04:44 | 显示全部楼层
    是个好贴,顶!
    是个好贴,顶!
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    ESP8266物联网创意点阵时钟,女朋友看了都想要!
    ESP8266物联网创意点阵时
    [md]本文作者:默 & 铁熊 前段时间我在网上看到了一款很有意思的点阵时钟,它可以
    小白救助 让LED等按顺序亮的程序
    小白救助 让LED等按顺序亮
    如何让4个led按图片的顺序依次亮 就算第一个亮一次 第二个亮两次 第三个亮三次 第四个
    让LED等按顺序亮的程序
    让LED等按顺序亮的程序
    网友eobeom提问帖,问题是:如何让4个led按图片的顺序依次亮,第一个亮一次、 第二个
    新手求助!blinker同步到米家,但手机里的小爱控制不了ESP8266
    新手求助!blinker同步到
    搞了两个晚上还是没解决,请大神帮忙看看 我的手机是苹果手机,下了点灯,米家,小爱
    【干货分享】mega2560原理图PCB图纸altium designer18
    【干货分享】mega2560原理
    分享一下mega2560的板子 AD版本 **** 本内容被作者隐藏 **** ergo
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表