由于刚学完c++,就选了俄罗斯方块当练手项目,完善还算可以,因此特写博客一篇,记录开发过程遇到的问题以及心得,特此分享
虽然感觉实现的不是很完美,但会继续完善,望大佬多多指教
开发工具:vs2012(旗舰版)
绘图库函数:EasyX_20151015(beta)
缺点:
(1)运行效率低
(2)感觉比较繁琐
(3)代码量太大
(4)可以尝试用多线程
(5)j界面比较繁琐,可以试着写用MFC 写(VC++ )
(6)针对于每一种方块的变换问题,我此处的方法比较繁琐,可以搜索资料进行坐标转化进行翻转
声明:写此游戏全部是靠自己思索解决每一个问题,比如,坐标转换,洁面控制,流程控制 ,以及
对于类的继承和多态的使用,虽然比较繁琐,但是这是我思思维的结晶,后会再查些资料看看
别人是如何实现的,应该肯定有更简单的实现方式
(1)头文件
#ifndef _TETRIS_H_
#define _TETRIS_H_
#define ROW 24//行数
#define CLO 14//列数
typedef struct pos//记录点的坐标的数据结构
{
int x;
int y;
}POSITION;
class Tetris10//第一种方块的类
{
protected :
POSITION pos[4];
int flag ;
public:
virtual void InitTetris();//初始化图形坐标 并且声明为虚函数
virtual void changePos();//当接到转换图形时,使图形旋转九度 并且声明为虚函数
void move();//控制移动
void change();//改变左右和变换图形的形状
bool isGetBottom();//判断是否到达底部
void show();//显示图形
bool IsStop();//是否要停止
void changeArr();//改变整个坐标
bool IsRight();//是否能上右移动
bool IsLeft();//是否能上左移动
void showBlack();//覆盖原来的图形
POSITION getmaxPos();//得到每种图形的y坐标的最大值
};
class Tetris20:public Tetris10//第二种图形 继承第一种 下同
{
public:
virtual void InitTetris();
virtual void changePos();
};
class Tetris30:public Tetris10
{
public:
virtual void InitTetris();
virtual void changePos();
};
class Tetris40:public Tetris10
{
public:
virtual void InitTetris();
virtual void changePos();
};
class Tetris50:public Tetris10
{
public:
virtual void InitTetris();
virtual void changePos();
};
bool gameover();//判断是否游戏结束
void IsDelete();//当每一行满时,进行删除
#endif
主函数:
/*
作者:品大人
时间:2017 8 10 21:20
项目名称:俄罗斯方块
*/
#include <iostream>
#include <graphics.h>
#include <conio.h>
#include <time.h>
#include <stdl