工作日志4(2006.9.25--9.29)

/*****************************************************************************
**    File: Work log
**    Author: kevin lynx
**    Date:  2006.9.25
**     
******************************************************************************/

2006.9.25
     所有计划被间断了一周(18--24),接下来的一周,该是补回来的时候了。
     关于STL,我迅速地翻完了《C++标准程序库》这本书,我自己总结了STL的组件框架图:
[img]http://olJ.photo.qq.com/?file=5C29205826D810E17C3173A2F8FA5445D3E091459E2C09BE9337CB217E0D0A6C[/img]
     在实际应用中,就目前我个人的需求而言,我只需要Container,Iterator,Algorithm。
     对于实际应用,我已经在嵌入式项目里choose food一块中加入了vector。虽然运用的不够纯正(不能很放手地运用),但是作为第一次尝试,还是比较成功。

     接下来的一周里,应该进行更为实际的练习。
2006.9.26
     作为STL的练习的话,新写一个工程,也许不是什么好的方法。在DC Project(也就是那个嵌入式项目)中,对于STL的运用,还局限在vector,然后是简单的iterator上,algorithm压根没用上,vector也就用了push_back。其容器保存的是对象的地址。
     也许我可以改写以前的工程!
16:44
     花了几个小时写了个Snake using STL。突然觉得这样练习STL纯碎是浪费精力与时间。在这个练习程序里,我用了list容器,除此之外其他的STL元素用的很少(当然iterator是必须的)。
     一旦了解了STL的各大组件的概念,似乎没必要再去刻意地做什么练习!
     再过一段时间---几个月也许---我有去接外包的意愿。期待中。
23:00
     关于拷贝构造函数与赋值成员函数:
     以下代码居然是错的:
class CDemo
{
public:
CDemo() { }
CDemo( const CDemo &a )
{
m_data = a.GetData();

}

CDemo &operator = ( const  CDemo &a )
{
m_data = a.GetData();
return *this;
}

int GetData() { return m_data; }

private:
int m_data;
};

无论是vc2003还是Dev-C++4.9.9.2,都报类似于这样的语法错误:
“不能将“this”指针从“const CDemo”转换为“CDemo &””
     如果去掉参数中的const,则可以通过编译,但是这显然做的不够明智!参看一段定义:

拷贝构造函数的特点如下:
   1.拷贝函数不能指定返回类型,函数体中不允许有返回值。
   2.拷贝函数的说明可以在类体内,也可以在类体外。放在类体外的拷贝函数名前要加上"类名::"。
   3.拷贝构造函数只有一个参数,并且该参数是所在类的对象的引用。
   4.拷贝构造函数的格式为: <类名>::<拷贝构造函数名>(const <类名> & <引用名>)。
   5.如果一个类没有定义任何拷贝构造函数,那么C++就自动建立一个默认拷贝构造函数。该函数的功能是将已知对象的所有数据成员的值拷贝给相应对象的所有数据成员。

     更为离谱的做法来了:
class CDemo
{
public:
CDemo() { }
CDemo( const CDemo &a )
{
m_data = a.m_data;
}

CDemo &operator = ( const  CDemo &a )
{
m_data = a.m_data;
return *this;
}

int GetData() { return m_data; }

private:
int m_data;
};
     直接引用对象的私有成员!这很离谱,但是它却是最正规的做法!
     目前正在查阅资料中...
     (答应HN早睡觉,睡觉去了~~~[em]e7[/em])

2006.9.26
     关于对象在函数中的传递问题,以前看到过类似的文章,再次贴出来类似的:
#include <iostream>
using namespace std;

class CDemo
{
public:
CDemo() { cout << "CDemo::CDemo()" << endl; }
~CDemo(){ cout << "CDemo::~CDemo()" << endl; }
CDemo( const CDemo &a ) { cout << "CDemo::CDemo( const CDemo&)" << endl; }
};

CDemo f( CDemo a )
{
return a;
}

int main()
{
CDemo a;
CDemo b = f( a );

return 0;
}
执行结果:
CDemo::CDemo()
CDemo::CDemo( const CDemo&)
CDemo::CDemo( const CDemo&)
CDemo::~CDemo()
CDemo::~CDemo()
CDemo::~CDemo()
     可以看出,在把对象压栈时,调用了一次拷贝构造函数,在返回时又调用了一次。函数f中就出现了一个临时的对象!

