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; } }