说明一下:
BPI是对拍死的BPI的计数,对应最终的成绩
RANK是难度 数值越低难度越高 每当打死10个BPI以后就会减一即难度高一级 默认初始化RANK等于15 
DIE是存在的BPI数量,一旦数量大于或者等于5就GameOver了..........
最后会把最终成绩打印在屏幕和终端上。

下面仅仅是主函数代码:

int main(int argc,char **argv)
{
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;
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};
byte NumString_Die_Cnt[10];
byte Die_Cnt[8]={0,0,0,0,0},Die_Num=0,ca=0;
dword CNT=1,Rand_Cnt=0,BPI_Cnt=0;
pthread_t pid1, pid2; //thread LCD_Init(); Num2String(BPI_Cnt,3,NumString_BPI);
Num2String(Rank,3,NumString_Rank);
if(pthread_create(&pid1, NULL, thread_mice, NULL))
{
return -1;
}
Draw_BMP(bananapi);
sleep(2);
Draw_BMP(gImage_start);
sleep(1);
Draw_BMP(gImage_start);
sleep(1);
Draw_BMP(gImage_anykey); while(1)
{
if(Left_Check==1)
{
Left_Check=0;
break;
}
}
srand((int) time(0));
while(1)
{
if(Pos_Mark)
{ if(X_LCD_Pos>119)X_LCD_Pos=119;
if(Y_LCD_Pos>55)Y_LCD_Pos=55; old_X_LCD_Pos=X_LCD_Pos;
old_Y_LCD_Pos=Y_LCD_Pos;
Pos_Mark = 0;
} CNT++;
Rand_Cnt++;
Num2String(Die_Num,1,NumString_Die_Cnt);
LCD_W_BMP(0,16,24,24,gImage_A_BPI[BPI[0]],1);
LCD_W_BMP(30,16,24,24,gImage_A_BPI[BPI[1]],1);
LCD_W_BMP(60,16,24,24,gImage_A_BPI[BPI[2]],1);
LCD_W_BMP(90,16,24,24,gImage_A_BPI[BPI[3]],1); LCD_W_BMP(0,40,24,24,gImage_A_BPI[BPI[4]],1);
LCD_W_BMP(30,40,24,24,gImage_A_BPI[BPI[5]],1);
LCD_W_BMP(60,40,24,24,gImage_A_BPI[BPI[6]],1);
LCD_W_BMP(90,40,24,24,gImage_A_BPI[BPI[7]],1); LCD_P6x8Str(0,0,"BPI:",1);
LCD_P6x8Str(0,1,"RANK:",1);
LCD_P6x8Str(60,1,"DIE:",1);
LCD_P6x8Str(60,0,"Whac-a-BPI",1);
LCD_P6x8Str(30,0,NumString_BPI,1);
LCD_P6x8Str(30,1,NumString_Rank,1);
LCD_P6x8Str(90,1,NumString_Die_Cnt,1); LCD_W_BMP(X_LCD_Pos,Y_LCD_Pos,8,8,OLED_mice,1); Draw_BMP(LCD_Buffer);
LCD_W_BMP(old_X_LCD_Pos,old_Y_LCD_Pos,8,8,OLED_mice,0); LCD_P6x8Str(0,0,"BPI:",0);
LCD_P6x8Str(0,1,"RANK:",0);
LCD_P6x8Str(90,1,"DIE:",0);
LCD_P6x8Str(60,0,"Whac-a-BPI",1);
LCD_P6x8Str(30,0,NumString_BPI,0);
LCD_P6x8Str(30,1,NumString_Rank,0);
LCD_P6x8Str(80,1,NumString_Die_Cnt,0); LCD_W_BMP(0,16,24,24,gImage_A_BPI[BPI[0]],0);
LCD_W_BMP(30,16,24,24,gImage_A_BPI[BPI[1]],0);
LCD_W_BMP(60,16,24,24,gImage_A_BPI[BPI[2]],0);
LCD_W_BMP(90,16,24,24,gImage_A_BPI[BPI[3]],0); LCD_W_BMP(0,40,24,24,gImage_A_BPI[BPI[4]],0);
LCD_W_BMP(30,40,24,24,gImage_A_BPI[BPI[5]],0);
LCD_W_BMP(60,40,24,24,gImage_A_BPI[BPI[6]],0);
LCD_W_BMP(90,40,24,24,gImage_A_BPI[BPI[7]],0); if(Rand_Cnt >= Rank)
{
Rand_Cnt=0;
switch(rand()%8)
{
case 0:if(A_BPI_Stop[0]==0) A_BPI_Stop[0]=1,A_BPI_Start[0]=1;break;
case 1:if(A_BPI_Stop[1]==0) A_BPI_Stop[1]=1,A_BPI_Start[1]=1;break;
case 2:if(A_BPI_Stop[2]==0) A_BPI_Stop[2]=1,A_BPI_Start[2]=1;break;
case 3:if(A_BPI_Stop[3]==0) A_BPI_Stop[3]=1,A_BPI_Start[3]=1;break;
case 4:if(A_BPI_Stop[4]==0) A_BPI_Stop[4]=1,A_BPI_Start[4]=1;break;
case 5:if(A_BPI_Stop[5]==0) A_BPI_Stop[5]=1,A_BPI_Start[5]=1;break;
case 6:if(A_BPI_Stop[6]==0) A_BPI_Stop[6]=1,A_BPI_Start[6]=1;break;
case 7:if(A_BPI_Stop[7]==0) A_BPI_Stop[7]=1,A_BPI_Start[7]=1;break;
default:break;
}
}
if(CNT==2)
{
for(A_BPI_ii=0;A_BPI_ii<8;A_BPI_ii++)
{
if(A_BPI_Start[A_BPI_ii]==1)
{
if(BPI[A_BPI_ii]<4)BPI[A_BPI_ii]++;
else
{
Die_Num++;
A_BPI_Start[A_BPI_ii]=2;
} }
if(A_BPI_Stop[A_BPI_ii]==2)
{
if(BPI[A_BPI_ii]<8)
BPI[A_BPI_ii]++;
else
{
BPI[A_BPI_ii]=0;
A_BPI_Stop[A_BPI_ii]=0;
A_BPI_Start[A_BPI_ii]=0;
}
} }
if(Right_Check==1)
{
LCD_Init();
Right_Check=0;
}
if(Left_Check==1)
{
if( 4 <Left_Check_X&& 24 >Left_Check_X&& 18 <Left_Check_Y&&35>Left_Check_Y&&A_BPI_Stop[0]==1)
{
A_BPI_Stop[0]=2;
BPI[0]=5;
BPI_Cnt++;
Die_Num--;
ca=1;
}
else if( 34 <Left_Check_X&& 49 >Left_Check_X&& 18 <Left_Check_Y&& 35 >Left_Check_Y&&A_BPI_Stop[1]==1)
{
A_BPI_Stop[1]=2;
BPI[1]=5;
BPI_Cnt++;
Die_Num--;
ca=1;
}
else if( 63 <Left_Check_X&& 80 >Left_Check_X&& 18 <Left_Check_Y&& 35 >Left_Check_Y&&A_BPI_Stop[2]==1)
{
A_BPI_Stop[2]=2;
BPI[2]=5;
BPI_Cnt++;
Die_Num--;
ca=1;
}
else if( 93 <Left_Check_X&& 109 >Left_Check_X&& 18 <Left_Check_Y&& 35 >Left_Check_Y&&A_BPI_Stop[3]==1)
{
A_BPI_Stop[3]=2;
BPI[3]=5;
BPI_Cnt++;
Die_Num--;
ca=1;
}
else if( 4 <Left_Check_X&& 24 >Left_Check_X&& 43 <Left_Check_Y&&67>Left_Check_Y&&A_BPI_Stop[4]==1)
{
A_BPI_Stop[4]=2;
BPI[4]=5;
BPI_Cnt++;
Die_Num--;
ca=1;
}
else if( 34 <Left_Check_X&& 49 >Left_Check_X&& 43 <Left_Check_Y&& 67 >Left_Check_Y&&A_BPI_Stop[5]==1)
{
A_BPI_Stop[5]=2;
BPI[5]=5;
BPI_Cnt++;
Die_Num--;
ca=1;
}
else if( 63 <Left_Check_X&& 80 >Left_Check_X&& 43 <Left_Check_Y&& 67 >Left_Check_Y&&A_BPI_Stop[6]==1)
{
A_BPI_Stop[6]=2;
BPI[6]=5;
BPI_Cnt++;
Die_Num--;
ca=1;
}
else if( 93 <Left_Check_X&& 109 >Left_Check_X&& 43 <Left_Check_Y&& 67 >Left_Check_Y&&A_BPI_Stop[7]==1)
{
A_BPI_Stop[7]=2;
BPI[7]=5;
BPI_Cnt++;
Die_Num--;
ca=1;
}
if(ca)
{
if(!(BPI_Cnt%11)) Rank--;
Num2String(BPI_Cnt,3,NumString_BPI);
Num2String(Rank,3,NumString_Rank);
Left_Check=0;
ca=0;
}
} CNT=0;
}
if(Die_Num>=5)
{ Draw_BMP(gImage_gameover);
LCD_P8x16Str(75,5,NumString_BPI);
printf("Game Score:%d\n",BPI_Cnt);
return 0;
}
}
return 0;
}

  使用软SPI驱动OLED,有时会出现花屏的现象,一直没查明白这个bug原因也就先这样了....视频里也可以看到突然会全屏花.为了继续游戏我把右击鼠标写成了对OLED重新初始化一次,所以花屏以后需要再右击一下就OK啦,就当这是给游戏提高难度了吧........
