我正在开发一个数学游戏,向玩家展示排序4 + 3 = ?
或6 / 2 = ?
的简单数学问题。向玩家提供4个可能的答案并单击一个。屏幕有两个按钮,一个带箭头,另一个带方形。
玩家选择他们认为正确的答案。如果答案是正确的,他们会得到一条消息。如果答案不正确,那么这个选择就会变灰,他们可以继续选择,直到他们做对了。
我想要两种游戏模式:练习和定时。
在练习模式中,玩家点击箭头按钮并获得一个新问题。这很好。
我也想要一个定时播放模式。当玩家按下箭头按钮时,计时器启动并出现第一个问题。如果他们做对了,他们会立即被问到一个新问题。同样,如果他们不正确,他们会不断询问,直到他们做对了。同时,应该有一个计时器倒计时。当计时器结束或玩家按下方形按钮时,播放停止。
我不知道如何进行定时游戏,其中有两个同步活动:玩游戏和计时器。
我包括伪代码而不是代码 - 代码很长。但如有必要,我可以发布整个代码。
更新
这是我天真的尝试。问题是我无法弄清楚如何在while循环中等待,直到玩家再次调用askQuestion()
之前询问问题。也许它需要在一个单独的线程中并让while循环等待该线程返回。计时器会继续吗?我希望计时器同时运行到一个单独的任务,其中提出了一个问题 - >玩家回答问题 - >提出了一个新问题.....
public void playTimed()
{
// Toast.makeText(getApplicationContext(), "in playPractice", Toast.LENGTH_SHORT).show();
go_button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
go_button.setEnabled(false);
new CountDownTimer(10000, 1000) {
public void onTick(long millisUntilFinished)
{
timer.setText("seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish()
{
timer.setText("done!");
go_button.setEnabled(true);
timer_done = true;
}
}.start();
while(!timer_done)
{
askQuestion();
}
}
});
}
onCreate()
{
-For all four answer buttons:
answer_button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
correct = checkAnswer(answer_button_id);
}
});
-get intent extras to know which game
-swith-case to play selected game
}
checkAnswer()
{
if (correct)
{
// feedback
handleRightAnswer();
}
else
{
// feedback
handleWrongAnswer();
}
}
askQuestion()
{
-choose type of problem (+,-,*,/)
-generate arguments and answer
-create random answer list
where one choice is correct
-display problem
-display answer choices
}
playTimed()
{
-When player presses go_button,
timer starts and first question
appears. When correct answer is
selected a new question immediately
appears. Continues until timer runs
out or player presses stop_button.
Seconds left is displayed during play.
}
playPractice()
{
//When player presses go_button
// a new question appears.
go_button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
askQuestion();
}
});
}
答案 0 :(得分:0)
正如Gabe Sechan所说,你可以使用计时器来更新计数器,然后当计数器达到0时,做一些事情。您还可以使用计时器更新TextView(以显示剩余时间)。
以下是我过去使用过的课程originally found here:
public class UIUpdater{
private Handler mHandler = new Handler(Looper.getMainLooper());
private Runnable mStatusChecker;
private int UPDATE_INTERVAL = 1000; //updates every second
public UIUpdater(final Runnable uiUpdater) {
mStatusChecker = new Runnable() {
@Override
public void run() {
// Run the passed runnable
uiUpdater.run();
// Re-run it after the update interval
mHandler.postDelayed(this, UPDATE_INTERVAL);
}
};
}
public UIUpdater(Runnable uiUpdater, int interval){
this(uiUpdater);
UPDATE_INTERVAL = interval;
}
public synchronized void startUpdates(){
mStatusChecker.run();
}
public synchronized void stopUpdates(){
mHandler.removeCallbacks(mStatusChecker);
}
}
然后,在您想要更新计数器的方法中,您可以输入:
UIUpdater mUIUpdater = new UIUpdater(new Runnable() {
@Override
public void run() {
//method to update counter
}
});
//to start the method:
mUIUpdater.startUpdates();
//to stop the method, ie, when counter == 0
mUIUpdater.stopUpdates();