bool _MoveUp(struct Game *data){
bool flag = false;
for (size_t _index = 4; _index < data->length; _index+=4)
{
for (size_t index = 4; index < data->length; ++index)
{
if (data->arr[index-4] == 0 && data->arr[index] !=0)
{
data->arr[index-4] = data->arr[index];
data->arr[index] = 0;
flag = true;
}
}
}
return flag;
}
bool MoveUp(struct Game *data){
// 上移操作,需要实现的逻辑有,数字的移动以及合并,是否是有效的移动
bool flag = false;
flag = _MoveUp(data);
for (size_t index = 0; index < data->length-4; ++index) {
if (data->arr[index] == data->arr[index+4] && data->arr[index] != 0)
{
data->arr[index] *= 2;
if (data->arr[index] > data->max){
data->max = data->arr[index];
}
data->arr[index+4] = 0;
flag = true;
}
}
_MoveUp(data);
return flag;
}
bool _MoveLeft(struct Game *data)
{
bool flag = false;
for (size_t _index = 4; _index < data->length; _index+=4)
{
for (size_t index = 0; index < data->length; index+=4)
{
for (size_t i = 0; i < 4 - 1; ++i)
{
if (data->arr[index + i] == 0 && data->arr[index+i+1] != 0)
{
data->arr[index+i] = data->arr[index+i+1];
data->arr[index+i+1] = 0;
flag = true;
}
}
}
}
return flag;
}
bool MoveLeft(struct Game *data)
{
bool flag = false;
flag = _MoveLeft(data);
for (size_t index = 0; index < data->length; index+=4)
{
for (size_t i = 0; i < 4 - 1; ++i)
{
if (data->arr[index + i] == data->arr[index + i + 1] && data->arr[index + i] != 0)
{
data->arr[index+i] *= 2;
if (data->arr[index+i] > data->max){
data->max = data->arr[index+i];
}
data->arr[index+i+1] = 0;
flag = true;
}
}
}
_MoveLeft(data);
return flag;
}
bool _MoveRight(struct Game *data)
{
bool flag = false;
for (size_t _index = 4; _index < data->length; _index+=4)
{
for (size_t index = 3; index < data->length; index+=4) // 3 7 11 15
{
for (size_t i = 0; i < 4 - 1; ++i)
{
if (data->arr[index - i] == 0 && data->arr[index-i-1] != 0)
{
data->arr[index - i] = data->arr[index-i-1];
data->arr[index- i -1] = 0;
flag = true;
}
}
}
}
return flag;
}
bool MoveRight(struct Game *data)
{
bool flag = false;
flag = _MoveRight(data);
for (size_t index = 3; index < data->length; index+=4) // 3 7 11 15
{
for (size_t i = 0; i < 4 - 1; ++i)
{
if (data->arr[index - i] == data->arr[index- i -1] && data->arr[index- i -1] != 0) // 0 1 2
{
data->arr[index - i] *= 2;
if (data->arr[index-i] > data->max){
data->max = data->arr[index-i];
}
data->arr[index- i -1] = 0;
flag = true;
}
}
}
_MoveRight(data);
return flag;
}
bool _MoveDown(struct Game *data)
{
bool flag = false;
for (size_t _index = 4; _index < data->length; _index+=4)
{
for (size_t index = data->length - 1; index >= 4; --index)
{
if (data->arr[index] == 0 && data->arr[index-4] !=0)
{
data->arr[index] = data->arr[index-4];
data->arr[index-4] = 0;
flag = true;
}
}
}
return flag;
}
bool MoveDown(struct Game *data)
{
bool flag = false;
flag = _MoveDown(data);
for (size_t index = data->length - 1; index >= 4; --index)
{
if (data->arr[index] == data->arr[index-4] && data->arr[index-4] !=0)
{
data->arr[index] *=2 ;
if (data->arr[index] > data->max){
data->max = data->arr[index];
}
data->arr[index-4] = 0;
flag = true;
}
}
_MoveDown(data);
return flag;
}