コード例 #1
0
ファイル: my_scene.cpp プロジェクト: LitvinovaE/4sem
void StepComp()
{
    int x = 0, y = 0;

    if((igra->last_hit_x != -1) && (igra->last_hit_y != -1))
        ChooseWay();
    else
    {
        if(igra->difficultly_level == HARD)
        {
            x = qrand() % SIZE_FIELD_SQUARE;
            y = 4 - ((x + 1) % 4) + (qrand() % 3) * 4;                  //smart rand
            if(y > 9)
                y %= 4;

            int k = 0;
            while((MyField[y][x] == MISS) || (MyField[y][x] == HIT))
            {
                if (k < 500)
                {
                    x = qrand() % SIZE_FIELD_SQUARE;
                    y = 4 - ((x + 1) % 4) + (qrand() % 3) * 4;
                    if(y > 9)
                        y %= 4;
                    k++;
                }
                else
                {
                    igra->difficultly_level = MEDIUM;
                    break;
                }
            }
        }
        if(igra->difficultly_level == MEDIUM)
        {
            x = qrand() % SIZE_FIELD_SQUARE;
            y = 4 - ((x + 3) % 4) + (qrand() % 3) * 4;                  //smart rand
            if(y > 9)
                y %= 4;

            int k = 0;
            while((MyField[y][x] == MISS) || (MyField[y][x] == HIT))
            {
                if(k < 500)
                {
                    x = qrand() % SIZE_FIELD_SQUARE;
                    y = 4 - ((x + 3) % 4) + (qrand() % 3) * 4;
                    if(y > 9)
                        y %= 4;
                    k++;
                }
                else
                {
                    igra->difficultly_level = EASY;
                    break;
                }
            }
        }
        if(igra->difficultly_level == EASY)
        {
            x = qrand() % SIZE_FIELD_SQUARE;
            y = qrand() % SIZE_FIELD_SQUARE;
            int k = 0;
            while(((MyField[y][x] == MISS) || (MyField[y][x] == HIT)) && (k < 500))
            {
                x = qrand() % SIZE_FIELD_SQUARE;
                y = qrand() % SIZE_FIELD_SQUARE;
                k++;
            }
            if(k == 500)
            {
                for(int i(0); i < SIZE_FIELD_SQUARE; i++)
                    for(int j(0); j < SIZE_FIELD_SQUARE; j++)
                    {
                        if((MyField[i][j] == EMPTY) || (MyField[i][j] == BUSY))
                        {
                            x = j;
                            y = i;
                        }
                    }
            }
        }

        if(MyField[y][x] == EMPTY)
        {
            MyField[y][x] = MISS;
            addCell(x, y, igra->scene1);
            igra->miss->play();
            while(!igra->miss->isFinished())
                Delay();
            igra->currentMove = true;
        }

        if(MyField[y][x] == BUSY)
        {
            MyField[y][x] = HIT;
            igra->last_hit_x = x;
            igra->last_hit_y = y;
            addCell(x, y, igra->scene1);
            if(isCrashed(x, y, MyField, igra->scene1))
                igra->kill->play();
            else
                igra->hit->play();
            while((!igra->hit->isFinished()) || (!igra->kill->isFinished()))
                Delay();
            igra->comp_win++;

            if(isCrashed(x, y, MyField, igra->scene1))
            {
                igra->last_hit_x = -1;
                igra->last_hit_y = -1;
            }
            StepComp();
        }
    }

    if(igra->comp_win == 20)    //if computer won
    {
        QSound *lose = new QSound("music/lose.wav");
        lose->play();
        QMessageBox::information(0, "Result", "You lose!");
        while(!lose->isFinished())
            Delay();
        igra->currentMove = true;
        //igra->comp_win++;
        igra->finish = true;
    }
}