8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

运行环境:linux

使用语言:c 或者c++

插件,很多人用过,比如游戏插件,编辑器插件这些,

最著名的就数魔兽大脚插件啦,还有vim插件啦,eclipse插件啦,等等

插件有很多种形式,最常见的就是so文件,在windows上就是各种的dll啦

下面就让我们来了解一下插件式编程吧〜〜

举个例子,你开发了一个游戏,一开始只有三个关卡,分享给了你的小伙伴玩

大家玩得很爽,但很快,游戏通关了,还想玩,这时候怎么办呢?

常规做法就是再加两关,然后编译之后,再发给大家,那么问题就来了

每次想加新关卡,都需要重新编译一次,再下载一次,这个流量嘛,1+1.1+1.2+1.3,每次加个0.1,都够你受的^_^

这个时候嘛,就要引入插件系统了

咱先来写个小程序1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35#include "game.h" //关于游戏的定义

void ()

{

}

void play()

{

printf("我打,我打,我打打打n");

}

void loadMission()

{

}

int main()

{

initGame();//初始化游戏

int missionNum=loadMission();//读取关卡数

while(1)

{

int missionNo=getchar();//选择关卡

missionNo=missionNo-'0';

if(missionNo>missionNum)

{

printf("没有此关卡!n");

}

play();

}

}

以上就是一个可扩展的游戏架构,够简单吧〜

下面咱就开始设计这个游戏系统的插件吧

在这里,游戏关卡就是我们的插件,一个插件就是一个关卡

先讲讲一个插件的构造吧

首先是这个关卡的描述,比如名称,难度等

其次就是这个关卡游戏过程了

最后,就是玩关卡的人

按照以上描述,咱定几个结构体吧1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37//game.h

#include

//游戏玩家描述

typedef struct _player

{

int life;//玩家生命

}Player;

//游戏关卡描述

typedef struct _mission

{

int level;//关卡难度

char missionName[30];//关卡名称

void (*process)(Player *);//游戏过程

}Mission;

好了,下面就是一个插件的具体内容

