Java 奥赛罗游戏计时器工作不正常
我只是Java的初学者。我们有一个大学项目,我们正在制作一个名为Otherlo(也称为reversi)的游戏,我们正在使用Java小程序进行游戏。董事会设计和游戏是完整的,工作良好,但我们有一个问题的计时器 问题是,直到计时器完全过期,玩家的移动才会被检测到,即假设每个移动的计时器为10秒,如果用户将其移动放置在第5秒,则仅在10秒后才会检测到其移动。此行为不起任何作用 我采用的方法是:Java 奥赛罗游戏计时器工作不正常,java,timer,applet,Java,Timer,Applet,我只是Java的初学者。我们有一个大学项目,我们正在制作一个名为Otherlo(也称为reversi)的游戏,我们正在使用Java小程序进行游戏。董事会设计和游戏是完整的,工作良好,但我们有一个问题的计时器 问题是,直到计时器完全过期,玩家的移动才会被检测到,即假设每个移动的计时器为10秒,如果用户将其移动放置在第5秒,则仅在10秒后才会检测到其移动。此行为不起任何作用 我采用的方法是: 在小程序屏幕上显示时间(整数) 睡一会儿 增加时间和更新图形 整个过程都被放在了循环中,这实际上是在制造问题
void startTimer() {
Graphics g = getGraphics();
for(sec =0 ; sec < 10 ; sec++){
String time = new String();
time = Integer.toString(sec);
g.drawString(time, WIDTH+80, 145);
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(NewApplet.class.getName()).log(Level.SEVERE, null, ex);
}
update(getGraphics());
}
}
public boolean mouseUp(Event e, int x, int y) {
int column = (int)(x / (WIDTH / 8));
int row = (int)(y / (WIDTH / 8));
if (turn == BLACK) {
if (placeLegalCheck(column, row, turn) == true){
flipDisk(column, row, turn);
turn = - turn;
diskCount();
startTimer();
update(getGraphics());
try {
Thread.sleep(500);
} catch (Exception excep){
}
}
}
if (turn == WHITE) {
if (placeLegalCheck(column, row, turn) == true){
flipDisk(column, row, turn);
turn = - turn;
diskCount();
startTimer();
update(getGraphics());
try {
Thread.sleep(500);
} catch (Exception excep){
}
}
}
return true;
}
void startTimer(){
Graphics g=getGraphics();
用于(秒=0;秒<10;秒++){
字符串时间=新字符串();
时间=整数。toString(秒);
g、 抽绳(时间,宽度+80145);
试一试{
睡眠(1000);
}捕获(中断异常例外){
Logger.getLogger(NewApplet.class.getName()).log(Level.SEVERE,null,ex);
}
更新(getGraphics());
}
}
公共布尔鼠标(事件e,整数x,整数y){
int列=(int)(x/(宽度/8));
int行=(int)(y/(宽度/8));
如果(转向==黑色){
if(placeLegalCheck(列、行、圈)==true){
翻转磁盘(列、行、圈);
转身=-转身;
diskCount();
startTimer();
更新(getGraphics());
试一试{
睡眠(500);
}捕获(例外例外){
}
}
}
如果(旋转==白色){
if(placeLegalCheck(列、行、圈)==true){
翻转磁盘(列、行、圈);
转身=-转身;
diskCount();
startTimer();
更新(getGraphics());
试一试{
睡眠(500);
}捕获(例外例外){
}
}
}
返回true;
}
getGraphics
不是自定义绘制的方式。您不应手动调用更新
,这不是您的责任,请使用重新绘制
。小程序也不推荐使用,可能应该避免使用它们。我会看一看,然后。您可能还应该看看感谢您的帮助suggestions@MadProgrammer但是你能建议修改一下这个代码吗…BCU我只有一天的时间,所以不能改变整个框架..类似于for循环中的if语句,它检测到mouseUp事件并爆发..一些解决方案可能不起作用,您从错误的方向解决了问题,并且从根本上做了错误的事情,“创可贴”无法解决此问题。定制绘画的方式不是“创可贴”getGraphics
。您不应手动调用更新
,这不是您的责任,请使用重新绘制
。小程序也不推荐使用,可能应该避免使用它们。我会看一看,然后。您可能还应该看看感谢您的帮助suggestions@MadProgrammer但是你能建议修改一下这个代码吗…BCU我只有一天的时间,所以不能改变整个框架..类似于for循环中的if语句,它检测到mouseUp事件并爆发..一些解决方案可能不起作用,你从错误的方向处理问题,从根本上做了错误的事情,“创可贴”不能解决这个问题