Беда с функцией движения на 2048 - PullRequest
0 голосов
/ 24 мая 2019

Работаю над проектом для моего класса кодирования, но я просто очень смущен тем, как двигаться к 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ста тысяч.

...