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的代码比较多,我不会一一进行说明,只会把一 ...
随机推荐
- Andorid Studio中运行模拟器--夜神模拟器
这样可以直接在夜神模拟器上运行app然后在androidstudio上查看log…. 1.下载夜神模拟器 2.修改配置 点击右上角的设置图标,对夜神模拟器的分辨率进行选择,手机版的480×800的就差 ...
- Winform关于未找到元数据文件.exe和不包含适合于入口点的静态“Main”方法
在三层架构中ItcastCaterModel项目是被其他项目引用的,所以输出类型为类库.
- kafka consumer 指定 offset,进行消息回溯
kafka consumer 如何根据 offset,进行消息回溯?下面的文档给出了 demo: https://cwiki.apache.org/confluence/display/KAFKA/0 ...
- Jquery("#form_content").validationEngine()失效原因分析
使用validationEngine()函数对表单进行各种校验,由于多个页面都引用了相关js文件,后面子页面的validationEngine()始终不生效:....: 测试后发现重复引用了JQuer ...
- Win10系列:C#应用控件基础13
Image控件 开发Windows应用商店应用时,除了在界面中显示文字信息以外,还可以加入图片来配合说明及增加美观度.使用Image控件能够实现显示图片的功能,开发者可以根据需求使图片按照不同的方式显 ...
- react-native 打包apk
如果你是学习Android的和我一样的话那一定会用一些软件开发,如WebStore 等等 那么这里我就来讲一下在WebStore 开发的App 如何打包成一个手机可以安装的apk软件 1.首先你的Ap ...
- C# 语句中的各种单例模式代码
1.非线程安全(经典模式),但没有考虑线程安全,在多线程时可能会出问题,不过还从没看过出错的现象. /// <summary> /// 单例模式的实现 /// </summary&g ...
- tf 随机数
tf生成随机数 import tensorflow as tf sess = tf.InteractiveSession() ### 生成符合正态分布的随机值 # tf.random_normal(s ...
- 关于Excel导出实例(适合新手,比较详细)
需要源代码的可以加我微信好友gqljxg1514 1,首先配置依赖pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0&q ...
- 第一章:深入web请求过程
初学者,总结一下读书笔记,望海涵. 1.1 B/S网络架构概述 相比于C/S架构,B/S网络架构(Browser/Server)从前端到后端都得到了简化,都基于统一的应用层协议HTTP来交互数据,采用 ...