2009-10-29 2 views
0

Скажем, у меня есть простая программа, которая эмулирует настольную игру с несколькими игроками, которые по очереди поворачивают кубики, чтобы двигаться по доске. Игроки могут быть людьми или компьютером.
Если бы это была игра в стиле командной строки, я мог бы просто сделать цикл, чтобы перебирать игроков, которые будут называть функцию diceRoll для этого игрока.Как подождать нажатия кнопки в цикле?

Если игрок является компьютерным игроком, diceRoll просто говорит компьютеру бросить кубики.
Если игрок является человеком, diceRoll будет ждать, пока пользователь вводит команду roll, а затем продолжит.

Как передать эту идею графическому дизайну? Я не думаю, что имеет смысл постоянно проверять, нажата ли кнопка roll. Я работаю с ActionScript 2, но идеи могут быть на любом языке, который вы хотите. Мне просто нравятся некоторые мнения о том, как лучше всего это разработать. Я не думаю, что есть какая-то функция waitForButtonPress, о которой я не знаю?

+0

Возможно, вы захотите посмотреть события в ActionScript 2: http://www.bigroom.co.uk/blog/events-in-actionscript-2 – gn22

ответ

1

Я думаю, что нашел решение, которое мне нравится. Основной игровой класс будет иметь функцию nextTurn следующим образом:

nextTurn() { 
    bool guiSet = false 
    while (guiSet = false) { 
     //Get the next player 
     if (next player is human) { 
     //enable the gui (ie. the 'Roll Dice' button) 
     guiSet = true 
     } else { 
     //The player is a computer 
     //Have the computer roll the dice and make any necessary decisions 
     } 
    } 
} 

Когда человек игрок заканчивает свою очередь, вызов будет сделана nextTurn, чтобы продолжить игру. Когда компьютер завершает поворот, поток все еще находится в цикле while, поэтому игра будет продолжена.

0

в зависимости от игры, если у вас есть N поворачивается и каждый поворот людей своей очереди, то вы можете просто вызвать getUserResponse() внутри цикла, используя, если вернулся на Родине ..

for i to N 
if(i%2==0) 
getUserRoll() 
else 
getComputerRoll() 

и если есть какой-либо противопоказания проверяют их в условии if.

+0

Это не будет работать, так как может быть любое количество людей или компьютерных игроков в любом порядке. И моя главная проблема заключается в том, как ждать нажатия кнопки пользователя внутри цикла или создания аналогичного рабочего процесса. – Everett

+0

Ahh да. Идея для меня состояла бы в том, чтобы поместить процесс в поток и проверить флаг, связанный с кнопкой, что-то простое, как флаг bool. Не уверен, возможно ли это с помощью скрипта действий. – jr3

Смежные вопросы