一个小游戏内置外挂
/**
* by:gonzhihui
* 2017.11.30
*
* 一个小游戏 10*10矩阵 相邻两个或多个消成0
* (内置外挂)一键秒杀 :input x: 100
*
* 主要数据结构:
* typedef std::vector<std::pair<int, int> > VectorPair;
* vector中存放一次输入后的check后的下标。
*
* 编译 直接 g++ -o 可执行文件名 源文件名.cpp
*
*/
#include <stdlib.h> //srand() rand()
#include <iostream> //make_pair
#include <cstring>
#include <time.h> //time(0)
#include <vector>
using std::make_pair;
typedef std::vector<std::pair<int, int> > VectorPair;
VectorPair vp;
static int c[10][10];
//输出矩阵
void show();
//初始化矩阵
void initMatrix();
//核心算法
bool check(int i, int j);
bool checkTop(int i, int j);
bool checkBottom(int i, int j);
bool checkLeft(int i, int j);
bool checkRight(int i, int j);
//将vector中下标处的数组值清零。
bool change0(int i, int j, VectorPair &vp);
//一键秒杀(内置外挂)
void secKill(VectorPair &vp);
void show()
{
std::cout<< " 0 1 2 3 4 5 6 7 8 9" <<std::endl;
std::cout<< ""<<std::endl;
for(int i = 0;i < 10;i++)
{
printf("%d %d %d %d %d %d %d %d %d %d %d\n", i,
c[i][0], c[i][1], c[i][2], c[i][3], c[i][4], c[i][5],
c[i][6], c[i][7], c[i][8], c[i][9]);
}
}
bool checkTop(int i, int j)
{
if(i-1 >= 0 && c[i-1][j] == c[i][j])
{
auto pr = make_pair(i-1, j);
vp.push_back(pr);
return true;
}
return false;
}
bool checkBottom(int i, int j)
{
if(i+1 <= 9 && c[i+1][j] == c[i][j])
{
auto pr = make_pair(i+1, j);
vp.push_back(pr);
return true;
}
return false;
}
bool checkLeft(int i, int j)
{
//左
if(j-1 >= 0 && c[i][j-1] == c[i][j])
{
auto pr = make_pair(i, j-1);
vp.push_back(pr);
return true;
}
return false;
}
bool checkRight(int i, int j)
{
//右
if(j+1 <= 9 && c[i][j+1] == c[i][j])
{
auto pr = make_pair(i, j+1);
vp.push_back(pr);
return true;
}
return false;
}
bool check(int i, int j)
{
bool ret = false;
//这么多变量 是为了防止每个while互相影响
//当然有其他写法 就是在每个while里创建临时
//变量,代码同样没有减少多少,暂时想到这么多
int i1,i2,i3,i4,j1,j2,j3,j4;
i1 = i2 = i3 = i4 = i;
j1 = j2 = j3 = j4 = j;
while(checkTop(i1, j1))
{
i1--;
ret = true;
}
while(checkBottom(i2, j2))
{
i2++;
ret = true;
}
while(checkLeft(i3, j3))
{
j3--;
ret = true;
}
while(checkRight(i4, j4))
{
j4++;
ret = true;
}
return ret;
}
void initMatrix()
{
memset(c, 0, sizeof(int) * 10 * 10);
srand(time(0));
for(int i = 0;i < 10;i++)
{
for(int j = 0;j < 10;j++)
{
int num = rand() % 5 + 1;
c[i][j] = num;
}
}
}
bool change0(int i, int j, VectorPair &vp)
{
if(vp.size() ==0)
return false;
c[i][j] = 0;
for(auto i : vp)
{
c[i.first][i.second] = 0;
}
//清除vp
VectorPair().swap(vp);
return true;
}
void secKill(VectorPair &vp)
{
for(int i = 0;i<10;i++)
{
for(int j = 0;j<10;j++)
{
check(i, j);
change0(i, j, vp);
}
}
show();
std::cout<< "秒杀成功(^_^)" <<std::endl;
}
int main()
{
initMatrix();
show();
while(true)
{
int i, j;
std::cout<<"input x:";
std::cin>>i;
if(i == -1) break;
if(i == 100)
{
secKill(vp);
break;
}
std::cout<<"input y:";
std::cin>>j;
if(j == -1) break;
if(j == 100)
{
secKill(vp);
break;
}
check(i, j);
change0(i, j, vp);
show();
}
return 0;
}