//业余爱好,学过C语言,自学C++,自己琢磨尝试编小程序
//太多不懂的,工作之余,练习
//初学C++ 语言,学习创建一个方块类Square
//方块类成员函数Show()显示,Spin()旋转
//成员属性二维数组
//琢磨好久终于把方块类Square的旋转函数Spin()调试好,可以连续旋转变换了。
#include <iostream>
#include<Windows.h>
#include<conio.h>
using namespace std;
#define MAX 4
//全局变量存放旋转后的临时方块,可以连续旋转操作
int temp[MAX][MAX] = { 0 };
int a1[MAX][MAX] = { {0,1,0,0 },
{0,1,1,0 },
{0,1,0,0 },
{0,0,0,0 }
};
int a2[MAX][MAX] = { {0,1,0,0 },
{0,1,0,0 },
{0,1,0,0 },
{0,1,0,0 }
};
int a3[MAX][MAX] = { {0,0,0,0 },
{0,1,1,0 },
{0,1,1,0 },
{0,0,0,0 }
};
int a4[MAX][MAX] = { {0,1,0,0 },
{0,1,1,1 },
{0,0,0,0 },
{0,0,0,0 }
};
int a5[MAX][MAX] = { {0,1,1,1 },
{0,1,0,0 },
{0,0,0,0 },
{0,0,0,0 }
};
int a6[MAX][MAX] = { {0,1,0,0 },
{0,1,1,0 },
{0,0,1,0 },
{0,0,0,0 }
};
int a7[MAX][MAX] = { {0,0,1,0 },
{0,1,1,0 },
{0,1,0,0 },
{0,0,0,0 }
};
//方块类定义
class Square
{
public:
Square(int *); //构造函数
void Show(); //显示方块
int* Spin(); //旋转方块
private:
int squ[MAX][MAX] = {0}; //成员属性:二维数组
};
//构造函数 带指针的参数
Square::Square(int* a)
{ //成员属性初始化
for (int i = 0; i < MAX ; i++)
for (int j = 0; j < MAX ; j++)
squ[i][j] = *a++;
}
//显示方块函数
void Square:: Show()
{
int* h = &squ[0][0];
for (int i =0; i < MAX * MAX;h++, i++)
{
if ( *h== 1) cout << "█"; //绘制图案
else cout << " "; //" ";
if ((i + 1) % MAX == 0) cout << endl;
}
cout << endl;
}
//旋转方块函数定义
int* Square:: Spin()
{
for (int i = 0; i < MAX; i++) //顺时针旋转90度
for (int j = 0; j < MAX; j++)
temp[j][MAX - 1 - i] = squ[i][j];
for (int i = 0; i < MAX; i++)
for (int j = 0; j < MAX; j++)
squ[i][j] = temp[i][j];
return &temp[0][0];
}
int* get_squ(char c) //获取方块函数
{
int* a=NULL ;
switch (c)
{
case '1':
a = &a1[0][0]; break;
case '2':
a = &a2[0][0]; break;
case '3':
a = &a3[0][0]; break;
case '4':
a = &a4[0][0]; break;
case '5':
a = &a5[0][0]; break;
case '6':
a = &a6[0][0]; break;
case '7':
a = &a7[0][0]; break;
}
return a;
}
int main()
{
char k= '1';
int* p_sq = get_squ(k);
int* G_sq = get_squ(k);
while (TRUE)
{
if ((k == 'q') || (k == 'Q')) exit(0);//按Q键退出
else
if ((k == 't') || (k == 'T')) //判断按键是否是T按键
{
Square sq(p_sq);//创建要旋转的方块
cout << " 上图顺时针旋转90°:" << endl << endl;
p_sq = sq.Spin(); //旋转方阵
sq.Show();
}
else
if ((k >= '1') && (k <= '7'))
{
cout << " 获得 " << k << " 号图形:" << endl<< endl;
G_sq = p_sq = get_squ(k);//获取一种方阵图形
Square sq(G_sq);
sq.Show();
}
else cout << " @@@@ error! 错误,请重新输入!" << endl << endl;
cout << " 按1-7选择图形,按T旋转图形,按Q退出 " << endl;
cout << "*********************************************" << endl;
k = _getch();
}
return 0;
}