-
小方块的定义
-
主要是小方块的创造
-
小方块的旋转
-
获取小方块的数据
-
下一个小方块
我这里运用的都是一些简单的方式写的,主要是思路,大家理解就好
#pragma once
#define BLOCK_COL 4
#define BLOCK_ROW 4
#define BLOCK_SHAPE_COUNT 4
typedef unsigned char (*BLOCKDATE)[BLOCK_COL];
class CBlock
{
public:
CBlock();
CBlock(const CBlock& Block);
~CBlock();
CBlock& operator=(const CBlock& Block);
void RandCreateBlock();
void RotateBlock();
void SetType(size_t nType);
void SetShape(size_t nShape);
size_t GetType(size_t nType);
size_t GetShape(size_t nShape);
const BLOCKDATE GetCurrentBlock()const;
const BLOCKDATE GetNextBlock()const;
private:
unsigned char m_aryBlock[BLOCK_ROW][BLOCK_COL] = {};
size_t m_nCurrentType = 0;
size_t m_nCurrentShape = 0;
unsigned char m_aryNextBlock[BLOCK_ROW][BLOCK_COL] = {};
size_t m_nNextType = 0;
size_t m_nNextShape = 0;
};
#include "CBlock.h"
#include <memory.h>
#include <time.h>
#include <stdlib.h>
static char g_uchBlocks[][4] = {
1, 1, 0, 0,
1, 1, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
1, 1, 0, 0,
1, 1, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
1, 1, 0, 0,
1, 1, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
1, 1, 0, 0,
1, 1, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
1, 1, 1, 1,
0, 0, 0, 0,
0, 0, 0, 0,
0, 1, 0, 0,
0, 1, 0, 0,
0, 1, 0, 0,
0, 1, 0, 0,
0, 0, 0, 0,
1, 1, 1, 1,
0, 0, 0, 0,
0, 0, 0, 0,
0, 1, 0, 0,
0, 1, 0, 0,
0, 1, 0, 0,
0, 1, 0, 0,
0, 1, 0, 0,
1, 1, 1, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 1, 0, 0,
0, 1, 1, 0,
0, 1, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
1, 1, 1, 0,
0, 1, 0, 0,
0, 0, 0, 0,
0, 1, 0, 0,
1, 1, 0, 0,
0, 1, 0, 0,
0, 0, 0, 0,
1, 1, 0, 0,
0, 1, 1, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 1, 0,
0, 1, 1, 0,
0, 1, 0, 0,
0, 0, 0, 0,
1, 1, 0, 0,
0, 1, 1, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 1, 0,
0, 1, 1, 0,
0, 1, 0, 0,
0, 0, 0, 0,
0, 1, 1, 0,
1, 1, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 1, 0, 0,
0, 1, 1, 0,
0, 0, 1, 0,
0, 0, 0, 0,
0, 1, 1, 0,
1, 1, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 1, 0, 0,
0, 1, 1, 0,
0, 0, 1, 0,
0, 0, 0, 0,
1, 0, 0, 0,
1, 1, 1, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 1, 1, 0,
0, 1, 0, 0,
0, 1, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
1, 1, 1, 0,
0, 0, 1, 0,
0, 0, 0, 0,
0, 1, 0, 0,
0, 1, 0, 0,
1, 1, 0, 0,
0, 0, 0, 0,
0, 0, 1, 0,
1, 1, 1, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 1, 0, 0,
0, 1, 0, 0,
0, 1, 1, 0,
0, 0, 0, 0,
0, 0, 0, 0,
1, 1, 1, 0,
1, 0, 0, 0,
0, 0, 0, 0,
1, 1, 0, 0,
0, 1, 0, 0,
0, 1, 0, 0,
0, 0, 0, 0,
};
CBlock::CBlock()
{
RandCreateBlock();
RandCreateBlock();
}
CBlock::CBlock(const CBlock& Block)
{
*this = Block;
}
CBlock::~CBlock()
{
}
CBlock& CBlock::operator=(const CBlock& Block)
{
m_nCurrentType = Block.m_nCurrentType;
m_nCurrentShape = Block.m_nCurrentShape;
memcpy(m_aryBlock, Block.m_aryBlock, sizeof(m_aryBlock));
m_nNextType = Block.m_nNextType;
m_nNextShape = Block.m_nNextShape;
memcpy(m_aryNextBlock, Block.m_aryNextBlock, sizeof(m_aryNextBlock));
return *this;
}
void CBlock::RandCreateBlock()
{
m_nCurrentType = m_nNextType;
m_nCurrentShape = m_nNextShape;
memcpy(m_aryBlock,m_aryNextBlock , sizeof(m_aryBlock));
m_nNextType = rand() % (sizeof(g_uchBlocks) / (BLOCK_COL * BLOCK_ROW * BLOCK_SHAPE_COUNT));
m_nNextShape = rand() % BLOCK_SHAPE_COUNT;
memcpy(m_aryNextBlock, g_uchBlocks + m_nNextType * (BLOCK_COL * BLOCK_ROW * BLOCK_SHAPE_COUNT) + m_nNextShape * (BLOCK_COL * BLOCK_ROW ), sizeof(m_aryNextBlock));
}
void CBlock::RotateBlock()
{
m_nCurrentShape = (m_nCurrentShape + 1) % 4;
memcpy(m_aryBlock, g_uchBlocks + m_nCurrentType * (BLOCK_COL * BLOCK_ROW * BLOCK_SHAPE_COUNT) + m_nCurrentShape * (BLOCK_COL * BLOCK_ROW), sizeof(m_aryBlock));
}
void CBlock::SetType(size_t nType)
{
m_nCurrentType = nType;
memcpy(m_aryBlock, g_uchBlocks + m_nCurrentType * (BLOCK_COL * BLOCK_ROW * BLOCK_SHAPE_COUNT) + m_nCurrentShape * (BLOCK_COL * BLOCK_ROW), sizeof(m_aryBlock));
}
void CBlock::SetShape(size_t nShape)
{
m_nCurrentShape = nShape;
memcpy(m_aryBlock, g_uchBlocks + m_nCurrentType * (BLOCK_COL * BLOCK_ROW * BLOCK_SHAPE_COUNT) + m_nCurrentShape * (BLOCK_COL * BLOCK_ROW), sizeof(m_aryBlock));
}
size_t CBlock::GetType(size_t nType)
{
return m_nCurrentType;
}
size_t CBlock::GetShape(size_t nShape)
{
return m_nCurrentShape;
}
const BLOCKDATE CBlock::GetCurrentBlock() const
{
return BLOCKDATE(m_aryBlock);
}
const BLOCKDATE CBlock::GetNextBlock() const
{
return BLOCKDATE(m_aryNextBlock);
}