- 博客(46)
- 收藏
- 关注
原创 cocos2d-x学习笔记——Csv文件读取工具
在一个游戏中,通常会有很多怪物,以及怪物的生命值,魔法值等属性数据,这些数据不可能在代码里面写死,一般都会用配置文件来保存,使用时再加载到内存。 我们常用的配置文件是CSV文件,即逗号分隔值(Comma-Separated Values),如下图所示。今天,我就来介绍一个来读取CSV文件的工具类——MyCsvUtil。在接受读取CSV文件工具类之前,先介绍一个读取字符串的工具类——StringUt
2015-06-17 19:26:16 1435
原创 cocos2d-x小游戏——飞机大战
上周,我做了一个基于 cocos2d-x 的飞机大战的游戏,因为我刚学cocos2d-x没多久,所以这个飞机大战很多都是看着别人的教程,再加上自己的一些想法,来做的。下面我想说一说我的思路。飞机大战有三个场景:LayerGameStart(游戏开始)LayerGameMain(游戏进行中)LayerGameOver(游戏结束)一、游戏开始场景(LayerGameStart)其中,游戏开始和游
2015-06-15 16:38:08 5358 2
转载 cocos2d-x学习笔记——cocos2d-x3.0回调函数的变化
原文转自Cocos2d-x 3.0 新特性体验(2) 回调函数的变化在cocos2d-x 2.x版本中的回调函数的用法想必大家都很是熟悉,例如在menu item,call back action中都需要大量的使用到回调函数,但是在使用过程中总是感觉到比较冗余麻烦的,在3.0版本,使用到了C++11 的新特性,改进增加了回到函数的使用形式,其中最令人欣慰的是,可以使用闭包,对于
2015-06-08 12:40:27 704
原创 数据结构——反转单链表
最近看了《剑指offer》这本书,遇到了一个问题:反转链表 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的链表的头结点。 链表结点定义如下:struct ListNode{ int _data; ListNode * _pNext;};解决方案如下:ListNode * ReverseList(ListNode * pHead){ ListNod
2015-06-05 22:17:24 6978 2
转载 关于C++中的虚拟继承的一些总结
原文转自关于C++中虚拟继承的一些总结1.为什么要引入虚拟继承虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下:class Aclass B1:public v
2015-05-28 15:43:23 596
原创 Cocos2d-X小游戏——别踩白块
自己学了快两个月的cocos2d-x了,前几天自己看着教学视频,跟着做了一个小游戏——别踩白块。今天来说一说我自己是如何写这个项目的。逻辑有点乱,不知道看不看得懂。。。。首先,这个游戏有两个场景,一个是开始场景,一个是失败场景。开始场景如下:开始场景里面有三类块:起始块(黄色,有Start Game)正常块(黑白块)结束块(绿色,有You Win)起始块如下: 正常块如下: 结束块如下:
2015-05-27 16:25:17 4177 2
原创 数据结构——归并排序算法
昨天说了快速排序,今天来讲一讲归并排序:什么是归并?归并:将两个或两个以上的有序表组合成一个新有序表。归并操作的步骤:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列设定两个指针,最初位置分别为两个已经排序序列的起始位置比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置重复步骤3直到某一指针超出序列尾将另一序列剩下的所有元素直接复制到合并序列
2015-05-26 14:33:05 12766 7
原创 数据结构——快速排序算法
今天来说一说快速排序:基本思想:任取一个元素 (如第一个) 为轴点所有比它小的元素一律前放,比它大的元素一律后放,形成左右两个子表对各子表重新选择中心元素并依此规则调整,直到每个子表的元素只剩一个注意:每一趟的子表的形成是采用从两头向中间交替式逼近法由于每趟中对各子表的操作都相似,可采用递归算法代码实现:#include <iostream>using namespace std;/
2015-05-25 20:14:44 3497
原创 数据结构——二叉树的操作
这里我们主要讲二叉排序树的操作:什么是二叉排序树?或者是一棵空树或者是具有一下性质的二叉树: a.若它的左子树不空,则左子树上所有结点的值均小于它的根节点的值; b.若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; c.它的左、右子树也分别为二叉排序树Tip : 中序(左根右)遍历二叉排序树会得到一个关键字的递增有序序列二叉排序树的操作——查找查找步骤:若查找的关键字等于
2015-05-24 11:43:45 1250
转载 cocos2d-x学习笔记——各种遍历与范围for语句的使用
原文转自各种遍历与范围for语句的使用遍历这东西,我的理解就是for语句的加强版啦。本来这种小技巧类型的博文应该放到Cocos2dx 小技巧这一栏里,但因为涉及到3.0的一些知识与C++ 11的新特性,所以就大胆的放这了。下面介绍一些常用的遍历。1、CCArray的遍历看到这里,有些人又按耐不住的要举起西瓜刀了:你不是说3.0beta后已经没有CCArray这货了吗?现在又拿出来作甚? 其实我也很
2015-05-21 21:14:09 1135
原创 数据结构——图
昨天晚上写了树的一些基本概念和树的操作以及树的一些应用。 今天来说一说图!基本术语:图—— 一个图(G)定义为一个偶对 (V,E) ,记为 G=(V,E) 。其中: V是顶点(Vertex) 的非空有限集合,记为V(G); E是无序集V&V的一个子集,记为E(G) ,其元素是图的边(Arc)。无向图——每条边都没有方向有向图——每条边都有方向完全图——任意两点都有一条边相连稀疏图——有
2015-05-20 10:25:10 1456
原创 数据结构——树
这几天自己又重新看了一遍《数据结构》。 不看不知道,一看吓一跳。以前学的知识有忘记得差不多了。所以,决定以写博客的方式, 将我学到的东西记录下来,就算后面又忘记了也能回来看看。废话不多说,我花了几天将老师上课的课件和书本结合起来看,对数据结构的体系有了自己的一个理解今天就先说一说树和二叉树。基本术语:树——是由一个或多个结点组成的有限集合,其中: ⒈必有一个特定的称为根(ROOT)的结点;
2015-05-19 21:50:04 816
转载 cocos2d-x学习笔记——内存管理
Cocos2d-x中所有继承自Ref的类,都可以使用Cocos2d-x的内存管理。 Cocos2d-x 提供引用计数管理内存。调用retain()方法,令其引用计数增1,表示获取该对象的引用权;在引用结束的时候调用release()方法,令其引用计数值减1,表示释放该对象的引用权。通过调用autorelease()方法,将对象放入自动释放池。当释放池自身被释放的时候,它就会对池中的所有对象执行一次r
2015-05-12 13:42:35 498
原创 cocos2d-x学习笔记——EventDispatcher事件分发机制
EventDispatcher 事件分发机制先创建事件,注册到事件管理中心 _eventDispatcher,通过发布事件得到响应进行回调,完成事件流。_eventDispatcher是Node的属性,通过它管理当前节点(场景、层、精灵等)的所有事件的分发。但它本身是一个单例模式值的引用,在Node的构造函数中,通过Director::getInstance()->getEventDispatche
2015-05-11 19:15:23 2730
转载 Visual Assist X(小番茄)快捷键
Alt + Shift + F:光标放到某个字符串上,按下此键,会找出所有引用了这个字符串的地方。Alt + Shift + S:方便你寻找某个对象或变量等等。Alt + O: 在.h与.cpp之间切换 Ctrl+Shift+V: Parse 弹出最近10个copy的内容菜单Alt + Shift + R:当想改掉一个类名或是其他东西的命名时,可能已经有很多地方引用这个名称了,这时按下此快
2015-05-08 15:00:22 6576
转载 如何使用指向类的成员函数的指针(详解!)
本文转自lishuhuakai的博客 我们首先复习一下”指向函数的指针”如何使用? void print() { } void (*pfun)(); //声明一个指向函数的指针,函数的参数是 void,函数的返回值是 void pfun = print; //赋值一个指向函数的指针 (*pfun)(); //使用一个指向函数的指针比较简单,不是吗? 为什么 *pfu
2015-05-07 20:36:45 1130
原创 双向链表的插入及删除图解
双向链表的插入第一步:首先找到插入位置,节点 s 将插入到节点 p 之前 第二步:将节点 s 的前驱指向节点 p 的前驱,即 s->prior = p->prior; 第三步:将节点 p 的前驱的后继指向节点 s 即 p->prior->next = s; 第四步:将节点 s 的后继指向节点 p 即 s->next = p; 第五步:将节点 p 的前驱指向节点 s 即 p->prior =
2015-05-06 20:25:54 30519 12
原创 单向循环链表的合并图解
第一步:创建一个临时节点指针,指向链表 L2 的第一个数据节点即:ListNode * p = B->next->next; 第二步:将链表 L2 的最后一个节点 B 指向链表 L1 的 头节点即链表 L1 的最后一个节点 A 指向的节点:B->next = A->next; 第三步:将链表 L1 的最后一个节点 A 指向链表 L2 的第一个数据节点即 A->next = p;刚开始,怎么也搞不
2015-05-06 20:11:15 6193 5
原创 ICMP的应用之路由追踪程序(Tracert)
实现原理:Tracert 程序关键是对 IP 头部生存时间(time to live)TTL 字段的使用,程序实现是向目的主机发送一个 ICMP 回显请求报文,初始时 TTL 等于 1 ,这样当该数据报抵达途中的第一个路由器时,TTL 的值就被减为 0,导致发送超时错误,因此该路由生成一份 ICMP 超时差错报文返回给源主机。随后,主机将数据报的 TTL 值递增 1 ,以便 IP 报能传送到下一个路
2015-05-04 22:51:53 9627 7
原创 基于TCP与UDP的简单聊天程序
基于TCP的网络应用程序的编写1.服务器端程序#include <Winsock2.h>#include <stdio.h>#pragma comment(lib,"Ws2_32.lib")void main(){ //加载套接字库 WORD wVersionRequested; //加载的Winsock库的版本 WSADATA wsaData; //库版本的有关
2015-05-04 19:48:38 4084
原创 虚拟内存之页面置换算法
四种页面置换算法:最佳(OPT,Optional)最近最少使用(LRU,Least Recently Used)先进先出(FIFO,First In First Out)时钟(Clock)一、最佳置换算法OPT 策略选择置换下次访问距当前时间最长的那些页,可以看出该算法能导致最少的缺页中断,但是由于它要求操作系统必须知道将来的事件,显然这是不可能实现的。但它仍然能作为一种标准来衡量其他算法
2015-05-03 22:17:08 6585 1
原创 内存管理
本章主要学习目标:讨论内存管理的主要需求理解内存分区的原因并解释所使用的各种技术理解并解释分页的概念理解并解释分段的概念分区和分段的区别一、内存管理的需求重定位(把内存换出后再换入,放入内存的其他区域)保护(运行时,保护进程的程序和数据不被未授权的访问和修改 [ 用硬件保护 ] )共享(多个进程访问共享内存区域)逻辑组织(模块化编程 -> 段式内存管理)物理组织(两级存储:内存
2015-05-03 21:17:39 600
转载 C++中 虚函数中的默认参数问题
原文转自nwplei的博客 当通过指针调用一个对象的方法时,如果该方法是虚函数,则实际调用的是该实例的方法。当缺省参数和虚函数一起出现的时候到底用哪个默认值呢?虚函数是动态绑定的,但是为了执行效率,缺省参数是静态绑定的。 也就是 指针是哪种类型,就调用该类型对应的类中,该函数定义时的缺省值。#include <iostream>using namespace std;class A{pu
2015-05-03 17:03:07 691
原创 并发性:互斥和同步、死锁和饥饿
一、与并发相关的关键术语:原子操作:要保证指令的序列作为一个组来操作执行,要么都不执行;要么执行要直接执行到指令完毕,中间不能中断临界区:是一段代码,在这段代码中进程将访问共享资源,当有一个进程在这段代码中运行时,其他进程不能在这段代码中运行死锁:两个或两个以上的进程因其中的每个进程都在等待其他进程做完某些事情而不能继续执行,这种情形称为死锁互斥:当一个进程在临界区访问共享资源时,其他进程不
2015-05-03 15:55:47 3550
原创 进程与线程
一、引入进程的原因为了使程序能并发执行,并能对并发的程序加以描述和控制(解决程序并发的不可再现性)二、什么是进程?进程是执行中的程序进程是动态概念,有声明周期它是操作系统进行资源分配和调度的基本单位进程分类:系统进程:执行操作系统核心代码的进程(独占资源,最高优先级运行;直接执行 I/O 操作;内核态下活动)用户进程:执行用户程序的进程(通过系统调用竞争资源;不直接执行 I/O 操作;用
2015-05-03 14:14:31 437
原创 单处理器调度算法
一.什么是调度?调度就是从就绪队列中挑选下一个占用 CPU 运行的进程。调度分为:长程调度、中程调度、短程调度和 I/O 调度。本文主要讲解短程调度。二.为什么要进行进程调度?正在执行的进程正确完成,或由于某种错误而终止运行(陷阱或中断)执行中的进程提出 I/O 请求,等待 I/O 完成在分时系统中,分给进程的时间片用完按照优先级调度,有更高优先级进程变为就绪状态(抢占方式)执行中的进程执
2015-04-27 12:34:11 3166 1
原创 基于TCP与UDP的windows网络编程
一、网络字节顺序与主机字节顺序不同的计算机存放多字节值的顺序不同,有的机器在起始地址存放低位字节(低位先存),有的机器在起始地址存放高位字节(高位先存)。基于 Inter 的 CPU ,即使我们常用的 PC 机采用的是低位先存。为保证数据的正确性,在网络协议中需要指定网络字节顺序, TCP/IP 协议使用16位整数和32位整数的高位先存格式。由于不同计算机存放数据字节的顺序不同,这样发送数据后,即使
2015-04-25 13:44:05 505
原创 计算机网络运输层重要概念
运输层提供应用层进程间的逻辑通信,也就是说,运输层之间的通信并不是真正在两个运输层之间直接传输数据。运输层应用层屏蔽了下面网络的细节(如网络拓扑、所采用的路由选择协议等),它使应用层看见的好像是在两个运输层之间有一条端到端的逻辑通信信道。网络层为主机之间提供逻辑通信,而运输层为应用层进程之间提供端到端的逻辑通信。运输层有两个主要的协议:TCP和UDP。它们都有复用和分用,以及检错的功能。当运输层
2015-04-23 13:22:38 1551
原创 TCP三次握手(建立连接)与四次挥手(释放连接)详解
上图画出了TCP的建立连接的过程。假定主机A运行的是TCP客户程序,而B运行TCP服务程序。最初两端的TCP进程都处于 CLOSED(关闭)状态。图中在主机下面的方框分别是TCP进程所处的状态。请注意,A主动打开连接,而B被动打开连接。B的TCP服务器进程先创建传输控制块TCB(Transmission Control Block),准备接受客户进程的连接请求。然后服务器进程就处于LISTEN(监听
2015-04-23 10:54:48 3235 3
转载 为什么C++编译器不支持模板头文件和实现代码分离的编译
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/thinkscape/archive/2008/12/20/3567420.aspx首先,C++标准中提到,一个编译单元[translation unit]是指一个.cpp文件以及它所include的所有.h文件,.h文件里的代码将会被扩展到包含它的.cpp文件里,然后编译器编译该.cpp文件为一个.obj文件,后者拥有
2015-04-15 17:41:40 656
转载 const char * 和 char const * 和 char * const 区别
我们都用过const 修饰符修饰一个变量,而且我们知道使用const修饰之后,这个变量相当于常量了,他的值在代码其他部分不能再修改,这对于函数调用时候,防止错误的修改原本不应修改的变量起到很大作用,举个例子,加入A函数调用B函数进行字符串处理,A把字符串的地址传递给B,B在处理过程中误修改了字符串的地址,导致程序出错,有时候这种错误很难找到,这时候我们就可以使用const关键字。可是对于指针的情况,
2015-04-13 19:20:13 5713
原创 类型转换操作符
C++有更严格的限制允许的类型转换,并添加4个类型转换操作符,使转换过程更规范:dynamic_cast;const_cast;static_cast;reinterpret_cast。可以根据目的选择一个适合的操作符,而不是使用通用的类型转换。这指出了进行类型转换的原因,并让编译器能够检查程序的行为是否为设计者想法吻合。dynamic_cast:该操作符的用途是,使得能够在类层次结构中进
2015-04-11 15:10:14 567
原创 输入输出流状态
1.流状态cin或cout对象包含一个描述流状态(stream state)的数据成员(从ios_base那里继承的)。流状态(被定义为iostate类型,而iostate是一种bitmask类型)由3个ios_bae元素组成:eofbit、badbit或failbit,其中每个元素都是一位,可以是1(设置)或0(清除)。当cin操作到达文件末尾时,它将设置eofbit;当cin操作未能读取到预期的
2015-04-10 11:45:49 1720
原创 使用cout来进行格式化输出
1.修改显示时使用的计数系统ostream类是从ios类派生来的,而后者是从ios_base派生来的。ios_base类存储了描述格式状态的信息。例如,一个类成员中某些位决定了使用的计数系统,而另一个成员则决定了字段宽度。通过使用控制符,可以控制显示整数时使用的计数系统。通过使用ios_base的成员函数,可以控制字段的宽度和小数位数。 要控制整数以十进制、十六进制、八进制显示,可以使用dec、h
2015-04-09 20:18:00 593
原创 C++笔试题1
1.在32位机器中,如下代码的输出是:void example(char acWelcome[]){ printf("%d",sizeof(acWelcome)); return;}void main(){ char acWelcome[]="Welcome to Huawei Test"; example(acWelcome); return;}A.0
2015-04-07 19:47:23 757
原创 C++笔试题
1.下面代码的输出是什么?class A { public: A() { } ~A() { cout<<"~A"<<endl; } }; class B:public A { public: B(A &a):_a(a) { } ~B()
2015-04-02 13:53:16 551
转载 STL vector用法介绍
介绍这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作。本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用。通过阅读这篇文章读者应该能够有效地使用vector容器,而且应该不会再去使用C类型的动态数组了。 Vector总览vector是C++标准模板库中的部分内容,它是一个多功能
2015-03-30 12:38:49 450
原创 类继承复习题
1.派生类从基类那里继承了什么? 答:基类的公有成员成为派生类的公有成员。基类的保护成员成为派生类的保护成员。基类的私有成员被继承,但不能直接被访问,可以通过基类的公有成员函数来访问。2.派生类不能从基类那里继承什么? 答:不能继承构造函数、析构函数、赋值操作和友元。3.假设baseDMA::operator=( )函数的返回类型为void,而不是baseDMA &,这将有什么后果?如果返回
2015-03-27 14:59:51 1014
原创 c++学习之类继承
注:本文章仅供个人复习使用。 本章内容包括:is-a关系的继承如何以公有的方式从一个类派生出另一个类保护访问构造函数成员和初始化列表向上和向下强制转换虚拟成员函数静态联编与动态联编抽象基类纯虚函数何时以及如何使用公有继承首先看看如何以公有的方式从一个类派生出另一个类 下面定义了TableTennisPlayer类,并派生出了一个RatedPlayer类#ifndef TA
2015-03-26 19:05:13 671
原创 c++类和动态内存分配复习题
1.假设String类有如下私有成员:class String{private: char *str; int len; //...};请说出下面的构造函数有什么问题。 a.String::String(){ }b.String::String(const char * s){ str = s; len = strlen(s);}c.String
2015-03-22 10:27:21 1133
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人