当前位置: 首页 > 科技观察

鸿蒙基于WiFiIoT套件开发的猜数字游戏代码分享

时间:2023-03-19 18:18:07 科技观察

更多内容请访问:鸿蒙与华为官方共建的技术社区https://harmonyos.51cto.com/#zz猜猜看number是一款非常经典的小游戏,也是编程开发入门的典型例子。下面是基于WiFi物联网套件的猜号游戏的具体开发过程和效果。基本规则:甲方(玩家)默想1-99(含)内任意一个数(整数),乙方猜一猜,问甲方猜的数是大还是小。如果情况得到回答,乙方最多可以通过问6个问题来猜出甲方正在冥想的数字。基本原则:乙方最多问6次,包括最后一次说出猜中的数字。事实上,乙方最多有7次猜测的机会。并且用二分查找,2^7=128,那么99以内的数是可以完全覆盖的,所以乙方肯定能猜到。实现概况:上面的基本规则和基本原理很清楚,我们要在WiFiIoTkit上实现,需要甲方参与,需要处理以下三部分:猜号主要逻辑使用OLED屏幕显示提示信息,让玩家进行交互操作:我们需要在屏幕上显示汉字,进行玩家当前猜的数字,在玩家按下按钮后将结果告知玩家。使用按钮接收播放器的操作(大或小等):本例中我们使用ADC方法读取按钮信息,获取播放器的具体操作。使用的按键是核心板上的USR按键,OLED板上的S1和S2按键。使用ADC方式读取时,他们使用的输入口是GPIO5/ADC2,具体按键功能如下:USR:开始游戏,或者确认S1:如果猜的小,玩家按下S1通知S2:如果猜测较大,则玩家按S2通知原代码修改过程:【代码库为code-1.0.tar.gz】启用I2C:vendor/hisi/hi3861/hi3861/build/config/usr_config.mk##BSPSettings##CONFIG_I2C_SUPPORTisnotsetCONFIG_I2C_SUPPORT=y#CONFIG_I2S_SUPPORTisnotsetI2C复用端口设置:vendor/hisi/hi3861/hi3861/app/wifiiot_app/init/app_io_init.c#ifdefCONFIG_I2C_SUPPORT/*I2CIO复用也可以选择3/49/10,chooseaccordingtoproductdesign*///hi_io_set_func(HI_IO_NAME_GPIO_0,HI_IO_FUNC_GPIO_0_I2C1_SDA);//hi_io_set_func(HI_IO_NAME_GPIO_1,HI_IO_FUNC_GPIO_1_I2C1_SCL);hi_io_set_func(HI_IO_NAME_GPIO_13,HI_IO_FUNC_GPIO_13_I2C0_SDA);hi_io_set_func(HI_IO_NAME_GPIO_14,HI_IO_FUNC_GPIO_14_I2C0_SCL);#endif?主逻辑代码:guess.c#include#include#include#include#include#include#include#include#include“按钮/按钮.h”#include"oled/oled.h"/*0123456789请在心里想一个1到99的整数,我能在6题以内猜出这个数字,按[USER]开始游戏,[RST]按[S1]如果小,大就按[S2],按[USER]对吗?一个问题,是这个数字:??大的!那我想小一点!那让我猜大一点哈哈,我猜对了!按[USER]再玩一次(请先默想1到99之间的一个整数)你默想的数字一定是多少??//开始:0,长度10//开始:10,长度30//开始:40,长度24//开始:64,长度25//开始:89,长度14//开始:103,长度11//start:114,length11//start:125,length9//start:134,length26//start:160,length10*/char*str[]={"0123456789","请想一个整数来自1到99,我能在6题内猜出这个数字”,“准备好按[USER]开始游戏,按[RST]重新开始”,“按[S1]如果小,按[S1]如果大[S2],按[USER]正确”,“第一个问题,这个数字是:?”,“太大了!那我猜小一点”,“太小了!然后我猜大一点”,“哈哈,我猜对了!”,“按[USER]再玩一次(请默想1到99之间的一个整数)”,“你一定是在默想数字吧?"};intpos[][2]={{0,10},{10,30},{40,24},{64,25},{89,14},{103,11},{114,11},{125,9},{134,26},{160,10}};voiddisplay_string(intidx,intdelay,intnum1,intnum2){intstart=0;intlen=0;start=pos[idx][0];长度=pos[idx][1];if(idx==4&&num2==100){len=len+1;}u8no[len];for(inti=0;i#defineAPP_DEMO_ADC#defineADC_TEST_LENGTH64#defineVLT_MIN100#defineSTATUS_LEN4//按键状态定义typedefenum{KEY_EVENT_NONE=0,KEY_EVENT_S1,KEY_EVENT_S2,KEY_EVENT_USER}key_event_t;//获取当前按键key_event_tget_key_event(void);//ADC转换hi_voidconvert_to_voltage(hi_u32data_len);/ADC获取voidbutton_adkey;//Set(void);//获取需要的按键状态key_event_tgpio_button_get(void);#endifButton部分代码说明:使用ADC方式读取按键状态时,本质上是读取ADC输入口的数据,这个数据经过一定的转换,就可以转换成对应的电压数据。按下不同的按键后,ADC端口读取的电压是不同的,并在一定范围内波动。对应按键的电压范围定义在上面的vlt_val_scopes中。我们得到了对应的电压数据,然后与vlt_val_scopes各个范围的数据进行比较,从而得到对应的按键信息。实际效果演示:视频地址:链接:https://pan.baidu.com/s/1RtT8Wh3ZPbasJ-dK7x1QRg提取码:vkyh完整代码:下载地址:https://pan.baidu.com/s/1RtT8Wh3ZPbasJ-dK7x1QRg提取代码:vkyh想了解更多请访问:与华为官方共建的鸿蒙技术社区https://harmonyos.51cto.com/#zz