- 博客(395)
- 资源 (15)
- 收藏
- 关注
原创 python常用随机函数及带权重随机实例
# -*- coding: utf-8 -*-import randoma = 1b = 10step = 3seq = [-1, -2, -3, -4, -5, -6, -7, -8, -9, 0]k = 2# 0 <= n < 1.0print 'random', random.random() # b <= n(float) <= aprint 'uniform',
2016-01-12 15:36:07 7026
原创 自己动手写cocos2dx游戏引擎(八)——Node节点
UI都是树状形式组织。每一个小的控件就是一个小的节点。同时,为了表示父子节点的关系需要保存一个父节点。最简单的形式是这样的: #include <vector>class Node { Node *_parent;// 父节点指针 std::vector<Node*> _children;// 子节点指针};因为子节点的个数是不确定的,因...
2015-12-22 13:24:23 1346
转载 编程的智慧
编程是一种创造性的工作,是一门艺术。精通任何一门艺术,都需要很多的练习和领悟,所以这里提出的“智慧”,并不是号称一天瘦十斤的减肥药,它并不能代替你自己的勤奋。然而由于软件行业喜欢标新立异,喜欢把简单的事情搞复杂,我希望这些文字能给迷惑中的人们指出一些正确的方向,让他们少走一些弯路,基本做到一分耕耘一分收获。反复推敲代码既然“天才是百分之一的灵感,百分之九十九的汗水”,那我先来谈谈这
2015-12-22 08:40:41 850
原创 python内存管理
一 与C语言的对比先来看看C语言的一段函数:#include int main() { int a = 1; int b = 1; int c = b; printf("&a = %p\n", &a); printf("&b = %p\n", &b); printf("&c = %p\n", &c); return 0;}
2015-12-18 15:58:02 933
原创 23种设计模式C++实例之享元模式
为了避免产生过多的临时对象,创建一个对象,需要需要不同对象的时候设置不同的参数。#include #include using namespace std;/* * 享元模式 * 享元:共享元素 * 以共享的方式来避免大量拥有相同内容对象的开销 * 理解: * 对于经常使用且仅参数不同的对象,不是每次都重新创建一个不同的对象, * 而是创建一个对象之后,每次使用时
2015-12-16 11:16:23 1129
原创 23种设计模式C++实例之组合模式
为不同继承层次和组合层次的类,提供统一的接口。#include #include /* * 组合模式 * 让单个对象和组合对象具有一致的接口 * */using namespace std;class IFile { public: virtual ~IFile() {} virtual void display() = 0; virtual int
2015-12-16 11:12:29 1499
原创 23种设计模式C++实例之桥接模式
桥接模式是为了解决类与类之间多对多的关系,使类与类直接的组合更加灵活。#include using namespace std;/* * 桥接模式 * 解决类与类之间多对多的关系 * */class Engine { public: virtual ~Engine() {} virtual void install() = 0;};class Engi
2015-12-16 11:03:08 1239
原创 23种设计模式C++实例之装饰模式
装饰模式就是在不改变原有的类的情况下,给它添加功能。#include using namespace std;/* * 装饰模式:在不改变原类和使用继承的情况下,对类进行功能的增强 * 对类a功能的增强 * */class Car { public: virtual ~Car() {} virtual void go() = 0;};class Run
2015-12-16 10:58:40 1129
原创 23种设计模式C++实例之代理模式
代理的目的是一般是为了防止直接访问某一个类,提供一种类似授权的机制。最典型的类中set和get方法实际上就是一种代理。#include using namespace std;/* * 代理模式:为其他对象提供一种代理,并以控制对这个对象的访问 * a类中b类,a类和b类中都实现协议类protocol * */class Shop{ public: virt
2015-12-16 10:54:08 1143
原创 23种设计模式C++实例之适配器模式
适配器模式目的为了向客户提供他们所需要的接口,在适配器内部再调用我们自己已经实现的接口。#include using namespace std;/* * 电压适配器 * 将220v适配到18v * */class Cur18v { public: virtual void useCur18v() = 0;};class Cur220
2015-12-16 10:48:32 1129
原创 23种设计模式C++实例之外观模式
为各个不同的类提供统一的接口,然后通过外观模式将其组合起来,对外提供一个统一的接口。#include using namespace std;/* * 外观模式:将子系统中的一组接口提供一个一致的界面 * 外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用 * */class SubsysA { public: void dothing() {
2015-12-16 10:25:19 1107
原创 自己动手写cocos2dx游戏引擎(七)——自动释放池
上一节说到的Ref的引用计数时,没有说自动释放。自动释放功能相对来说比较复杂。首先有一个自动释放池。 #ifndef __AUTORELEASEPOOL_H__#define __AUTORELEASEPOOL_H__#include <string>#include <vector>#include "Ref.h"class Autorel...
2015-12-15 22:07:51 1089
原创 自己动手写cocos2dx游戏引擎(六)——引用计数机制
这一节开始看看cocos2dx的内存管理。cocos2dx的内存管理使用的是引用计数机制,当对象创建的时候引用计数为1,retian一次引用计数+1,release一次-1,为了是delete。// Ref.h#ifndef __REF_H__#define __REF_H__class Ref { public: void retain();
2015-12-15 20:27:53 1300
原创 自己动手写cocos2dx游戏引擎(五)——渲染对象
上一节中,获取到了OpenGL的视图窗口,但是还没有办法渲染,现在我们把渲染对象加进来。// Renderer.h #ifndef __RENDERER_H__#define __RENDERER_H__#include <iostream>class Renderer { public: void render();};void ...
2015-12-15 19:04:15 837
原创 自己动手写cocos2dx游戏引擎(四)——窗体GLView
上一节中我们获取到了Director对象。通过这个对象我们可以获取到一个OpenGL的一个视图。在定义GLview之前,我们需要定义一个常用几何头文件。// Geometry.h #ifndef __GEMMETRY_H__#define __GEMMETRY_H__class Size { public: Size() {} S...
2015-12-14 23:06:05 2386
原创 自己动手写cocos2dx游戏引擎(三)——Director对象
上一节中,最后调用到了APPDelegate中的applicationDidFinishLaunching方法,在applicationDidFinishLaunching方法中,获取到了Director的一个实例。Director返回的是其子类DisplayLinkDirector的对象,其实现如下: class Director { public: v...
2015-12-14 21:50:34 1387
原创 自己动手写cocos2dx游戏引擎(二)——applicationDidFinishLaunching
上一节中,我们最终调用了Application的run方法。在run方法中,调用了applicationDidFinishLaunching方法,这个方法在哪里呢?可以看到在Application中并没有实现这个方法,这个方法来自Application的基类ApplicationProtocol。ApplicationProtocol中,将applicationDidFinishLau...
2015-12-14 21:07:39 3046
原创 自己动手写cocos2dx游戏引擎(一)——引擎入口
在网易的第二个项目已经上线快两个月了,已经在着手做第三个项目了。第一个项目是原生的app,使用的是cocos2dx2.2.4做的;第二个项目是一个html5游戏,在预研的时间同时用了cocos2dx和egret在做,最终选择了egret。第三个项目计划原生app和html5并重,鉴于egret的原生app才能跑十多帧,又换回了cocos2dx。之前一直在用cocos,现在打算重新研...
2015-12-14 20:31:10 3289
原创 23种设计模式C++实例之单例模式
单例模式就是让一个类智能创建一个对象。单例模式分为两种:懒汉式和饿汉式。// 懒汉式class Singleton { private: Singleton() { cout << "Singleton()" << endl; } public: ~Singleton() { cout << "~Singleton()" << endl; }
2015-12-11 19:44:46 1277
原创 23种设计模式C++实例之原型模式
原型模式就是让对象拥有自我拷贝的功能,方便备份对象数据或者创建对象时设置过多的参数。#include using namespace std;/* * 原型模式:让对象拥有自我复制的功能 * 注意深拷贝和浅拷贝 * */class Programmer{ public: virtual ~Programmer() {} virtual Programmer*
2015-12-11 19:34:37 3585
原创 23种设计模式C++实例之创建者模式
把建造不同类型房子的过程与客户端调用分类#include using namespace std;/* * 建造者模式 * 对象的创建和对象的表示分离 * */class House { public: void setFloor(string floor) { m_floor = floor; } void setWall(string wall
2015-12-11 19:32:13 1268
原创 23种设计模式C++实例之抽象工厂模式
抽象工厂模式在每一个系列的子系列中符合开闭原则,系列不符合。#include using namespace std;class Fruit { public: virtual ~Fruit() {} virtual void sayName() = 0;};class LocalApple: public Fruit { public: virtual void
2015-12-11 19:26:04 1339
原创 23种设计模式C++实例之工厂方法模式
工厂模式有三种:简单工厂模式,工厂方法模式,抽象工厂模式,其中简单工厂模式属于23种设计模式,实例如下:#include using namespace std;/* * 不符合开闭原则,不是23种标准的设计模式 * */class Fruit { public: virtual ~Fruit() {} virtual void sayName() = 0;};
2015-12-11 19:23:40 1871
原创 23种设计模式C++实例之概述和设计原则
一 分类1 创建型工厂方法模式(Factory Method)抽象工厂模式(Abstract Factory)创建者模式(Builder)原型模式(Prototype)单例模式(Singleton)2 结构型外观模式(Facade)适配器模式(Adapter)代理模式(Proxy)装饰模式(Decorator)桥接模式(Bridge)组合模式
2015-12-11 19:19:05 3467 1
原创 一步一步学写makefile
在做服务器开发的时候,需要用到gcc编译各种文件,如果文件多了,要做大量的重复工作。这时候你需要make工具,写上一个makefile文件,就能轻松解决问题。一 规则makefile的编写规则如下:target:components commandtarget目标名components 依赖的文件或者目标command 编译命令,前面必须有1个tab键
2015-12-10 14:28:09 942
原创 VIM多行注释/反注释
注:c/c++注释/反注释为例方法一:v模式多行编辑注释1 Ctrl+v进入v模式2 上下方向键选中要注释的行3 shift+i(即大写的I)行首插入4 输入注释符//5 按esc返回反注释1 Ctrl+v进入v模式2 上下方向键选中要注释的行,左右键选择要删除的字符//3 按d删除方法二:查找替换注释命令格式:起
2015-12-07 07:57:33 15544 2
原创 程序员的VIM配置
后端神器:VIM让手速跟上思维!" $Author: xulidong $" $Mail: xu.lidong@qq.com $" $Date: 2015-12-04 $" $URL: http://blog.csdn.net/xufeng0991/article/details/50178493 $" 特殊键" Esc" Ctrl+a" 上方向键"
2015-12-04 18:57:11 923
原创 C++类的实现方式
假设有一个简单类如下:class Test{private: int m;public: Test(int i) { m = i; } int getM(){ return m; } static void print() { cout << "static func" << endl; }};调用如下:Test t(1);a.getM();Test
2015-11-25 00:37:05 1192
原创 标准输入流stdin
FILE结构体:struct _iobuf { char *_ptr; int _cnt; char *_base; int _flag; int _file; int _charbuf; int _bufsiz; char *_tmpfname;};typedef struct _iobuf FILE
2015-11-16 20:42:29 1744
原创 你不知道的scanf和fscanf
#include #include int main(){ int num = 0; //scanf("%d", &num);// 输入:4 scanf("num = %d", &num);// 输入:num = 4,需要跟前面的字符串匹配(可以有多余的空格),否则无法读取 printf("num = %d\n", num);// 输出:num = 4
2015-11-16 20:15:51 772
原创 C语言五个常用的调试宏
__FILE__: 所在文件名__FUNCTION__:所在函数名__LINE__:所在行数__DATE__:执行日期__TIME__:执行时间#include int main() { printf("%s\n", __FILE__); printf("%s\n", __FUNCTION__); printf("%d\n", __LINE
2015-11-06 14:15:13 2711
原创 Nodejs中常用加密方式使用实例
/* * Crypto库提供各种加密算法 */var crypto = require('crypto');var content = 'password';// 需要被加密的内容/* * 函数说明 * var hash = crypto.createHash(algorithm); // algorithm: 'md5', 'sha1', 'sha256', 'sha512'
2015-10-10 15:37:38 2843
原创 兼容C++的C头文件书写方式
最近在阅读libevent的源码,学到了不少东西,兼容C++的C头文件书写方式就是其中之一。一 书写方式下面是event.h文件的源码:#ifndef _EVENT_H_#define _EVENT_H_#ifdef __cplusplusextern "C" {#endif#include #ifdef _EVENT_HAVE_SYS_TYPES_H#inclu
2015-09-25 19:28:06 3867
原创 C++11之lambda表达式
C++11中引入了lambda表达式,允许使用匿名函数。其语法如下:1 函数对象参数,必须,标志lambda表达式的开始,有三种参数可选:a 空,不能使用lambda表达式所在作用域中的变量。b =,可以使用lambda表达式所在作用域中的变量,值传递。c &,使用lambda表达式所在作用域中的变量,引用传递。2 函数参数列表,非必需,无参数时可省略,la
2015-09-17 00:42:00 836
原创 直接插入排序的两种实现方式
定义:每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。时间复杂度:O(n^2)#include void printArray(int arr[], int n) { int i = 0; for (i = 0; i < n; ++i) { printf("%d ", arr[i]); } print
2015-09-03 16:48:26 1063
原创 大型手游登录流程详解
游戏登录过程在玩家的眼里是非常简单的,只需要点一下登陆按钮即可;实际上这个过程没有想象的那么简单,特别是在手游中,一般会加入第三方渠道之后;下面就把这个登录的整个过程写下来。一 登录渠道(客户端)流程:1 客户端输入渠道账号user_name和密码password;2 登录,登录SDK成功之后,会返回一个token;3 保存token;传入:app_id、a
2015-08-31 19:36:43 7867 1
原创 冒泡排序及两种优化方式
定义:每一趟依次比较相邻的两个数,将小数放在前面,大数放在后面,直到一趟只剩下一个元素。时间复杂度:O(n^2)。冒泡排序是最常用的小型数据排序方式,下面是用C语言实现的,及其两种优化方式。第一种优化方式是设置一个标记位来标记是否发生了交换,如果没有发生交换就提前结束;第二种优化方式是记录最后发生交换的位置,作为下一趟比较结束的位置。#include
2015-08-21 22:51:01 14224 2
原创 《数据结构与算法分析》引论:选择问题实现
在《数据结构与算法分析——C语言描述》的引论中有提到一个问题:设有一组N个数而要确定其中第k个最大者。被称为选择问题(selection problem)。后面有提到两种算法,下面是我根据描述,写的代码:/* * 来源:《数据结构与算法分析》引论 * 题目:选择性问题,从N个数中找出第k大者 * * */#include #include /** 输出数组*
2015-08-21 20:48:41 1400
原创 《代码大全》拾遗
需要重构的代码:1 重复2 冗长的子程序3 内聚性差的类4 循环过长或嵌套过深5 过长的参数列表(7个参数左右)swict case优化:1 多态2 表驱动函数命名:1 函数命令要描述其返回值2 过程命名要使用动宾短语函数参数:1 传入参数不能修改2 参数排序:输出-修改-输出布尔变量命名:使用肯定的变
2015-08-21 12:26:44 1151
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人