摘要: 最近看公司同事在玩页游《斗破乾坤》我也进去完了一把,感觉画面还不错,就是不停的点鼠标做任务,一会就烦了,看了下前端配置文件,我们以error.json_3e30为例,这个肯定是记录错误码的文件直接打开是乱码,二进制打开看到:前面写着czlib_1.0,那肯定是zlib压缩,然后找了个zlib压缩后的数据对比了下,发现,压缩后的数据从78DA开始的,因此也就是从第13个字节开始,解压后发现文件依然不能直接看到,直接打开只能看到少许几个单词,因此可以断定没有加密,只是某种编码如下:我们可以看到,这里肯定不是ASCII码,因为有大量的不能显示的字符,后来想到AS3中的AMF编码,查了下AMF编码格式 阅读全文
posted @ 2013-07-27 16:01 蒲蜡 阅读(4817) 评论(0) 推荐(1) 编辑
摘要: C语言中可以使用goto进行程序跳转,但是goto只能使用在一个函数内部,不能实现在不同函数之间的跳转,C语言因此提供了setjmp和longjmp函数实现此功能,一般进行异常处理。从函数名称可以看到,一个是设置跳转点,另一个实现长距离的跳转。我们可以再一个函数内部调用setjmp函数设置一个跳转点,在另一个函数中调用longjmp进行跳转,我们需要定义一个jmp_buf类型变量保存跳转信息。eg:jmp_bufjb;voidmain(){if(setjmp(jb) == 0) {longjmp(jb, 1); }else {printf("jmp point 1"); } 阅读全文
posted @ 2013-07-24 20:19 蒲蜡 阅读(1023) 评论(0) 推荐(0) 编辑
摘要: Windows中提供了一个宏#define CONTAINING_RECORD (address, type, field ) ((type *)( \ (PCHAR)(address ) - \ (ULONG_PTR)(&((type *)0)->field))) address : 结构体内成员实际地址type : 结构体类型field : 结构体内成员字段名称作用: 更加提供的结构体成员地址反... 阅读全文
posted @ 2013-06-18 23:08 蒲蜡 阅读(421) 评论(0) 推荐(0) 编辑
摘要: C语言中可以用函数地址直接调用函数:实例代码:void print (){ printf ("function print");}typdef void (*fun)();fun f = print;f();C++中类非静态成员函数必须通过实例去调用,C++中类成员函数调用:class test{public:void print (){ printf ("function print");}};我们同样可以通过定义函数指针来调用如下:typedef void (test::*fun)();fun f = &test::print;test t; 阅读全文
posted @ 2013-06-08 21:02 蒲蜡 阅读(4251) 评论(0) 推荐(1) 编辑
摘要: C语言中提供了对时间进行操作的函数和数据结构,下面介绍几种常用的函数。首先是表示时间的time_t类型,在32位windows VS2010中定义为long long类型,占8个字节,表示自1970年1月1日0时0分0秒到现在的秒数。表示日期结构tm定义如下:structtm {inttm_sec;/* seconds after the minute - [0,59] */inttm_min;/* minutes after the hour - [0,59] */inttm_hour;/* hours since midnight - [0,23] */inttm_mday;/* day 阅读全文
posted @ 2013-06-04 21:56 蒲蜡 阅读(500) 评论(0) 推荐(0) 编辑
摘要: 直线栅格化在计算机图形处理中非常常用,看了看网上的介绍比较常用的就是Bresenham 算法,搜索了下网上的算法,试了试,有的有问题,自己写了一个,测试通过。#include <stdio.h>#include <stdlib.h>void LinearGrid (int x1, int y1, int x2 , int y2){ int dx = abs( x2 - x1 ); int dy = abs( y2 - y1 ); int x = x1; int y = y1; int sx = x2 > x1 ? 1 : -1; int sy = y2 > 阅读全文
posted @ 2013-05-14 22:39 蒲蜡 阅读(987) 评论(0) 推荐(0) 编辑
摘要: vim操作汇总:1、vim分为命令模式和编辑模式,默认进入命令模式,按“i”进入编辑模式,按ESC进入命令模式。2、命令模式下输入":w"保存文件,"wq"保存并退出,"q!"不保存直接退出,"set nu"显示行号,"gg=G"自动排版,"dd"删除整行,"u"恢复刚刚修改的内容,"/b"查找字符串。函数介绍:1、fork()函数会创建一个进程,该进程的大部分变量保持和父进程一致,子进程自动继承父进程打开的文件句柄,是父进程的克隆,子 阅读全文
posted @ 2012-11-21 21:23 蒲蜡 阅读(320) 评论(0) 推荐(0) 编辑
摘要: 游戏开发中会有寻路功能,目前应用比较广泛的就是A*算法,算法描述:http://blog.vckbase.com/panic/archive/2005/03/20/3778.html,已经说的相当清楚了,实现起来不算特别麻烦,自己按照描述实现了一个算法,只是一个简单实现,实际项目中有待优化:#ifndef _A_STAR_H_#define _A_STAR_H_#include <iostream>#include <math.h>#include <windows.h>#define NULL 0#define IN_OPEN_LIST 1#define 阅读全文
posted @ 2012-09-20 20:45 蒲蜡 阅读(311) 评论(0) 推荐(0) 编辑
摘要: 一、内核对象由内核所拥有,而不是由进程所拥有。换句话说,如果你的进程调用了一个创建内核对象的函数,然后你的进程终止运行,那么内核对象不一定被撤消。在大多数情况下,对象将被撤消,但是如果另一个进程正在使用你的进程创建的内核对象,那么该内核知道,在另一个进程停止使用该对象前不要撤消该对象,必须记 住的是,内核对象的存在时间可以比创建该对象的进程长。二、若要确定一个对象是否属于内核对象,最容易的方法是观察创建该对象所用的函数。创建内核对象的所有函数几乎都有一个参数,你可以用来设定安全属性的信息。三、进程共享内核对象的三中不同机制:1、对象句柄的继承性; 2、给对象命名; 3、复制对象句柄。四、... 阅读全文
posted @ 2012-08-23 23:01 蒲蜡 阅读(263) 评论(0) 推荐(0) 编辑
摘要: #include <stdio.h>int binary_find(int arry[], int find_value){ int low = 0; int high = sizeof(arry) / sizeof(arry[0]) - 1; while(low <= high) { int index = (low + high) / 2; if(arry[index] == find_value) { return index; ... 阅读全文
posted @ 2012-06-18 21:20 蒲蜡 阅读(168) 评论(0) 推荐(0) 编辑