Разработка приложения: футбольный симулятор

Автор работы: Пользователь скрыл имя, 18 Ноября 2013 в 21:14, дипломная работа

Краткое описание

Темой своей работы я выбрал реализацию футбольного симулятора, так как люблю этот вид спорта, а так же считаю его наиболее популярным. В мои задачи входит:
Создать интерфейс, реализующий передвижения игроков
Написать логическую структуру игры (движение игроков, пас, удар)
Реализовать атаку и защиту команд
Для реализации проекта я выбрал язык С++ и кроссплатформенную среду разработки Qt5.0.2

Содержание

ВВЕДЕНИЕ 7
1. ПРЕДВАРИТЕЛЬНЫЙ АНАЛИЗ 4
2. ОСНОВНЫЕ ПРОЕКТНЫЕ РЕШЕНИЯ 6
2.1. Постановка задачи 6
2.2. Требования к программе 6
2.2.1. Требования к функциональным характеристикам 6
2.2.2. Требования к надежности 6
2.2.3. Требования к составу технических средств 7
2.2.4. Требования к программной совместимости 7
2.3. Обоснование выбора среды разработки 7
2.4. Организация входных и выходных данных 8
2.4.1. Выходные данные 8
2.5. Разработка пользовательского интерфейса 8
2.6. Словесное описание алгоритма 9
2.6.1. Описание логики игры 9
2.6.2. Описание структуры классов 11
2.7. Тестирование 11
2.8. Руководство пользователя 14
2.8.1. Общие сведения о программном продукте 14
2.8.2. Описание запуска 15
2.8.3. Инструкция по работе 15
3. ОРГАНИЗАЦИОННЫЙ РАЗДЕЛ 16
3.1. Требования к рабочему месту 16
3.2. Зрительная гимнастика 17
3.3. Требования пожаробезопасности при работе на вычислительной технике 17
ЗАКЛЮЧЕНИЕ 18
Список используемой литературы 19

Прикрепленные файлы: 1 файл

ДипломПЗ.doc

— 969.50 Кб (Скачать документ)

    }

    else

    {

        plNotBallBlue(blue->getPlayer1());

        plBallBlue(blue->getPlayer2());

    }

    def(red->getPlayer1(), blue->getPlayer1());

    def(red->getPlayer2(), blue->getPlayer2());

}

void Game::runRed(Player * player)

{

    if (player->getX() >= red->getBorder()) // граница атаки больше единицы

    {

        player->setX(player->getX()-1); // игрок движется в сторону ворот

        int num = qrand() % 3;

        if (num == 1) // если  единица

            player->setY(player->getY()+1); // сместиться по  у вниз

        else if (num == 2) // если  двойка

            player->setY(player->getY()-1); // сместиться по  у вверх

        borderOffset(player);

    }

}

void Game::runBlue(Player * player)

{

    if(player->getX() <= blue->getBorder()) // граница атаки больше единицы

    {

        player->setX(player->getX()+1); // игрок движется в сторону ворот

        int num = qrand() % 3;

        if(num == 1) // если  единица

            player->setY(player->getY()+1); // сместиться по у вниз

        if(num == 2) // если  двойка

            player->setY(player->getY()-1); // сместиться по  у вверх

        borderOffset(player);

    }

}

void Game::plBallRed(Player * player)

{

    if(player->getLineBottom() == 0 && player->getLineTop() == 0) // если нет выхода за границу по у

    {

            // если игрок находится рядом  с защитником

        if(red->obl(player, blue->getPlayer1()) == 1)

            {

               int num = qrand() % 4; // создается случайное число

               switch(num)

               {

               case 0: player->setY(player->getY()+1); // сместиться  по у вверх

                   borderOffset(player);

                   break;

               case 1: player->setY(player->getY()-1); // сместиться по у вниз

                   borderOffset(player);

                   break;

               case 2: pas(red->getPlayer1(), red->getPlayer2());

                   break;

               }

        }

        else

            runRed(player);

        ball->coord(player); // присвоить мячу координаты игрока

        if(player->getX() <= red->getBorder()+5) // если игрок входит в зону для удара

        {

            if (((player->getY() > blue->getBorder()/4+5) && (player->getY() < blue->getBorder()/2))

                    || ((player->getY() < blue->getBorder()/4-5) && (player->getY() > 0))) // если игрок в области                                                                                 // для удара

                pas(red->getPlayer1(), red->getPlayer2());

            else

                striceRed(blue->getGoalkeeper());

        }

    }

    else // если граница по  у пересечена

        lineOffset(player);

 

}

void Game::play()

{

    if(blue->whouBall % 2 == 0) // какая команда с мячом

    {

        ball->nullPas();

        redAt();

    }

    else

    {

        ball->nullPas();

        blueAt();

    }

}

void Game::plNotBallBlue(Player * player)

