极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 38497|回复: 27

【俄罗斯方块】arduino+12864+红外遥控

[复制链接]
发表于 2012-11-2 18:37:03 | 显示全部楼层 |阅读模式
本帖最后由 但丁 于 2012-11-2 18:39 编辑

       接触Arduino有快3个月了,终于开始有点感觉,有点明白自己到底想用arduino做什么,不过貌似现在想做的太多了,哈哈~~最终自己还是想试手3d打印机,十月初买了reprap Mendel,前两天刚刚发货,下周可以好好琢磨一下!不过又得省生活费,还得准备期中考试了!

     回归正题,这是一个基于UNO+12864+红外遥控的俄罗斯方块,由于没学过算法,只学过C++,于是用很暴力的代码写了这个程序,所以代码的效率不高,也就是不美吧!另外,其实最开始做这个的时候,是想着写个UI,再加时钟,再加俄罗斯方块的(所以最开始是采用串口的模式进行12864绘图的),写到最后,由于功力真的不够深厚,所以一个简单的俄罗斯都占有了很多字节,以至于在mega328里面剩余的字节不够写其他程序了。

     关于此俄罗斯方块的一些详细说明:
     通过红外遥控玩俄罗斯方块(由于身边只有2个按键,只有2个!!所以最后选择了红外遥控)
     红外遥控的上键实现图形旋转,左右键分别实现左移、右移,下键实现快速下落!

    OK,先上图,再上视频:
   
   

   

    附完整代码:
   
  1. #include <IRremote.h>
  2. #include <U8glib.h>


  3. U8GLIB_ST7920_128X64 u8g(18, 16, 17, U8G_PIN_NONE);
  4. int dot[20][10]={
  5.   0,0,0,0,0,0,0,0,0,0,
  6.   0,0,0,0,0,0,0,0,0,0,
  7.   0,0,0,0,0,0,0,0,0,0,
  8.   0,0,0,0,0,0,0,0,0,0,
  9.   0,0,0,0,0,0,0,0,0,0,
  10.   0,0,0,0,0,0,0,0,0,0,
  11.   0,0,0,0,0,0,0,0,0,0,
  12.   0,0,0,0,0,0,0,0,0,0,
  13.   0,0,0,0,0,0,0,0,0,0,
  14.   0,0,0,0,0,0,0,0,0,0,
  15.   0,0,0,0,0,0,0,0,0,0,
  16.   0,0,0,0,0,0,0,0,0,0,
  17.   0,0,0,0,0,0,0,0,0,0,
  18.   0,0,0,0,0,0,0,0,0,0,
  19.   0,0,0,0,0,0,0,0,0,0,
  20.   0,0,0,0,0,0,0,0,0,0,
  21.   0,0,0,0,0,0,0,0,0,0,
  22.   0,0,0,0,0,0,0,0,0,0,
  23.   0,0,0,0,0,0,0,0,0,0,
  24.   0,0,0,0,0,0,0,0,0,0
  25. };
  26. int level=0;
  27. int score=0;
  28. int px=36;
  29. int py=34;
  30. int draw_state=0;
  31. int k,knext;
  32. int firsttrick,nexttrick;  
  33. int irReceivePin=2;
  34. IRrecv irrecv(irReceivePin);
  35. decode_results results;

  36. void checkright(int rightx,int righty,int rightcase)
  37. {
  38.   switch(rightcase)
  39.   {
  40.     case 1:
  41.     if(py<=18)
  42.     {
  43.       py=py;
  44.     }
  45.     else if(dot[(rightx/4-10)][(righty-22)/4]==1||dot[(rightx/4-9)][(righty-22)/4]==1)
  46.     {
  47.       py=py;
  48.     }
  49.     else
  50.     {
  51.       py=py-4;
  52.     };
  53.     break;   
  54.     case 2:
  55.     if(py<=18)
  56.     {
  57.       py=py;
  58.     }
  59.     else if(dot[(rightx/4-10)][(righty-14)/4]==1||dot[(rightx/4-9)][(righty-22)/4]==1)
  60.     {
  61.       py=py;
  62.     }
  63.     else
  64.     {
  65.       py=py-4;
  66.     };
  67.     break;  
  68.     case 3:
  69.     if(py<=18)
  70.     {
  71.       py=py;
  72.     }
  73.     else if(dot[(rightx/4-11)][(righty-22)/4]==1||dot[(rightx/4-10)][(righty-18)/4]==1||dot[(rightx/4-9)][(righty-18)/4]==1)
  74.     {
  75.       py=py;
  76.     }
  77.     else
  78.     {
  79.       py=py-4;
  80.     };
  81.     break;  
  82.      case 4:
  83.     if(py<=18)
  84.     {
  85.       py=py;
  86.     }
  87.     else if(dot[(rightx/4-10)][(righty-22)/4]==1||dot[(rightx/4-9)][(righty-22)/4]==1)
  88.     {
  89.       py=py;
  90.     }
  91.     else
  92.     {
  93.       py=py-4;
  94.     };
  95.     break;  
  96.     case 5:
  97.     if(py<=18)
  98.     {
  99.       py=py;
  100.     }
  101.     else if(dot[(rightx/4-11)][(righty-22)/4]==1||dot[(rightx/4-10)][(righty-22)/4]==1||dot[(rightx/4-9)][(righty-22)/4]==1)
  102.     {
  103.       py=py;
  104.     }
  105.     else
  106.     {
  107.       py=py-4;
  108.     };
  109.     break;  
  110.     case 6:
  111.     if(py<=18)
  112.     {
  113.       py=py;
  114.     }
  115.     else if(dot[(rightx/4-10)][(righty-22)/4]==1||dot[(rightx/4-9)][(righty-22)/4]==1)
  116.     {
  117.       py=py;
  118.     }
  119.     else
  120.     {
  121.       py=py-4;
  122.     };
  123.     break;
  124.      case 7:
  125.     if(py<=18)
  126.     {
  127.       py=py;
  128.     }
  129.     else if(dot[(rightx/4-11)][(righty-18)/4]==1||dot[(rightx/4-10)][(righty-18)/4]==1||dot[(rightx/4-9)][(righty-22)/4]==1)
  130.     {
  131.       py=py;
  132.     }
  133.     else
  134.     {
  135.       py=py-4;
  136.     };
  137.     break;  
  138.     case 8:
  139.     if(py<=18)
  140.     {
  141.       py=py;
  142.     }
  143.     else if(dot[(rightx/4-10)][(righty-22)/4]==1||dot[(rightx/4-9)][(righty-14)/4]==1)
  144.     {
  145.       py=py;
  146.     }
  147.     else
  148.     {
  149.       py=py-4;
  150.     };
  151.     break;
  152.     case 9:
  153.     if(py<=14)
  154.     {
  155.       py=py;
  156.     }
  157.     else if(dot[(rightx/4-11)][(righty-18)/4]==1||dot[(rightx/4-10)][(righty-18)/4]==1||dot[(rightx/4-9)][(righty-18)/4]==1)
  158.     {
  159.       py=py;
  160.     }
  161.     else
  162.     {
  163.       py=py-4;
  164.     };
  165.     break;
  166.     case 10:
  167.     if(py<=18)
  168.     {
  169.       py=py;
  170.     }
  171.     else if(dot[(rightx/4-10)][(righty-18)/4]==1||dot[(rightx/4-9)][(righty-22)/4]==1)
  172.     {
  173.       py=py;
  174.     }
  175.     else
  176.     {
  177.       py=py-4;
  178.     };
  179.     break;
  180.     case 11:
  181.     if(py<=18)
  182.     {
  183.       py=py;
  184.     }
  185.     else if(dot[(rightx/4-11)][(righty-18)/4]==1||dot[(rightx/4-10)][(righty-22)/4]==1||dot[(rightx/4-9)][(righty-18)/4]==1)
  186.     {
  187.       py=py;
  188.     }
  189.     else
  190.     {
  191.       py=py-4;
  192.     };
  193.     break;     
  194.     case 12:
  195.     if(py<=18)
  196.     {
  197.       py=py;
  198.     }
  199.     else if(dot[(rightx/4-10)][(righty-22)/4]==1||dot[(rightx/4-9)][(righty-18)/4]==1)
  200.     {
  201.       py=py;
  202.     }
  203.     else
  204.     {
  205.       py=py-4;
  206.     };
  207.     break;
  208.     case 13:
  209.     if(py<=14)
  210.     {
  211.       py=py;
  212.     }
  213.     else if(dot[(rightx/4-11)][(righty-18)/4]==1||dot[(rightx/4-10)][(righty-18)/4]==1||dot[(rightx/4-9)][(righty-18)/4]==1)
  214.     {
  215.       py=py;
  216.     }
  217.     else
  218.     {
  219.       py=py-4;
  220.     };
  221.     break;  
  222.     case 14:
  223.     if(py<=18)
  224.     {
  225.       py=py;
  226.     }
  227.     else if(dot[(rightx/4-10)][(righty-18)/4]==1||dot[(rightx/4-9)][(righty-22)/4]==1)
  228.     {
  229.       py=py;
  230.     }
  231.     else
  232.     {
  233.       py=py-4;
  234.     };
  235.     break;   
  236.      case 15:
  237.     if(py<=18)
  238.     {
  239.       py=py;
  240.     }
  241.     else if(dot[(rightx/4-11)][(righty-22)/4]==1||dot[(rightx/4-10)][(righty-22)/4]==1||dot[(rightx/4-9)][(righty-18)/4]==1)
  242.     {
  243.       py=py;
  244.     }
  245.     else
  246.     {
  247.       py=py-4;
  248.     };
  249.     break;  
  250.     case 16:
  251.     if(py<=18)
  252.     {
  253.       py=py;
  254.     }
  255.     else if(dot[(rightx/4-10)][(righty-22)/4]==1||dot[(rightx/4-9)][(righty-18)/4]==1)
  256.     {
  257.       py=py;
  258.     }
  259.     else
  260.     {
  261.       py=py-4;
  262.     };
  263.     break;
  264.      case 17:
  265.     if(py<=14)
  266.     {
  267.       py=py;
  268.     }
  269.     else if(dot[(rightx/4-11)][(righty-14)/4]==1||dot[(rightx/4-10)][(righty-18)/4]==1||dot[(rightx/4-9)][(righty-18)/4]==1)
  270.     {
  271.       py=py;
  272.     }
  273.     else
  274.     {
  275.       py=py-4;
  276.     };
  277.     break;
  278.      case 18:
  279.     if(py<=22)
  280.     {
  281.       py=py;
  282.     }
  283.     else if(dot[(rightx/4-9)][(righty-26)/4]==1)
  284.     {
  285.       py=py;
  286.     }
  287.     else
  288.     {
  289.       py=py-4;
  290.     };
  291.     break;
  292.      case 19:
  293.     if(py<=14)
  294.     {
  295.       py=py;
  296.     }
  297.     else if(dot[(rightx/4-12)][(righty-14)/4]==1||dot[(rightx/4-11)][(righty-14)/4]==1||dot[(rightx/4-10)][(righty-14)/4]==1||dot[(rightx/4-9)][(righty-14)/4]==1)
  298.     {
  299.       py=py;
  300.     }
  301.     else
  302.     {
  303.       py=py-4;
  304.     };
  305.     break;
  306.   }
  307. }

  308. void checkleft(int leftx,int lefty,int leftcase)
  309. {  
  310.   switch(leftcase)
  311.   {
  312.     case 1:   
  313.     if(py>=50)
  314.     {
  315.       py=py;
  316.     }
  317.     else if(dot[(leftx/4-10)][((lefty-10)/4)]==1||dot[(leftx/4-9)][((lefty-10)/4)]==1)
  318.     {
  319.       py=py;
  320.     }
  321.     else
  322.     {
  323.       py=py+4;
  324.     };
  325.     break;
  326.     case 2:
  327.     if(py>=46)
  328.     {
  329.       py=py;
  330.     }
  331.     else if(dot[(leftx/4-10)][((lefty-6)/4)]==1||dot[(leftx/4-9)][((lefty-6)/4)]==1)
  332.     {
  333.       py=py;
  334.     }
  335.     else
  336.     {
  337.       py=py+4;
  338.     };
  339.     break;
  340.     case 3:
  341.     if(py>=50)
  342.     {
  343.       py=py;
  344.     }
  345.     else if(dot[(leftx/4-11)][((lefty-10)/4)]==1||dot[(leftx/4-10)][((lefty-10)/4)]==1||dot[(leftx/4-9)][((lefty-10)/4)]==1)
  346.     {
  347.       py=py;
  348.     }
  349.     else
  350.     {
  351.       py=py+4;
  352.     };
  353.     break;
  354.      case 4:
  355.     if(py>=46)
  356.     {
  357.       py=py;
  358.     }
  359.     else if(dot[(leftx/4-10)][((lefty-6)/4)]==1||dot[(leftx/4-9)][((lefty-14)/4)]==1)
  360.     {
  361.       py=py;
  362.     }
  363.     else
  364.     {
  365.       py=py+4;
  366.     };
  367.     break;
  368.     case 5:
  369.     if(py>=50)
  370.     {
  371.       py=py;
  372.     }
  373.     else if(dot[(leftx/4-11)][((lefty-14)/4)]==1||dot[(leftx/4-10)][((lefty-14)/4)]==1||dot[(leftx/4-9)][((lefty-10)/4)]==1)
  374.     {
  375.      py=py;
  376.     }
  377.     else
  378.     {
  379.       py=py+4;
  380.     };
  381.     break;
  382.     case 6:
  383.     if(py>=46)
  384.     {
  385.       py=py;
  386.     }
  387.     else if(dot[(leftx/4-10)][((lefty-14)/4)]==1||dot[(leftx/4-9)][((lefty-14)/4)]==1)
  388.     {
  389.       py=py;
  390.     }
  391.     else
  392.     {
  393.       py=py+4;
  394.     };
  395.     break;
  396.     case 7:
  397.     if(py>=50)
  398.     {
  399.       py=py;
  400.     }
  401.     else if(dot[(leftx/4-11)][((lefty-10)/4)]==1||dot[((leftx/4-10))][((lefty-10)/4)]==1||dot[(leftx/4-9)][((lefty-10)/4)]==1)
  402.     {
  403.       py=py;
  404.     }
  405.     else
  406.     {
  407.       py=py+4;
  408.     };
  409.     break;
  410.     case 8:
  411.     if(py>=46)
  412.     {
  413.       py=py;
  414.     }
  415.     else if(dot[(leftx/4-10)][((lefty-6)/4)]==1||dot[(leftx/4-9)][((lefty-6)/4)]==1)
  416.     {
  417.       py=py;
  418.     }
  419.     else
  420.     {
  421.       py=py+4;
  422.     };
  423.     break;
  424.     case 9:
  425.     if(py>=46)
  426.     {
  427.       py=py;
  428.     }
  429.     else if(dot[(leftx/4-11)][(lefty-6)/4]==1||dot[(leftx/4-10)][((lefty-10)/4)]==1||dot[(leftx/4-9)][((lefty-10)/4)]==1)
  430.     {
  431.       py=py;
  432.     }
  433.     else
  434.     {
  435.       py=py+4;
  436.     };
  437.     break;
  438.     case 10:
  439.     if(py>=46)
  440.     {
  441.       py=py;
  442.     }
  443.     else if(dot[(leftx/4-10)][((lefty-10)/4)]==1||dot[(leftx/4-9)][((lefty-6)/4)]==1)
  444.     {
  445.       py=py;
  446.     }
  447.     else
  448.     {
  449.       py=py+4;
  450.     };
  451.     break;
  452.     case 11:
  453.     if(py>=50)
  454.     {
  455.       py=py;
  456.     }
  457.     else if(dot[(leftx/4-11)][((lefty-10)/4)]==1||dot[(leftx/4-10)][((lefty-10)/4)]==1||dot[(leftx/4-9)][((lefty-10)/4)]==1)
  458.     {
  459.       py=py;
  460.     }
  461.     else
  462.     {
  463.       py=py+4;
  464.     };
  465.     break;
  466.     case 12:
  467.     if(py>=46)
  468.     {
  469.       py=py;
  470.     }
  471.     else if(dot[(leftx/4-10)][((lefty-6)/4)]==1||dot[(leftx/4-9)][((lefty-10)/4)]==1)
  472.     {
  473.       py=py;
  474.     }
  475.     else
  476.     {
  477.       py=py+4;
  478.     };
  479.     break;
  480.     case 13:
  481.     if(py>=46)
  482.     {
  483.       py=py;
  484.     }
  485.     else if(dot[(leftx/4-11)][(lefty-10)/4]==1||dot[(leftx/4-10)][((lefty-6)/4)]==1||dot[(leftx/4-9)][((lefty-10)/4)]==1)
  486.     {
  487.       py=py;
  488.     }
  489.     else
  490.     {
  491.       py=py+4;
  492.     };
  493.     break;
  494.      case 14:
  495.     if(py>=46)
  496.     {
  497.       py=py;
  498.     }
  499.     else if(dot[(leftx/4-10)][((lefty-6)/4)]==1||dot[(leftx/4-9)][((lefty-10)/4)]==1)
  500.     {
  501.       py=py;
  502.     }
  503.     else
  504.     {
  505.       py=py+4;
  506.     };
  507.     break;
  508.      case 15:
  509.     if(py>=50)
  510.     {
  511.       py=py;
  512.     }
  513.     else if(dot[(leftx/4-11)][(lefty-14)/4]==1||dot[(leftx/4-10)][(lefty-10)/4]==1||dot[(leftx/4-9)][((lefty-10)/4)]==1)
  514.     {
  515.       py=py;
  516.     }
  517.     else
  518.     {
  519.       py=py+4;
  520.     };
  521.     break;
  522.     case 16:
  523.     if(py>=50)
  524.     {
  525.       py=py;
  526.     }
  527.     else if(dot[(leftx/4-10)][((lefty-10)/4)]==1||dot[(leftx/4-9)][((lefty-6)/4)]==1)
  528.     {
  529.       py=py;
  530.     }
  531.     else
  532.     {
  533.       py=py+4;
  534.     };
  535.     break;
  536.      case 17:
  537.     if(py>=46)
  538.     {
  539.       py=py;
  540.     }
  541.     else if(dot[(leftx/4-11)][((lefty-6)/4)]==1||dot[(leftx/4-10)][((lefty-6)/4)]==1||dot[(leftx/4-9)][((lefty-10)/4)]==1)
  542.     {
  543.       py=py;
  544.     }
  545.     else
  546.     {
  547.       py=py+4;
  548.     };
  549.     break;
  550.     case 18:
  551.     if(py>=46)
  552.     {
  553.       py=py;
  554.     }
  555.     else if(dot[(leftx/4-9)][(lefty-6)/4]==1)
  556.     {
  557.       py=py;
  558.     }
  559.     else
  560.     {
  561.       py=py+4;
  562.     };
  563.     break;
  564.     case 19:
  565.     if(py>=50)
  566.     {
  567.       py=py;
  568.     }
  569.     else if(dot[(leftx/4-12)][(lefty-10)/4]==1||dot[(leftx/4-11)][(lefty-10)/4]==1||dot[(leftx/4-10)][(lefty-10)/4]==1||dot[(leftx/4-9)][(lefty-10)/4]==1)
  570.     {
  571.       py=py;
  572.     }
  573.     else
  574.     {
  575.       py=py+4;
  576.     };
  577.     break;   
  578.   }
  579. }


  580. void checkdown(int downx,int downy,int downcase)
  581. {
  582.   switch(downcase)
  583.   {
  584.     case 1:
  585.     downx=downx-8;   
  586.     if(dot[(downx-36)/4+3][(downy-22)/4+1]==1||dot[(downx-36)/4+3][(downy-22)/4+2]==1)
  587.     {      
  588.       reachgraph(downx,downy,downcase);
  589.       px=36;
  590.     }
  591.     else
  592.     {
  593.       px=px+4;
  594.     };
  595.     break;
  596.     case 2:
  597.     downx=downx-8;
  598.      if(dot[(downx-36)/4+3][(downy-22)/4+1]==1||dot[(downx-36)/4+3][(downy-22)/4+2]==1||dot[(downx-36)/4+3][(downy-22)/4+3]==1)
  599.     {            
  600.       reachgraph(downx,downy,downcase);
  601.       px=36;
  602.     }
  603.     else
  604.     {
  605.       px=px+4;
  606.     };
  607.     break;
  608.     case 3:
  609.     downx=downx-12;
  610.      if(dot[(downx-36)/4+2][(downy-22)/4+1]==1||dot[(downx-36)/4+4][(downy-22)/4+2]==1)
  611.     {           
  612.       reachgraph(downx,downy,downcase);
  613.       px=36;
  614.     }
  615.     else
  616.     {
  617.       px=px+4;
  618.     };
  619.     break;
  620.     case 4:
  621.     downx=downx-12;
  622.      if(dot[(downx-36)/4+3][(downy-22)/4+2]==1||dot[(downx-36)/4+3][(downy-22)/4+3]==1||dot[(downx-36)/4+4][(downy-22)/4+1]==1)
  623.     {           
  624.       reachgraph(downx,downy,downcase);
  625.       px=36;
  626.     }
  627.     else
  628.     {
  629.       px=px+4;
  630.     };
  631.     break;
  632.     case 5:
  633.     downx=downx-12;
  634.      if(dot[(downx-36)/4+4][(downy-22)/4+1]==1||dot[(downx-36)/4+4][(downy-22)/4+2]==1)
  635.     {           
  636.       reachgraph(downx,downy,downcase);
  637.       px=36;
  638.     }
  639.     else
  640.     {
  641.       px=px+4;
  642.     };
  643.     break;
  644.      case 6:
  645.      downx=downx-8;   
  646.      if(dot[(downx-36)/4+3][(downy-22)/4+1]==1||dot[(downx-36)/4+3][(downy-22)/4+2]==1||dot[(downx-36)/4+3][(downy-22)/4+3]==1)
  647.     {        
  648.       reachgraph(downx,downy,downcase);
  649.       px=36;
  650.     }
  651.     else
  652.     {
  653.       px=px+4;
  654.     };
  655.     break;
  656.      case 7:
  657.      downx=downx-12;
  658.      if(dot[(downx-36)/4+4][(downy-22)/4+1]==1||dot[(downx-36)/4+4][(downy-22)/4+2]==1)
  659.     {         
  660.       reachgraph(downx,downy,downcase);
  661.       px=36;
  662.     }
  663.     else
  664.     {
  665.       px=px+4;
  666.     };
  667.     break;
  668.      case 8:
  669.      downx=downx-8;  
  670.      if(dot[(downx-36)/4+2][(downy-22)/4+1]==1||dot[(downx-36)/4+2][(downy-22)/4+2]==1||dot[(downx-36)/4+3][(downy-22)/4+3]==1)
  671.     {   
  672.       reachgraph(downx,downy,downcase);
  673.       px=36;
  674.     }
  675.     else
  676.     {
  677.       px=px+4;
  678.     };
  679.     break;
  680.     case 9:
  681.     downx=downx-12;
  682.      if(dot[(downx-36)/4+2][(downy-22)/4+3]==1||dot[(downx-36)/4+4][(downy-22)/4+2]==1)
  683.     {      
  684.       
  685.       reachgraph(downx,downy,downcase);
  686.       px=36;
  687.     }
  688.     else
  689.     {
  690.       px=px+4;
  691.     };
  692.     break;
  693.     case 10:
  694.     downx=downx-8;
  695.      if(dot[(downx-36)/4+3][(downy-22)/4+1]==1||dot[(downx-36)/4+3][(downy-22)/4+2]==1||dot[(downx-36)/4+3][(downy-22)/4+3]==1)
  696.     {     
  697.       
  698.       reachgraph(downx,downy,downcase);
  699.       px=36;
  700.     }
  701.     else
  702.     {
  703.       px=px+4;
  704.     };
  705.     break;
  706.     case 11:
  707.     downx=downx-12;
  708.      if(dot[(downx-36)/4+3][(downy-22)/4+1]==1||dot[(downx-36)/4+4][(downy-22)/4+2]==1)
  709.     {   
  710.       
  711.       reachgraph(downx,downy,downcase);
  712.       px=36;
  713.     }
  714.     else
  715.     {
  716.       px=px+4;
  717.     };
  718.     break;
  719.     case 12:
  720.     downx=downx-12;
  721.      if(dot[(downx-36)/4+3][(downy-22)/4+1]==1||dot[(downx-36)/4+3][(downy-22)/4+3]==1||dot[(downx-36)/4+4][(downy-22)/4+2]==1)
  722.     {      
  723.       
  724.       reachgraph(downx,downy,downcase);
  725.       px=36;
  726.     }
  727.     else
  728.     {
  729.       px=px+4;
  730.     };
  731.     break;
  732.     case 13:
  733.      downx=downx-12;
  734.      if(dot[(downx-36)/4+3][(downy-22)/4+3]==1||dot[(downx-36)/4+4][(downy-22)/4+2]==1)
  735.     {      
  736.      
  737.       reachgraph(downx,downy,downcase);
  738.       px=36;
  739.     }
  740.     else
  741.     {
  742.       px=px+4;
  743.     };
  744.     break;
  745.     case 14:
  746.       downx=downx-12;  
  747.      if(dot[(downx-36)/4+3][(downy-22)/4+3]==1||dot[(downx-36)/4+4][(downy-22)/4+1]==1||dot[(downx-36)/4+4][(downy-22)/4+2]==1)
  748.     {   
  749.       
  750.       reachgraph(downx,downy,downcase);
  751.       px=36;
  752.     }
  753.     else
  754.     {
  755.       px=px+4;
  756.     };
  757.     break;
  758.     case 15:
  759.     downx=downx-12;
  760.      if(dot[(downx-36)/4+3][(downy-22)/4+1]==1||dot[(downx-36)/4+4][(downy-22)/4+2]==1)
  761.     {      
  762.       
  763.       reachgraph(downx,downy,downcase);
  764.       px=36;
  765.     }
  766.     else
  767.     {
  768.       px=px+4;
  769.     };
  770.     break;
  771.     case 16:
  772.     downx=downx-12;
  773.      if(dot[(downx-36)/4+3][(downy-22)/4+1]==1||dot[(downx-36)/4+4][(downy-22)/4+2]==1||dot[(downx-36)/4+4][(downy-22)/4+3]==1)
  774.     {      
  775.       
  776.       reachgraph(downx,downy,downcase);
  777.       px=36;
  778.     }
  779.     else
  780.     {
  781.       px=px+4;
  782.     };
  783.     break;
  784.     case 17:
  785.     downx=downx-12;
  786.      if(dot[(downx-36)/4+3][(downy-22)/4+3]==1||dot[(downx-36)/4+4][(downy-22)/4+2]==1)
  787.     {
  788.       
  789.       reachgraph(downx,downy,downcase);
  790.       px=36;
  791.     }
  792.     else
  793.     {
  794.       px=px+4;
  795.     };
  796.     break;
  797.     case 18:
  798.     downx=downx-12;
  799.      if(dot[(downx-36)/4+4][(downy-22)/4+1]==1||dot[(downx-36)/4+4][(downy-22)/4+2]==1||dot[(downx-36)/4+4][(downy-22)/4+3]==1||dot[(downx-36)/4+4][(downy-22)/4]==1)
  800.     {
  801.       
  802.       reachgraph(downx,downy,downcase);
  803.       px=36;
  804.     }
  805.     else
  806.     {
  807.       px=px+4;
  808.     };
  809.     break;
  810.     case 19:
  811.     downx=downx-12;
  812.      if(dot[(downx-36)/4+4][(downy-22)/4+2]==1)
  813.     {
  814.       
  815.       reachgraph(downx,downy,downcase);
  816.       px=36;
  817.     }
  818.     else
  819.     {
  820.       px=px+4;
  821.     };
  822.     break;   
  823.   }  
  824. }

  825. void reachgraph(int reachx,int reachy,int graphyk)
  826. {
  827.   switch(graphyk)
  828.   {
  829.     case 1:
  830.     dot[(px-44+4)/4][(py-22+4)/4]=1;
  831.     dot[(px-44+8)/4][(py-22+4)/4]=1;
  832.     dot[(px-44+8)/4][(py-22+8)/4]=1;
  833.     dot[(px-44+4)/4][(py-22+8)/4]=1;
  834.     break;
  835.     case 2:
  836.      dot[(px-44+4)/4][(py-22+12)/4]=1;
  837.     dot[(px-44+8)/4][(py-22+4)/4]=1;
  838.     dot[(px-44+8)/4][(py-22+8)/4]=1;
  839.     dot[(px-44+8)/4][(py-22+12)/4]=1;
  840.     break;   
  841.     case 3:
  842.     dot[(px-48+4)/4][(py-22+4)/4]=1;
  843.     dot[(px-48+4)/4][(py-22+8)/4]=1;
  844.     dot[(px-48+8)/4][(py-22+8)/4]=1;
  845.     dot[(px-48+12)/4][(py-22+8)/4]=1;
  846.     break;   
  847.     case 4:
  848.     dot[(px-48+12)/4][(py-22+4)/4]=1;
  849.     dot[(px-48+8)/4][(py-22+4)/4]=1;
  850.     dot[(px-48+8)/4][(py-22+8)/4]=1;
  851.     dot[(px-48+8)/4][(py-22+12)/4]=1;
  852.     break;   
  853.     case 5:
  854.      dot[(px-48+12)/4][(py-22+8)/4]=1;
  855.     dot[(px-48+4)/4][(py-22+4)/4]=1;
  856.     dot[(px-48+8)/4][(py-22+4)/4]=1;
  857.     dot[(px-48+12)/4][(py-22+4)/4]=1;
  858.     break;   
  859.     case 6:
  860.     dot[(px-44+4)/4][(py-22+4)/4]=1;
  861.     dot[(px-44+8)/4][(py-22+4)/4]=1;
  862.     dot[(px-44+8)/4][(py-22+8)/4]=1;
  863.     dot[(px-44+8)/4][(py-22+12)/4]=1;
  864.     break;   
  865.     case 7:
  866.     dot[(px-48+12)/4][(py-22+4)/4]=1;
  867.     dot[(px-48+4)/4][(py-22+8)/4]=1;
  868.     dot[(px-48+8)/4][(py-22+8)/4]=1;
  869.     dot[(px-48+12)/4][(py-22+8)/4]=1;
  870.     break;   
  871.      case 8:
  872.      dot[(px-44+8)/4][(py-22+12)/4]=1;
  873.     dot[(px-44+4)/4][(py-22+4)/4]=1;
  874.     dot[(px-44+4)/4][(py-22+8)/4]=1;
  875.     dot[(px-44+4)/4][(py-22+12)/4]=1;
  876.     break;   
  877.      case 9:
  878.      dot[(px-48+4)/4][(py-22+12)/4]=1;
  879.     dot[(px-48+4)/4][(py-22+8)/4]=1;
  880.     dot[(px-48+8)/4][(py-22+8)/4]=1;
  881.     dot[(px-48+12)/4][(py-22+8)/4]=1;
  882.     break;   
  883.      case 10:
  884.      dot[(px-44+4)/4][(py-22+8)/4]=1;
  885.     dot[(px-44+8)/4][(py-22+4)/4]=1;
  886.     dot[(px-44+8)/4][(py-22+8)/4]=1;
  887.     dot[(px-44+8)/4][(py-22+12)/4]=1;
  888.     break;   
  889.      case 11:
  890.      dot[(px-48+8)/4][(py-22+4)/4]=1;
  891.     dot[(px-48+4)/4][(py-22+8)/4]=1;
  892.     dot[(px-48+8)/4][(py-22+8)/4]=1;
  893.     dot[(px-48+12)/4][(py-22+8)/4]=1;
  894.     break;   
  895.      case 12:
  896.      dot[(px-48+12)/4][(py-22+8)/4]=1;
  897.     dot[(px-48+8)/4][(py-22+4)/4]=1;
  898.     dot[(px-48+8)/4][(py-22+8)/4]=1;
  899.     dot[(px-48+8)/4][(py-22+12)/4]=1;
  900.     break;   
  901.      case 13:
  902.      dot[(px-48+8)/4][(py-22+12)/4]=1;
  903.     dot[(px-48+4)/4][(py-22+8)/4]=1;
  904.     dot[(px-48+8)/4][(py-22+8)/4]=1;
  905.     dot[(px-48+12)/4][(py-22+8)/4]=1;
  906.     break;   
  907.      case 14:
  908.      dot[(px-48+8)/4][(py-22+8)/4]=1;
  909.     dot[(px-48+8)/4][(py-22+12)/4]=1;
  910.     dot[(px-48+12)/4][(py-22+4)/4]=1;
  911.     dot[(px-48+12)/4][(py-22+8)/4]=1;
  912.     break;   
  913.      case 15:
  914.      dot[(px-48+8)/4][(py-22+8)/4]=1;
  915.     dot[(px-48+12)/4][(py-22+8)/4]=1;
  916.     dot[(px-48+8)/4][(py-22+4)/4]=1;
  917.     dot[(px-48+4)/4][(py-22+4)/4]=1;
  918.     break;   
  919.      case 16:
  920.      dot[(px-48+8)/4][(py-22+4)/4]=1;
  921.     dot[(px-48+8)/4][(py-22+8)/4]=1;
  922.     dot[(px-48+12)/4][(py-22+8)/4]=1;
  923.     dot[(px-48+12)/4][(py-22+12)/4]=1;
  924.     break;   
  925.      case 17:
  926.      dot[(px-48+8)/4][(py-22+8)/4]=1;
  927.     dot[(px-48+12)/4][(py-22+8)/4]=1;
  928.     dot[(px-48+4)/4][(py-22+12)/4]=1;
  929.     dot[(px-48+8)/4][(py-22+12)/4]=1;
  930.     break;   
  931.      case 18:
  932.      dot[(px-44+8)/4][(py-22)/4]=1;
  933.     dot[(px-44+8)/4][(py-22+4)/4]=1;
  934.     dot[(px-44+8)/4][(py-22+8)/4]=1;
  935.     dot[(px-44+8)/4][(py-22+12)/4]=1;
  936.     break;   
  937.      case 19:
  938.      dot[(px-48)/4][(py-22+8)/4]=1;
  939.     dot[(px-48+4)/4][(py-22+8)/4]=1;
  940.     dot[(px-48+8)/4][(py-22+8)/4]=1;
  941.     dot[(px-48+12)/4][(py-22+8)/4]=1;
  942.     break;   
  943.   }

  944. }


  945. void firstTrick(int x,int y,int firsttrick)
  946. {
  947.   if(firsttrick==1||firsttrick==2||firsttrick==6||firsttrick==8||firsttrick==10||firsttrick==18)
  948.   {
  949.     shape(px-8,py,firsttrick);   
  950.   }
  951.   else
  952.   {
  953.     shape(px-12,py,firsttrick);
  954.   }
  955. }


  956. void profile(int level,int score)
  957. {
  958.   u8g.drawLine(34,63,34,20);//boarline
  959.   u8g.drawLine(35,63,35,20);
  960.   u8g.drawLine(36,63,115,63);
  961.   u8g.drawLine(36,62,115,62);
  962.   u8g.drawLine(116,63,116,20);
  963.   u8g.drawLine(117,63,117,20);
  964.   u8g.drawLine(36,21,115,21);
  965.   u8g.drawLine(36,20,115,20);
  966.   
  967.   u8g.setFont(u8g_font_micro);//next
  968.   u8g.drawStr270(40,18,"NEXT:");  
  969.   u8g.drawStr270(70,18,"LEVEL");
  970.   u8g.setFont(u8g_font_6x13_67_75);
  971.   switch(level)
  972.   {
  973.     case 1:
  974.     u8g.drawBox(80,14,2,2);
  975.     break;
  976.     case 2:
  977.     u8g.drawBox(80,14,2,2);
  978.     u8g.drawBox(78,11,4,2);
  979.     break;
  980.     case 3:
  981.     u8g.drawBox(80,14,2,2);
  982.     u8g.drawBox(78,11,4,2);
  983.     u8g.drawBox(76,8,6,2);
  984.     break;
  985.     case 4:
  986.     u8g.drawBox(80,14,2,2);
  987.     u8g.drawBox(78,11,4,2);
  988.     u8g.drawBox(76,8,6,2);
  989.     u8g.drawBox(74,5,8,2);
  990.     break;
  991.     case 5:
  992.     u8g.drawBox(80,14,3,2);
  993.     u8g.drawBox(78,11,5,2);
  994.     u8g.drawBox(76,8,7,2);
  995.     u8g.drawBox(74,5,9,2);
  996.     u8g.drawBox(72,2,11,2);
  997.     break;
  998.     default:
  999.     break;   
  1000.   }
  1001.    
  1002.   u8g.setFont(u8g_font_5x7);//score
  1003.   u8g.drawStr270(15,62,"SCORE:");
  1004.   int scorege=score%10;
  1005.   writeScore(15,5,scorege);
  1006.   int scoreshi=(score%100-scorege)/10;
  1007.   writeScore(15,11,scoreshi);
  1008.   int scorebai=(score%1000-scoreshi*10-scorege)/100;
  1009.   writeScore(15,17,scorebai);
  1010.   int scoreqian=(score%10000-scorebai*100-scoreshi*10-scorege)/1000;
  1011.   writeScore(15,23,scoreqian);
  1012.   int scorewan=(score%100000-scoreqian*1000-scorebai*100-scoreshi*10-scorege)/10000;
  1013.   writeScore(15,29,scorewan);  
  1014. }

  1015. void writeScore(int x,int y,int score)
  1016. {
  1017.   switch(score)
  1018.   {
  1019.     case 0:
  1020.     u8g.drawStr270(x,y,"0");
  1021.     break;
  1022.     case 1:
  1023.     u8g.drawStr270(x,y,"1");
  1024.     break;
  1025.     case 2:
  1026.     u8g.drawStr270(x,y,"2");
  1027.     break;
  1028.     case 3:
  1029.     u8g.drawStr270(x,y,"3");
  1030.     break;
  1031.     case 4:
  1032.     u8g.drawStr270(x,y,"4");
  1033.     break;
  1034.     case 5:
  1035.     u8g.drawStr270(x,y,"5");
  1036.     break;
  1037.     case 6:
  1038.     u8g.drawStr270(x,y,"6");
  1039.     break;
  1040.     case 7:
  1041.     u8g.drawStr270(x,y,"7");
  1042.     break;
  1043.     case 8:
  1044.     u8g.drawStr270(x,y,"8");
  1045.     break;
  1046.     case 9:
  1047.     u8g.drawStr270(x,y,"9");
  1048.     break;   
  1049.   }
  1050. }

  1051. void switchrotate(int rotate)
  1052. {
  1053.   if(rotate==1)
  1054.   {
  1055.     rotate=rotate;
  1056.   }
  1057.   else if(rotate==5||rotate==9||rotate==13||rotate==15||rotate==17||rotate==19)
  1058.   {
  1059.     rotate=rotate-1;
  1060.   }
  1061.   else
  1062.   {
  1063.     rotate=rotate+1;
  1064.   };
  1065. }

  1066. void shape(int x,int y,int k)
  1067. {
  1068.   switch(k)
  1069.   {
  1070.     case 1:  
  1071.     if((x+4)>=36&&(x+4)<=115&&(y+4)>=22&&(y+4)<=61)
  1072.     {
  1073.     base(x+4,y+4);
  1074.     };
  1075.     if((x+8)>=36&&(x+8)<=115&&(y+4)>=22&&(y+4)<=61)
  1076.     {
  1077.     base(x+8,y+4);   
  1078.     };
  1079.     if((x+8)>=36&&(x+8)<=115&&(y+8)>=22&&(y+8)<=61)
  1080.     {
  1081.     base(x+8,y+8);     
  1082.     };
  1083.     if((x+4)>=36&&(x+4)<=115&&(y+8)>=22&&(y+8)<=61)
  1084.     {
  1085.     base(x+4,y+8);     
  1086.     };
  1087.     break;
  1088.     case 2:
  1089.     if((x+4)>=36&&(x+4)<=115&&(y+12)>=22&&(y+12)<=61)
  1090.     {
  1091.     base(x+4,y+12);
  1092.     };
  1093.     if((x+8)>=36&&(x+8)<=115&&(y+4)>=22&&(y+4)<=61)
  1094.     {
  1095.     base(x+8,y+4);
  1096.     };
  1097.     if((x+8)>=36&&(x+8)<=115&&(y+8)>=22&&(y+8)<=61)
  1098.     {
  1099.     base(x+8,y+8);
  1100.     };
  1101.     if((x+8)>=36&&(x+8)<=115&&(y+12)>=22&&(y+12)<=61)
  1102.     {
  1103.     base(x+8,y+12);
  1104.     };
  1105.     break;
  1106.     case 3:
  1107.     if((x+4)>=36&&(x+4)<=115&&(y+4)>=22&&(y+4)<=61)
  1108.     {
  1109.     base(x+4,y+4);
  1110.     };
  1111.     if((x+4)>=36&&(x+4)<=115&&(y+8)>=22&&(y+8)<=61)
  1112.     {
  1113.     base(x+4,y+8);
  1114.     };
  1115.     if((x+8)>=36&&(x+8)<=115&&(y+8)>=22&&(y+8)<=61)
  1116.     {
  1117.     base(x+8,y+8);
  1118.     };
  1119.     if((x+12)>=36&&(x+12)<=115&&(y+8)>=22&&(y+8)<=61)
  1120.     {
  1121.     base(x+12,y+8);
  1122.     };
  1123.     break;
  1124.     case 4:
  1125.     if((x+12)>=36&&(x+12)<=115&&(y+4)>=22&&(y+4)<=61)
  1126.     {
  1127.     base(x+12,y+4);
  1128.     };
  1129.     if((x+8)>=36&&(x+8)<=115&&(y+4)>=22&&(y+4)<=61)
  1130.     {
  1131.     base(x+8,y+4);
  1132.     };
  1133.     if((x+8)>=36&&(x+8)<=115&&(y+8)>=22&&(y+8)<=61)
  1134.     {
  1135.     base(x+8,y+8);
  1136.     };
  1137.     if((x+8)>=36&&(x+8)<=115&&(y+12)>=22&&(y+12)<=61)
  1138.     {
  1139.     base(x+8,y+12);
  1140.     };
  1141.     break;
  1142.     case 5:
  1143.     if((x+12)>=36&&(x+12)<=115&&(y+8)>=22&&(y+8)<=61)
  1144.     {
  1145.     base(x+12,y+8);
  1146.     };
  1147.     if((x+4)>=36&&(x+4)<=115&&(y+4)>=22&&(y+4)<=61)
  1148.     {
  1149.     base(x+4,y+4);
  1150.     };
  1151.     if((x+8)>=36&&(x+8)<=115&&(y+4)>=22&&(y+4)<=61)
  1152.     {
  1153.     base(x+8,y+4);
  1154.     };
  1155.     if((x+12)>=36&&(x+12)<=115&&(y+4)>=22&&(y+4)<=61)
  1156.     {
  1157.     base(x+12,y+4);
  1158.     };
  1159.     break;
  1160.     case 6:
  1161.     if((x+4)>=36&&(x+4)<=115&&(y+4)>=22&&(y+4)<=61)
  1162.     {
  1163.     base(x+4,y+4);
  1164.     };
  1165.     if((x+8)>=36&&(x+8)<=115&&(y+4)>=22&&(y+4)<=61)
  1166.     {
  1167.     base(x+8,y+4);
  1168.     };
  1169.     if((x+8)>=36&&(x+8)<=115&&(y+8)>=22&&(y+8)<=61)
  1170.     {
  1171.     base(x+8,y+8);
  1172.     };
  1173.     if((x+8)>=36&&(x+8)<=115&&(y+12)>=22&&(y+12)<=61)
  1174.     {
  1175.     base(x+8,y+12);
  1176.     };
  1177.     break;
  1178.     case 7:
  1179.     if((x+12)>=36&&(x+12)<=115&&(y+4)>=22&&(y+4)<=61)
  1180.     {
  1181.     base(x+12,y+4);
  1182.     };
  1183.     if((x+4)>=36&&(x+4)<=115&&(y+8)>=22&&(y+8)<=61)
  1184.     {
  1185.     base(x+4,y+8);
  1186.     };
  1187.     if((x+8)>=36&&(x+8)<=115&&(y+8)>=22&&(y+8)<=61)
  1188.     {
  1189.     base(x+8,y+8);
  1190.     };
  1191.     if((x+12)>=36&&(x+12)<=115&&(y+8)>=22&&(y+8)<=61)
  1192.     {
  1193.     base(x+12,y+8);
  1194.     };
  1195.     break;
  1196.     case 8:
  1197.     if((x+8)>=36&&(x+8)<=115&&(y+12)>=22&&(y+12)<=61)
  1198.     {
  1199.     base(x+8,y+12);
  1200.     };
  1201.     if((x+4)>=36&&(x+4)<=115&&(y+4)>=22&&(y+4)<=61)
  1202.     {
  1203.     base(x+4,y+4);
  1204.     };
  1205.     if((x+4)>=36&&(x+4)<=115&&(y+8)>=22&&(y+8)<=61)
  1206.     {
  1207.     base(x+4,y+8);
  1208.     };
  1209.     if((x+4)>=36&&(x+4)<=115&&(y+12)>=22&&(y+12)<=61)
  1210.     {
  1211.     base(x+4,y+12);
  1212.     };
  1213.     break;
  1214.     case 9:
  1215.     if((x+4)>=36&&(x+4)<=115&&(y+12)>=22&&(y+12)<=61)
  1216.     {
  1217.     base(x+4,y+12);
  1218.     };
  1219.     if((x+4)>=36&&(x+4)<=115&&(y+8)>=22&&(y+8)<=61)
  1220.     {
  1221.     base(x+4,y+8);
  1222.     };
  1223.     if((x+8)>=36&&(x+8)<=115&&(y+8)>=22&&(y+8)<=61)
  1224.     {
  1225.     base(x+8,y+8);
  1226.     };
  1227.     if((x+12)>=36&&(x+12)<=115&&(y+8)>=22&&(y+8)<=61)
  1228.     {
  1229.     base(x+12,y+8);
  1230.     };
  1231.     break;  
  1232.     case 10:
  1233.     if((x+4)>=36&&(x+4)<=115&&(y+8)>=22&&(y+8)<=61)
  1234.     {
  1235.     base(x+4,y+8);
  1236.     };
  1237.     if((x+8)>=36&&(x+8)<=115&&(y+4)>=22&&(y+4)<=61)
  1238.     {
  1239.     base(x+8,y+4);
  1240.     };
  1241.     if((x+8)>=36&&(x+8)<=115&&(y+8)>=22&&(y+8)<=61)
  1242.     {
  1243.     base(x+8,y+8);
  1244.     };
  1245.     if((x+8)>=36&&(x+8)<=115&&(y+12)>=22&&(y+12)<=61)
  1246.     {
  1247.     base(x+8,y+12);
  1248.     };
  1249.     break;
  1250.     case 11:
  1251.     if((x+8)>=36&&(x+8)<=115&&(y+4)>=22&&(y+4)<=61)
  1252.     {
  1253.     base(x+8,y+4);
  1254.     };
  1255.     if((x+4)>=36&&(x+4)<=115&&(y+8)>=22&&(y+8)<=61)
  1256.     {
  1257.     base(x+4,y+8);
  1258.     };
  1259.     if((x+8)>=36&&(x+8)<=115&&(y+8)>=22&&(y+8)<=61)
  1260.     {
  1261.     base(x+8,y+8);
  1262.     };
  1263.     if((x+12)>=36&&(x+12)<=115&&(y+8)>=22&&(y+8)<=61)
  1264.     {
  1265.     base(x+12,y+8);
  1266.     };
  1267.     break;
  1268.     case 12:
  1269.     if((x+12)>=36&&(x+12)<=115&&(y+8)>=22&&(y+8)<=61)
  1270.     {
  1271.     base(x+12,y+8);
  1272.     };
  1273.     if((x+8)>=36&&(x+8)<=115&&(y+4)>=22&&(y+4)<=61)
  1274.     {
  1275.     base(x+8,y+4);
  1276.     };
  1277.     if((x+8)>=36&&(x+8)<=115&&(y+8)>=22&&(y+8)<=61)
  1278.     {
  1279.     base(x+8,y+8);
  1280.     };
  1281.     if((x+8)>=36&&(x+8)<=115&&(y+12)>=22&&(y+12)<=61)
  1282.     {
  1283.     base(x+8,y+12);
  1284.     };
  1285.     break;
  1286.     case 13:
  1287.     if((x+8)>=36&&(x+8)<=115&&(y+12)>=22&&(y+12)<=61)
  1288.     {
  1289.     base(x+8,y+12);
  1290.     };
  1291.     if((x+4)>=36&&(x+4)<=115&&(y+8)>=22&&(y+8)<=61)
  1292.     {
  1293.     base(x+4,y+8);
  1294.     };
  1295.     if((x+8)>=36&&(x+8)<=115&&(y+8)>=22&&(y+8)<=61)
  1296.     {
  1297.     base(x+8,y+8);
  1298.     };
  1299.     if((x+12)>=36&&(x+12)<=115&&(y+8)>=22&&(y+8)<=61)
  1300.     {
  1301.     base(x+12,y+8);
  1302.     };
  1303.     break;
  1304.     case 14:
  1305.     if((x+8)>=36&&(x+8)<=115&&(y+8)>=22&&(y+8)<=61)
  1306.     {
  1307.     base(x+8,y+8);
  1308.     };
  1309.     if((x+8)>=36&&(x+8)<=115&&(y+12)>=22&&(y+12)<=61)
  1310.     {
  1311.     base(x+8,y+12);
  1312.     };
  1313.     if((x+12)>=36&&(x+12)<=115&&(y+4)>=22&&(y+4)<=61)
  1314.     {
  1315.     base(x+12,y+4);
  1316.     };
  1317.     if((x+12)>=36&&(x+12)<=115&&(y+8)>=22&&(y+8)<=61)
  1318.     {
  1319.     base(x+12,y+8);
  1320.     };
  1321.     break;
  1322.     case 15:
  1323.     if((x+8)>=36&&(x+8)<=115&&(y+8)>=22&&(y+8)<=61)
  1324.     {
  1325.     base(x+8,y+8);
  1326.     };
  1327.     if((x+12)>=36&&(x+12)<=115&&(y+8)>=22&&(y+8)<=61)
  1328.     {
  1329.     base(x+12,y+8);
  1330.     };
  1331.     if((x+8)>=36&&(x+8)<=115&&(y+4)>=22&&(y+4)<=61)
  1332.     {
  1333.     base(x+8,y+4);
  1334.     };
  1335.     if((x+4)>=36&&(x+4)<=115&&(y+4)>=22&&(y+4)<=61)
  1336.     {
  1337.     base(x+4,y+4);
  1338.     };
  1339.     break;
  1340.     case 16:
  1341.     if((x+8)>=36&&(x+8)<=115&&(y+4)>=22&&(y+4)<=61)
  1342.     {
  1343.     base(x+8,y+4);
  1344.     };
  1345.     if((x+8)>=36&&(x+8)<=115&&(y+8)>=22&&(y+8)<=61)
  1346.     {
  1347.     base(x+8,y+8);
  1348.     };
  1349.     if((x+12)>=36&&(x+12)<=115&&(y+8)>=22&&(y+8)<=61)
  1350.     {
  1351.     base(x+12,y+8);
  1352.     };
  1353.     if((x+12)>=36&&(x+12)<=115&&(y+12)>=22&&(y+12)<=61)
  1354.     {
  1355.     base(x+12,y+12);
  1356.     };
  1357.     break;
  1358.     case 17:
  1359.     if((x+8)>=36&&(x+8)<=115&&(y+8)>=22&&(y+8)<=61)
  1360.     {
  1361.     base(x+8,y+8);
  1362.     };
  1363.     if((x+12)>=36&&(x+12)<=115&&(y+8)>=22&&(y+8)<=61)
  1364.     {
  1365.     base(x+12,y+8);
  1366.     };
  1367.     if((x+4)>=36&&(x+4)<=115&&(y+12)>=22&&(y+12)<=61)
  1368.     {
  1369.     base(x+4,y+12);
  1370.     };
  1371.     if((x+8)>=36&&(x+8)<=115&&(y+12)>=22&&(y+12)<=61)
  1372.     {
  1373.     base(x+8,y+12);
  1374.     };
  1375.     break;
  1376.     case 18:
  1377.     if((x+8)>=36&&(x+8)<=115&&y>=22&&y<=61)
  1378.     {
  1379.     base(x+8,y);
  1380.     };
  1381.     if((x+8)>=36&&(x+8)<=115&&(y+4)>=22&&(y+4)<=61)
  1382.     {
  1383.     base(x+8,y+4);
  1384.     };
  1385.     if((x+8)>=36&&(x+8)<=115&&(y+8)>=22&&(y+8)<=61)
  1386.     {
  1387.     base(x+8,y+8);
  1388.     };
  1389.     if((x+8)>=36&&(x+8)<=115&&(y+12)>=22&&(y+12)<=61)
  1390.     {
  1391.     base(x+8,y+12);
  1392.     };
  1393.     break;
  1394.     case 19:
  1395.     if(x>=36&&x<=115&&(y+8)>=22&&(y+8)<=61)
  1396.     {
  1397.     base(x,y+8);
  1398.     };
  1399.     if((x+4)>=36&&(x+4)<=115&&(y+8)>=22&&(y+8)<=61)
  1400.     {
  1401.     base(x+4,y+8);
  1402.     };
  1403.     if((x+8)>=36&&(x+8)<=115&&(y+8)>=22&&(y+8)<=61)
  1404.     {
  1405.     base(x+8,y+8);
  1406.     };
  1407.     if((x+12)>=36&&(x+12)<=115&&(y+8)>=22&&(y+8)<=61)
  1408.     {
  1409.     base(x+12,y+8);
  1410.     };
  1411.     break;   
  1412.     default:
  1413.     break;
  1414.   }
  1415. }

  1416. void shapenext(int x,int y,int k)
  1417. {
  1418.   switch(k)
  1419.   {
  1420.     case 1:      
  1421.     base(x+4,y+4);   
  1422.     base(x+8,y+4);      
  1423.     base(x+8,y+8);      
  1424.     base(x+4,y+8);      
  1425.     break;
  1426.     case 2:  
  1427.     base(x+4,y+12);   
  1428.     base(x+8,y+4);   
  1429.     base(x+8,y+8);      
  1430.     base(x+8,y+12);   
  1431.     break;
  1432.     case 3:   
  1433.     base(x+4,y+4);
  1434.     base(x+4,y+8);   
  1435.     base(x+8,y+8);   
  1436.     base(x+12,y+8);   
  1437.     break;
  1438.     case 4:   
  1439.     base(x+12,y+4);   
  1440.     base(x+8,y+4);   
  1441.     base(x+8,y+8);   
  1442.     base(x+8,y+12);   
  1443.     break;
  1444.     case 5:   
  1445.     base(x+12,y+8);   
  1446.     base(x+4,y+4);   
  1447.     base(x+8,y+4);   
  1448.     base(x+12,y+4);   
  1449.     break;
  1450.     case 6:   
  1451.     base(x+4,y+4);   
  1452.     base(x+8,y+4);   
  1453.     base(x+8,y+8);   
  1454.     base(x+8,y+12);   
  1455.     break;
  1456.     case 7:   
  1457.     base(x+12,y+4);   
  1458.     base(x+4,y+8);   
  1459.     base(x+8,y+8);   
  1460.     base(x+12,y+8);  
  1461.     break;
  1462.     case 8:   
  1463.     base(x+8,y+12);   
  1464.     base(x+4,y+4);   
  1465.     base(x+4,y+8);   
  1466.     base(x+4,y+12);   
  1467.     break;
  1468.     case 9:   
  1469.     base(x+4,y+12);   
  1470.     base(x+4,y+8);   
  1471.     base(x+8,y+8);   
  1472.     base(x+12,y+8);   
  1473.     break;  
  1474.     case 10:   
  1475.     base(x+4,y+8);   
  1476.     base(x+8,y+4);
  1477.     base(x+8,y+8);   
  1478.     base(x+8,y+12);   
  1479.     break;
  1480.     case 11:   
  1481.     base(x+8,y+4);   
  1482.     base(x+4,y+8);   
  1483.     base(x+8,y+8);   
  1484.     base(x+12,y+8);   
  1485.     break;
  1486.     case 12:   
  1487.     base(x+12,y+8);   
  1488.     base(x+8,y+4);   
  1489.     base(x+8,y+8);   
  1490.     base(x+8,y+12);   
  1491.     break;
  1492.     case 13:   
  1493.     base(x+8,y+12);   
  1494.     base(x+4,y+8);   
  1495.     base(x+8,y+8);        
  1496.     base(x+12,y+8);   
  1497.     break;
  1498.     case 14:   
  1499.     base(x+8,y+8);   
  1500.     base(x+8,y+12);   
  1501.     base(x+12,y+4);   
  1502.     base(x+12,y+8);   
  1503.     break;
  1504.     case 15:   
  1505.     base(x+8,y+8);   
  1506.     base(x+12,y+8);   
  1507.     base(x+8,y+4);
  1508.     base(x+4,y+4);
  1509.     break;
  1510.     case 16:   
  1511.     base(x+8,y+4);
  1512.     base(x+8,y+8);   
  1513.     base(x+12,y+8);   
  1514.     base(x+12,y+12);   
  1515.     break;
  1516.     case 17:   
  1517.     base(x+8,y+8);   
  1518.     base(x+12,y+8);   
  1519.     base(x+4,y+12);   
  1520.     base(x+8,y+12);   
  1521.     break;
  1522.     case 18:   
  1523.     base(x+8,y);
  1524.     base(x+8,y+4);   
  1525.     base(x+8,y+8);   
  1526.     base(x+8,y+12);   
  1527.     break;
  1528.     case 19:   
  1529.     base(x,y+8);   
  1530.     base(x+4,y+8);   
  1531.     base(x+8,y+8);   
  1532.     base(x+12,y+8);   
  1533.     break;   
  1534.     default:
  1535.     break;
  1536.   }
  1537. }

  1538. void base(int x,int y)
  1539. {
  1540.   u8g.drawLine(x,y,x+3,y);
  1541.   u8g.drawLine(x,y+1,x,y+3);
  1542.   u8g.drawLine(x+2,y+3,x+1,y+3);
  1543.   u8g.drawLine(x+3,y+1,x+3,y+3);
  1544.   u8g.drawPixel(x+1,y+1);
  1545.   u8g.drawPixel(x+2,y+2);
  1546. }


  1547. void draw()
  1548. {
  1549.   switch(draw_state)
  1550.   {
  1551.     case 1:
  1552.     profile(level,score);   
  1553.    
  1554.     firstTrick(px,py-12,firsttrick);
  1555.     shapenext(41,0,knext);   
  1556.     break;
  1557.     case 2:
  1558.      for(int ix=0;ix<20;ix++)
  1559.    {
  1560.     for(int iy=0;iy<10;iy++)
  1561.     {
  1562.       if(dot[ix][iy]==1)
  1563.       {
  1564.         base((4*ix+36),(4*iy+22));
  1565.       }
  1566.      }
  1567.     };
  1568.    
  1569.    
  1570.     profile(level,score);      
  1571.     shapenext(41,0,knext);
  1572.    
  1573.     firstTrick(px,py-12,nexttrick);   
  1574.     break;   
  1575.   }
  1576. }

  1577. void setup()
  1578. {  
  1579.   // flip screen, if required
  1580.   u8g.setRot180();
  1581.   // assign default color value
  1582.   if ( u8g.getMode() == U8G_MODE_R3G3B2 )
  1583.     u8g.setColorIndex(255);     // white
  1584.   else if ( u8g.getMode() == U8G_MODE_GRAY2BIT )
  1585.     u8g.setColorIndex(3);         // max intensity
  1586.   else if ( u8g.getMode() == U8G_MODE_BW )
  1587.     u8g.setColorIndex(1);         // pixel on  
  1588.   pinMode(13, OUTPUT);           
  1589.   digitalWrite(13, HIGH);
  1590.   randomSeed(analogRead(A0));
  1591.   irrecv.enableIRIn();
  1592.   //Serial.begin(9600);
  1593. }


  1594. void loop()
  1595. {
  1596.   if(px==36)
  1597.   {
  1598.     k=random(1,20);        
  1599.     firsttrick=random(1,20);
  1600.     nexttrick=knext;
  1601.     py=34;
  1602.    
  1603.    
  1604.    
  1605.     knext=k;
  1606.      if(draw_state<2)
  1607.     {
  1608.       draw_state++;
  1609.     }
  1610.     else
  1611.     {
  1612.       draw_state=draw_state;
  1613.     };
  1614.   }
  1615.   else
  1616.   {
  1617.     knext=knext;
  1618.   };
  1619.   
  1620.   
  1621.   
  1622.   u8g.firstPage();
  1623.   do{   
  1624.     draw();
  1625.   }
  1626.   while(u8g.nextPage());
  1627.   
  1628.   
  1629.   
  1630.   
  1631.   if(irrecv.decode(&results))
  1632.   {
  1633.     long remotesignal=results.value;
  1634.    // Serial.println(results.value);
  1635.     if(remotesignal==16584943)              //zuo
  1636.     {
  1637.       if(draw_state==1)
  1638.       {
  1639.         checkleft(px,py,firsttrick);
  1640.       }
  1641.       else
  1642.       {
  1643.         checkleft(px,py,nexttrick);
  1644.       };
  1645.       
  1646.       if(draw_state==1)
  1647.       {
  1648.         checkdown(px,py,firsttrick);
  1649.       }
  1650.       else
  1651.       {
  1652.         checkdown(px,py,nexttrick);
  1653.       };
  1654.     }
  1655.     else if(remotesignal==16601263)           //you
  1656.     {
  1657.        if(draw_state==1)
  1658.       {
  1659.         checkright(px,py,firsttrick);
  1660.       }
  1661.       else
  1662.       {
  1663.         checkright(px,py,nexttrick);
  1664.       };
  1665.       
  1666.      if(draw_state==1)
  1667.       {
  1668.         checkdown(px,py,firsttrick);
  1669.       }
  1670.       else
  1671.       {
  1672.         checkdown(px,py,nexttrick);
  1673.       };
  1674.     }
  1675.     else if(remotesignal==16621663)           //xuanzhuan
  1676.     {
  1677.    
  1678.       if(firsttrick==1)
  1679.       {
  1680.         firsttrick=firsttrick;
  1681.       }
  1682.         else if(firsttrick==5||firsttrick==9||firsttrick==13)
  1683.       {
  1684.         firsttrick=firsttrick-3;
  1685.       }
  1686.       else if(firsttrick==15||firsttrick==17||firsttrick==19)
  1687.       {
  1688.         firsttrick=firsttrick-1;
  1689.       }
  1690.       else
  1691.       {
  1692.         firsttrick=firsttrick+1;
  1693.       };
  1694.      
  1695.       if(nexttrick==1)
  1696.       {
  1697.         nexttrick=nexttrick;
  1698.       }
  1699.         else if(nexttrick==5||nexttrick==9||nexttrick==13)
  1700.       {
  1701.         nexttrick=nexttrick-3;
  1702.       }
  1703.       else if(nexttrick==15||nexttrick==17||nexttrick==19)
  1704.       {
  1705.         nexttrick=nexttrick-1;
  1706.       }
  1707.       else
  1708.       {
  1709.         nexttrick=nexttrick+1;
  1710.       };  
  1711.    
  1712.       if(draw_state==1)
  1713.       {
  1714.         checkdown(px,py,firsttrick);
  1715.       }
  1716.       else
  1717.       {
  1718.         checkdown(px,py,nexttrick);
  1719.       };
  1720.     }
  1721.     else if(remotesignal==16625743)               //xia
  1722.     {
  1723.    if(draw_state==1)
  1724.       {
  1725.         checkdown(px,py,firsttrick);
  1726.       }
  1727.       else
  1728.       {
  1729.         checkdown(px,py,nexttrick);
  1730.       };
  1731.       if(draw_state==1)
  1732.       {
  1733.         checkdown(px,py,firsttrick);
  1734.       }
  1735.       else
  1736.       {
  1737.         checkdown(px,py,nexttrick);
  1738.       };
  1739.     };
  1740.     if(px==112)
  1741.     {
  1742.       if(draw_state==1)
  1743.       {
  1744.       reachgraph(px,py,firsttrick);
  1745.       }
  1746.       else if(draw_state==2)
  1747.       {
  1748.       reachgraph(px,py,nexttrick);
  1749.       };
  1750.       px=36;      
  1751.       py=34;
  1752.     };
  1753.     irrecv.resume();
  1754.   }
  1755.   else
  1756.   {
  1757.     if(px==112)
  1758.     {
  1759.       if(draw_state==1)
  1760.       {
  1761.       reachgraph(px,py,firsttrick);
  1762.       }
  1763.       else if(draw_state==2)
  1764.       {
  1765.       reachgraph(px,py,nexttrick);
  1766.       };
  1767.       px=36;      
  1768.       py=34;
  1769.     }
  1770.     else
  1771.     {
  1772.     if(draw_state==1)
  1773.       {
  1774.         checkdown(px,py,firsttrick);
  1775.       }
  1776.       else
  1777.       {
  1778.         checkdown(px,py,nexttrick);
  1779.       };
  1780.     }
  1781.   };
  1782.   
  1783.   
  1784.   
  1785.   for(int xiaox=19;xiaox>=0;xiaox--)
  1786.   {
  1787.     int scoretimes=0;
  1788.     if(dot[xiaox][0]==1&&dot[xiaox][1]==1&&dot[xiaox][2]==1&&dot[xiaox][3]==1&&dot[xiaox][4]==1&&dot[xiaox][5]==1&&dot[xiaox][6]==1&&dot[xiaox][7]==1&&dot[xiaox][8]==1&&dot[xiaox][9]==1)
  1789.     {
  1790.       for(int updatex=xiaox;updatex>=0;updatex--)
  1791.       {
  1792.         for(int updatey=0;updatey<10;updatey++)
  1793.         {
  1794.           dot[updatex][updatey]=dot[updatex-1][updatey];
  1795.         };
  1796.       };
  1797.       scoretimes=scoretimes+1;
  1798.     }
  1799.     if(scoretimes==4)
  1800.     {
  1801.       score=score+50;
  1802.     }
  1803.     else
  1804.     {
  1805.       score=score+10*scoretimes;
  1806.     }
  1807.   };
  1808.   
  1809.   
  1810.   
  1811.   if(score<200)
  1812.   {
  1813.     level=1;
  1814.   }
  1815.   else if(score>=200&&score<500)
  1816.   {
  1817.     level=2;
  1818.   }
  1819.   else if(score>=500&&score<800)
  1820.   {
  1821.     level=3;
  1822.   }
  1823.   else if(score>=800&&score<1000)
  1824.   {
  1825.     level=4;
  1826.   }
  1827.   else if(score>=1000)
  1828.   {
  1829.     level=5;
  1830.   };
  1831.   
  1832.   
  1833.   int unittime=1000-level*100;
  1834.   delay(unittime);
  1835. //delay(50);
  1836. }
