Работаю над проектом для моего класса кодирования, но я просто очень смущен тем, как двигаться к 2048 году. Некоторые части работают, в то время как другие приводят к тому, что верхний правый блок становится очень большой строкой чисел.
Как я уже сказал, это для класса программирования C ++.Я работал над гораздо более простым проектом, таким как крестики-нолики и камни, бумага, ножницы.Все это работает как шарм.Ниже приведен код для функции, чтобы двигаться вверх.Я понял, как только я получу движение вверх, я мог бы перевести его в другие направления.Это наряду с кодом для настройки сетки и функцией для установки доски с 0 и 2.
void moveyBois(int a[4][4], char b)
{
if(b == 'w' || b == 'W') //Up, and I'm gonna be honest, I've tried this over and over again, but whenever I do a single edit to it, it just breaks on me.
{
for(int i = 0; i < 4;)
{
if(a[0][0] != 0 && a[0][1] == 0 && a[0][2] == 0 && a[0][3] == 0)
{
a[0][0] = a[0][0];
}
else if(a[0][0] == 0 && a[0][1] != 0 && a[0][2] == 0 && a[0][3] == 0)
{
a[0][0] = a[0][1];
a[0][1] = 0;
}
else if(a[0][0] == 0 && a[0][1] == 0 && a[0][2] != 0 && a[0][3] == 0)
{
a[0][0] = a[0][2];
a[0][2] = 0;
}
else if(a[0][0] == 0 && a[0][1] == 0 && a[0][2] == 0 && a[0][3] != 0)
{
a[0][0] = a[0][3];
a[0][3] = 0;
}
else if(a[0][i] == a[0][i+1])
{
if(a[0][i] == a[0][i+2] && a[0][i+1] != a[0][i+3])
{
a[0][i] = (a[0][i] + a[0][i+1]);
a[0][i+1] = a[0][i+2];
a[0][i+2] = a[0][i+3];
a[0][i+3] = 0;
}
else if(a[0][i+1] == a[0][i+2] && a[0][i+1] == a[0][i+3])
{
a[0][i] = (a[0][i] + a[0][i+1]);
a[0][i+1] = (a[0][i+1] + a[0][i+1]);
a[0][i+2] = 0;
a[0][i+3] = 0;
}
else
{
a[0][i] = (a[0][i] + a[0][i+1]);
a[0][i+1] = 0;
}
}
else if(a[0][i+1] == 0 && a[0][i] == a[0][i+2])
{
a[0][i] = (a[0][i] + a[0][i+2]);
a[0][i+2] = 0;
}
else if(a[0][i+1] == 0 && a[0][i+2] == 0 && a[0][i] == a[0][i+3])
{
a[0][i] = (a[0][i] + a[0][i+3]);
a[0][i+3] = 0;
}
if(a[1][0] != 0 && a[1][1] == 0 && a[1][2] == 0 && a[1][3] == 0)
{
a[1][0] = a[1][0];
}
else if(a[1][0] == 0 && a[1][1] != 0 && a[1][2] == 0 && a[1][3] == 0)
{
a[1][0] = a[1][1];
a[1][1] = 0;
}
else if(a[1][0] == 0 && a[1][1] == 0 && a[1][2] != 0 && a[1][3] == 0)
{
a[1][0] = a[1][2];
a[1][2] = 0;
}
else if(a[1][0] == 0 && a[1][1] == 0 && a[1][2] == 0 && a[1][3] != 0)
{
a[1][0] = a[1][3];
a[1][3] = 0;
}
else if(a[1][i] == a[1][i+1])
{
if(a[1][i] == a[1][i+2] && a[1][i+1] != a[1][i+3])
{
a[1][i] = (a[1][i] + a[1][i+1]);
a[1][i+1] = a[1][i+2];
a[1][i+2] = a[1][i+3];
a[1][i+3] = 0;
}
else if(a[1][i+1] == a[1][i+2] && a[1][i+1] == a[1][i+3])
{
a[1][i] = (a[1][i] + a[1][i+1]);
a[1][i+1] = (a[1][i+1] + a[1][i+1]);
a[1][i+2] = 0;
a[1][i+3] = 0;
}
else
{
a[1][i] = (a[1][i] + a[1][i+1]);
a[1][i+1] = 0;
}
}
else if(a[1][i+1] == 0 && a[1][i] == a[1][i+2])
{
a[1][i] = (a[1][i] + a[1][i+2]);
a[1][i+2] = 0;
}
else if(a[1][i+1] == 0 && a[1][i+2] == 0 && a[1][i] == a[1][i+3])
{
a[1][i] = (a[1][i] + a[1][i+3]);
a[1][i+3] = 0;
}
if(a[2][0] != 0 && a[2][1] == 0 && a[2][2] == 0 && a[2][3] == 0)
{
a[2][0] = a[2][0];
}
else if(a[2][0] == 0 && a[2][1] != 0 && a[2][2] == 0 && a[2][3] == 0)
{
a[2][0] = a[2][1];
a[2][1] = 0;
}
else if(a[2][0] == 0 && a[2][1] == 0 && a[2][2] != 0 && a[2][3] == 0)
{
a[2][0] = a[2][2];
a[2][2] = 0;
}
else if(a[2][0] == 0 && a[2][1] == 0 && a[2][2] == 0 && a[2][3] != 0)
{
a[2][0] = a[2][3];
a[2][3] = 0;
}
else if(a[2][i] == a[2][i+1])
{
if(a[2][i] == a[2][i+2] && a[2][i+1] != a[2][i+3])
{
a[2][i] = (a[2][i] + a[2][i+1]);
a[2][i+1] = a[2][i+2];
a[2][i+2] = a[2][i+3];
a[2][i+3] = 0;
}
else if(a[2][i+1] == a[2][i+2] && a[2][i+1] == a[2][i+3])
{
a[2][i] = (a[2][i] + a[2][i+1]);
a[2][i+1] = (a[2][i+1] + a[2][i+1]);
a[2][i+2] = 0;
a[2][i+3] = 0;
}
else
{
a[2][i] = (a[2][i] + a[2][i+1]);
a[2][i+1] = 0;
}
}
else if(a[2][i+1] == 0 && a[2][i] == a[2][i+2])
{
a[2][i] = (a[2][i] + a[2][i+2]);
a[2][i+2] = 0;
}
else if(a[2][i+1] == 0 && a[2][i+2] == 0 && a[2][i] == a[2][i+3])
{
a[2][i] = (a[2][i] + a[2][i+3]);
a[2][i+3] = 0;
}
if(a[3][0] != 0 && a[3][1] == 0 && a[3][2] == 0 && a[3][3] == 0)
{
a[3][0] = a[3][0];
}
else if(a[3][0] == 0 && a[3][1] != 0 && a[3][2] == 0 && a[3][3] == 0)
{
a[3][0] = a[3][1];
a[3][1] = 0;
}
else if(a[3][0] == 0 && a[3][1] == 0 && a[3][2] != 0 && a[3][3] == 0)
{
a[3][0] = a[3][2];
a[3][2] = 0;
}
else if(a[3][0] == 0 && a[3][1] == 0 && a[3][2] == 0 && a[3][3] != 0)
{
a[3][0] = a[3][3];
a[3][3] = 0;
}
else if(a[3][i] == a[3][i+1])
{
if(a[3][i] == a[3][i+2] && a[3][i+1] != a[3][i+3])
{
a[3][i] = (a[3][i] + a[3][i+1]);
a[3][i+1] = a[3][i+2];
a[3][i+2] = a[3][i+3];
a[3][i+3] = 0;
}
else if(a[3][i+1] == a[3][i+2] && a[3][i+1] == a[3][i+3])
{
a[3][i] = (a[3][i] + a[3][i+1]);
a[3][i+1] = (a[3][i+1] + a[3][i+1]);
a[3][i+2] = 0;
a[3][i+3] = 0;
}
else
{
a[3][i] = (a[3][i] + a[3][i+1]);
a[3][i+1] = 0;
}
}
else if(a[3][i+1] == 0 && a[3][i] == a[3][i+2])
{
a[3][i] = (a[3][i] + a[3][i+2]);
a[3][i+2] = 0;
}
else if(a[3][i+1] == 0 && a[3][i+2] == 0 && a[3][i] == a[3][i+3])
{
a[3][i] = (a[3][i] + a[3][i+3]);
a[3][i+3] = 0;
}
i++;
}
}
else if(b == 'a' || b == 'A') //Left
{
}
else if(b == 's' || b == 'S') //Down
{
}
else if(b == 'd' || b == 'D') //Right
{
}
else
{
}
}
void stupidStarters(int a[4][4])
{
for(int i = 0; i < 4;)
{
a[i][0] = 0;
i++;
}
for(int i = 0; i < 4;)
{
a[i][1] = 0;
i++;
}
for(int i = 0; i < 4;)
{
a[i][2] = 0;
i++;
}
for(int i = 0; i < 4;)
{
a[i][3] = 0;
i++;
}
void griddyBois(int a[4][4])
{
cout << "+------+------+------+------+" << endl;
cout << "| " << setw(4) << a[0][0] << " | " << setw(4) << a[1][0] << " | " << setw(4) << a[2][0] << " | " << setw(4) << a[3][0] << " |" << endl;
cout << "+------+------+------+------+";
cout << "\n| " << setw(4) << a[0][1] << " | " << setw(4) << a[1][1] << " | " << setw(4) << a[2][1] << " | " << setw(4) << a[3][1] << " |" << endl;
cout << "+------+------+------+------+";
cout << "\n| " << setw(4) << a[0][2] << " | " << setw(4) << a[1][2] << " | " << setw(4) << a[2][2] << " | " << setw(4) << a[3][2] << " |" << endl;
cout << "+------+------+------+------+";
cout << "\n| " << setw(4) << a[0][3] << " | " << setw(4) << a[1][3] << " | " << setw(4) << a[2][3] << " | " << setw(4) << a[3][3] << " |" << endl;
cout << "+------+------+------+------+" << endl;
}
Я ожидаю, что игровое поле перемещает плитки вверх, но также объединяет смежные плитки впорядок того, как они сталкиваются, учитывая направление.Это работает около 2-х ходов, затем в правом верхнем поле мне дано довольно большое число, примерно 4ста тысяч.