这是源码 我都写一个c文件里了:

编译:

gcc game1.c -o game1 -lwiringPi

执行:

./game1

  源码里面没注释,我觉得我现在再看已经无法理解好多变量的作用了....
需要wiringBPI的库,不知道的可以参考这里
http://www.eeboard.com/bbs/thread-40235-1-2.html

bananapi+OLED做的一个打地鼠游戏,c语言编程的更多相关文章

  1. 用原生javascript做的一个打地鼠的小游戏

    学习javascript也有一段时间了,一直以来分享的都是一些概念型的知识,今天有空做了一个打地鼠的小游戏,来跟大家分享一下,大家也可以下载来增加一些生活的乐趣,下面P出代码:首先是HTML部分代码: ...

  2. 用Unity做的一个小游戏,仿照一个样例写的,个人认为文章写的不错,哈哈

  3. 无聊的人用JS实现了一个简单的打地鼠游戏

    直入正题,用JS实现一个简单的打地鼠游戏 因为功能比较简单就直接裸奔JS了,先看看效果图,或者 在线玩玩 吧 如果点击颜色比较深的那个(俗称坏老鼠),将扣分50:如果点击颜色比较浅的那个(俗称好老鼠) ...

  4. 使用PixiJS做一个小游戏

    PixiJS PixiJS使用WebGL,是一个超快的HTML5 2D渲染引擎.作为一个Javascript的2D渲染器,Pixi.js的目标是提供一个快速的.轻量级而且是兼任所有设备的2D库. 官方 ...

  5. 用 JS 做一个数独游戏(二)

    用 JS 做一个数独游戏(二) 在 上一篇博客 中,我们通过 Node 运行了我们的 JavaScript 代码,在控制台中打印出来生成好的数独终盘.为了让我们的数独游戏能有良好的体验,这篇博客将会为 ...

  6. 用 JS 做一个数独游戏(一)

    用 JS 做一个数独游戏(一) 数独的棋盘由 9x9 的方格组成,每一行的数字包含 1 ~ 9 九个数字,并且每一列包含 1 ~ 9 这 9 个不重复的数字,另外,整个棋盘分为 9 个 3x3 的块, ...

  7. Android 多线程 打地鼠游戏

    前言:最近比较喜欢多线程了,看到了一些线程案例,这里总结一下打地鼠游戏的整个过程. 1.首先是主活动要加载的布局,我一般就喜欢早点把这个写上,这样就好在主活动中玩弄这些控件了.闲话不多说,一个Fram ...

  8. 【鸿蒙开发板试用报告】用OLED板实现FlappyBird小游戏(中)

    小伙伴们久等了,在上一篇<[开发板试用报告]用OLED板实现FlappyBird小游戏(上)>中,我们本着拿来主义的原则,成功的让小鸟在OLED屏幕上自由飞翔起来,下面我们将加入按钮交互功 ...

  9. 用Phaser来制作一个html5游戏——flappy bird (二)

    在上一篇教程中我们完成了boot.preload.menu这三个state的制作,下面我们就要进入本游戏最核心的一个state的制作了.play这个state的代码比较多,我不会一一进行说明,只会把一 ...

