- 博客(32)
- 资源 (23)
- 收藏
- 关注
原创 Qt编程之超级玛丽
一年前在一个公众号偶然看到了一些html游戏源码,其中就有超级玛丽的。用Webstrom打开看了下,发现是别人打过包,格式化后发现代码真的是晦涩难懂,后来又到github上去搜索,看能不能找到源代码,github果然什么都有。找到了下面两个仓库,貌似是最完整的,而且也可以调试源代码:https://github.com/cflewis/Infinite-Mario-Brosh...
2020-03-14 13:43:15
3508
1
原创 一个简单的BitTorrent客户端实现(六):peer manager和peer实现
peer是整个BT通信中最复杂的部分,主要是里面各种消息的发送和一些choke和unchoke策略,piece选择策略等等。peer manager用于管理peer,本程序中维护多个peer进行远程通信。
2016-04-27 14:53:36
3426
2
原创 一个简单的BitTorrent客户端实现(五):tracker manager和tracker实现
TrackerManager顾名思义就是管理tracker的。因为可能有多个tracker,所以采用了trackermanager进行管理,所以也显得比较有条理些。
2016-04-21 16:00:30
2726
原创 使用Qt开发文本编辑器(二):标签页式文档实现
Qt中相关的类标签页俗称Tab页,Qt提供了QTableWidget用于创建基于Tab页式的文档。使用QTableWidget,我们可以很方便得添加和删除Tab、设置和获取Tab页上面的文字,设置当前的Tab。
2016-03-11 16:55:38
2984
原创 一个简单的BitTorrent客户端实现(四):PeerAcceptor实现
PeerAcceptor使得本机作为BT的服务器端与网络上的peer进行通信。这样我们的BT既有服务器端,又有客户端。
2016-03-11 16:48:06
1161
原创 一个简单的BitTorrent客户端实现(三):同步事件分离器
了解ACE的同学想必都知道它使用了Reactor的设计模式,ACE开发的应用程序中,有个地方会调用eventloop,里面会不停地去轮询。当询到事件时,就将事件分发给指定的事件处理器,事件处理器里面有一些什么handle_read,handle_write之类的函数来响应事件。本程序也借鉴了这种模式,这样使程序结构上变得更加清晰,理解起来也更容易些。
2016-02-29 09:14:28
1269
原创 使用Qt开发中国象棋(七):网络对战
关于Qt网络编程QTcpServer用于创建TCP服务器端。当newConnection信号激发时,我们调用指定的槽创建一个通信的套接字。 QTcpSocket用于创建TCP通信套接字。当connected信号激发时,我们向服务器端发送消息,当readyRead信号激发时,我们就可以读取数据了。
2016-02-29 09:08:36
3447
4
原创 一个简单的BitTorrent客户端实现(一):概述
从读大学开始,C++就一直陪伴着我。这么多年了,总得留下些痕迹。而我一直钟爱socket编程,看了别人写的代码,再加上自己的摸索,就用C++做了最一个简单的bittorrent客户端。
2016-01-24 10:22:16
3469
1
原创 使用Qt开发文本编辑器(一):功能介绍
以前一直很羡慕别人能开发文本编辑器,后来学了Qt,看了里面的例子,自己改造一下,竟也可以弄一个出来,虽然说不是很强大,权当是自己的一个学习成果吧。好了,我就废话少说,直接转入正题了。这个文本编辑器主要实现了以下功能: (1)文本编辑(包括撤销、恢复、保存、打开文件、导出成pdf、另存为等等)。 (2)Tab页式文档。 (3)行号显示。
2015-11-06 09:34:21
2143
原创 使用Qt开发中国象棋(六):将军和死棋检测
下棋的过程中,某一方主帅被对方攻击就是将军,如果不能解除危险,就是死棋。在这个游戏中实现了将军的判断和死棋的检测。具体如下: (1)每走一步棋时,先要判断自己能不能这样走,当然除了走法是否合乎规则,比如说是否为蹩脚马等等,还要判断自己这样走是否被对方将军。 (2)走完一步棋后,还要判断是否将对方的军,是否造成对方死棋。首先介绍一下将军的判断方法:能够将军的无
2015-11-05 14:40:55
3048
1
原创 使用Qt开发中国象棋(五):走棋
在整个游戏中,走棋是最复杂的部分,也是最麻烦的。开发这个程序,大概花了三分之一的时间在这个上面。在这个游戏中,走棋是通过鼠标点击事件来完成的,当然也可以通过拖动鼠标事件来弄。假设我们自己先走,整个走棋的逻辑如下: (1)点击鼠标。 (2)ChessBoard类调用mousePressEvent并激发doMove信号。在该事件处理函数中,我们只处理鼠标左键单击事件
2015-10-27 15:48:31
3083
1
原创 使用Qt开发中国象棋(四):步时控制
一般的象棋游戏中都会限时,超过时间没走棋,就算输了。这个游戏采用的是步时限制。走棋的时候会有提示,像下面那样:界面用的是一个QLable来显示“红方走棋”,后面显示时间的用的是一个QLCDNumber的控件。显示时间可以用定时器的方式或者线程的方式,我这里用的是线程的方式。采用的是线程和条件变量的方式。Qt提供了QWaitCondition用于条件变量,QMutex用于互斥锁,QThr
2015-10-23 17:07:30
3484
原创 使用Qt开发中国象棋(三):走棋着法列表
在一个完整的中国象棋游戏中,一般界面上都显示了中文着法,为了简单起见,我开发的这个用了两个着法列表,红方一个,黑方一个,其实用一个就够了,只是感觉那样稍微会麻烦些。着法列表显示了每一步的走棋。下图是着法列表的截图: 着法列表用的是一个叫StepList的类来实现的,因为有两个着法列表,所以用了两个StepList对象。实例化的时候,指定一个特殊的参数用来标示是左边的还是右边的。像下面那
2015-10-13 16:48:17
3844
原创 使用Qt开发中国象棋(二):棋盘绘制
棋盘用的是ChessBoard类,主要是显示界面上的棋子,响应鼠标点击事件,激发走棋的信号,MainWindow调用相关的槽,从而完成走棋。下面将一一介绍,错误之处,恳请各位指正,谢谢。 ChessBoard要显示一张背景图和18个棋子,还有走棋路迹。背景图是一个QPixmap对象,至于棋子,因为界面上有90个位置可以放棋子,所以用了90个QPixmap对象。棋盘的渲染是在pai
2015-10-12 16:27:29
5558
原创 使用Qt开发中国象棋(一):概述
最近看了一些关于中国象棋的实现书籍,里面讲述了如何开发一个完整的中国象棋游戏,看了里面的内容,感觉里面的内容特别巧妙的,比如书中提到了用位棋盘来表示中国象棋的棋盘以及一些精妙的走棋算法。基于这些,自己也尝试的开发了一个中国象棋。 我是在Linux Mint 17.1 32伟操作系统下面开发的,用的是Qt Creator 3.3.1,Qt的版本是5.4.1。由于要实现的功能比较多,加上每天
2015-10-12 11:25:55
3788
原创 使用GDB调试多线程程序
最近一直在看Debugging with GDB,看了200多页,多少也有些收获,写了个多线程的程序调试了一下。很多时候,一个多线程程序运行了很长时间没有反应,可能是死锁或是在等待条件变量。以前用Visual Studio开发游戏时,也遇到过死锁的问题。Visual Studio调试时,我们可以点击“中断”按钮,这个时候我们就可以挂起进程,就可以查看里面的线程在做什么事。但如果我们用gdb在纯命令
2015-04-28 15:27:18
1146
原创 POSIX定时器
在Linux下,我们可以使用POSIX提供的函数来创建定时器int timer_create(clockid_t clockid, struct sigevent *sevp, timer_t *timerid);clockid说明定时器是基于哪个时钟的,可以是下面的几个值:CLOCK_REALTIMECLOCK_MONOTONICCLOCK_PROCESS_CPUTIME
2015-01-11 10:25:52
849
原创 顺序打印多个线程ID
最近面试时,碰到一个面试题,题目是有3个线程,顺序打印这三个线程的线程ID多次,例如ABCABC...这样打印。第一种方法:使用pthread_cond_timedwait或WaitForSingleObject,超时时间到了就打印出线程ID,每个线程设置不同的超时等待时间。/* * main.cpp * * Created on: 2014年12月27日 * Auth
2014-12-27 11:18:30
1136
原创 一个线程池的例子(三)
在Linux下,我们使用pthread线程库来进行线程编程,下面是一个线程池的简单例子,还望各位多多指教。main.cpp/* * main.cpp * * Created on: 2014年12月14日 * Author: jason */#include #include #include #include #include using namespa
2014-12-27 08:14:04
809
原创 一个线程池的例子(二)
Qt提供了QThread用于创建线程,在实际的使用过程中,我们需要派生一个QThread的子类,实现其中的run虚函数, 用的时候创建该类的实例,调用它的start方法。下面是一个使用QThread实现了一个简单的线程池。def.h#ifndef DEF_H#define DEF_H#include #include #include #include #include
2014-12-26 20:18:51
539
原创 一个线程池的例子(一)
线程池在我们日常工作中经常会用到,以前一直都不知道怎么用,今天看了书,写了一个简单的线程池例子。这个例子是基于Win32平台的。后面我会给出基于Linux平台和Qt的例子。def.h#include #include #include #include using namespace std;struct Task{ long m_StartValue; l
2014-12-26 19:47:22
661
原创 Qt串口编程
Qt提供了QSerialPort类供我们读写串口,使用该类可以方便的对串口进行读写,下面是一个简单的例子:#ifndef SERIAL_PORT_H#define SERIAL_PORT_H#include #include class SerialPort : public QObject{ Q_OBJECTsignals: void GetData(cons
2014-12-14 20:55:29
948
原创 Linux串口编程
在Linux下,串口设备显示在/dev目录下,如果用的是USB转的串口,我们执行下面的命令: ls /dev/ | grep tty 就可以看到下面的信息: ttyUSB0 ttyUSB1 在Linux操作系统下,一切皆文件,我们读写这两个文件就是利用串口接收和发送数据。可以用一根母对母的交叉线,将两个串
2014-12-14 20:42:52
1400
原创 在日常工作中使用正则表达式
在我们写代码的时候,基本上都用不到正则表达式,除了要在我们的代码中校验邮箱和手机号码的合法性的功能外。其实我们几乎每天都会使用正则表达式,因为使用正则表达式不一定要用在代码中,日常的查找替换都可以使用到。 支持正则表达式的文本编辑器有很多,如notepad++,UE,Komodo Edit等。个人觉得Komode Edit对正则表达式的支持比UE和notepad++要强大,而且这
2013-10-27 09:17:06
877
原创 管道
管道由pipe函数创建,是进程间通信的一种方式。 #include int pipe(int fd[2]); 返回:成功时为0,出错时为-1该函数返回两个文件描述符:fd[0]和fd[1]。前者用于读,后者用于写。管道的典型用途是以下述方式提供两个不同进程(一个
2013-10-27 01:06:25
824
原创 学生信息管理系统C实现
<br /> 最近看了一些数据结构的书,感觉看书的时候看一段时间就感到厌倦了,个人觉得光看书枯燥无味而且也没多大收获,倒不如丢开书本自己写代码,遇到不会的再看书或请教别人,于是决定写一些代码,也算是我学了数据结构的劳动成果吧。代码不多,1000行左右。其中有些代码是照搬别人的,但85%以上的代码还是我个人写的,说实话,写这些代码确实觉得很累,为了完成这段代码,请教了不少优快云的网友,今天我就把代码贴出来,代码我也不想修改了,注释也没写多少,毕竟个人能力有限,再说这些代码也没多大实际意义,希望对于
2010-09-09 21:23:00
2574
1
转载 50个C/C++源代码网站
50个c/c++源代码网站 文章出处:http://blog.chinaunix.net/u3/106835/showart_2190632.htmlC/C++是最主要的编程语言。这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码。这份清单提供了源代码的链接以及它们的小说明。我已尽力包
2010-05-12 16:43:00
940
转载 链表排序
文章出处:http://hi.baidu.com/zouguole/blog/item/7b1415fbed29d3244e4aea52.html链表排序2008-09-29 19:56==========================功能:选择排序(由小到大)返回:指向链表表头的指针==========================*//*选择排序
2010-04-17 10:09:00
796
1
转载 链表的各种操作实现 链表逆序 链表排序 有序链表归并 链表存在环的判定
链表基本操作实现 c语言版本,该程序在visual c++ 6.0上调试通过! 本人写该程序完全是为学习交流之用,还望大家多多指教。可以随便引用,或修改本程序,但需注明请注明出处!多谢! 引用地址:http://blog.sina.com.cn/maxiaof/* Author: Jacky Ma Date :
2010-04-15 15:02:00
1207
使用DirectX开发的魔方游戏
2016-11-29
C++开发的Bittorrent客户端
2016-01-23
Qt开发的文本编辑器
2015-11-06
Linux下Qt开发的中国象棋
2015-10-12
C++网络编程 卷2 基于ACE和框架的系统化复用
2013-08-27
C++网络编程 卷1 运用ACE和模式消除复杂性
2013-08-25
Programming With POSIX Threads_part2(POSIX多线程程序设计)
2010-06-16
Programming With POSIX Threads_part1(POSIX多线程程序设计)
2010-06-16
数据结构C实战(C.and.Data.Structures.by.Practice.2007)
2010-04-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人