查看: 2683|回复: 7

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

[复制链接]

该用户从未签到

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

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

爱剪辑-我的视频_20180718135939.JPG



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

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


kittenblock中小学创客名师推荐的图形化编程软件

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);
  }
}




  • TA的每日心情
    无聊
    2018-7-17 17:38
  • 签到天数: 4 天

    [LV.2]偶尔看看I

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

    [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 | 显示全部楼层
    大佬,请问有没有连接图,参考一下
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    [限时福利]5分钟带你快速了解新一代开发板:M5STACK
    [限时福利]5分钟带你快速
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    arduino实现L298N控制工业步进电机
    arduino实现L298N控制工业
    求助 L298N是ST公司生产的一种高电压、大电流电机驱动芯片。该芯片采用15脚封装。主
    小白请教个问题
    小白请教个问题
    同样一个程序,用最新版本的IDE不能编译, 用老版本的却能编译,问题能处在哪里呢?
    GPS仪表
    GPS仪表
    本项目使用GPS模块实现速度测量,arduino需要安装TinyGPS PLUS库,屏幕显示速度、
    分享《开始使用uArm》侵删!
    分享《开始使用uArm》侵删
    GettingStarted with uArm v1.1 Before assembling the uArm, youshould first instal
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表