{

    if(player->getLineBottom() == 0 && player->getLineTop() == 0)

    {

        if(blue->obl(player, red->getPlayer2()) == 1 || blue->obl(player, red->getPlayer1()) == 1) // если  в области видимости противник

        {

            int num = qrand() % 3;

            switch(num)

            {

            case 0:

                player->setY(player->getY()+1); // сместиться по у вниз

                borderOffset(player);

                break;

            case 1:

                player->setY(player->getY()-1); // сместиться по  у вверх

                borderOffset(player);

            case 2:

                player->setX(player->getX()-1); // сместиться по х назад

            }

        }

        else

            runBlue(player);

    }

    else

        lineOffset(player);

}

void Game::plNotBallRed(Player * player)

{

    if(player->getLineBottom() == 0 && player->getLineTop() == 0)

    {

        if(red->obl(player, blue->getPlayer2()) == 1 || red->obl(player, blue->getPlayer1()) == 1) // если  в области видимости  противник

        {

            int num = qrand() % 3;

            switch(num)

            {

            case 0:

                player->setY(player->getY()+1); // сместиться по  у вниз

                borderOffset(player);

                break;

            case 1:

                player->setY(player->getY()-1); // сместиться по  у вверх

                borderOffset(player);

            case 2:

                player->setX(player->getX()+1); // сместиться по  х назад

            }

        }

        else

            runRed(player);

    }

    else

        lineOffset(player);

 

}

void Game::plBallBlue(Player * player)

{

    if(player->getLineTop() == 0 && player->getLineBottom() == 0)

    {

            // если игрок находится рядом  с защитником

        if(blue->obl(player, red->getPlayer1()) == 1)

            {

               int num = qrand() % 4;

               switch(num)

               {

               case 0: player->setY(player->getY()+1); // сместиться  по у вверх

                   borderOffset(player);

                   break;

               case 1: player->setY(player->getY()-1); // сместиться  по у вниз

                   borderOffset(player);

                   break;

               case 2: pas(blue->getPlayer1(), blue->getPlayer2());

                   break;

               }

            }

        else

            runBlue(player);

        ball->coord(player); // перезаписать координаты мяча

        if(player->getX() >= blue->getBorder()-5) // если  игрок в зоне  для удара

        {

            if (((player->getY() > blue->getBorder()/4+5) && (player->getY() < blue->getBorder()/2))

                    || ((player->getY() < blue->getBorder()/4-5) && (player->getY() > 0)))

                pas(blue->getPlayer1(), blue->getPlayer2());

            else

            striceBlue(red->getGoalkeeper());

        }

    }

    else

        lineOffset(player);

}

 

void Game::goolRed () // устанавливает игроков в позицию после забитого мяча

{

    ball->setStart(0);

    red->whouBall++;

    red->getPlayer1()->setX(30);

    red->getPlayer1()->setY(12);

    red->getPlayer2()->setX(30);

    red->getPlayer2()->setY(8);

    ball->coord(red->getPlayer1());

    blue->getPlayer1()->setX(20);

    blue->getPlayer1()->setY(12);

    blue->getPlayer2()->setX(20);

    blue->getPlayer2()->setY(8);

}

void Game::goolBlue ()

{

    ball->setStart(0);

    blue->whouBall++;

    red->getPlayer1()->setX(20);

    red->getPlayer1()->setY(12);

    red->getPlayer2()->setX(20);

    red->getPlayer2()->setY(8);

    blue->getPlayer1()->setX(10);

    blue->getPlayer1()->setY(12);

    blue->getPlayer2()->setX(10);

    blue->getPlayer2()->setY(8);

    ball->coord(blue->getPlayer1());

}

 

void Game::def(Player * plBlue, Player * plRed)

{

    if(blue->obl(plBlue, plRed) == 0) // если нет противника в зоне видимости

    {

        if (plBlue->getX() < plRed->getX())

            plBlue->setX(plBlue->getX()+1);

        if (plBlue->getY() > plRed->getY())

            plBlue->setY(plBlue->getY()-1);

        if (plBlue->getX() > plRed->getX())

            plBlue->setX(plBlue->getX()-1);

        if (plBlue->getY() < plRed->getY())

            plBlue->setY(plBlue->getY()+1);

    }

    else // если противник рядом

    {

        int num = qrand() % 2; // смещение по у вверх или низ

        switch(num)

        {

        case 0: plBlue->setY(plBlue->getY()+1);

            break;

        case 1: plBlue->setY(plBlue->getY()-1);

            break;

        }

        num = qrand() % 2;

        switch(num)

        {

        case 0: plBlue->setX(plBlue->getX()+1);

            break;

        case 1: plBlue->setX(plBlue->getX()-1);

            break;

        }

    }

    if (plBlue->getX() == plRed->getX() && // если координаты игрока равны координатам противника то он отбирает мяч

            plBlue->getY() == plRed->getY())

    {

        ball->coord(plBlue);

        blue->whouBall++;

    }

}

         

 

ДП.230105.809.2013.ПЗ

Лист

         

------

Изм

Лист

№ докум.

Подп.

Дата

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

         

 

КП.2203.897.2000.ПЗ

 Лист

         

--------

Изм

 Лист

 № докум.

 Подп.

 Дата

 


Информация о работе Разработка приложения: футбольный симулятор