说明一下:
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. 『Python』__getattr__()特殊方法

    self的认识 & __getattr__()特殊方法 将字典调用方式改为通过属性查询的一个小class, class Dict(dict): def __init__(self, **kw) ...

  2. 『TensorFlow』滑动平均

    滑动平均会为目标变量维护一个影子变量,影子变量不影响原变量的更新维护,但是在测试或者实际预测过程中(非训练时),使用影子变量代替原变量. 1.滑动平均求解对象初始化 ema = tf.train.Ex ...

  3. Loadrunner加密算法脚本与token作为get请求url上的参数处理

    1.当字符串被封装好加密时(下例将算法封装在md5中),使用Loadrunner编写脚本,需要进行如下操作:       1)将md5.h文件添加到Extra Files 下,如图(Loadrunne ...

  4. Go used as value问题

    练习Go变参时遇到一个报错:used as value 代码如下: // 错误代码 func myfunc(arg ...int) { for _, n := range arg { fmt.Prin ...

  5. 正确学习Linux系统的5个建议

    摘要: 最近几年Linux系统应用越来越广泛,以至于很多人开始热衷学习Linux.但是我们都是从小都是学习windows系统长大的,从windows 98到现在的windows 10,而根据学习win ...

  6. C语言实现Winsocket网络传输数据时乱码问题

    问题描述:输入中文字符时在数据结尾总是有别的字符冒出 解决办法: recvBuf[ret] = '\0';//接收数据的数组,表示存储的数据截止,后面没有数据了 再运行,传输正常. 提示:C语言基础知 ...

  7. List集合1

    一.List接口介绍 List继承自Collection接口,是单列集合的一个重要分支,习惯性的会将实现List接口的对象称为List集合 二.List接口3个特点 1.有序(有序不是顺序,有序指的是 ...

  8. 当你在web项目下新建一个class时package位置如果发生红色波浪错误,提示为”The type java.io.ObjectInputStream cannot be resolved. It is indirectly referenced from required .class files“

    问题是这样的如下图: 问题的原因: 1.配置tomcat7.0的时候自己设置了jre的版本1.8,而没有用myeclipse10自带的jre1.6,导致了出现了差错!

  9. c#抓屏功能在DPI缩放后,截到的图片不完整的问题

    /// <summary> /// 获取屏幕快照 /// </summary> /// <returns></returns> public stati ...

  10. 【Linux常用命令】

    1. ps aux | grep nginx 使用场景:是想查看nginx的打印日志,又不知道nginx的日志路径. ps :是查看进程的命令.使用该命令 可以确定有哪些进程正在运行和运行的状态.进程 ...