乱稿:PNGのデータ構造と伝統的なデータ構造
落書きしたもの:
しかし、PNGというフォーマットを組み合わせると、ゲームの中で何かをすることができます。たとえばフィールドを拡張する時、古い案は2-3点を修正しなければなりません。点を修正すれば十分です。
変更された2~3点には、データベースフィールド、SQL文、変数の読み込みが含まれます。中間部品があれば、もっと多く変化します。
いくつかの小さなテクニックを使って、これらの修正点を一つの関数に集中できます。だからPNGには大きな啓発があります。
// HellowTest2008.cpp : 。
//
#include "stdafx.h"
#include "CLock.h"
/*
V1 ,V2
nVersion 0, nVersion 1
*/
struct Role1
{
int V1n1;
int V2n1;
};
struct Role2
{
int V2n1;
int V1n1;
};
class CRole
{
public:
private:
public:
int V1n1;
Role1 V1Role1;
Role2 V1Role2;
int V2n1;
int V2n2;
int V2n3;
private:
};
struct ChunkHead
{
int nLen;
};
struct Chunk
{
int nLen;
int ChunkType;
char Buffer;
int CRC;
};
/*
CSave
*/
class CSave
{
public:
CSave();
void V1Read(CRole *pRole);
void V1Write(CRole *pRole);
void V2Read(CRole *pRole);
private:
public:
/*
V1
*/
int nVersion;
char Buffer[1024];
/*
V2
*/
char V2Buffer[1024]; // ChunkHead|Chunk|Chunk|Chunk
private:
};
CSave::CSave()
{
nVersion = 0;
}
void CSave::V1Read(CRole *pRole)
{
/*
BufferXXX ,
*/
if(0==nVersion)
{
pRole->V1n1 = BufferXXX;
/*
, .
*/
pRole->V1Role1.V1n1 = BufferXXX;
pRole->V1Role1.V1n1 = BufferXXX;
}
/*
, 。
,
1. ( )
2. ,
3.
, , , ,
0==nVersion , 。 , 。
( ), ( ),
, 。
, , 。 。 ,
read,write 。 . , 。
。
*/
if(1==nVersion)
{
// 0==nVersion
pRole->V1Role1.V2n1 = BufferXXX;
pRole->V2n1 = BufferXXX;
//......
}
if( 2==nVersion )
{
// 1==nVersion 。。
//......
}
/*
。 ,
, 。 ,BufferXXX ,
。 。 ,
, 。 , ,
, 。 , d1,d2,d3...dn,
。 , ,
。
, , Role 。
, 。
*/
}
void CSave::V2Read(CRole *pRole)
{
/*
Chunk , 、 ,
HandleChunkType() 。
*/
int nHasLen = 0;
while(ChunkHead.nLen>nHasLen)
{
switch(Chunk.ChunkType)
{
HandleChunkType();
}
nHasLen += Chunk.nLen;
}
}
void CSave::V1Write(CRole *pRole)
{
/*
, 、 。
*/
}
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
しかし、PNGというフォーマットを組み合わせると、ゲームの中で何かをすることができます。たとえばフィールドを拡張する時、古い案は2-3点を修正しなければなりません。点を修正すれば十分です。
変更された2~3点には、データベースフィールド、SQL文、変数の読み込みが含まれます。中間部品があれば、もっと多く変化します。
いくつかの小さなテクニックを使って、これらの修正点を一つの関数に集中できます。だからPNGには大きな啓発があります。