用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里面学习到的。谢谢高手指点 展开
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里面学习到的。谢谢高手指点 展开
3个回答
展开全部
做了一个简单的模拟,代码如下:
你的问题出要是出在控制上。
我估计你这个方法中的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();
}
}
}
}
}
你的问题出要是出在控制上。
我估计你这个方法中的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();
}
}
}
}
}
展开全部
当时间为0时,你这里并没有退出while循环吧,所以时间一直在减。加个break退出循环。
if(blackTime == 0)
{
JOptionPane.showMessageDialog(this,"黑方游戏结束");
canPlay = false;
break;//这里加个break,退出while循环
}
if(blackTime == 0)
{
JOptionPane.showMessageDialog(this,"黑方游戏结束");
canPlay = false;
break;//这里加个break,退出while循环
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我是软件开发的 你采纳我答案 我给你答案 我告诉你
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询