9:27
     关于昨天那个拷贝构造函数的恶心问题---直接访问其私有成员---今天找到了答案:
 [ftc=#00BFF3]同样类型的对象,在成员函数内可以直接访问其变量,意即这种情况需要满足2个条件:一,两个对象类型相同;二,两个对象之间的访问在对象所属类的成员函数中![/ft][em]e19[/em]好恶心的解释!
     但是,原来那个通过其成员函数来改变其成员的方法又错在哪呢?
10:27
     copy constructor实在有点恶心了,我查阅了<C++ Primer>,<C++编程经典>都没找到解释。最后我竟然翻起了<ISO C++>这本最原始的也是最全面的C++规范手册,看到了如下定义:
     [img]http://olP.photo.qq.com/?file=5B06B73F969BB881F523E783A0CB77CD4C723DEA80CAF240D261D8499055F00F[/img]
10:41
      还是没找到答案![em]e19[/em]

2006.9.26
22:46
     目前STL的学习可以告一段落,剩下的是在长期的项目中进行间接训练。
     C++异常处理稍微看了一下,目前可能用处不大。
     [ftc=#F16C4D]现在我宣布,新的项目开始!
     项目名称:Brick Shooter .这是一个智力游戏(外国人做的,游戏规则目前我正在摸索中[em]e19[/em])。之所以要做它,是因为其游戏资源可以轻易得到,而且它也是基于HGE引擎的。这种游戏核心算法可能要困难点。要将其做的跟原作一模一样的话,预计国庆结束应该可以完成!(中途可能有其他事耽搁)本周任务:游戏规则,核心算法,系统架构,文档描述。具体编码留在10.4号以后!
[/ft] 

2006.9.27
10:45
     基本完成问题描述文档(基本了解大体规则,除了那个arrow changer,搞不懂其规律所在)。
     正在思考核心技术问题。
     感觉这次对我来说是一个全新的东西,事实上我不怎么喜欢这类型的游戏,但是其核心算法以及各种细节动画反而要难一些。
     总体而言,外国人做的GAME,在很多细节动画上做的不错!
     预计这次的代码规模,3000--4000行就足够了!细节动画的处理个人觉得最好是早期就拉进文档里考虑,否则后面会把代码写的很恶心!这个东西,我会把它做的完美,每一个细节都要完美!它将进一步巩固Kevin Lynx在网络上的地位,哈哈!
16:04
     上了体育课~累死了~
     心情不怎么好!忍了!逼着自己继续做![em]e19[/em]
     查看Brick Shooter Jr的资源,虽然有很多粒子系统的信息文件(psi),但是发现居然没有对应的纹理图片!最后我自己写程序实验其效果,用的是HGE默认的粒子系统纹理图片,效果没变化,只是颜色需要后期实验调整!游戏资源应该不成问题!接着要做的是那个矩阵旋转(LU同学说线形代数只学过矩阵转置,[em]e19[/em]妈B学校里学的果然是堆垃圾!)
16:47
      游戏里那个所谓的矩阵每次只转动90度。根据数组元素的对应关系,我直接用一个双层循环搞定这个看似高深的Matrix Rotation问题!
17:30
     这次由于GUI界面比Feeding Frenzy丰富,我发现还是以整体系统的角度来考虑更好些。以往都是专注于游戏本身,忽略了游戏中其他元素。Feeding Frenzy为了处理游戏与游戏中的对话框的关系,我用了很多状态变量,弄的很不幽雅。这次不同了,游戏总体控制对象下不仅只有游戏,还有GUI元素!
     贴一张设计草图:
[img]http://olZ.photo.qq.com/?file=D6BB611047AF651B00050D9ACE65AF0E9F8BF236B14ED5C04C21EA37ABE3966B[/img]

23:24
     今天大概用时 [ftc=#F16C4D]5个小时[/ft]
2006.9.28
11:06
     Brick Shooter Jr已经进入初步编码阶段!--可能还会间断着做些更为详细的文档设计。
     下午得去实验室兼顾嵌入式项目。
     目前Brick Shooter Jr用时8个小时。
2006.9.29
11:53
     Brick Shooter Jr进展顺利!核心代码部分即将完成!GUI部分目前还没写,渲染部分目前没写!
     [ftc=#F16C4D]目前Brick Shooter Jr用时大概16个小时[/ft],国庆前要完成的话,难度有点大! 
13:59
     [fts=2][ftc=#EE1D24]逻辑越来越混乱![/ft][/ft]  
15:16
     低估这个工程了!差点出了个致命的逻辑错误!这么弱智的游戏,因为加进了很多特效,以及其本身程序的复杂性,使的整体逻辑非常混乱!  

你可能感兴趣的:(工作日志4(2006.9.25--9.29))