复制代码

      
       由于码功真的不够犀利,所以欢迎大家找茬,发现BUG了果断告诉我~~~另外当然自己有空也会去学点算法的东西,争取以后写个短点的程序!

    特别鸣谢:
    davidce、奈何col   
    做个过程中,遇到两个问题,是这两位大神给解答的,谢谢了!膜拜一下!

   

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2012-11-2 18:41:54 | 显示全部楼层
赞一个,遥控器的确还是一个不错的解决办法。很期待楼主的reprap,到时候上来分享下使用感受
回复 支持 反对

使用道具 举报

发表于 2012-11-2 18:49:34 | 显示全部楼层
强悍!!!
回复 支持 反对

使用道具 举报

发表于 2012-11-2 19:36:08 | 显示全部楼层
很好的东西,只是代码太长,没耐心看下去.
回复 支持 反对

使用道具 举报

发表于 2012-11-2 20:12:32 | 显示全部楼层
good job
回复 支持 反对

使用道具 举报

发表于 2012-11-2 20:50:44 | 显示全部楼层
这是我目前看到的最长Arduino代码!
回复 支持 反对

使用道具 举报

发表于 2012-11-2 21:00:17 | 显示全部楼层
惊现admin账户
回复 支持 反对

使用道具 举报

发表于 2012-11-2 21:45:33 | 显示全部楼层
339388279 发表于 2012-11-2 21:00
惊现admin账户

