- A+
所属分类:C++
俄罗斯方块C++实现(基于QT)(2)-- 方块基类代码
方块基类的代码实现(tetris.h, tetris.cpp)
基类提供left()左移,right()右移,down()下移,rotate()旋转方法,计算当前方块进行相应操作后的方块位置临时信息。
以及提供将临时位置信息设置给当前位置的方法tmpToCurposi()。
tetris.h代码:
// tetris.h
#ifndef TETRIS_H
#define TETRIS_H
class Position
{
public:
int x, y;
};
class Tetris
{
public:
Tetris();
Tetris(int const &, int const &, int const &);
void tmpToCurposi(); // 将临时方块置为当前方块
virtual void left(); // 左移
virtual void right(); // 右移
virtual void down(); // 下移
virtual void rotate(); // 旋转
protected:
Position CurPosi[4]; // 保存当前方块的坐标
Position TmpPosi[4]; // 保存方块移动和旋转时的临时坐标
int style; // 保存当前方块的类型
int bwide; // 存储池宽度
int bhigh; // 存储池高度
public:
friend class Player;
};
#endif // TETRIS_H
tetris.cpp代码:
// tetris.cpp
#include "tetris.h"
Tetris::Tetris()
{
}
Tetris::Tetris(int const &sty, int const &w, int const &h) :
style(sty), bwide(w), bhigh(h)
{
}
void Tetris::left()
{
for (int i = 0; i != 4; ++i)
{
TmpPosi[i] = CurPosi[i];
--TmpPosi[i].x; // 向左移动1
}
}
void Tetris::right()
{
for (int i = 0; i != 4; ++i)
{
TmpPosi[i] = CurPosi[i];
++TmpPosi[i].x; // 向右移动1
}
}
void Tetris::down()
{
for (int i = 0; i != 4; ++i)
{
TmpPosi[i] = CurPosi[i];
++TmpPosi[i].y; // 下落1
}
}
void Tetris::rotate()
{
for (int i = 0; i != 4; ++i)
{
//以下是利用数学公式计算出绕原点转后的坐标,此处原点即i=0的点
TmpPosi[i].x = CurPosi[0].x + CurPosi[0].y - CurPosi[i].y;
TmpPosi[i].y = CurPosi[0].y + CurPosi[i].x - CurPosi[0].x;
}
}
void Tetris::tmpToCurposi() // 将临时方块置为当前方块
{
for (int i = 0; i != 4; ++i)
{
CurPosi[i] = TmpPosi[i];
}
}
查看下一篇文章俄罗斯方块C++实现(基于QT)(3)。
查看上一篇文章俄罗斯方块C++实现(基于QT)(1)。