俄罗斯方块C++实现(基于QT)(2)– 方块基类代码

  • 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)

百分购

发表评论

您必须才能发表评论!