给力,好长的代码
回复 支持 反对

使用道具 举报

发表于 2012-11-2 22:05:09 | 显示全部楼层
{:soso_e153:} 居然用admin回的贴。。。我去删掉。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-2 22:35:57 | 显示全部楼层
davidce 发表于 2012-11-2 20:50
这是我目前看到的最长Arduino代码!

= =,效率不高的代码不是好代码,写得长其实也代表一种菜吧,只是稍微高级点的菜鸟~~~谢谢你的给力的库啊!!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-2 22:38:53 | 显示全部楼层
弘毅 发表于 2012-11-2 22:05
居然用admin回的贴。。。我去删掉。。。

翻墙到香港,终于能打开帖子了~~~可惜看不到admin的回帖了= =
回复 支持 反对

使用道具 举报

发表于 2012-11-3 11:14:59 | 显示全部楼层
{:soso_e179:}{:soso_e179:}惊的我哑口无言
回复 支持 反对

使用道具 举报

发表于 2012-11-3 12:44:52 | 显示全部楼层
期待打印机测试图,好东东啊
回复 支持 反对

使用道具 举报

发表于 2012-11-3 20:06:22 | 显示全部楼层
是个好极客
回复 支持 反对

使用道具 举报

发表于 2012-11-4 19:39:37 | 显示全部楼层
技术宅伤不起啊 万圣节的时候有个国外的哥们用南瓜做的俄罗斯
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 20:35 , Processed in 0.068946 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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