随机推荐

  1. 如何加快C++代码的编译速度 转 ccache

    http://www.cnblogs.com/baiyanhuang/archive/2010/01/17/1730717.html   C++代码一直以其运行时的高性能高调面对世人, 但是说起编译速 ...

  2. elinks快捷方式

    突然有兴趣看看Linux下的字符模式的浏览器,搜了下有好几个,在Ubuntu里“添加/删除”里找到一个,叫Elinks,安装,然后在终端运行elinks,试用了一下,不错,使用方法也挺简单的,支持多标 ...

  3. Android动画-View动画

    View动画 Android动画分为三类:View动画,帧动画,和属性动画.帧动画也是View动画的一种. View动画的作用对象是View,之所以强调这一点是因为其作用对象有别于Android的另一 ...

  4. 【阅读笔记】《C程序员 从校园到职场》第六章 常用文件操作函数 (Part 1)

    参考链接:https://blog.csdn.net/zhouzhaoxiong1227/article/details/24926023 让你提前认识软件开发(18):C语言中常用的文件操作函数总结 ...

  5. python文件读写,以后就用with open语句

    读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘, ...

  6. 【转】FMX 动态创建及销毁(释放free)对象

    http://www.2pascal.com/thread-3037-1-1.html这是原文地址. (* ********************************************** ...

  7. Redis学习第六课:Redis ZSet类型及操作

    Sorted set是set的一个升级版本,它在set的基础上增加了一个顺序属性,这一属性在添加修改元素时候可以指定,每次指定后,zset会自动重新按新的值调整顺序.可以理解为有两列字段的数据表,一列 ...

  8. echarts背景分割区域填充不同颜色(x轴为time),实时刷新

    先来看下图片吧,这是实现效果: 思路: 因为要实时刷新,可以使用setInterval(),但是要控制好定时器的起与停,否则容易错乱以及页面卡死: 主要就是利用定时器五秒刷新,重绘echarts图:= ...

  9. phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接 解决办法

    phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接.您应该检查配置文件中的主机.用户名和密码,并确认这些信息与 MySQL 服务器管理员所给出的信息一致. 原因有可能是因为修改了m ...

  10. python基础--列表、元祖、字典、集合

    列表(List) 1.列表特点 列表是可变的!! list 是一种有序的序列,可以添加.删除其中的元素,并且可以通过下标(索引)访问 数据 2.简单的常用操作 A.通过下表访问元素 print(lis ...