Змейка

Тема в разделе "Глядите, что я сделал", создана пользователем kvaks, 27 янв 2015.

  1. kvaks

    kvaks Нерд

    Предлагаю на суд свой мини проект.
    Нужна библиотека LCD5110_Graph.h


    [​IMG]



    Код (Text):


    /*
    Maxim Shishk-OFF
    */


    #include <LCD5110_Graph.h>
    LCD5110 myGLCD(8,9,10,11,12); extern unsigned char SmallFont[];   extern unsigned char TinyFont[];
    int endgame = 10;  
    int zx[300] = {26, 25, 24, 23, 22};   int zy[300] = {20, 20, 20, 20, 20};
    int len=5; int navi=4;  int x,y,mx,my;
    long pM = 0;  long per = 75;  


    void setup()
    {
     myGLCD.InitLCD();  myGLCD.setFont(SmallFont);
     for (int u=5; u <= 300-1; u++) {zx[u]=-1;zy[u]=-1;}
     mx=random(84); my=random(44);mx=random(84); my=random(44);
    }



    void loop()
    {

    int b0=analogRead(A0);  int b1=analogRead(A1);
    if ((b0 < 400)and(navi!=4)) {navi=3;}  if ((b0 > 600)and(navi!=3)) {navi=4;} if ((b1 < 400)and(navi!=1)) {navi=2;}  if ((b1 > 600)and(navi!=2)) {navi=1;}
    if (zx[0] < 0)  {endgame=0;}   if (zx[0] > 83) {endgame=0;} if (zy[0] < 0)  {endgame=0;}   if (zy[0] > 49) {endgame=0;}
       

    unsigned long cM = millis();
    if(cM - pM > per) {pM = cM;  myGLCD.clrScr();  

      for (int i=1; i < len; i++) { myGLCD.drawRect(zx[i], zy[i], zx[i]+1, zy[i]+1); }  // рисуем все элементы
     
      x=zx[0];  y=zy[0];  for (int t=len; t > 0; t--)  {  zx[t]=zx[t-1];  zy[t]=zy[t-1]; }
      switch (navi)  {case 1: y--; break; case 2: y++; break; case 3: x--; break; case 4: x++; break;  }
      zx[0]=x; zy[0]=y;  myGLCD.drawRect(zx[0], zy[0], zx[0]+1, zy[0]+1);  
     
     
       
       
     myGLCD.drawRect(mx, my, mx+1, my+1);
     
    if (((x==mx)or(x+1==mx)or(x-1==mx)) and ((y==my)or(y+1==my)or(y-1==my)))   {len=len+10; per=per-5; mx=random(84); my=random(44);}
     
        myGLCD.update();
       
    }

     
    if (endgame == 0) {myGLCD.clrScr();
    myGLCD.print("you lost ", CENTER, 12); myGLCD.print("score", 15, 22);myGLCD.printNumI(len*2, 50, 22); myGLCD.update();delay(8000);}
    }

     
     
    Flyfisherman, ИгорьК и Пушной звер нравится это.
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    Отлично!
    Но за такое оформление кода нас в универе линейкой по рукам лупили безжалостно.
    Вы паскаль любите? Зачем "and" и "or" вместо "&&" и "||"?
     
  3. kvaks

    kvaks Нерд

    да мне привычней "and" и "or"
     
  4. Megakoteyka

    Megakoteyka Оракул Модератор

    Это мне знакомо. В школе паскаль учил, потом первое время в С++ дефайнил фигурные скобки на begin/end, ну и and/or само собой тоже. В универе быстро отучили. Старайтесь все же писать без изысков, привыкаешь к этому быстро и ни у кого не возникает вопросов. И не надо клеить несколько строк кода в одну, получается совсем нечитабельно. Лучше группируйте по помощи пустых строк. Хорошо читаемый код всегда лучше понимается и проще отлаживается. Попробуйте в Arduino IDE нажать Ctrl+T и она сама правильно отформатирует код. И обязательно пишите комментарии к коду. Это и для себя полезно делать, и уж тем более для тех, кто будет его читать.
     
  5. kvaks

    kvaks Нерд

    Спасибо учту про форматирование. Но наверно только для выкладывания сюда кода. Так как сам программист и мне уже давно так привычней )
     
  6. Arkad_snz

    Arkad_snz Гик

  7. ostrov

    ostrov Гуру

    Прикольно. Хоть всегда считал, что Ардуино не для графики. Интересный опыт.
     
  8. Flyfisherman

    Flyfisherman Нерд

    Отличный проект! Собрал с дочкой 11 лет за пол часа все сразу заработало, разве что потратили немного времени на поиск библиотеки нашли здесь: http://www.rinkydinkelectronics.com/library.php?id=48