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的代码比较多,我不会一一进行说明,只会把一 ...
随机推荐
- Android中如何解决editText一进入activity就自动获取焦点的bug
有时候我们在进入activity 的时候,EditText会自动聚焦 有人说搞个宽高 都为0dp的EditText 但是我们搞代码的肯定要从实际层面解决,这样更能说服人 所以只需要在EditText的 ...
- 百度echarts 3.0版本和2.0版本的兼容问题
前一段时间,项目中要用到统计图表,之前也用过jqplot的图表插件,这次开发的内容中基于地图的展示还很多,所以后来选择了百度的echarts插件(echarts.baidu.com).刚开始用的时候, ...
- js对象的深拷贝
关于对象的深拷贝一直是大家津津乐道一个话题,本骚年通过研究(yuedu)发现还是很easy的. 首推的方法简单有效,JSON.stringfy()和JSON.parse()即可搞定.但是这种简单粗暴的 ...
- SpringBoot使用CORS解决跨域请求问题
什么是跨域? 同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源. 同源策略是浏览器安全的基石. 如果一个请求地址里面的协议.域名和端口号都相同,就属于同源. ...
- Vertical-align + 表单
Vertical-align 垂直对齐方式 定义行内元素的基线相对于该元素所在的基线的垂直对齐. inline inline-clock img图片标签具有,块级元素没有. vertical-alig ...
- dede织梦 dede:arclist当前索引值
{dede:arclist row='10' titlelen='50' flag='c'} <li class="rank[field:global name='autoindex' ...
- 人群密度估计 CrowdCount
最近在看人群密度估计方面的东西,把博客看到的一些方法简单总结一下,后续继续添加. 1.论文<CrowdNet: A Deep Convolutional Network for DenseCro ...
- VS--------实用快捷键
Ctrl + M + O : 折叠所有方法 Ctrl + Tab: 切换不同窗口 ------------------------------开发--------------------------- ...
- CSS 实现单、多行文本溢出显示省略号(…)
如果实现单行文本的溢出显示省略号同学们应该都知道用text-overflow:ellipsis属性来,当然还需要加宽度width属来兼容部分浏览. 实现方法: overflow: hidden; te ...
- java基础(1)IntelliJ IDEA入门和数组操作 解决idea启动速度慢--配置JVM
一. IntelliJ IDEA入门 1 快捷键和技巧 智能补全代码,比如只写首字母按回车: psvm+Enter :public stactic void main(String[] args) s ...