Qt斗地主项目(上)
1. 简介这是一个基于Qt开发的单机版的斗地主小游戏。该项目一共涉及到的类有如下:
1.卡牌类
单张卡牌:Card
多张卡牌:Cards
2.玩家类
玩家类(父类):Player
机器人玩家(子类):Robot
非机器人玩家(子类):UserPlayer
3.窗口类
游戏开始加载动画窗口:Loading
游戏主窗口:GamePanel
单张卡牌窗口:CardPanel
特效动画窗口:AnimationWindow
游戏窗口中的按钮窗口:ButtonGroup
游戏结束玩家的成绩窗口:EndingPanel
自定义按钮:MyButton
游戏分数面板窗口:ScorePanel
4.游戏策略类
出牌类:PlayHand
游戏策略类:Strategy
5.游戏控制类
游戏控制类:GameControl
6.线程类
机器人玩家抢地主:RobotGrapLord
机器人玩家出牌:RobotPlayHand
7.音频类
控制播放游戏中的所有音频:BGMControl
首先,创建一个项目,项目名为Landlords,再创建一个游戏主窗口类Ga ...
QT基础
1. 简介1.1 什么是QtQt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展以及一些宏,Qt很容易扩展,并且允许真正的组件编程。
Qt Creator是一个用于Qt开发的轻量级跨平台集成开发环境。Qt Creator可带来两大关键益处:提供首个专为支持跨平台开发而设计的集成开发环境(IDE),并确保首次接触Qt框架的开发人员能迅速上手和操作。即使不开发Qt应用程序,Qt Creator也是一个简单易用且功能强大的IDE。
Qt是一套应用程序开发库,但与MFC不同,Qt是跨平台的开发类库。跨平台意味着只需要编写一次程序,在不同平台上无需改动或只需要少许改动后在编译,就可以形成在不同平台上运行的版本。
1.2 Qt特征1.面向对象
Qt具有模块设计和控件或元素的可重用性的特点。一个控件不需要找到它的内容和用途,通过Signal和slot与外界通信、交流。而且Qt的控件都可通过继承。
2.控件间的相互通信
Qt提供signal和slo ...
c++并发编程(下)
1. 引用计数实现无锁并发栈1.1 简介在C++并发编程中提出了两种计数,一种是外部计数,一种是内部计数,二者加起来就是有效的引用计数,下面提出一种新的方法,利用引用计数实现无锁并发的栈。
1.2 代码实现栈结构函数:栈函数里面实现了栈的默认构造函数、析构函数和创建了一个原子类型的头部节点,同时也定义好了栈的内部节点类型。
12345678910111213141516171819template<typename T>class single_ref_stack {public: single_ref_stack():head(nullptr) {} //默认构造函数 ~single_ref_stack() { //析构函数 while (pop()); //循环出栈 }private: struct ref_node { //引用节点(栈的内部节点) st ...
c++并发编程(中)
1. 内存顺序和内存模型使用实现1.1 sequencial consistent模型(最严格的)memory_order_seq_cst代表全局一致性顺序,可以用于 store、 load 和 read-modify-write 操作实现 sequencial consistent的顺序模型。在这个模型下, 所有线程看到的所有操作都有一个一致的顺序,即使这些操作可能针对不同的变量,运行在不同的线程。
在下面程序中,线程1修改完x和y的值,线程2立刻就能见到x和y修改的值,所以当线程2读到y为true时就会退出循环,然后读到的x也一定为true。因为需要保证与线程1修改顺序是一致的,线程1修改了x再修改y,当线程1修改完y的时候,x早就被修改为true了,所以当线程2读到了y为true时,接下来读到的x也一定为true。这样的话,z就是从0变为1,就不会发生断言。
1234567891011121314151617181920212223242526std::atomic<bool> x, y; //定义两个bool类型的原子变量std::atomic<i ...
结合epoll和http实现B/S模式
1. 简介epoll 是linux下的一个 I/O 多路复用机制,用于高效地监听多个文件描述符上的 I/O 事件。相较于 select 和 poll,epoll 在处理大量连接时具有更好的性能。而HTTP是应用层协议,同其他应用层协议一样,是为了实现某一类具体应用的协议,并由某一运行在用户空间的应用程序来实现其功能。它也是基于B/S架构进行通信的,下面就结合epoll来实现一个能够给浏览器提供服务,供用户借助浏览器访问服务器主机中文件的B/S模式。
2. 代码实现2.1 主函数主函数主要负责把启动程序时,传进来的参数用变量来接收,并检测,当传进来的参数不满3个时,就会报错,最后传入端口,来调用一个监听函数。
123456789101112131415161718int main(int argc, char *argv[]){ //命令行参数获取 端口和server提供的目录 if(argc < 3){ printf("server port path\n"); ...
c++并发编程(上)
1. 线程基础1.1 线程发起线程发起就是指启动一个线程,C++11标准统一了线程操作,可以在定义一个线程变量后,该变量启动线程执行回调逻辑。
12345678void thead_work1(std::string str) { std::cout << "str is " << str << std::endl;}int main(){ std::string hellostr = "hello world!"; //定义一个字符串 std::thread t1(thead_work1, hellostr); //通过()初始化并启动一个线程 t1.join(); //主线程等待子线程退出}
在上面程序中,如果没有t1.join();或用std::this_thread::sleep_for(std::chrono::seconds(1 ...
linux网络编程小项目-在线词典
1. 项目概述在线词典项目是在linux系统下结合c语言、网络编程和sqlite3数据库等技术来实现的一个在线的英译英单词解释,当客户端成功连接到服务器后,客户端登录账号后输入想查询的单词,服务器端会在词库(网上找的)中寻找这个单词的解释并发送给客户端,从而实现在线查询。服务端同时也会向数据库存储该用户的一个查询记录,方便管理的同时,也方便客户端查询。
2. 实现的功能
用户注册和登录验证,服务器端将用户信息和历史记录保存在数据库中。
客户端输入用户名和密码,服务器端在数据库中查找、匹配,返回查询结果
根据客户端输入的单词在字典文件中搜索,将查询结果返回
历史记录查询
3. 代码实现3.1 服务器主函数和一些基本信息:这部分定义了一个双方通信的信息结构体,其中type是R时,表示客户端发来了注册请求;是L时,客户端发来了登录请求;是Q时,客户端发来了查询请求;是H时,客户端发来了观看历史请求。主函数实现的就是打开后台数据库,创建进程,与客户端成功连接后,子进程完成与对端的通信任务,父进程则继续监听与客户端的连接。这样就实现了服务器的一个并发功能,即同时可以连接处理多个客户端。 ...
grpc在windows环境下的配置与编译
1. 简介gRPC(全称为gRPC Remote Procedure Call)是一种高性能、开源的远程过程调用(RPC)框架。由Google开发,gRPC基于HTTP/2协议,并使用Protocol Buffers(Protobufs)作为接口描述语言。以下是gRPC的一些关键特性和优势:
高性能:gRPC利用HTTP/2的特性,例如多路复用和二进制协议,提高了传输效率和性能。
多语言支持:gRPC支持多种编程语言,包括C++、Java、Python、Go、Ruby、C#等,使得开发人员可以在不同的编程环境中使用它。
简化开发:通过使用Protobufs,gRPC提供了一种简洁和高效的方式来定义服务接口和消息结构。
双向流:gRPC支持客户端和服务器之间的双向流通信,使得它在需要实时通信的应用场景中表现尤为出色。
负载均衡和命名解析:gRPC内置了负载均衡和命名解析功能,使其更易于在分布式系统中使用。
1.1 主要组成部分
服务定义:开发者使用Protobufs定义服务和消息。
客户端和服务器代码生成:gRPC使用Protobufs定义生成相应的客 ...
butterfly主题美化
1. 页面底部footer跳动的心1.1 步骤编辑C:\blog\themes\Butterfly\layout\includes\footer.pug文件
1.将以下内容:
1©${theme.footer.owner.since} - ${nowYear} By ${config.author}
改为:
1©${theme.footer.owner.since} - ${nowYear + ' '} <i id="heartbeat" class="fa fas fa-heartbeat"></i> ${config.author}
2.将以下内容:
1©${nowYear} By ${config.author}
改为:
1©${nowYear + & ...
boost库asio编程(下)
1. beast网络库搭建http服务器1.1 简介通过asio来实现http服务器也需要严格服从http报文头的格式,其实http报文头的格式就是为了避免我们之前提到的粘包现象,告诉服务器一个数据包的开始和结尾,并在包头里标识请求的类型如get或post等信息。一个标准的HTTP报文头通常由请求头和响应头两部分组成。
http请求头格式:
123456GET /index.html HTTP/1.1 //包含用于描述请求类型、要访问的资源以及所使用的HTTP版本的信息。Host: www.example.com //指定被请求资源的主机名或IP地址和端口号。Accept: text/html, application/xhtml+xml //指定客户端能够接收的媒体类型列表,用逗号分隔,例如 text/plain, text/html。User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0 //客户端使用的浏览器类型和版本 ...