Я разрабатываю карточную игру, но мне нужно иметь функцию, которая останавливает программу, пока игрок не щелкнет в PictureBox своей карты, чтобы отменить ее. Алгоритм моей игры таков:
int nextDrawer = 0; // the players which will discard a card are determinated in counterclockwise starting from the human player
for (int i = 0; i < players; i++) // untill all the players hasn't drawed a card
{
if (i == 0) .... // the human player has to click on a picture box to discard a card
else .... // an AI player will discard a card which is selected randomly from the 3 cards which AI has got in its hand
}
Проблема в том, что, когда закончится mance, первый, кто сбросит карту, может измениться. Если игроки числится с 0 (человеческий игрок), 1 (первый игрок AI), 2 (второй игрок AI) и 3 (третий игрок AI), то на первом матче первым, кто сбросил карту, является игрок-человек, но на вторым секундомером, первым отбросившимся, может быть 2 игрока AI, и игроку необходимо подождать, пока все игроки AI до него не отбросят карту (в этом случае раунд будет 2-3-0-1).
Как я могу отменить событие click, если игроки AI еще не сбросили карту?
UPDATE
Мне не всегда нужно ждать, чтобы игроки all вытащили карту: если победитель mance - это номер 2, раунд будет 2-3-0-1: это означает, что игроку приходится ждать игроков ИИ 2 и 3, а затем игрок должен щелкнуть один PictureBox, и цикл вернется обратно к игрокам AI, а затем AI-плеер 1 может отбросить свою карту.
ОБНОВЛЕНИЕ 2
Я подумал что-то вроде этого:
int leader = 0; // who is going to discard first
int nextDiscarder = leader; // next player who going to discard
for (int i = 0; i < nPlayers; i++) // until all the players hasn't discarded
{
if (nextDiscarder == 0) // the human has to discard
{
enablePictureBoxClickEvent;
// now before the loop continue the program has to wait the event click on a picture box
}
else
{
AI[nextDiscarder].discard(); // the ai player will discard
}
if (nextDiscarder == players - 1) // if nextDiscarder has reached the end of the table
nextDiscarder = 0; // return to the begin until all player has discarded a card
else
++nextDiscarder; // continue to discard with the next player
}
и в моем случае нажмите "Я сделал бы что-то вроде этого:
private myEventClick(object sender, EventArgs e)
{
.... // do the instructions needed to discard a card
disableMyEventClick;
returnToLoop;
}
но главная проблема заключается в том, что я не знаю, как писать в коде мою инструкцию returnToLoop
.