实现Linux中低配版王者荣耀点将系统
目录
1.搭建环境
(1).opencv的安装
(2).安装sox播放器
1.安装,使用如下命令安装
2.使用,安装完成后,在终端使用 play + test.mp3 播放test.mp3音乐
3.在代码中使用sox播放器
(3).安装mpg123音乐播放器
1.安装mpg123,跟sox播放器安装一样
2.使用mpg123
3.在代码中使用mpg123播放器
2.实现代码
(1).登录界面
(2).登录密码的实现
(3).选将系统
(4).成果展示
1.搭建环境
(1).opencv的安装
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法,并在可用时利用MMX和SSE指令, 如今也提供对于C#、Ch、Ruby,GO的支持。
1.在虚拟机中下载,下载网址是Releases - OpenCV,由于是Linux,所以下载source版本
下载好之后把压缩包文件复制到home目录下或者在home里新建一个文件夹进行存放,进入命令行进行解压,解压命令是
unzip opencv-3.4.12.zip
根据自己的版本输入不同版本号 ,我的是3.4.12,解压后配置环境
下载opencv所需要的依赖库和cmake,因为下载之后得到的配置文件无法直接使用,需要使用cmake进行编译
通过命令下载
sudo apt-get install cmake
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev libjasper-dev
然后进入到文件中,再在文件里创建一个my_build_dir文件,并进入该文件夹。(可根据自己来定)
mkdir my_build_dir
cd my_build_dir
然后cmake构建和生成一些配置文件
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
接下来就是编译过程
sudo make
这里等待时间比较长,我等了二三十分钟
然后是执行sudo make install,这个命令是用来安装的。
sudo make install
接下来就是配置环境变量了,配置过程比Windows系统下要复杂一点,先通过gedit添加路劲并打开文件,在文件末尾添加/usr/local/lib即可 (好像vim 也可有以,我当时反正两种都试了一下)。
sudo gedit /etc/ld.so.conf.d/opencv.conf
保存之后切到命令行界面,执行命令让刚刚的配置路径生效
sudo ldconfig
配置bash
sudo gedit /etc/bash.bashrc
再点击进去之前建立的文件夹,在最后加上
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
其实就是刚刚这个配置bash,当时我找了半天,如下图(注意要加到最下面,我刚开始没加到最下面,导致环境搭建失败,废了好大劲才发现这里配置错误。)
配置bash,修改bash.bashrc
文件:
保存并退出,然后执行如下命令使得配置生效:
source /etc/bash.bashrc
最后再更新一下就行了,如果提示没有安装,根据系统提示下载就行了
sudo updatedb
查看opencv的版本信息:
pkg-config --modversion opencv
opencv的使用,这里暂时不添代码了,有需要的可以在文章末的参考链接获取。
gcc编译器:gcc + 文件名 + -o + 输出文件流名称 +支持包
命令:c++文件编译指令:
g++ test.cpp -o test pkg-config --cflags --libs opencv
如果是建的.c文件就用:
gcc test.cpp -o test pkg-config --cflags --libs opencv
在上面的编译命令中我们其实用到了一个工具“pkg-config”,它主要有以下几个功能:
1.检查库的版本号。如果所需要的库的版本不满足要求,它会打印出错误信息,避免链接错误版本的库文件。
2.获得编译预处理参数,如宏定义,头文件的位置。
3.获得链接参数,如库及依赖的其它库的位置,文件名及其它一些连接参数。
4.自动加入所依赖的其它库的设置
所有有了这个工具之后我们的编译就很方便了(不过在此之前你要确保你安装的OpenCV的安装链接库文件的目录下有一个pkgconfig文件夹,在该文件夹里面有个opencv.pc的文件,其实这就是pkg-config下OpenCV的配置文件)。
使用pkg-config时,选项–cflags 它是用来指定程序在编译时所需要头文件所在的目录,选项 --libs则是指定程序在链接时所需要的动态链接库的目录。
注意,使用opencv记得去虚拟机中执行运行,不然就会与后台运作冲突,使GTK的后端不能初始化,引发报错。解决方法就是把有关于界面及窗口的操作全部删掉。停止远程连接,进入ubuntu进行测试。当时就是不清楚,我直接在vs中运行就一直失败,折腾了好久好久.
好了,接下来就是配置播放器。我试用很多播放器,最后选择如下两个。
(2).安装sox播放器
sox播放器支持流行的多种类型的音频文件
1.安装,使用如下命令安装
sudo apt-get install sox
sudo apt-get install sox libsox-fmt-all
2.使用,安装完成后,在终端使用 play + test.mp3 播放test.mp3音乐
play test.mp3
该命令可以在linux终端上直接执行播放,注意指定音频文件的路径。
当然,我们需要在代码中执行播放音乐肯定就不会这么简单。
在C++中可以用system命令来实现终端命令的使用,在windowns中用过vscode的同学应该
知道,一般都会在源文件末尾return 0之前加上 system("pause");这样终端不会直接闪消。
3.在代码中使用sox播放器
用stdlib.h头文件下的system函数:
int system(const char *command);
system("play test.mp3");
注意这里省略了其他代码,因为在后续还会用到,这里暂时就不细讲。
(3).安装mpg123音乐播放器
mpg123是一个非常便捷高效的Linux命令行播放器
1.安装mpg123,跟sox播放器安装一样
sudo apt-get install mpg123
输入完成运行后会询问你,输入 Y 即可,继续下载,然后就安装完成了,很简单吧哈哈
2.使用mpg123
我们可以通过man手册来查看
man mpg123
按q退出查看
播放音乐,跟sox播放器同,在终端输入
mpg123 test.mp3
同样,这里也要注意mp3路径,根据自己情况添加路径,这里默认当前文件夹中
3.在代码中使用mpg123播放器
还是跟sox播放器一样,这里就不啰嗦了
system ("mpg123 test.mp3");
好了,到这里环境就搭建的差不多了,其中好多坑也踩过了。另外就是素材,需要自己去准备了
我是在 项羽-英雄详情-世界观体验站-王者荣耀官方网站-腾讯游戏这里弄的素材,一百多个英雄,
搞了一天才弄了六十多个,不想弄了,同样的操作太费劲。读者有其他的方法也可以推荐。
2.实现代码
直接上主函数代码哈哈,没错,十分精简
(1).登录界面
我实在找不到相应的素材,于是我用了最笨的办法,用手机录屏,录制了一个王者启动的视频,
然后剪辑后上传到电脑上进行操作,在虚拟机中通过代码控制像素和帧,达到最大比例呈现。
如下图
这里也是踩了不少坑,调试音乐跟视频同步,脑子都要炸了。
要注意帧的速率哈哈哈,开始界面代码如下
void videoshow(void)//读取本地视频文件
{int ret = 0;//记录歌曲glob_t pglob;//接收返回值,判断子进程是否结束ret = glob("./images/start.mp3", 0, NULL, &pglob);if (ret < 0){ perror("glob");return ;}pid_t pid=fork(); if (pid == 0 ) { usleep(1900); execl("/usr/bin/mpg123", "mpg123","-q", pglob.gl_pathv[0], NULL); //打开bgm }else ; // 上面的代码有点小bug,下次运行如果出现不执行代码的效果,可以尝试先删除然后再输入,注释无效//父进程会执行下面,子进程不会执行下面了,反正功能实现了,暂时留下疑问,下次注意!VideoCapture capture("./images/start1.mp4");//读取文件 要放在前面不然会报错 奇怪又不报错了while (1){//frame存储每一帧图像Mat frame;//读取当前帧capture >> frame;//播放完退出if (frame.empty()) {break;}// 创建一个指定大小的窗口namedWindow("欢迎来到王者荣耀", WINDOW_NORMAL);// 改变窗口大小resizeWindow("欢迎来到王者荣耀", 680, 680);//1600 720//改变窗口位置moveWindow("欢迎来到王者荣耀",0,0);// waitKey(1);
// 显示图像imshow("欢迎来到王者荣耀", frame);//延时mswaitKey(8);//卧槽调速度用的,我就说我之前加在这里干嘛喽,看以前代码都看不懂了,寄// 这帧难调}kill(pid, 9);system("clear");destroyAllWindows();capture.release();}
这里 用到了进程线程的知识,在这里也是卡了好久,因为我需要音视频同步,所以就用到了
进程线程的知识,这里就不多解释了,读者可以看看注释和自行搜索。
(2).登录密码的实现
为了使得登录的效果更加逼真,我加入了召唤师输入密码才能登录的功能
输入成功后就会进入选将系统的界面啦嘿嘿嘿
(3).选将系统
1.刚开始的界面比较单调,于是上网找了如何一些改变文字颜色的资料,话不多说,直接上源码。
void showmenu()
{ //system("echo '\e[31m\e[100m'");system("echo '\e[31m *********欢迎来到王者荣耀选将系统*******\e[0m'");system("echo '\e[32m ***************1.增加英雄***************\e[0m'");system("echo '\e[33m ***************2.删除英雄***************\e[0m'");system("echo '\e[34m ***************3.修改英雄***************\e[0m'");system("echo '\e[35m ***************4.查找英雄***************\e[0m'");system("echo '\e[36m ***************5.显示英雄***************\e[0m'");system("echo '\e[0m ***************6.继续或暂停bgm**********\e[0m'");system("echo '\e[36m ***************7.初始化hero*************\e[0m'");system("echo '\e[31m ***************8.关闭或开启bgm**********\e[0m'");system("echo '\e[32m ***************0.退出系统***************\e[0m'");system("echo '\e[33m ****************************************\e[0m'");// printf("*********欢迎来到王者荣耀选将系统*******\n");// printf("***************1.增加英雄***************\n");// printf("***************2.删除英雄***************\n");// printf("***************3.修改英雄***************\n");// printf("***************4.查找英雄***************\n");// printf("***************5.显示英雄***************\n");// printf("***************6.继续或暂停bgm**********\n");// printf("***************7.初始化hero*************\n");// printf("***************8.关闭或开启bgm**********\n");// printf("***************0.退出系统***************\n");// printf("****************************************\n");
}
2.除了这个登录界面外,我还同步了背景音乐,bgm嘿嘿嘿,更加还原真实的王者!
上面那个歌词是我的qq音乐的,这里的播放音乐被我隐藏了,因为显示出来会挤占掉
我们的操作空间,影响我们的体验,所以我想了个办法然后通过另一个进程让它在后台
播放并且不显示它的播放信息。当然了,歌还是在播放的,只是图片中看不出,后面成果展示
中我会录制视频给你们看嘿嘿嘿。
这里是部分代码实现
int num;srand((unsigned)time(NULL));num = rand()%22; //几首歌就取几 完美int ret = 0;int rett = 0;static int bgmzc=1;//标志位,接收到命令时来决定音乐的暂停或继续static int bgmsc=1;//标志位,接收到命令时来决定音乐的开关//记录歌曲glob_t pglob;//记录王者战歌glob_t zhanpglob;//接收返回值,判断子进程是否结束ret = glob("./imagess/ceshi/ceshi*.mp3", 0, NULL, &pglob); // 文件夹 随机背景音乐if (ret < 0){ perror("pglob");return -1;}// rett = glob("./images/abgm.mp3", 0, NULL, &zhanpglob); //放战歌if (rett < 0){ perror("zhanpglob");return -1;}
设置了标志位,然后记录了一些歌曲,又使用了多线程,默认是我的王者战歌,当我们输入8切歌的时候,就会播放那个ceshi的歌曲,我加了大概二十多首嘿嘿嘿,用到qq音乐下载的,然后转码成mp3文件后报存到项目文件中。
然后这里遇到了好多好多问题,当然现在都解决了。例如我只调用一个函数实现音乐播放暂停
退出和开始,然后每次调用的时候它新建了一个进程播放音乐,哇!当时我耳朵都要聋了。
经过百般调试后,我想了一个办法,将进程定义为static,使它不会虽函数调用结束而释放。
如下图 这一个问题我就折腾了挺久的哈哈哈 基础不牢地动山摇
其中注释部分有一些我遇到的问题以及解决方法嘿嘿嘿。
之前调试时遇到 就是音乐放完后就不放了,于是又查了资料,实现了音乐的循环播放
读者可以看看注释,是我踩过的一些坑和解决方法,就不过多解释啦。
execl("/usr/bin/mpg123", "mpg123","-qZ", *zhanpglob.gl_pathv, NULL);
循环播放我的战歌啦啦啦。
哎,写的有点累了,说说后面的思路,然后直接上成品展示吧
思路:用的链表储存英雄的数据,本来想用文件导入的,太懒了,直接用代码实现了。
英雄初始化完成后就可以进行比对了,compare比较函数
我太懒了,不想动脑子了,用的最笨的方法,通过比较然后if相同就显示我的英雄嘿嘿嘿
虽然方法笨,但是修改代码真的爽,一直cv就好了,然后更改以下hero名字啥的。
如下图,没啥亮点,不过实现 了hero台词的随机播放。
因为要还原最真实的场景,我们每次选择英雄的时候,点击一个英雄都会有台词,
我搜集了每个英雄三句台词,肝不动哈哈,搜集过程太枯燥了。
好了,感觉差不多了,写太累了,思路啥的多的就不说啦。接下来展示成果了,我把qq音乐
关掉,带来最逼真的体验。
(4).成果展示
王者登录点将系统_手机游戏热门视频
参考资料:
opencv参考:https://blog.csdn.net/qq_53081685/article/details/126968843
实现Linux中低配版王者荣耀点将系统相关推荐
- 【Python游戏】Python实现低配版王者荣耀,除了没有打野啥都有,你确定不心动嘛?
前言 halo,包子们晚上好 很久没有更新啦,主要是小编这边最近有点小忙 今天给大家整一个简易版本的王者荣耀 有法师,射手,坦克,辅助 支持双人游戏哟 快跟你的小伙伴一起玩耍吧 相关文件 关注小编,私 ...
- 鸿蒙os版王者荣耀,华为鸿蒙系统能玩王者荣耀吗?王者荣耀鸿蒙系统版手游下载-游戏大玩家...
王者荣耀是一款5V5moba竞技对战手游,在这里你可以去进行对不同的游戏战斗的开启,和你的队友一起进行战斗,面对不同的游戏模式你可以去进行随意的选择,我们给你提供了多种不同的英雄可以去进行选择,发现我 ...
- 王者荣耀服务器维护多久结束,王者荣耀健康系统重置时间 时间限制规则详解...
自从王者荣耀健康系统升级后,很多玩家都想知道健康系统里面有没有更新了哪些东西,今天小编就带大家来了解下时间限制规则介绍吧! 时间限制重置时间 因为时间限制是每日为标准的,这个每天凌晨五点会刷新.比如1 ...
- 王者荣耀的服务器是什么系统,王者荣耀健康系统 健康系统是什么
问:王者荣耀健康系统? 答:健康系统不能关闭. 体验服账号体验介绍 小编精心为大家准备了若干个体验服账号和不限时正式服账号,在账号中将会陆续购买了多位当前热门英雄及皮肤,为平民和新手玩家们提供一个账号 ...
- 王者荣耀不同服务器健康系统,王者荣耀健康系统两个不同区 | 手游网游页游攻略大全...
发布时间:2017-07-17 王者荣耀健康系统怎么解除 王者荣耀健康系统怎么解除 健康系统可以解除限制吗?下面一起来看看吧. 王者荣耀健康系统怎么解除 健康系统: 更新时间:2017年7月4日8:3 ...
- 王者荣耀转系统服务器繁忙,手游王者荣耀转系统会失去什么详细讲解
王者荣耀转系统会失去什么?对于想盲目转系统的用户可一定要认真阅读下文章中给出的详细说明,直接转区会造成您现有的系统中有很多是无法直接带走的一起到其它区.以下是详细的手游王者荣耀转系统会失去什么详细讲解 ...
- 王者荣耀显示聊天服务器异常,王者荣耀健康系统异常限制怎么解决?健康系统异常解决办法分享...
王者荣耀健康系统异常限制怎么解决?很多的玩家对王者荣耀健康系统异常的限制还不知道如何解决?下面电玩之家的小编就来为大家详细的介绍一下王者荣耀健康系统异常限制的解决教程,感兴趣的玩家快来看看吧! 王者荣 ...
- 鸿蒙os版王者荣耀,王者荣耀鸿蒙版
王者荣耀鸿蒙版下载,快猴网为大家带来的王者荣耀鸿蒙版是为了适配华为的鸿蒙系统而特别设立的版本,玩家可以体验远超一般系统的流畅度,让你的手速能轻松跟上你的意识,享受成为王者荣耀鸿蒙版最强王者的快乐吧! ...
- 红米K30pro变焦版王者荣耀断流,刷了LineageOS,游戏体验完美。
今天是2022年2月12日,我的红米K30pro变焦版,拿去售后修了,我一直保留的初始系统被客服强行升了个级,换个电池都必须给我系统升个级的手机也真是让我按压住了想起诉他们的冲动.新版系统好也行,就佩 ...
最新文章
- Spark 把RDD数据保存到hdfs单个文件中,而不是目录
- Silverlight3实现按路径运动[原创]
- C++基础知识(一)—— C++程序结构
- 匹配左括号或者右括号js_九章算法 | 蚂蚁金服面试题:有效的括号字符串
- Markdown编辑器初步使用
- android设备连接工具箱,ADB工具连接Android手机
- iPhone X 不充电维修案例
- 报表工具都支持哪些数据源类型?
- 代码坏的味道21:被拒绝的遗赠 (Refused Bequest)
- 如何在Excel 2013中使用公式编辑器
- 原神迷城战线光界篇冰结试炼怎么过
- thinkphp 之接收请求参数并过滤
- Python计算文件或字符串的MD5/SHA
- DCIN是什么意思(相机上dcin是什么意思)
- 1005: 燃烧多少卡路里(1级) 输入仅一行。两个整数,表示体重公斤数和公里数。输出仅一行,一个整数,表示燃烧卡路里数。
- Python实现发短信
- 有用的win11小技巧
- “三门问题”:数学经典概率问题,用java代码求证
- linux如何限制普通账户权限,设置登录?
- FPGA学习日志——74hc595驱动的数码管静态显示seg_595_static