```c

//game.c

#include "game.h"

const char name[]="第一关,插件入门";

const int level=1;

void firstMission(Player *p)

{

printf("oh my god ,somebody hurt me!n");

p->life--;

printf("now my life is %dn",p->life);

sleep(1);

}

void gameInfo(Mission *m)

{

m->level=level;

int len=strlen(name);

memcpy(m->missionName,name,len+1);//注意游戏名称不要太长

m->process=firstMission;

}

Ok,以上就是一个关卡的所有东西了,虽然看着简单,不过还是建议动手敲敲^_^

那我们先把这个插件制作出来吧,免得一会忘记了,在终端下执行以下命令:1gcc game.c -fPIC -shared -o firstMission.so -ldl

linux和mac都一样

关卡设计好了,接下来就是怎么样读取我们做好的关卡了

现在实现咱们就loadMission()函数1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72Mission mission[50];

int loadMission()

{

FILE * fp;

fp = fopen("missionList.txt", "r");//读取关卡列表文件

if (NULL== fp)

{

return 0;

}

int ret=0;

char namelist[50][50];//最多50个插件,每个插件的名字长度最多50

memset(namelist,0,sizeof(namelist));

int count=0;

while(fgets((char *)&namelist[count], 50, fp))

{

ret=strlen(namelist[count]);//计算实际字符串长度

if(namelist[count][ret-1]=='n')

namelist[count][ret-1]='

linux 下c插件开发,Linux C编程:打造一个插件系统相关推荐

  1. linux下C语言socket网络编程简例

    转自博文:http://blog.csdn.net/kikilizhm/article/details/7858405 在练习写网络编程时,该例给了我帮助,在写服务器时,我把while逻辑位置想法错了 ...

  2. Linux下netstat常用,Linux netstat常用命令

    1.统计80端口连接数 netstat -nat|grep -i "80"|wc -l 2.统计httpd协议连接数(查看Apache的并发请求数及其TCP连接状态) ps -ef ...

  3. linux nginx安装php5.5,linux下搭建LNMP(linux+nginx+mysql+php)环境之mysql5.5安装

    linux下搭建LNMP(linux+nginx+mysql+php)环境之mysql5.5安装: 首先安装依赖包: yum -y install gcc gcc-c++ autoconf libjp ...

  4. 解决Linux下pcieport 0000:00:1c.5问题导致的系统根目录/磁盘空间不足

    解决Linux下pcieport 0000:00:1c.5问题导致的系统根目录/磁盘空间不足 参考文章: (1)解决Linux下pcieport 0000:00:1c.5问题导致的系统根目录/磁盘空间 ...

  5. lnmp php 5.4,linux下搭建LNMP(linux+nginx+mysql+php)环境之php5.4安装

    安装准备:依赖包下载wget http://ah1.down.chinaz.com/201303/PHP-v5.4.13.tar.gz wget http://soft.7dot.com/soft/l ...

  6. linux下freerdp编译,linux下安装freerdp连接windows远程桌面的好软件软件

    linux下安装freerdp连接windows远程桌面的好软件软件 (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 8.90 积分 Linux 下安 ...

  7. 在linux下nice用法,Linux下nice/renice命令小结

    1. nice命令 内核根据进程的nice值决定进程需要多少处理器时间. nice值的取值范围是是: -20到20. 一个具有-20 的 nice 值的进程有很高的优先级. 一个 nice 值为 20 ...

  8. 利用Python打造一个语音合成系统

    利用Python打造一个语音合成系统 背景 一直对语音合成系统比较感兴趣,总想能给自己合成一点内容,比如说合成小说,把我下载的电子书播报给我听等等. 语音合成系统 其实就是一个基于语音合成的工具,但是 ...

  9. Python调用API打造一个语音合成系统(百度智能云)

    Python调用API打造一个语音合成系统(百度智能云) 将文字转换成各种不同味道(大叔型,萝莉音,精神小伙型等)的语音. 申请一个百度智能云账号 使用Python开发一款智能语音合成系统,所以需要P ...

最新文章

  1. PHP遇到json解决的两个办法,转为数组,直接取值
  2. 基于SSM实现医院疫情管理系统
  3. 2020年牛客算法入门课练习赛1【完结】
  4. 如何确定固定资产入账价值
  5. swagger报错 java.lang.NumberFormatException: For input string: ““
  6. python中frozenset( )和set()的用法区别
  7. 实战:Redis 集群模式(下)
  8. layui table数据渲染页面+筛选医生+在筛选日期一条龙2
  9. loop 逻辑门如何使用for_for..loop详解
  10. markdown公式编辑参考
  11. 错误: 程序包org.eclipse.swt.graphics不存在/swt.jar下载方法
  12. lg android tv 手机助手,手机如何投屏到LG电视的教程来了!
  13. 黑客是怎么攻击网站的(网站渗透入侵全部教程)
  14. 分布式技术(6) 后端接口设计方案
  15. 安装RabbitMQ出现Plugin configuration unchanged.问题
  16. 深入理解IGP-ISIS——ISIS邻居建立过程,影响ISIS邻居建立因素,ISIS报文
  17. K8s学习(二)——核心组件
  18. 关于嵌入式面试的一些题
  19. [JIRA] 从3.6.2旧版升级到新版6.0.8的详细过程
  20. 信息安全数学基础(一):同余

热门文章

  1. 写写代码,开开车--科目二考试经验
  2. 小李飞刀:python老师我今天没有灵感起名字了
  3. 超级网管员——网络管理
  4. JS控制HTML表格行上下移动
  5. CSDN博客编辑用html记录
  6. 服务器硬件维修常用问题,服务器CPU与内存常见故障及处理方法
  7. 第十二届_国赛蓝桥杯个人模板_基础篇
  8. 又一次嘲讽5G,618大促消费者热捧4G手机,5G手机却被冷落
  9. 海龟作图—用Python 绘图
  10. php curl 多线程