Я создал настольную игру для iPhone. У него есть возможность выбрать, хочет ли пользователь играть в многопользовательскую или одиночную игру.
Я использовал UIButton
для фигур на доске.
У меня есть одна вещь, которую я хочу исправить: в режиме одиночной игры я реализовал поворот ИИ в UIButton
IBAction
. Но в этом случае нет времени между ходом player1 и player2. Оба выполняются одновременно.
Я бы хотел сделать это: Сделайте шаг человека незамедлительным, а затем компьютер продумает его ход. Я не хочу, чтобы оба хода совпадали, и после этого компьютер думает о переходе.
Я знаю, что проблема в том, что игра считывает весь блок кода в IBAction, а затем показывает результат, но я не знаю, как это исправить.
Любое предложение?
Если вам это нужно, я могу показать код, но я думаю (и я тоже надеюсь), что вы поймете, о чем я.
Из-за комментариев, которые запросили, вот код ..
- (void) buttonClickedSinglePlayer: (id) sender {
[self memorizzastatopartitapassato];
[self volumebottoni];
turno = [self whosTurn];
UIButton *bottoneCampoGioco = sender;
UIButton *bottoneIntelligente;
//Checks if it's Human's turn
if (turno == 0) {
int valoreBottone = [bottoneCampoGioco.currentTitle intValue];
if(valoreBottone< 10){
//if controls are ok, it changes value of human's chosen button
if((bottoneCampoGioco.currentTitleColor != [UIColor greenColor])){
[UIView transitionWithView:bottoneCampoGioco duration:0.3 options:UIViewAnimationOptionTransitionFlipFromLeft animations:nil completion:nil];
[bottoneCampoGioco setTitleColor:[UIColor redColor] forState: UIControlStateNormal];
[bottoneCampoGioco setTitleColor:[UIColor redColor] forState: UIControlStateHighlighted];
bottoneCampoGioco.titleLabel.shadowColor = [UIColor blackColor];
[bottoneCampoGioco.titleLabel setShadowOffset:CGSizeMake(1.0f, 1.0f)]; [bottoneCampoGioco setBackgroundImage: [UIImage imageNamed:@"bottonerosso.png"] forState:UIControlStateNormal];
[self incrementaTitoloOnClick :bottoneCampoGioco];
}
//else alert and loop to first line of the code, until he chooses a valid move
else {
[self posizionenonconsentita];
turno = [self whosTurn];
goto end;
}
}
else{
int x =[self mossedisponibilirosse];
if (x== 1) {
[self analizzavincitore];
}
[self numeroMax];
turno = [self whosTurn];
goto end;
}
turno = 1;
[self analizzaBottoni:bottoneCampoGioco];
[self aggiornapunteggi];
[self memorizzastatopresente];
pragma mark Действия одного игрока
//Azione del giocatore singolo
//changes turn token's value to allow to AI to play
turno = [self whosTurn];
turno = 0;
ai = [[ArtificialIntelligence alloc]init];
//send to AI's class the human's pressed button
[ai setbottonepremuto:bottoneCampoGioco];
[ai setDimensioneInput:dimensioneInput];
//send the situation of the board
[ai setSituazione:arraycampogioco];
[ai setpunteggiogiocatori:volumerossi giocatoree2:volumeverdi];
//get back the chosen button from ai's class
bottoneIntelligente=[ai bottone];
[mossaEffettuata setText:[self stringaCoordinateDaBottone:bottoneIntelligente]];
int valoreBottone2 = [bottoneIntelligente.currentTitle intValue];
//then changes the value of the button chosen from ai's class
if(valoreBottone2< 10){
[UIView transitionWithView:bottoneIntelligente duration:0.3 options:UIViewAnimationOptionTransitionFlipFromTop animations:nil completion:nil];
[bottoneIntelligente setTitleColor:[UIColor greenColor] forState: UIControlStateNormal];
[bottoneIntelligente setTitleColor:[UIColor greenColor] forState: UIControlStateHighlighted];
bottoneIntelligente.titleLabel.shadowColor = [UIColor blackColor];
[bottoneIntelligente.titleLabel setShadowOffset:CGSizeMake(1.0f, 1.0f)];
[bottoneIntelligente setBackgroundImage: [UIImage imageNamed:@"bottoneverde.png"] forState:UIControlStateNormal];
[self incrementaTitoloOnClick :bottoneIntelligente];
[self analizzaBottoni:bottoneIntelligente];
[self aggiornapunteggi];
}
end:
turno = [self whosTurn];
}
turno = [self whosTurn];
numeromosse ++;
}
IBAction
он анализирует ход Человека и сразу после этого вычисляет ход ИИ. Проблема в том, что даже если я добавлю таймер между двумя ходами, он объединит все вместе в конце блокаIBAction
. ВViewDidLoad
я вызвал метод, который создает полевую игру, внутри этого метода я добавляюIBAction
к каждой кнопке ... я не знаю, как я могу вызвать отдельно метод ai. - person Bellots   schedule 09.04.2013