bananapi+OLED做的一个打地鼠游戏,c语言编程

说明一下:
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语言编程的更多相关文章
- 用原生javascript做的一个打地鼠的小游戏
学习javascript也有一段时间了,一直以来分享的都是一些概念型的知识,今天有空做了一个打地鼠的小游戏,来跟大家分享一下,大家也可以下载来增加一些生活的乐趣,下面P出代码:首先是HTML部分代码: ...
- 用Unity做的一个小游戏,仿照一个样例写的,个人认为文章写的不错,哈哈
- 无聊的人用JS实现了一个简单的打地鼠游戏
直入正题,用JS实现一个简单的打地鼠游戏 因为功能比较简单就直接裸奔JS了,先看看效果图,或者 在线玩玩 吧 如果点击颜色比较深的那个(俗称坏老鼠),将扣分50:如果点击颜色比较浅的那个(俗称好老鼠) ...
- 使用PixiJS做一个小游戏
PixiJS PixiJS使用WebGL,是一个超快的HTML5 2D渲染引擎.作为一个Javascript的2D渲染器,Pixi.js的目标是提供一个快速的.轻量级而且是兼任所有设备的2D库. 官方 ...
- 用 JS 做一个数独游戏(二)
用 JS 做一个数独游戏(二) 在 上一篇博客 中,我们通过 Node 运行了我们的 JavaScript 代码,在控制台中打印出来生成好的数独终盘.为了让我们的数独游戏能有良好的体验,这篇博客将会为 ...
- 用 JS 做一个数独游戏(一)
用 JS 做一个数独游戏(一) 数独的棋盘由 9x9 的方格组成,每一行的数字包含 1 ~ 9 九个数字,并且每一列包含 1 ~ 9 这 9 个不重复的数字,另外,整个棋盘分为 9 个 3x3 的块, ...
- Android 多线程 打地鼠游戏
前言:最近比较喜欢多线程了,看到了一些线程案例,这里总结一下打地鼠游戏的整个过程. 1.首先是主活动要加载的布局,我一般就喜欢早点把这个写上,这样就好在主活动中玩弄这些控件了.闲话不多说,一个Fram ...
- 【鸿蒙开发板试用报告】用OLED板实现FlappyBird小游戏(中)
小伙伴们久等了,在上一篇<[开发板试用报告]用OLED板实现FlappyBird小游戏(上)>中,我们本着拿来主义的原则,成功的让小鸟在OLED屏幕上自由飞翔起来,下面我们将加入按钮交互功 ...
- 用Phaser来制作一个html5游戏——flappy bird (二)
在上一篇教程中我们完成了boot.preload.menu这三个state的制作,下面我们就要进入本游戏最核心的一个state的制作了.play这个state的代码比较多,我不会一一进行说明,只会把一 ...
随机推荐
- yii2restful规范的api使用
说明:restful是一套优秀的接口调用规范. 使用规范: 1,安装yii2 使用composer安装 安装完 Composer,运行下面的命令来安装 Composer Asset 插件: php c ...
- C# 使用事务transaction
C# 事务里面如果只是针对单数据库,则可以使用SqlTransaction,跨数据库使用TransactionScope.
- EL函数库及用法
导入标签库: <%@ tablib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%&g ...
- C++使用: C++中map的基本操作和用法
在阅读SSD代码中发现作者使用了C++中的map方法,因此搜索该关联式容器的使用方法,在这里一并总结. 一.Map 簡介 Map是STL的一個容器,它提供一對一的hash. 第一個可以稱為關鍵字(ke ...
- python四
三元运算 name = "张三" if 1 == 2 else "李四" print(name) name1 = "张三" if 1 == ...
- python--jianja2
一:渲染模版 要渲染一个模板,通过render_template方法即可. @app.route('/about/')def about():return render_template('about ...
- 在windows下安装nvm并管理nodejs版本
不得不说,nodejs的nvm工具跟python下的mkvirtualenv 工具很像.作为立志成为伪全栈的我来说,玩玩nodejs是必不可少的.nodejs 有很多种的安装方式,下面我用nvm的方式 ...
- Centos7部署kubernetes测试k8s应用(九)
1.创建一个deployment [root@linux-node1 ~]# kubectl run net-test --image=alpine --replicas=2 sleep 360000 ...
- effective_java第23条:请不要新代码中使用原生态类型
从这条开始涉及泛型相关的点. 从JDK5开始Java新增了“泛型”新特性,例如:List<String>,在这之前则只有List不会限定类型. 如今的JDK版本中还是可以写原生类型,但这会 ...
- Spring手动提交事务
// name的值根据spring配置文件的事物管理器的id而定 @Resource(name="transactionManager") private DataSourceTr ...