查看: 10354|回复: 20

自己花一天写的OLED上的小游戏,我叫它Whac-a-BPI(打BPI)^^

  [复制链接]
  • TA的每日心情
    开心
    2015-5-20 16:46
  • 签到天数: 16 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2015-1-7 17:49:01 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 光轮 于 2015-1-8 09:36 编辑

    写了一天到最后连自己都不认识了....废话不多说先上图上视频
    1.png
    2.png
    3.png
    说明一下:
    BPI是对拍死的BPI的计数,对应最终的成绩
    RANK是难度 数值越低难度越高 每当打死10个BPI以后就会减一即难度高一级 默认初始化RANK等于15
    DIE是存在的BPI数量,一旦数量大于或者等于5就GameOver了..........
    最后会把最终成绩打印在屏幕和终端上
    4.png
    shell.png
    视频连接:

    用C语言写的,第一次在M1里面用C编.....好多函数都是网上查来直接用的,理解并不深入所以代码肯定有很多bug...大神勿喷
    下面仅仅是主函数代码:
    1. int main(int argc,char **argv)
    2. {
    3.     byte xx=0,yy=0,BPI[8]={0,0,0,0,0},A_BPI_Start[8]={0,0,0,0,0},A_BPI_Stop[8]={0,0,0,0,0},A_BPI_ii=0;
    4.     byte AA0=0,AA1=0,AA2=0,AA3=0,AA4=0,AA5=0,AA6=0,AA7=0,Rank=15,NumString_Rank[10]={0,0,0,0,0,0,0,0,0,0},NumString_BPI[10]={0,0,0,0,0,0,0,0,0,0};
    5.     byte NumString_Die_Cnt[10];
    6.     byte Die_Cnt[8]={0,0,0,0,0},Die_Num=0,ca=0;
    7.     dword CNT=1,Rand_Cnt=0,BPI_Cnt=0;
    8.     pthread_t pid1, pid2; //thread

    9.     LCD_Init();

    10.      

    11.     Num2String(BPI_Cnt,3,NumString_BPI);
    12.     Num2String(Rank,3,NumString_Rank);
    13.     if(pthread_create(&pid1, NULL, thread_mice, NULL))
    14.     {
    15.         return -1;
    16.     }
    17.     Draw_BMP(bananapi);
    18.     sleep(2);
    19.     Draw_BMP(gImage_start);
    20.     sleep(1);
    21.     Draw_BMP(gImage_start);
    22.     sleep(1);
    23.     Draw_BMP(gImage_anykey);
    24.      
    25.     while(1)
    26.     {
    27.          if(Left_Check==1)
    28.          {
    29.              Left_Check=0;
    30.              break;
    31.          }
    32.     }
    33.     srand((int) time(0));
    34.     while(1)
    35.     {
    36.       if(Pos_Mark)
    37.       {
    38.            
    39.           if(X_LCD_Pos>119)X_LCD_Pos=119;
    40.           if(Y_LCD_Pos>55)Y_LCD_Pos=55;
    41.            
    42.           old_X_LCD_Pos=X_LCD_Pos;
    43.           old_Y_LCD_Pos=Y_LCD_Pos;
    44.           Pos_Mark = 0;
    45.       }
    46.       
    47.       CNT++;
    48.       Rand_Cnt++;
    49.       Num2String(Die_Num,1,NumString_Die_Cnt);
    50.       LCD_W_BMP(0,16,24,24,gImage_A_BPI[BPI[0]],1);
    51.       LCD_W_BMP(30,16,24,24,gImage_A_BPI[BPI[1]],1);
    52.       LCD_W_BMP(60,16,24,24,gImage_A_BPI[BPI[2]],1);
    53.       LCD_W_BMP(90,16,24,24,gImage_A_BPI[BPI[3]],1);
    54.       
    55.       LCD_W_BMP(0,40,24,24,gImage_A_BPI[BPI[4]],1);
    56.       LCD_W_BMP(30,40,24,24,gImage_A_BPI[BPI[5]],1);
    57.       LCD_W_BMP(60,40,24,24,gImage_A_BPI[BPI[6]],1);
    58.       LCD_W_BMP(90,40,24,24,gImage_A_BPI[BPI[7]],1);
    59.       
    60.       LCD_P6x8Str(0,0,"BPI:",1);
    61.       LCD_P6x8Str(0,1,"RANK:",1);
    62.       LCD_P6x8Str(60,1,"DIE:",1);
    63.       LCD_P6x8Str(60,0,"Whac-a-BPI",1);
    64.       LCD_P6x8Str(30,0,NumString_BPI,1);
    65.       LCD_P6x8Str(30,1,NumString_Rank,1);
    66.       LCD_P6x8Str(90,1,NumString_Die_Cnt,1);
    67.       
    68.       LCD_W_BMP(X_LCD_Pos,Y_LCD_Pos,8,8,OLED_mice,1);
    69.       
    70.       Draw_BMP(LCD_Buffer);
    71.       LCD_W_BMP(old_X_LCD_Pos,old_Y_LCD_Pos,8,8,OLED_mice,0);
    72.       
    73.       
    74.       
    75.       LCD_P6x8Str(0,0,"BPI:",0);
    76.       LCD_P6x8Str(0,1,"RANK:",0);
    77.       LCD_P6x8Str(90,1,"DIE:",0);
    78.       LCD_P6x8Str(60,0,"Whac-a-BPI",1);
    79.       LCD_P6x8Str(30,0,NumString_BPI,0);
    80.       LCD_P6x8Str(30,1,NumString_Rank,0);
    81.       LCD_P6x8Str(80,1,NumString_Die_Cnt,0);
    82.       
    83.       LCD_W_BMP(0,16,24,24,gImage_A_BPI[BPI[0]],0);
    84.       LCD_W_BMP(30,16,24,24,gImage_A_BPI[BPI[1]],0);
    85.       LCD_W_BMP(60,16,24,24,gImage_A_BPI[BPI[2]],0);
    86.       LCD_W_BMP(90,16,24,24,gImage_A_BPI[BPI[3]],0);
    87.       
    88.       LCD_W_BMP(0,40,24,24,gImage_A_BPI[BPI[4]],0);
    89.       LCD_W_BMP(30,40,24,24,gImage_A_BPI[BPI[5]],0);
    90.       LCD_W_BMP(60,40,24,24,gImage_A_BPI[BPI[6]],0);
    91.       LCD_W_BMP(90,40,24,24,gImage_A_BPI[BPI[7]],0);
    92.          
    93.       if(Rand_Cnt >= Rank)
    94.       {
    95.           Rand_Cnt=0;
    96.           switch(rand()%8)
    97.           {
    98.               case 0:if(A_BPI_Stop[0]==0) A_BPI_Stop[0]=1,A_BPI_Start[0]=1;break;
    99.               case 1:if(A_BPI_Stop[1]==0) A_BPI_Stop[1]=1,A_BPI_Start[1]=1;break;
    100.               case 2:if(A_BPI_Stop[2]==0) A_BPI_Stop[2]=1,A_BPI_Start[2]=1;break;
    101.               case 3:if(A_BPI_Stop[3]==0) A_BPI_Stop[3]=1,A_BPI_Start[3]=1;break;
    102.               case 4:if(A_BPI_Stop[4]==0) A_BPI_Stop[4]=1,A_BPI_Start[4]=1;break;
    103.               case 5:if(A_BPI_Stop[5]==0) A_BPI_Stop[5]=1,A_BPI_Start[5]=1;break;
    104.               case 6:if(A_BPI_Stop[6]==0) A_BPI_Stop[6]=1,A_BPI_Start[6]=1;break;
    105.               case 7:if(A_BPI_Stop[7]==0) A_BPI_Stop[7]=1,A_BPI_Start[7]=1;break;
    106.               default:break;      
    107.           }
    108.       }
    109.       if(CNT==2)
    110.       {
    111.           for(A_BPI_ii=0;A_BPI_ii<8;A_BPI_ii++)
    112.           {
    113.               if(A_BPI_Start[A_BPI_ii]==1)  
    114.               {
    115.                     if(BPI[A_BPI_ii]<4)BPI[A_BPI_ii]++;
    116.                     else
    117.                     {
    118.                         Die_Num++;
    119.                         A_BPI_Start[A_BPI_ii]=2;
    120.                     }
    121.                         
    122.               }        
    123.               if(A_BPI_Stop[A_BPI_ii]==2)
    124.               {
    125.                   if(BPI[A_BPI_ii]<8)
    126.                       BPI[A_BPI_ii]++;
    127.                   else
    128.                   {
    129.                         BPI[A_BPI_ii]=0;
    130.                         A_BPI_Stop[A_BPI_ii]=0;
    131.                         A_BPI_Start[A_BPI_ii]=0;
    132.                   }
    133.               }
    134.                        
    135.           }
    136.           if(Right_Check==1)
    137.           {
    138.               LCD_Init();
    139.               Right_Check=0;
    140.           }
    141.           if(Left_Check==1)
    142.           {
    143.               if( 4 <Left_Check_X&& 24 >Left_Check_X&& 18 <Left_Check_Y&&35>Left_Check_Y&&A_BPI_Stop[0]==1)
    144.               {
    145.                       A_BPI_Stop[0]=2;
    146.                       BPI[0]=5;
    147.                       BPI_Cnt++;
    148.                       Die_Num--;
    149.                       ca=1;
    150.               }
    151.               else if( 34 <Left_Check_X&& 49 >Left_Check_X&& 18 <Left_Check_Y&& 35 >Left_Check_Y&&A_BPI_Stop[1]==1)
    152.               {
    153.                   A_BPI_Stop[1]=2;
    154.                   BPI[1]=5;
    155.                   BPI_Cnt++;
    156.                   Die_Num--;
    157.                   ca=1;
    158.               }  
    159.               else if( 63 <Left_Check_X&& 80 >Left_Check_X&& 18 <Left_Check_Y&& 35 >Left_Check_Y&&A_BPI_Stop[2]==1)
    160.               {
    161.                   A_BPI_Stop[2]=2;
    162.                   BPI[2]=5;
    163.                   BPI_Cnt++;
    164.                   Die_Num--;
    165.                   ca=1;
    166.               }  
    167.               else if( 93 <Left_Check_X&& 109 >Left_Check_X&& 18 <Left_Check_Y&& 35 >Left_Check_Y&&A_BPI_Stop[3]==1)
    168.               {
    169.                   A_BPI_Stop[3]=2;
    170.                   BPI[3]=5;
    171.                   BPI_Cnt++;
    172.                   Die_Num--;
    173.                   ca=1;
    174.               }  
    175.               else if( 4 <Left_Check_X&& 24 >Left_Check_X&& 43 <Left_Check_Y&&67>Left_Check_Y&&A_BPI_Stop[4]==1)
    176.               {
    177.                   A_BPI_Stop[4]=2;
    178.                   BPI[4]=5;
    179.                   BPI_Cnt++;
    180.                   Die_Num--;
    181.                   ca=1;
    182.               }
    183.               else if( 34 <Left_Check_X&& 49 >Left_Check_X&& 43 <Left_Check_Y&& 67 >Left_Check_Y&&A_BPI_Stop[5]==1)
    184.               {
    185.                   A_BPI_Stop[5]=2;
    186.                   BPI[5]=5;
    187.                   BPI_Cnt++;
    188.                   Die_Num--;
    189.                   ca=1;
    190.               }  
    191.               else if( 63 <Left_Check_X&& 80 >Left_Check_X&& 43 <Left_Check_Y&& 67 >Left_Check_Y&&A_BPI_Stop[6]==1)
    192.               {
    193.                   A_BPI_Stop[6]=2;
    194.                   BPI[6]=5;
    195.                   BPI_Cnt++;
    196.                   Die_Num--;
    197.                   ca=1;
    198.               }  
    199.               else if( 93 <Left_Check_X&& 109 >Left_Check_X&& 43 <Left_Check_Y&& 67 >Left_Check_Y&&A_BPI_Stop[7]==1)
    200.               {
    201.                   A_BPI_Stop[7]=2;
    202.                   BPI[7]=5;
    203.                   BPI_Cnt++;
    204.                   Die_Num--;
    205.                   ca=1;
    206.               }  
    207.               if(ca)
    208.               {
    209.                   if(!(BPI_Cnt%11)) Rank--;
    210.                   Num2String(BPI_Cnt,3,NumString_BPI);
    211.                   Num2String(Rank,3,NumString_Rank);
    212.                   Left_Check=0;
    213.                   ca=0;
    214.               }
    215.           }

    216.           CNT=0;
    217.       }
    218.       if(Die_Num>=5)
    219.       {
    220.       
    221.             Draw_BMP(gImage_gameover);
    222.             LCD_P8x16Str(75,5,NumString_BPI);
    223.             printf("Game Score:%d\n",BPI_Cnt);
    224.             return 0;
    225.       }
    226.     }
    227.     return 0;
    228. }
    复制代码
    使用软SPI驱动OLED,有时会出现花屏的现象,一直没查明白这个bug原因也就先这样了....视频里也可以看到突然会全屏花.为了继续游戏我把右击鼠标写成了对OLED重新初始化一次,所以花屏以后需要再右击一下就OK啦,就当这是给游戏提高难度了吧........
    这是源码 我都写一个c文件里了
    game1.zip (9.42 KB, 下载次数: 13)
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-2-7 11:49
  • 签到天数: 2193 天

    连续签到: 33 天

    [LV.Master]伴坛终老

    发表于 2015-1-7 18:33:16 | 显示全部楼层
    真不错,顶一个!!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-10-5 14:38
  • 签到天数: 175 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-1-7 18:54:42 | 显示全部楼层
    不错呀,挺有意思的,这小伙真用心
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-1-8 09:03:44 | 显示全部楼层
    非常NB,牛人!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-10-9 10:25
  • 签到天数: 886 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2015-1-8 09:11:13 | 显示全部楼层
    非常赞!必须顶!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-6-24 16:41
  • 签到天数: 709 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2015-1-8 21:08:16 | 显示全部楼层
    好厉害的感觉啊   
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-6-12 21:59
  • 签到天数: 647 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2015-1-11 22:42:09 | 显示全部楼层
    牛擦啊|!!!!!!!!!!!!!!!!!!!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2018-4-22 10:37
  • 签到天数: 68 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2015-1-14 12:28:43 | 显示全部楼层
    必须顶,必须顶,必须顶,必须顶,
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-11-30 19:48
  • 签到天数: 981 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2015-1-14 12:42:54 | 显示全部楼层
    楼主好牛啊,谢谢分享!!!!!!!!!!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-8-7 21:31
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2015-1-28 21:23:48 | 显示全部楼层
    编译都好了,可是我的JLINK在linux不好用啊,弄了好久没有下载好,你用什么下载的
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-12-19 17:39 , Processed in 0.200576 second(s), 34 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.