用java编写五子棋程序时黑方和白方倒计时出现负数怎么解决?求高手指点。

下面是源代码,publicvoidrun(){//判断是否有时间的限制if(maxTime>0){while(true){if(isBlack){blackTime--;... 下面是源代码,
public void run()
{
//判断是否有时间的限制
if(maxTime>0)
{
while(true)
{
if(isBlack)
{
blackTime--;
if(blackTime == 0)
{
JOptionPane.showMessageDialog(this,"黑方游戏结束");
canPlay = false;

}
else if(blackTime<0)
{

}

}
else
{
whiteTime--;
if(whiteTime == 0)
{
JOptionPane.showMessageDialog(this,"白方游戏结束");
canPlay = false;

}

else if(whiteTime<0)
{

}

}
//时间的显示这个是黑方的时间
blackMessage
= blackTime/3600+":"+
(blackTime/60-blackTime/3600*60)+":"+(blackTime-blackTime/60*60);
//白方的时间
whiteMessage
= whiteTime/3600+":"+
(whiteTime/60-whiteTime/3600*60)+":"+(whiteTime-whiteTime/60*60);
this.repaint();//刷新屏幕
try
{
Thread.sleep(1000);//倒计时是1秒一秒揍的,所以要判断,用一秒来判断到底是黑棋还是白棋。
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}

System.out.println(blackTime+"--"+whiteTime);

}
}

如果没有可以再百度文库里面搜索java五子棋代码,最后几行和这个一样的。都是从MLDN里面学习到的。谢谢高手指点
展开
 我来答
百度网友845f74e61
2012-11-16 · TA获得超过6929个赞
知道大有可为答主
回答量:4050
采纳率:50%
帮助的人:1631万
展开全部
做了一个简单的模拟,代码如下:
你的问题出要是出在控制上。
我估计你这个方法中的isBlack 这个变量是自动切换的,
黑棋下完了,isBlack = false; 白棋下完了 isBlack = true;
这样,就会出问题,因为你的线程是没有停止的,所以,blackTime--; 或 whiteTime--; 是一直在进行的。而且 canPlay 没有用上。
你看一下 if (isBlack) 中的代码,这是我没有改动的
你再看一下 else 中的代码, 那是我改过的。

可以不会出现负数。

再一个,我觉得只要有一方时间到了,就该停止线程,canPlay的作用应该就是停止线程。
一方时间用完,应该是负吧,不该等到双方时间都 用完啊。
新游戏时,重新启动线程

----------------------------------------------------------------------------------------------

import javax.swing.JOptionPane;
public class Time extends Thread {
int maxTime = 1;
boolean isBlack = false;
int blackTime = 60;
int whiteTime = 60;
boolean canPlay = true;
public static void main(String[] args) {
new Time().start();
}
public void run() {
// 判断是否有时间的限制
if (maxTime > 0) {
while (true) {
if (isBlack) {
blackTime--;
if (blackTime == 0) {
JOptionPane.showMessageDialog(null, "黑方游戏结束");
canPlay = false;
} else if (blackTime < 0) {
}
} else {
if (whiteTime > 0) {
whiteTime--;
} else if (whiteTime == 0 && canPlay) {
JOptionPane.showMessageDialog(null, "白方游戏结束");
canPlay = false;
} else if (whiteTime < 0) {
}
}
// 时间的显示这个是黑方的时间
String blackMessage = blackTime / 3600 + ":"
+ (blackTime / 60 - blackTime / 3600 * 60) + ":"
+ (blackTime - blackTime / 60 * 60);
// 白方的时间
String whiteMessage = whiteTime / 3600 + ":"
+ (whiteTime / 60 - whiteTime / 3600 * 60) + ":"
+ (whiteTime - whiteTime / 60 * 60);
System.out.println(whiteMessage);
try {
Thread.sleep(100);// 倒计时是1秒一秒揍的,所以要判断,用一秒来判断到底是黑棋还是白棋。
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
帐号已注销
2012-11-16 · TA获得超过5038个赞
知道大有可为答主
回答量:2126
采纳率:66%
帮助的人:1008万
展开全部
当时间为0时,你这里并没有退出while循环吧,所以时间一直在减。加个break退出循环。
if(blackTime == 0)
{
JOptionPane.showMessageDialog(this,"黑方游戏结束");
canPlay = false;
break;//这里加个break,退出while循环
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xz10124551
2012-11-16 · TA获得超过600个赞
知道答主
回答量:256
采纳率:0%
帮助的人:60.4万
展开全部
我是软件开发的 你采纳我答案 我给你答案 我告诉你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式