<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 51單片機實現(xiàn)貪食蛇的子程序

          51單片機實現(xiàn)貪食蛇的子程序

          作者: 時間:2016-11-30 來源:網(wǎng)絡(luò) 收藏

          這是從http://www.51hei.com/bbs/dpj-20623-1.html這個制作里面截取的一段子程序,調(diào)用函數(shù)請下載里面的附件.

          下面是mysanke.h文件:

          #ifndef _MYSNAKE_H_
          #define _MYSNAKE_H_

          本文引用地址:http://www.ex-cimer.com/article/201611/323827.htm

          /*---------------------------------------------------------
          函數(shù)功能:檢測隨機落食是否壓在已存在的亮點上
          調(diào)用形式:Check_Food(*node);
          參數(shù):結(jié)構(gòu)體指針
          返回值:返回食物是否可以放置1->可以 0->不可以
          備注:食物產(chǎn)生函數(shù)調(diào)用此函數(shù)用于檢測
          ---------------------------------------------------------*/
          bit Check_Food(node *r)
          {
          if(GetStatusXY((*r).X,(*r).Y))
          (*r).S=0;//不可以放置

          else (*r).S=1;//S=1表示可以點亮
          return (*r).S;//返回狀態(tài)
          }

          /*---------------------------------------------------------
          函數(shù)功能:產(chǎn)生隨機食物
          調(diào)用形式:Creat_Food();
          參數(shù):無
          返回值:無
          備注:此函數(shù)未刷屏僅設(shè)置狀態(tài)
          ---------------------------------------------------------*/
          void Creat_Food(void)
          {
          while(!Check_Food(&food))//
          {
          food.X=TL0&0x1f;//X的范圍0->31
          food.Y=seed&0x0f;//Y的范圍0->15
          }
          //Check_Food(&food);檢測食物可以放置后執(zhí)行下面
          SetStatusXY(food.X,food.Y,food.S);//食物點亮起

          //此函數(shù)未刷屏,僅設(shè)置狀態(tài)
          }

          /*---------------------------------------------------------
          函數(shù)功能:產(chǎn)生初始化的蛇并設(shè)置其運動狀態(tài)
          調(diào)用形式:Snake_Init();
          參數(shù):無
          返回值:無
          備注:無刷新屏幕,只在緩存寫入數(shù)據(jù)
          ---------------------------------------------------------*/
          void Snake_Init(void)
          {
          ClearBuf();//清屏

          snake[0].X=3;//蛇頭
          snake[0].Y=1;
          snake[0].S=1;

          snake[1].X=2;
          snake[1].Y=1;
          snake[1].S=1;

          snake[2].X=1;//此時蛇尾
          snake[2].Y=1;
          snake[2].S=1;

          SetStatusXY(snake[0].X,snake[0].Y,snake[0].S);
          SetStatusXY(snake[1].X,snake[1].Y,snake[1].S);
          SetStatusXY(snake[2].X,snake[2].Y,snake[2].S);

          //while(!food.S)
          //Creat_Food();
          food.X=19;food.Y=13;food.S=1;
          SetStatusXY(food.X,food.Y,food.S);
          snake_status=1;
          snake_size=2;
          snake_score=0;
          snake_speed=60;
          snake_direct=RIGHT;//首先向右走。
          }

          /*---------------------------------------------------------
          函數(shù)功能:蛇的單步移動刷新
          調(diào)用形式:
          參數(shù):入口參數(shù)->移動方向(direct)
          返回值:無
          備注:僅更新顯示緩存
          ---------------------------------------------------------*/
          void Snake_Step(uint8 dir)
          {
          int8 dx,dy;//-128->127.蛇頭的位移量
          uint8 i;//循環(huán)計數(shù)器變量
          switch(dir)
          {
          case UP: dx=0;dy=-1;break;
          case DOWN:dx=0;dy=1;break;
          case LEFT:dx=-1;dy=0;break;
          case RIGHT:dx=1;dy=0;break;
          default:return ;
          }

          SetStatusXY(snake[snake_size].X,snake[snake_size].Y,0);//蛇尾消隱

          for(i=snake_size;i>0;i--)//0是蛇尾,到1為止
          {//蛇身的坐標(biāo)跟隨前一位
          snake[i].X=snake[i-1].X;
          snake[i].Y=snake[i-1].Y;
          snake[i].S=snake[i-1].S;
          }

          snake[0].X+=dx;//蛇頭坐標(biāo)更新,具有方向性
          snake[0].Y+=dy;

          //更新*超過顯示范圍處理(蛇可穿過邊界)
          if(snake[0].X>31) snake[0].X=0;//橫坐標(biāo)越界處理
          if(snake[0].X<0) snake[0].X=31;

          if(snake[0].Y>15) snake[0].Y=0;//縱坐標(biāo)越界處理
          if(snake[0].Y<0) snake[0].Y=15;

          for(i=0;i<=snake_size;i++)
          {
          SetStatusXY(snake[i].X,snake[i].Y,1);
          }
          }

          /*---------------------------------------------------------
          函數(shù)功能:游戲按鍵處理
          調(diào)用形式:Snake_Key();
          參數(shù):
          返回值:
          備注:輪詢
          ---------------------------------------------------------*/
          void Snake_Key(void)
          {
          P2|=0XF8;
          if(!KEY_UP||ir_value==0x18)
          {
          //蛇游戲方向鍵無需去抖。避免影響刷新
          if(snake_direct==UP||snake_direct==DOWN)
          ;
          else
          {
          snake_direct=UP;
          //Snake_Step(UP);
          }
          }
          else
          {
          if(!KEY_DOWN||ir_value==0x52)
          {
          if(snake_direct==DOWN||snake_direct==UP)
          ;
          else
          {
          //Snake_Step(DOWN);
          snake_direct=DOWN;
          }
          }

          else
          {
          if(!KEY_LEFT||ir_value==0x08)
          {
          if(snake_direct==LEFT||snake_direct==RIGHT)
          ;
          else
          snake_direct=LEFT;
          }

          else
          {
          if(!KEY_RIGHT||ir_value==0x5a)
          {
          if(snake_direct==LEFT||snake_direct==RIGHT)
          ;
          else
          snake_direct=RIGHT;
          }
          else
          {
          if(!KEY_ENTER||ir_value==0x43)
          {
          DelayMs(SCAN_DELAY);
          if(!KEY_ENTER||ir_value==0x43)
          {
          while(!KEY_ENTER)
          ;
          snake_status=0;//游戲結(jié)束了
          matrix.S=FIRST;
          }
          }
          else if(ir_value==0x46)
          {
          food.X=0;
          TR0=0;
          DelayMs(10);
          TR0=1;
          }
          }
          }
          }
          }

          }


          上一頁 1 2 下一頁

          關(guān)鍵詞: 51單片機貪食

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();