C++实战--QT实现俄罗斯方块

C++实战–QT实现俄罗斯方块

  • 效果
    在这里插入图片描述
  • 源码
    teris
  • mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QKeyEvent>

#include "tetris.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    Tetris* tetris;
    void keyPressEvent(QKeyEvent* event)override;
private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

  • tetris.h
#ifndef TETRIS_H
#define TETRIS_H

#include <QObject>
#include <QWidget>
#include <QVector>
#include <QQueue>
#include <QTimer>
#include "item.h"
#include "iteml.h"
class Tetris : public QWidget
{
    Q_OBJECT

public:
    friend class Item;
    explicit Tetris(QWidget *parent = nullptr);
    int row;
    int col;
    int d;
    int time;
    int score;
    int maxScore;

    QVector<QVector<int>> board;
    QVector<QVector<int>> _board;
    QVector<QVector<int>> tmp_board;
    QQueue<Item> items;
    QPainter* painter;
    QTimer* timer;
    Item item;
    void drawWall();
    void paintEvent(QPaintEvent *) override;
    void keyPressEvent(QKeyEvent *event) override;
    void drawBoard();
    void draw_Board();
    void updateBoard();
    void update_Board();
    void undo_Board();
    void clear();
    void clearOne(int _row);
    bool canMoveDown();
    bool canMoveLeft();
    bool canMoveRight();
    bool canTurn();
    bool canClear(int _row);
    bool gameOver();
    void addRandItem();
    void newGame();

public slots:
    void autoMove();

signals:

};

#endif // TETRIS_H

  • item.h
#ifndef ITEM_H
#define ITEM_H
#include <QVector>


class Item
{
public:
    Item(int row,int col);
    Item();
    QVector<QVector<int>>itemBoard;
    virtual void innitialize();
    void turn();
    void unturn();
    int itemRow;
    int itemCol;
    int row;
    int col;
};

#endif // ITEM_H

  • iteml.h
#ifndef ITEML_H
#define ITEML_H

#include "item.h"

class Iteml : public Item
{
public:
    Iteml(int row,int w);
    Iteml();
    void innitialize()override;
};

#endif // ITEML_H

主要有Tetris类,Item类,Iteml类(继承自Item),还有其它派生的多种形状的方块类。
在painter绘图中,已经落地的和在移动中的方块分别存储。
主要的麻烦的地方是判断,判断是否可以移动,是否可以旋转。
整个图抽象为二维数组,处理上还是比较清晰。

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值